見出し画像

EVMでヤギNFTを作成してみた!

イーサリアムのチェーン上で、NFTを発行する方法を紹介します。
※事前にメタマスクのインストールが必要になります。

メタマスクの追加方法はこちらが参考になります。

実際のイーサリアムだとガス代(チェーンに書き込むための手数料)が発生するため無料で取得できるテストトークンを使います。

faucet(蛇口)から無料で取得できる方法が、いくつかあります。

今回は、ChainLinkを使います。
Github認証で簡単にテストトークンが取得できます。


次にNFTにするための画像とメタデータを用意します。

注意ポイント1
※画像のファイルサイズは、10MB以下にする必要があります。

画像サイズが大きいとOpenSeaで表示できませんでした…

こちらの画像を使って、ヤギNFTを発行します!

NFTにするための画像を、IPFS(ストレージ)にアップロードします。

今回は、Pinataを使って画像を配置します。

注意ポイント2
※firebaseのCloud StorageだとOpenSeaで表示されませんでした。
AWSのS3でも表示されないことがあるようです。

ログイン後に、Addから画像をアップロードします。
アップロードしたら、画像のパスを取得します。

メタデータを作成していきます。

以下の構造体のjsonファイルを作成します。
nameとdescriptionは、openSeaで表示されるNFTの名前と説明になります。
任意の値で大丈夫です。

imageは、取得した画像のパスを貼り付けます。

{
  "name": "goat",
  "description": "goat image", 
  "image": "https://mypinata.cloud/ipfs/Qmctb7mSaeNpyrfMgS4ac79UoiCWwjhe2w8ZG6aiudf",
  "attributes": []
}

jsonのファイル名は、0にします。

注意ポイント3
※jsonの拡張子はつけずに0のみです。
.jsonをつけるとopenSeaで表示できませんでした。

ファイル名の0は、tokenIDになります。
NFTのメタデータは、配列のような連番で設定されていることが多いです。

今回は最初のNFT(1番目)をミントするため、ファイル名を0にしています。
配列の0にあたります。

2番目のNFTを発行したい場合は、ファイル名を1にして、紐づいたメタデータと画像を設定します。

メタデータをAddから、アップロードします。

ここからNFTを発行するコードを書いていきます。
ブログラミング言語は、solidityになります。

solidityは、EVM(イーサリアム仮想マシン)でコントラクトを記述するための言語です。

コードの記述は、オンラインで開発できるRemixを使います。
オンラインエディタのため、環境構築が必要なくアクセスするだけで始められます。

https://remix.ethereum.org/#lang=en&optimize=false&runs=200&evmVersion=null&version=soljson-v0.8.26+commit.8a97fa7a.js

workspace → createからERC721のテンプレートを作成していきます。
ERC721(NFT)のCreateを押します。

workspace名を入力して進めると、テンプレートが作成されます。

コードは「MyToken.sol」に記述していきます。

NFT発行に必要なコードを加えていきます。

コードは、OpenZeppelinを使うことで簡単に作成できます。
自分で書く必要はなくコピペでいけます。

OpenZeppelinの画面になります。
赤枠のバーから、必要なパラメータを設定していきます。

設定するパラメータは以下になります。
・Name:NFTの名前
 openSeaで表示されるNFTの名前

・Symbol: シンボル名
 ビットコインだとBTC、イーサリアムならETHのような略名

・Base URI: メタデータが格納されているベースURI
 pinataのメタデータがあるパスの赤枠を設定する

・Mintable: チェックを入れる
 NFTを発行するミント関数の追加

・URI Storege: チェックを入れる
 メタデータのパスを設定する関数の追加

・Ownable: チェックを入れる
 NFTを発行したメタマスクのウォレットアドレスのみミントできます。

コードをRemixのMyToken.solに貼り付けます。
ペーストするときに「悪意のあるコードじゃないか確認してください」と警告が表示されますが問題ないので進めます。

コンパイルして、機械語に変換します。

次にデプロイしていきます。

コントラクトが正常に動くか確認するため、Remixで用意されているethを使ってデプロイしてみます。

ENVIRONMENTを、「Remix VM(Cancun)」にします。

ACCOUNTは、そのままでOKです。
Remixに用意されたアカウントを使っていきます。

分かりづらいですがACCOUNTの右側にあるコピーアイコンから、ウォレットアドレスを取得し、Deployの横に貼り付けます。

貼り付けたらDeployを押します。

コンソールログに緑のチェックが出たら成功です。

次にメタマスクを使って、Sepoliaのチェーン上に書き込んでいきます。
※デプロイするには、Sepoliaが必要になります。

メタマスクをSepoliaに変更します。

DeployタブのEnvironmentをInjected Provider - MetaMaskにします。
パスワードを入力してメタマスクにアクセスします。

先ほどと同じようにENVIRONMENTのコピーから、ウォレットアドレスを取得して、deployの横に貼り付けます。

ネットワークがSepoliaになっていることを確認します。

deployを押します。
メタマスクを経由して、Sepoliaにコントラクトをデプロイします。

デプロイが成功したら、safeMint関数を実行します。
to: メタマスクのウォレットアドレス
tokenId: 0
※メタデータのファイル名がtokenIDになる。今回は0になる。

uri: pinataで画像をアップしたUIDを入れる

入力したらtransactを押す。

成功したらコントラクトアドレスが表示されます。
0x8920e7fc21a27eea0a461e3b8f6d133254b9e75a

コントラクトアドレスをテストネットのetherscanで検索して確認します。
https://sepolia.etherscan.io/

コントラクトが実行されたのを確認できました!

続いてopenseaのテストネットも確認します。

https://testnets.opensea.io/ja

ミントしたメタマスクのウォレットアドレスで検索するとNFTが表示されていることが確認できました!

この記事が気に入ったらサポートをしてみませんか?