[Project 1] Open Sea

기술 스택

Client

React

NPM

react-router-dom, web3, ipfs-http-client, tailwindcss

페이지별 기능

Main

Create

ipfs에 이미지를 업로드 시키고 그 url을 이용하여
ERC721 토큰을 발행시킨다

Explore

해당 컨트랙트에서 발행된 ERC721 토큰을 렌더링시킨다

Profile

해당 컨트랙트에서 발행된 ERC721 토큰 중
현재 메타마스크로 로크인된 주소가 보유중인 토큰을 렌더링시킨다

스마트 컨트랙트

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

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/utils/Counters.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";

contract cozNFTs is ERC721URIStorage, Ownable, ERC721Enumerable {
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIds;

    constructor() public ERC721("cozNFT", "NFT"){}

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal
      override(ERC721, ERC721Enumerable) {
        super._beforeTokenTransfer(from, to, tokenId);
    }

    function _burn(
        uint256 tokenId
    ) internal
      override(ERC721, ERC721URIStorage) {
        super._burn(tokenId);
    }

  	function supportsInterface(bytes4 interfaceId)
        public
        view
        override(ERC721, ERC721Enumerable)
        returns (bool)
    {
        return super.supportsInterface(interfaceId);
    }
    function tokenURI(
        uint256 tokenId
    ) public view
      override(ERC721, ERC721URIStorage) returns (string memory) {
        return super.tokenURI(tokenId);
    }
    
    function mintNFT(address recipient, string memory tokenURI) public onlyOwner returns (uint256) {
        _tokenIds.increment();

        uint256 newItemId = _tokenIds.current();
        _mint(recipient, newItemId);
        _setTokenURI(newItemId, tokenURI);

        return newItemId;
    }
}

ABI

컨트랙트의 함수와 매개변수들을 JSON 형식으로 나타내는 리스트

openzeppelin

스마트 컨트랙트 개발을 위한 라이브러리

github

좋은 웹페이지 즐겨찾기