Logicky Blog

Logickyの開発ブログです

NFTを作ってみた

Solidityと TypeScript とHardhatnft.storageOpenZeppelinを使って、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 を、.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