🤡

NFTを作ってみた

2021/12/14に公開

SolidityとTypeScriptとHardhatnft.storageOpenZeppelinを使って、NFTを作成して、OpenSeaで確認してみました。

ソースコード

https://github.com/web3ten0/hardhat1

.envの作成

.env をこのリポジトリのルートに作成して、下記を入力します。

NFT_STORAGE_API_KEY = *****
METADATA_URI = https://ipfs.io/ipfs/*****/metadata.json
MATIC_TEST_URL=https://rpc-mumbai.maticvigil.com
PRIVATE_KEY_MATIC_TEST=*****
MINT_ADDRESS = 0x*****

画像とmetadata.jsonの作成・アップロード

  • hoge.jpgを作成して、このリポジトリのルートに置いておきます。
  • nft.storageにアカウントを作成して、API KEYを、.envNFT_STORAGE_API_KEY に書きます。
  • net.storageのgithubにnode.js用のサンプルがありますので、これを参考に、hoge.jpgをIPFSにアップして、metadata.jsonを作成し、URIを取得します。
  • このリポジトリの scripts/storage.ts は、上記を参考にしたコードです。下記を実行することで、storage.ts が実行されます。
> npx hardhat run scripts/storage.ts
  • 実行後に、https://ipfs.io/ipfs/****/metadata.json というURLが表示されますので、.envMETADATA_URI にそのURLをコピペします。

NFTコントラクトの作成

  • コントラクトは、ここにあるコードをほぼコピペしました。
  • ERC721URIStorage だと、mint時にtokenURIを個別に指定できますので、ちょうどよいかなと思いました。
  • このリポジトリの contracts/NftStorage.sol になります。

networkの設定

  • 今回は、Polygonのテストネット(mumbai)にデプロイしてみました。
  • hardhat.config.tsでnetworkの設定ができます。Polygonの設定はここが参考になります。
  • URLとprivate keyが必要なので、.envに書いておきます。
    • URLは、下記のように MATIC_TEST_URL に書きます。
    • プライベートキーはMetaMaskから取得したりして、下記のように、 PRIVATE_KEY_MATIC_TEST に書きます。
    • また、アカウントにはmumbaiのmaticが必要です。ない場合は、ここから貰えます。
MATIC_TEST_URL=https://rpc-mumbai.maticvigil.com
PRIVATE_KEY_MATIC_TEST=*****

コントラクトのデプロイとmint

  • mint時にNFTを送信するアドレスを、.envMINT_ADDRESSに書きます。
  • 今回は、test/deploy-nft-and-mint-test.tsでデプロイとmintを一緒に実行してみました。
  • 下記コマンドを実行すると、Polygonのmumbaiにコントラクトがデプロイされて、その後mintされます。
> npx hardhat test --network mumbai

Discussion