ふとNFTを触ってみたいと思ったので試してみました。
内容としてはチュートリアルとほぼ同じことをやっています。
NFTについては下記記事が参考になりました。
ソフトウェアエンジニアなら3秒で理解できる NFT 入門 - Okapies' Archive
コントラクトを作る
使うもの
- スマートコントラクトの開発環境
- スマートコントラクトを安全に開発するためのライブラリ
Hardhat プロジェクトを作る
mkdir my-nft
cd my-nft
npx hardhat --init
全てデフォルトで作成する
✔ Which version of Hardhat would you like to use? · hardhat-3
✔ Where would you like to initialize the project?
Please provide either a relative or an absolute path: · .
✔ What type of project would you like to initialize? · node-test-runner-viem
✨ Template files copied ✨
✔ You need to install the necessary dependencies using the following command:
Do you want to run it now? (Y/n) · true
OpenZeppelin をインストールする
npm install @openzeppelin/contracts
NFTコントラクトを書く
contracts/MyNFT.sol を作成
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
import { ERC721 } from "@openzeppelin/contracts/token/ERC721/ERC721.sol";
contract MyNFT is ERC721 {
constructor() ERC721("MyNFT", "MNFT") {}
}
コンパイルする
npx hardhat build
デプロイする
Ignition module を書く
Deploying a contract | Hardhat 3
ignition/modules/MyNFT.ts
import { buildModule } from '@nomicfoundation/hardhat-ignition/modules';
export default buildModule("MyNFTModule", (m) => {
const myNFT = m.contract("MyNFT");
return { myNFT };
});
Ignition module を試す
まずはローカルでシミュレートされたネットワークにデプロイして挙動を確認する
npx hardhat ignition deploy ignition/modules/MyNFT.ts
実行時のログ
npx hardhat ignition deploy ignition/modules/MyNFT.ts
You are running Hardhat Ignition against an in-process instance of Hardhat Network.
This will execute the deployment, but the results will be lost.
You can use --network <network-name> to deploy to a different network.
Hardhat Ignition 🚀
Deploying [ MyNFTModule ]
Batch #1
Executed MyNFTModule#MyNFT
[ MyNFTModule ] successfully deployed 🚀
Deployed Addresses
MyNFTModule#MyNFT - 0x5FbDB2315678afecb367f032d93F642f64180aa3
ローカルネットワークにデプロイする
次に、明示的に永続的なローカルノードを立ち上げてデプロイする
ノードタスクの実行
npx hardhat node
-> テスト用ウォレットが20個くらい表示される
別のターミナルでデプロイを実行
npx hardhat ignition deploy ignition/modules/MyNFT.ts --network localhost
ログ
Hardhat Ignition 🚀
Deploying [ MyNFTModule ]
Batch #1
Executed MyNFTModule#MyNFT
[ MyNFTModule ] successfully deployed 🚀
Deployed Addresses
MyNFTModule#MyNFT - 0x5FbDB2315678afecb367f032d93F642f64180aa3
ノード側ログ(抜粋)
eth_call
Contract deployment: MyNFT
Contract address: 0x5fbdb2315678afecb367f032d93f642f64180aa3
From: 0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266
eth_sendTransaction
Contract deployment: MyNFT
Contract address: 0x5fbdb2315678afecb367f032d93f642f64180aa3
Transaction: 0xfcb381f1dc0cf47e8c86706a4fb83d537c47bdbd2bbe1c4a50b145b42c68d38b
From: 0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266
Value: 0 ETH
Gas used: 905821 of 905821
Block #1: 0x2f58b520bd25c927713485d0c248c2d782ca95a8199bf96f69eef49839803947
-> デプロイに成功してコントラクトのアドレスが表示された
NFTコントラクトを書き、Ignition を使ってローカル環境にデプロイするまでを試しました。
次は Mint してみたり、テストネットへのデプロイを試してみたいです。