Solidityと TypeScript とHardhatとnft.storageとOpenZeppelinを使って、NFT を作成して、OpenSeaで確認してみました。
目次
ソースコード
https://github.com/edo1z/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 を、
.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 が表示されました。