박주니 개발 정리

airdrop nft 적용 본문

블록체인

airdrop nft 적용

박주니 2023. 3. 20. 13:39
728x90
반응형

airdrop 적용을 하기 전 이해) airdrop을 사용하는 이유는 발행자 또는 소유자가 해당 nft를 전달하고자하는 대상에게 본인 가스비 수수료를 지불하고 무료로 주기 위함입니다.

그렇기 때문에 airdrop을 적용하기 위해서는 먼저 본인 소유인 발행된 nft가 있어야합니다. 

 

설명은 본인 소유인 nft가 있다는 전제 조건하에 진행하겠습니다. 

 

셋팅하는 부분에 자세한 부분을 이해하고 싶으시면 performanceNFT 적용 방법을 참고하시면 됩니다. airdorp은 추가 기능이기 때문에 nft 거래까지 이해하시고 접근하시는 것을 추천합니다. 

 

1. abi를 셋팅합니다.

    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "recipients",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "tokenIds",
          "type": "uint256[]"
        }
      ],
      "name": "airdropTickets",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }

주의 사항) abi 추가 하시고 inputs에 type과 어떤 구성으로 넣을 수 있는 지 확인해주시길 바랍니다. 지금 address[]인 경우에는 배열을 포함한 값을 넣어야한다는 의미이기 때문에 만약에 값을 넣을 때 배열이 아닌 인자만 넣었을경우 에러가 발생될 것입니다. 

 

2. 연결하고자 하는 프론트 페이지에 에어드랍 버튼과 하단에 airdrop 함수를 넣어주시면 됩니다. 

  const contract = new web3.eth.Contract(
    ConcertSeats.abi,
    // airdrop smart contract address
    "0x76.....37"
  );

  // airdrop
  async function airdropTickets() {
    const accounts = await web3.eth.getAccounts();
    try {
    // airdrop을 보내고자하는 지갑 주소
      const recipients = [
        "0x321......f7aC",
        "0xF50......d0b",
      ];
      // 발행된 tokenId 중 보낼 tokendId
      const tokenIds = [2, 3];

      await contract.methods
        .airdropTickets(recipients, tokenIds)
        .send({ from: accounts[0], gasLimit: 3000000 });
      console.log("Airdrop successful");
    } catch (err) {
      console.log(err);
    }
  }

추가 설명)

airdrop smart contract address) airdrop 배포 과정을 보시면 배포했을 때 만들어지는 주소 의미

ConcertSeats.abi) 1번에서 abi.json을 import해서 연결 의미 performanceNFT 적용을 확인해보시면 .abi가 어떻게 구성되어있는 지 알 수 있습니다. 

await web3.eth.getAccounts()) 서명을 거쳐서 본인인 것을 증명한 이후에 진행할 수 있습니다. 

recipients) airdrop을 보낼 대상 지갑주소 넣으시면 됩니다. 아니면 메타마스크에서 계정 생성을 해서 테스트하실 수 있습니다.

tokenIds) 이부분을 이해하기 위해서는 performanceNFT에서 어떻게 적용했는 지 보시면 이 tokenIds가 어떤 의미인지를 정확히 이해하실 수 있습니다. 만약에 erc721 즉 tokenId없이 하나로만 만들어서 진행할 예정이시라면 airdrop 구성 자체도 바껴야하기 때문에 처음부터 발행을 어떻게 진행할 것인지 생각하고 배포하시는 것을 추천합니다. 

contract.methods.airdropTickets)

  • 스마트 컨트렉트 진행했을 때 airdropTickets 구성 의미 
  • abi inputs 구성과 type에 맞게 recipients, tokenIds를 넣으시면 됩니다. 
  • gasLimit은 제 기준에서 진행할 때 3000000보다 작거나 크면 evm에러 발생돼서 이 값으로 설정해서 해결했지만 적용하실 때 한번 gaslimit을 확인해보시는 것을 추천합니다. 

주의 사항)

  1. nft 발행자 지갑주소에서 서명을 거쳐서 진행해야합니다. 
  2. matic이 충분하게 있어야합니다. 

3. 정상적으로 이벤트가 적용되었을 때 polygonscan 확인 

 

728x90
반응형
Comments