NFT를 만드는 방법

16856 단어 nftreactsoliditynextjs

You can collect this article as an NFT Here



요즘 새로운 트렌드가 생기고 최근 이 분야에 종사하면서 NFT가 무엇이며 어떻게 만들 수 있는지 설명하기 위해 이 글을 쓰게 되었습니다.

NFT는 기본적으로 이러한 종류의 토큰이 고유하며 대체 가능한 토큰과 달리 분할할 수 없음을 의미하는 대체 불가능한 토큰을 의미합니다. 모나리자처럼 독특하고 쪼개지면 가치를 잃는 예술 작품이라고 생각하시면 됩니다. 예를 들어 돈은 고유한 것이 아니기 때문에 분할 및 교환할 수 있습니다.



Photo by Atahan Guc on Unsplash



이 추세는 2017년 초 Crypto kitties라는 프로젝트가 시작되면서 시작되었습니다. 이 프로젝트를 통해 Crypto 지갑을 연결하고 새끼 고양이가 입고 있는 옷, 색상 등과 같은 관련 속성이 있는 귀여운 새끼 고양이 형태로 NFT를 생성할 수 있습니다.

내가 틀렸다면 정정해 주세요. 하지만 그 프로젝트의 배후에 있는 사람들은 API처럼 작동하거나 NFT 소유자와 NFT 자체.

그래서 이것을 방해하지 않고 어떻게 만드는지, 그것을 하기 위해 무엇이 필요하고 어떻게 해야 하는지 알아봅시다.

이 시점에 도달하기 전에 블록체인, 특히 이더리움의 블록체인과 스마트 계약에 대한 기본적인 이해가 필요합니다. 여기서는 설명하지 않겠지만 심층 분석에 관심이 있다면 저에게 알려주세요. 설명.

NFT는 우리가 "메타데이터"라고 부르는 올바른 속성을 가진 객체를 수반하는 한 이미지, 오디오 또는 3D 모델 파일 등 모든 디지털 자산이 될 수 있습니다.

디지털 자산이 생성되면 해당 NFT를 생성하는 데 사용할 ERC-721(또는 ERC-1155) 스마트 계약의 주소가 필요합니다.

pragma solidity ^0.8.4;

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

import "hardhat/console.sol";

contract NFTFactory is ERC721URIStorage {
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIds;
    address contractAddress;

    // Note that you don't have to do this, only if you want to pass the name and symbol of the ERC-721 token when you'd like to deploy
    constructor(string memory name, string memory symbol)
        ERC721(name, symbol)
    {}

    function createToken(string memory tokenURI) public returns (uint256) {
        _tokenIds.increment();
        uint256 newItemId = _tokenIds.current();

        _mint(msg.sender, newItemId);
        _setTokenURI(newItemId, tokenURI);
        setApprovalForAll(contractAddress, true);
        return newItemId;
    }
}


계약이 준비되면 컴파일하고 배포해야 합니다. 제가 추천하는 Hardhat과 같은 작업에 도움이 되는 도구가 있습니다.

실행 중인 컨트랙트를 컴파일할 수 있습니다npx hardhat compile. Hardhat을 사용하여 배포하거나 프런트엔드를 빌드하고 Minting 앱에서 했던 것처럼 거기에서 배포할 수 있습니다.

import { ethers } from 'ethers';

// We're importing the contract's artifacts here
import NFTFactory from '../../../artifacts/contracts/NFTFactory.sol/NFTFactory.json';

// Get the user signature
const provider = new ethers.providers.Web3Provider(window.ethereum);
const signer = provider.getSigner();

// Prepare contract facotry
const factory = new ethers.ContractFactory(NFTFactory.abi, NFTFactory.bytecode, user.data.signature || signer);

// Deploy the smart contract (ERC 721)
const deployedContract = await factory.deploy('Much wow', 'WOW');

await deployedContract.deployed();


계약이 배포되면 해당 주소를 가져오고 민트 기능을 사용하여 대체 불가능한 토큰을 생성할 수 있습니다.

디지털 자산과 메타데이터 개체가 호스팅되는 위치가 궁금할 수 있습니다. 그것은 참으로 좋은 질문입니다. 우리 각자가 자신의 의견을 가지고 있기 때문에 대답이 다를 수 있지만 그것은 오프체인 또는 온체인에서 호스팅됩니다.

오프체인(AWS S3와 같은 중앙 집중식 데이터베이스 또는 서비스)을 의미하는 반면, 온체인은 IPFS 또는 기타 대안과 같은 분산 파일 시스템 서비스를 사용하여 블록체인에서 직접 의미합니다. IPFS의 파일은 영구적이지 않으며 그렇지 않은 경우 삭제될 수 있음을 명심하십시오. 나중에 자동으로 필요합니다.

이 기사에서는 온체인 접근 방식을 사용하고 Infura(프리미엄 서비스)를 사용하여 IPFS를 사용하여 파일을 호스팅하지만 절대로 잃지 않도록 하겠습니다. 최대 5Gb까지 무료로 제공됩니다.

import { create as ipfsHttpClient } from 'ipfs-http-client';

// You can grab those keys from Infura.io
const auth = 'Basic ' + Buffer.from(`${INFURA_IPFS_PROJECT_ID}:${INFURA_IPFS_PROJECT_SECRET}`).toString('base64');

const client = ipfsHttpClient({
  host: 'ipfs.infura.io',
  port: 5001,
  protocol: 'https',
  headers: {
    authorization: auth,
  },
});

// Upload image to IPFS (getting blob from url, might not needed if you already have the blob)
const blob = await fetch(values.image).then((r) => r.blob());

const image = await client.add(blob);


const data = JSON.stringify({
  attributes: [],
  description: 'description'
  external_url: 'external_url'
  name: 'name'
  image: `https://ipfs.infura.io/ipfs/${image.path}`,
});

// Upload the rest to IPFS
const added = await client.add(data);
const metadataUrl = `https://ipfs.infura.io/ipfs/${added.path}`;


파일이 업로드되면 IPFS의 응답으로 URL을 받게 되며 NFT를 생성할 때 전달하는 URL입니다.

import { ethers } from 'ethers';
import NFTFactory from '../../../artifacts/contracts/NFTFactory.sol/NFTFactory.json';

const provider = new ethers.providers.Web3Provider(window.ethereum);

// Ask for user signature
const signer = provider.getSigner();

// Mint the NFT using the deployed smart contract
const contract = new ethers.Contract(<YOUR ERC-721 deployed contract address>, NFTFactory.abi, signer);

// Token gets created
// metadataUrl is the url returend by IPFS above
const transaction = await contract.createToken(metadataUrl);
await transaction.wait();


이제 NFT가 발행되었으므로 OpenSea 또는 Foundation과 같은 다른 시장에서 판매를 위해 나열하거나 권장하지 않는 지갑을 통해 직접 거래할 수 있습니다.

그게 다야. 질문이 있으시면 아래에 댓글을 달아주세요!

현재 작업 중인 오픈 소스 채굴 플랫폼Mintify을 연결하는 것을 잊었습니다.

학점

Thanks a lot to ’s videos and articles that helped me a lot to quickly grasp and understand this and of course dozen of other online content from amazing creators.

Also thanks for Greg for minting an NFT for me to join Developer DAO 요즘 내가 더 활동적인 곳.

좋은 웹페이지 즐겨찾기