박주니 개발 정리

airdrop nft 배포 본문

블록체인

airdrop nft 배포

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

적용하게 된 이유)

에어드랍은 batchTransfer 사이트를 이용해서 airdrop을 이용했었습니다. 그런데 문제는 엑셀로 별도 데이터를 정리해서 그 내용을 복사 후 중간을 거쳐서 airdrop을 진행하는 것이 비효율적이였고 recordNFT와 performanceNFT를 만들었던 경험으로 airdrop도 자체서비스로 만들게 되었습니다. 

 

배포 방법)

1. remix에 접속해주시길 바랍니다.

https://remix.ethereum.org/#lang=en&optimize=false&runs=200&evmVersion=null&version=soljson-v0.8.18+commit.87f61d96.js 

 

Remix - Ethereum IDE

 

remix.ethereum.org

 

 

2. File explorer을 선택해서 contracts 폴더 안에 PerformanceNFT.sol 생성하고 안에 PerformanceNFT스마트 컨트렉트 내용을 넣습니다. (저는 performanceNFT 스마트 컨트렉트에 airdrop 기능을 추가로 넣어서 진행했습니다. 적용하실 때 기능에 따라 구분해서 진행하시면 됩니다)

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol";

contract PerformanceNFT is ERC721 {
    using ECDSA for bytes32;

    struct Ticket {
        uint256 tokenId;
        string seatNumber;
        string qrCode;
    }

    Ticket[] public tickets;
    mapping(uint256 => bool) private _tokenExists;
    mapping(uint256 => uint256) public ticketPrices;
    address private _admin;

    // DebugLog 이벤트 추가
    event DebugLog(string message, address value1, uint256 value2);

    constructor(string memory name, string memory symbol) ERC721(name, symbol) {
        _admin = msg.sender;
    }

    modifier onlyAdmin() {
        require(msg.sender == _admin, "Only admin can call this function");
        _;
    }


function airdropTickets(
    address[] memory recipients,
    uint256[] memory tokenIds
) public onlyAdmin {
    require(
        recipients.length == tokenIds.length,
        "Arrays must have same length"
    );

    for (uint256 i = 0; i < recipients.length; i++) {
        address recipient = recipients[i];
        uint256 tokenId = tokenIds[i];

        require(_tokenExists[tokenId], "Token does not exist");
        require(ownerOf(tokenId) == _admin, "Token is not owned by admin");

        _transfer(_admin, recipient, tokenId);
    }
}
}

참조 이미지) 위치를 모르신다면 하단에 이미지를 참고해주시길 바랍니다.(이미지는 참고용 해당 위치에 PerformanceNFT.sol 생성)

3. Solidity Compiler을 선택해서 Compile  PerformanceNFT.sol 버튼을 클릭해주시길 바랍니다.

4. Deploy & run transactions를 클릭합니다. 그리고 ENVIRONMENT는 Injected Provider - MetaMask를 선택합니다.

추가 설명) ENVIROMENT에서 MataMask를 선택하고 난 이후에 메타마스크를 접속하시면 접속한 ACCOUNT 정보가 나오는 것을 확인하실 수 있습니다. 예를 들어서 저는 polygon으로 프로젝트를 진행하고 있기 때문에 네트워크를 폴리곤으로 선택해서 진행했습니다. 따라서 하시는 분들은 사용하고자하는 네트워크에 연결하시면 됩니다. 

 

5. CONTRACT가 PerformanceNFT인지 다시 한번 확인하고 Deploy를 클릭합니다. 지금 이 이미지는 PerformanceNFT설명했던 이미지이고 정상적으로 3번이 진행이 되었다면 PerformanceNFT 스마트컨트렉트가 표시된 것을 확인하실 수 있습니다.

6. Deploy를 클릭하면 메타마스크 가스 지출 화면이 나오고 확인을 누르시면 됩니다. 정상적으로 진행시 terminal에서 해당 block을 확인하실 수 있습니다.

performanceNFT address 확인 방법 (폴리곤 기준)

1. 메타마스크로 들어가서 활동을 클릭 후 형광펜으로 체크한 부분 계약 배포를 클릭합니다.

2. 해당 모달창에서 상태 옆에 형광펜으로 체크한 블록 탐색기에서 보기를 클릭합니다.

3, polygonscan으로 넘어가서 mainnet으로 하셨으면 polygon mainnet, testnet으로 하셨으면 polygon testnest으로 선택하시고 tx 옆에 적혀있는 tx hash를 복사해놓습니다.

추가 설명)

1번 - tx/ 옆에 있는 내용은 tx hash를 의미함으로 형광펜 체크된 부분을 미리 복사 해주시길 바랍니다. 

2번 - 2번 형광펜으로 체크한 부분을 클릭하시면 해당 네트워크를 선택하실 수 있습니다. 

4. Polygon PoS Chain Testnet Explorer 에서 해당 input에 3번에서 tx hash 복사한 것을 붙인 후 검색을 합니다.

5. Transaction Details에서 To를 보시면 해당 contract 주소를 확인하실 수 있습니다.

 

 

다음 적용 방법은 airdrop 적용을 확인해주시길 바랍니다. (스마트 컨트렉트 코드만 추가되었을 뿐 performanceNFT 배포 방법과 동일합니다.)

728x90
반응형
Comments