🤡
NFTを作ってみた
SolidityとTypeScriptとHardhatとnft.storageとOpenZeppelinを使って、NFTを作成して、OpenSeaで確認してみました。
ソースコード
.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を、
.env
のNFT_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が表示されますので、.env
のMETADATA_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が必要です。ない場合は、ここから貰えます。
- URLは、下記のように
MATIC_TEST_URL=https://rpc-mumbai.maticvigil.com
PRIVATE_KEY_MATIC_TEST=*****
コントラクトのデプロイとmint
- mint時にNFTを送信するアドレスを、
.env
のMINT_ADDRESS
に書きます。 - 今回は、
test/deploy-nft-and-mint-test.ts
でデプロイとmintを一緒に実行してみました。 - 下記コマンドを実行すると、Polygonのmumbaiにコントラクトがデプロイされて、その後mintされます。
> npx hardhat test --network mumbai
- OpenSeaのテストネットでNFTを送信したアカウントでログインすると、NFTが表示されました。
Discussion