[BLOCKSDK] JAVASCRIPT로 ERC-721(NFT)을 생성하고 배포하는 방법

BLOCKSDK·2023년 10월 16일
0

BLCOKSDK 개발자 문서공식 github에서 이더리움, 클레이튼, 폴리곤, BNC 등 다양한 블록체인 서비스 및 솔루션을 사용자의 프로그래밍 언어에 맞게 제공하고 있습니다.

이 글에서는 BLOCKSDK의 스마트 컨트랙트 함수 호출 기능을 이용해 테스트넷에 NFT를 생성하고 배포하는 방법을 알아봅니다.
만약 아직 계약 배포가 되지 않았아면 이더리움 테스트넷에 NFT 계약 배포하는법(Remix, MetaMask)을 참고해주세요

1. nft.storage api 키 발급

nft.storage 홈페이지에서 API 키를 발급해주세요.

Actions -> COPY에서 API 키를 복사할 수 있습니다.

2. IPFS에 업로드하기

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

3. BLOCKSDK-JS를 이용하여 nft 발행하기

먼저 지갑이 없다면 [BLOCKSDK] JAVASCRIPT로 이더리움 지갑 생성하기를 참고해 지갑 생성을 해주세요

BLOCKSDK-JS를 이용한 스마트 컨트랙트 함수 실행

  • 사용 방법
result = client.ethereum.WriteContract({
    'contract_address' : "컨트렉트 주소",
    'from' : "트랜잭션을 생성할 주소",
    'private_key' : "from 의 프라이빗키",
    'method' : "실행할 함수 명",
    'parameter_type' : ["인풋 파라미터 타입"],
    'parameter_data' : ["인풋 파라미터 데이터"]
});
  • 사용 예시
    mint 함수의 경우 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에서 확인할 수 있습니다.

profile
BLOCKSDK는 간편 코인 제작 기능 과 블록체인 서비스 개발을 단순화하여 블록체인에 전문화된 개발자 없이 빠르게 개발할수 있는 API 와 완성형 솔루션 제공 서비스입니다

0개의 댓글

관련 채용 정보