NFT 민팅해보기 (기본편)
1. 이미지 파트
- pinata/infura 등의 API를 사용하여 IPFS에 이미지 업로드후 이미지 url 얻음
- 해당 url을 nft를 위한 metadata(json file)에 추가하고 metadata 역시 IPFS에 업로드
- 업로드한 metadata의 url이 nft minting 함수의
tokenURI
로서 사용됨
2. smart contract 파트
- alchemy - 발급받은 API를 smart contract 배포 및 Ethereum API 호출에 사용
- Openzeppelin - import 해서 smart contract 작성에 활용 (ERC721를 상속받음)
- hardhat - smart contract 테스트, 컴파일, 배포에 사용
- dotenv - alchemy API key, metamask private key 등 관리
- web3.js - smart contract 배포, frontend에서의 metamask 지갑 연결, contract 함수 호출 등에 사용
3. minting 파트
민팅의 정의: Minting refers to the process of turning a digital file into an NFT on the Ethereum blockchain. This NFT is stored on the decentralized database making it impossible to edit, modify, or delete.
- alchemy-web3 설치 후 민팅 스크립트 생성
-
Step 1. 변수 정의 (위에서 업데이트한
.env
파일의 변수를 process.env.API_URL 형식으로 활용) -
Step 2. ABI 정의 / hardhat이 이미 json파일 형식으로 ABI 생성해둠 / ABI는 smart contract와 상호작용하기 위한 interface
-
Step 3. 민팅 함수 정의 // nonce와 transaction에 필요한 값들 설정
-
Step 4. Transaction 할당
-
Step 5. 이미지의 메타데이터
tokenURI
를 이용해 민팅 함수 콜 (ThemintNFT
function requires atokenURI
parameter that refers to a JSON document where the metadata (image, properties, name, description,…) is stored.)//step 1: You define your variables from .env file require('dotenv').config(); const API_URL = process.env.API_URL; const PUBLIC_KEY = process.env.PUBLIC_KEY; const PRIVATE_KEY = process.env.PRIVATE_KEY; const { createAlchemyWeb3 } = require("@alch/alchemy-web3"); const web3 = createAlchemyWeb3(API_URL); //step 2: Define our contract ABI (Application Binary Interface) & adresses const contract = require("../artifacts/contracts/MyNFT.sol/MyNFT.json"); const contractAddress = "0x099D1751c33d75297c9f331a5Cd39275ff534f96"; const nftContract = new web3.eth.Contract(contract.abi, contractAddress); //step 3: Define the minting function async function mintNFT(tokenURI) { const nonce = await web3.eth.getTransactionCount(PUBLIC_KEY, 'latest'); //get latest nonce //the transaction const tx = { 'from': PUBLIC_KEY, 'to': contractAddress, 'nonce': nonce, 'gas': 500000, 'maxPriorityFeePerGas': 1999999987, 'data': nftContract.methods.mintNFT(PUBLIC_KEY, tokenURI).encodeABI() }; //step 4: Sign the transaction const signedTx = await web3.eth.accounts.signTransaction(tx, PRIVATE_KEY); const transactionReceipt = await web3.eth.sendSignedTransaction(signedTx.rawTransaction); console.log(`Transaction receipt: ${JSON.stringify(transactionReceipt)}`); } //step 5: Call the mintNFT function mintNFT("https://gateway.pinata.cloud/ipfs/Qmeou5f7ttU98n96mYWfYzKHV7pfRe5rcZBhYznHZCUV7M");
-
- 터미널에서 스크립트 실행
node scripts/mint-nft.js
- If you followed all the steps correctly, you should receive a “Transaction receipt” which stipulates all the used parameters. You can also check on Ropsten Etherscan if your transaction was successful.
튜토리얼 참고 : https://docs.alchemy.com/alchemy/tutorials/how-to-create-an-nft
Author And Source
이 문제에 관하여(NFT 민팅해보기 (기본편)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@heitzes/NFT-민팅해보기-기본편저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)