전자책 NFT의 tokenURI
는 전자책의 메타데이터가 저장된 위치를 가리킵니다. 일반적으로 이러한 메타데이터는 IPFS(InterPlanetary File System)와 같은 분산 파일 시스템에 업로드하여 보관합니다.
여기서는 IPFS를 사용하여 전자책 메타데이터를 업로드하고, 그 URI를 설정하는 방법을 설명하겠습니다.
1. IPFS 설치 및 설정
IPFS 설치IPFS를 설치합니다. IPFS 공식 사이트에서 설치 방법을 참고하세요.
# MacOS
brew install ipfs
# Ubuntu
sudo apt install ipfs
# Windows
choco install ipfs
IPFS 데몬 실행
ipfs init
ipfs 가 설치가 안되는 경우가 있는데 그 때는 snap으로 설치합니다.
ipfs daemon
2. 메타데이터 파일 생성 및 업로드
메타데이터 파일 생성metadata.json
파일을 생성하고 아래와 같이 전자책의 메타데이터를 작성합니다.
{ "name": "Example Ebook", "description": "An example ebook for NFT", "image": "https://example.com/cover.jpg", "attributes": [ { "trait_type": "Author", "value": "John Doe" }, { "trait_type": "Genre", "value": "Fiction" } ] }
메타데이터 파일 IPFS에 업로드bash코드 복사ipfs add metadata.json
출력 결과에서 Qm...
형식의 해시를 얻을 수 있습니다. 이 해시를 사용하여 파일을 참조합니다.plaintext코드 복사added Qm... metadata.json
IPFS URI 구성IPFS의 URI는 다음과 같이 구성됩니다.plaintext코드 복사https://ipfs.io/ipfs/Qm...
예를 들어, 해시가 Qmabcdef123456
이면 URI는 https://ipfs.io/ipfs/Qmabcdef123456
가 됩니다.
3. 테스트 파일 업데이트
이제 test/ebook_nft.js
파일에서 tokenURI
를 위에서 얻은 IPFS URI로 설정합니다.
const EbookNFT = artifacts.require("EbookNFT");
contract("EbookNFT", (accounts) => {
it("should mint a new NFT", async () => {
const ebookNFT = await EbookNFT.deployed();
const tokenURI = "https://ipfs.io/ipfs/Qmabcdef123456";
await ebookNFT.mint(accounts[0], tokenURI);
const owner = await ebookNFT.ownerOf(0);
assert.equal(owner, accounts[0], "Owner of tokenId 0 should be accounts[0]");
const retrievedTokenURI = await ebookNFT.tokenURI(0);
assert.equal(retrievedTokenURI, tokenURI, "Token URI of tokenId 0 should match");
});
});
이제 tokenURI
가 실제 IPFS에 업로드된 메타데이터 파일을 가리키므로 테스트가 더 정확하게 동작합니다.
4. 테스트 실행
truffle test