박주니 개발 정리

공연 티켓 nft 배포 (발행 기준) 본문

블록체인

공연 티켓 nft 배포 (발행 기준)

박주니 2023. 3. 15. 13:24
728x90
반응형

적용하게 된 이유)

공연 티켓에는 보통 정보가 좌석이랑 qr코드를 넣어서 만드는 경우가 있는데 현재 제가 만들었던 erc721 개념은 하나만 발행할 수 있는 수준이였습니다. 그런데 이렇게 하나 하나 발행을 하다보면 예를 들어서 10000이 넘어갈 경우에는 만번을 일일이 발행하는 것은 비효율적이다라고 생각했고 erc721을 한번 발행시 여러번 발행하고 그 안에는 각각 정보를 담는 방법을 찾게 되었습니다. 찾는 과정에서 erc1155로 접근해야한다는 생각의 틀이 깨지게 되어 좋은 경험이었습니다. 

 

배포 방법)

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스마트 컨트렉트 내용을 넣습니다.

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

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";

contract PerformanceNFT is ERC721 {
    struct Ticket {
        uint256 tokenId;
        string seatNumber;
        string qrCode;
    }

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

    constructor(string memory name, string memory symbol) ERC721(name, symbol) {}

function mintTickets(string[] memory seatNumbers, string[] memory qrCodes) public {
    require(seatNumbers.length == qrCodes.length, "Arrays must have same length");
    for (uint256 i = 0; i < seatNumbers.length; i++) {
        require(!_tokenExists[tickets.length], "Token already exists");
        Ticket memory newTicket = Ticket({
            tokenId: tickets.length,
            seatNumber: seatNumbers[i],
            qrCode: qrCodes[i]
        });
        tickets.push(newTicket);
        _safeMint(msg.sender, newTicket.tokenId);
        _tokenExists[newTicket.tokenId] = true;
    }
}

    function getSeatNumber(uint256 tokenId) public view returns (string memory) {
        require(_exists(tokenId), "Token does not exist");
        return tickets[tokenId].seatNumber;
    }

    function getQrCode(uint256 tokenId) public view returns (string memory) {
        require(_exists(tokenId), "Token does not exist");
        return tickets[tokenId].qrCode;
    }
}

참조 이미지) 위치를 모르신다면 하단에 이미지를 참고해주시길 바랍니다.(이미지는 참고용 해당 위치에 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 주소를 확인하실 수 있습니다.

 

 

다음 적용 방법은 PerformanceNFT- 적용을 확인해주시길 바랍니다.

728x90
반응형
Comments