BLCOKSDK 개발자 문서와 공식 github에서 이더리움, 클레이튼, 폴리곤, BNC 등 다양한 블록체인 서비스 및 솔루션을 사용자의 프로그래밍 언어에 맞게 제공하고 있습니다.
이 글에서는 BLOCKSDK의 스마트 컨트랙트 함수 호출 기능을 이용해 테스트넷에 NFT를 생성하고 배포하는 방법을 알아봅니다.
만약 아직 계약 배포가 되지 않았아면 이더리움 테스트넷에 NFT 계약 배포하는법(Remix, MetaMask)을 참고해주세요
nft.storage 홈페이지에서 API 키를 발급해주세요.
Actions -> COPY에서 API 키를 복사할 수 있습니다.
nft.storage의 javascript 라이브러리를 이용하여 이미지를 업로드합니다.
먼저 새 폴더를 만들고 그 폴더에, nft.mjs
, 원하는 컨텐츠 파일을 생성합니다.
그 후 npm
을 이용해 필요한 의존성을 설치합니다.
npm init
npm install nft.storage
npm install buffer
nft.mjs
에 다음과 같이 작성합니다. API_KEY
와 컨텐츠 파일의 경로, 이름, 설명, 타입은 자신이 올리고 싶은 컨텐츠에 맞게 수정해주세요.
// nft.mjs
import { NFTStorage } from 'nft.storage';
import fs from 'fs';
import { Blob } from 'buffer';
const nftStorage = new NFTStorage({ token: 'API_KEY' });
async function storeMetadata() {
const imageBuffer = fs.readFileSync('./cat_01.jpg'); // 컨텐츠 파일의 경로
const metadata = await nftStorage.store({
name: "BlockSDK Test NFT",
description: "BlockSDK Test NFT Cat image",
image: new Blob([imageBuffer], { type: "image/jpeg" }) // 타입 지정
})
console.log('Metadata IPFS URL:', metadata.url);
}
storeMetadata();
해당 JS를 실행해 보면 메타데이터 URL을 얻을 수 있습니다.
PS > node ./nft.mjs
Metadata IPFS URL: ipfs://bafyreibqvyzcq24qby3mszzyqgifwz37tu5b277dzl4w2vgjx5j6ak5rqe/metadata.json
ipfs://
를 https://ipfs.io/ipfs/
로 바꿔서 브라우저에서 접속해 보면 메타데이터를 확인 할 수 있습니다.
ex) https://ipfs.io/ipfs/bafyreibqvyzcq24qby3mszzyqgifwz37tu5b277dzl4w2vgjx5j6ak5rqe/metadata.json
{
"name":"BlockSDK Test NFT",
"description":"BlockSDK Test NFT Cat image",
"image":"ipfs://bafybeien4paslzfj2nclafruizj26nblzez7l772owt275xye2hkevdmny/blob"
}
메타 데이터의 image 부분 또한 ipfs://
를 https://ipfs.io/ipfs/
로 바꾸면 해당 이미지를 확인 할 수 있습니다.
ex) https://ipfs.io/ipfs/bafybeien4paslzfj2nclafruizj26nblzez7l772owt275xye2hkevdmny/blob
먼저 지갑이 없다면 [BLOCKSDK] JAVASCRIPT로 이더리움 지갑 생성하기를 참고해 지갑 생성을 해주세요
BLOCKSDK-JS를 이용한 스마트 컨트랙트 함수 실행
result = client.ethereum.WriteContract({
'contract_address' : "컨트렉트 주소",
'from' : "트랜잭션을 생성할 주소",
'private_key' : "from 의 프라이빗키",
'method' : "실행할 함수 명",
'parameter_type' : ["인풋 파라미터 타입"],
'parameter_data' : ["인풋 파라미터 데이터"]
});
contract_address
의 소유자만 사용 가능하도록 해놓는 경우가 많습니다.const BLOCKSDK = require('blocksdk-js');
const client = new BLOCKSDK("Node_RPC_TOKEN");
client.ethereum.WriteContract({
'contract_address' : "0xC1C5C8B5dA055192Eea5732D7f31Dba90DC6EA9d",
'from' : "0xc507112d737f0d1be2e83ddfc0c0c2439aa97fbe",
'private_key' : "from 의 프라이빗키",
'method' : "mint",
'gas_limit': 200000,
'parameter_type' : ["string"],
'parameter_data' : ["https://ipfs.io/ipfs/bafyreibqvyzcq24qby3mszzyqgifwz37tu5b277dzl4w2vgjx5j6ak5rqe/metadata.json"]
}).then(r => console.log(r));
{
"payload": {
"hash": "0xb03d413ff7719221e6d86b3f0880fb1da8f986b344dfa1fb0558db93db9e7e02",
"from": "0xc7a85349e1055c53ab15a0252cec514300d764b8",
"to": "0xc1c5c8b5da055192eea5732d7f31dba90dc6ea9d",
"value": "0",
"gasUsed": null,
"gasLimit": "200000",
"gasPrice": "30000000000",
"fees": null,
"nonce": 4,
"transactionIndex": 0,
"input": "0xd85d3d270000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005e68747470733a2f2f697066732e696f2f697066732f62616679726569627176797a63713234716279336d737a7a7971676966777a333774753562323737647a6c34773276676a78356a36616b357271652f6d657461646174612e6a736f6e0000",
"datetime": "2023-10-16T07:44:07+00:00",
"timestamp": 1697442247,
"confirmations": 0,
"sign": {
"v": "0x2d",
"r": "0x50ae3d27de297873f44059c0a4879edf8a63d21c20ade8b637e7a0f1f1476aa3",
"s": "0x96479ac093e8fa1def1c02d468b18c626968061756f7f157bd4bd98d63b99c"
},
"status": null
},
"state": {
"code": 200,
"success": true
}
}
BlockSDK API로 발행한 NFT를 조회해 볼 수 있습니다.
[BlockSDK] JAVASCRIPT로 이더리움 ERC721(NFT)을 조회하는 방법
EtherScan에서도 발행한 NFT를 확인해볼 수 있습니다.
BlockSDK 테스트넷은 goerli 테스트넷을 사용하며, goerli etherscan에서 확인할 수 있습니다.