EVMでヤギNFTを作成してみた!
イーサリアムのチェーン上で、NFTを発行する方法を紹介します。
※事前にメタマスクのインストールが必要になります。
メタマスクの追加方法はこちらが参考になります。
実際のイーサリアムだとガス代(チェーンに書き込むための手数料)が発生するため無料で取得できるテストトークンを使います。
faucet(蛇口)から無料で取得できる方法が、いくつかあります。
今回は、ChainLinkを使います。
Github認証で簡単にテストトークンが取得できます。
次にNFTにするための画像とメタデータを用意します。
こちらの画像を使って、ヤギNFTを発行します!
NFTにするための画像を、IPFS(ストレージ)にアップロードします。
今回は、Pinataを使って画像を配置します。
ログイン後に、Addから画像をアップロードします。
アップロードしたら、画像のパスを取得します。
メタデータを作成していきます。
以下の構造体のjsonファイルを作成します。
nameとdescriptionは、openSeaで表示されるNFTの名前と説明になります。
任意の値で大丈夫です。
imageは、取得した画像のパスを貼り付けます。
{
"name": "goat",
"description": "goat image",
"image": "https://mypinata.cloud/ipfs/Qmctb7mSaeNpyrfMgS4ac79UoiCWwjhe2w8ZG6aiudf",
"attributes": []
}
jsonのファイル名は、0にします。
ファイル名の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が表示されていることが確認できました!
この記事が気に入ったらサポートをしてみませんか?