NFT를 발행하거나, 블록체인 컨트랙트를 작성할 때 저장소로 많이 사용하는 곳이 IPFS 혹은 FileCoin입니다. IPFS를 Node.js 환경에서 접속해서 파일을 바로 업로드하고 해시값으로 반환되는 CID를 사용할 수 있습니다.
Web3.Storage 설치
IPFS에 접근할 수 있는 모듈이 많지만 일반 파일을 업로드 할 때는 Web3.Storage를 사용하고, NFT를 발행할 때 필요한 tokenURI는 NFT Storage를 많이 사용했습니다.
Web3.Storage 설치법
$ npm install web3.storage
Web3.Storage를 사용하기 위해서는 API Token을 발급받아야 합니다. Web3.Storage 홈페이지로 가셔서 이메일을 등록하시면 바로 회원가입이 됩니다.
회원가입 후 Account로 이동하시면 API Token 페이지로 이동할 수 있습니다.
Create a new API Token 을 클릭하셔서 새로운 토큰을 발급받습니다. 이제 Node.js 환경에서 IPFS를 사용할 준비가 끝났습니다.
Web3.Storage에 가입하고 File Management에 들어가시면 1TB까지 등록이 가능하다고 안내가 나옵니다.
Web3.Storage CRUD
① 파일 업로드(Save)
IPFS는 분산 저장소로 DAG 알고리즘으로 작동합니다. 즉, 방향성 비순환 그래프로 작동하기 때문에 파일을 저장하고 읽어오는 작업은 가능하지만 삭제나 업데이트는 불가능합니다.
IPFS에 대해서 더 알고 싶은 분들은 아래 글을 참고하시기 바랍니다.
[Blockchain] IPFS(InterPlanetary File System)란?
IPFS는 Git, BitTorrent, Bitcoin 등의 서비스에서 영감을 받아 시작된 무료 오픈 소스 프로젝트 입니다. 분산형 파일 시스템에 데이터를 저장하고 인터넷으로 공유하는 프로토콜이자 P2P 네트워크입니
about-tech.tistory.com
우선 파일을 등록하는 방법입니다. 필요한 모듈을 import 해옵니다.
const { Web3Storage, File } = require("web3.storage");
발급받은 API Token을 바로 사용할 수도 있지만 env 파일에 등록해서 사용하시면 안전하게 사용할 수 있습니다.
function getAccessToken() {
return process.env.WEB3STORAGE_TOKEN;
}
받아온 API Token으로 클라이언트를 생성합니다.
function makeStorageClient(token) {
return new Web3Storage({
token: token,
});
}
이제 파일을 업로드할 준비가 완료되었습니다. Node.js 환경에서 FILE이라고 하면 Buffer 더미로 이뤄진 데이터라고 생각하시면 됩니다. 버퍼 덩어리인 파일를 매개변수로 받아 생성한 클라이언트 객체의 put메소드를 사용합니다.
async function storeFiles(files) {
const client = makeStorageClient(getAccessToken());
const cid = await client.put(files);
return cid;
}
현재 만들어진 파일이 아닌 데이터만 가지고 있는 경우 파일로 변환한 후 업로드 할 수 있습니다.
function makeFileObjects() {
const obj = {
sub: "did:klay:0x435df3eda57154cf8cf7926079881f2912f54db4",
nbf: 1562950282,
vc: {
"@context": ["https://www.w3.org/2018/credentials/v1"],
type: ["VerifiableCredential"],
credentialSubject: {
degree: {
type: "BachelorDegree",
name: "Baccalauréat en musiques numériques",
},
},
},
};
const buffer = Buffer.from(JSON.stringify(obj));
const files = [new File([buffer], 'newFile.json')];
return files;
}
올린 파일들을 한번에 확인할 수 있습니다.
② 파일 읽어오기(Retrieve)
CID가 생성되었다면 IPFS 네트워크에서 파일을 가져올 수 있습니다.
async function retrieveFiles(cid) {
const client = makeStorageClient();
const res = await client.get(cid);
if (!res.ok) {
throw new Error(`failed to get ${cid} - [${res.status}] ${res.statusText}`);
}
const files = await res.files();
for (const file of files) {
console.log(file);
}
}
Reference
JWT 비대칭키로 암호화 복호화 하는 법
프로젝트를 진행하면서 Issuer가 발급한 Verifiable Credential을 암호화해야 하는 상황이 생겼다. JWT를 이용해서 암호화 복호화 하는 방향으로 정하고, 비대칭키 방법을 적용했다. 기존에 JWT는 대칭키
about-tech.tistory.com
Node.js fs.access fs.mkdir fs.open fs.rename 사용법
Node.js에서 기본 제공되는 FileSystem(fs) 모듈을 사용하면 폴더를 생성하고, 파일을 생성하는 등 디렉토리에 접근하는 로직을 간단하게 구현할 수 있습니다. fs.access(path, options, callback) access 함수는..
about-tech.tistory.com
Node.js cookie 사용법 (로그인에 쿠키를 사용하면 안되는 이유)
로그인을 구현할 때 cookie를 사용하는 경우가 있습니다. 또한 쇼핑몰 사이트에서 장바구니에 담아놓았던 상품을 다시 접속해도 확인할 수 있습니다. 바로 cookie를 사용하기 때문에 가능한 기능
about-tech.tistory.com
'Blockchain' 카테고리의 다른 글
블록체인 개발자 기술 면접 준비 질문 정리 (0) | 2022.10.06 |
---|---|
[Node.js] 디지털 서명 SHA256 32Bytes 비대칭키 사용방법 (0) | 2022.09.15 |
Truffle migrate Error You must specify a network id in your development configuration in order to use this network (0) | 2022.09.02 |
[Klaytn] Caver-js 사용법 설치 contract call send (0) | 2022.09.01 |
[회고록] 코드스테이츠 프로젝트 3 시작 (DID 인증 서비스) (0) | 2022.09.01 |
댓글