0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Hardhat 3 + Ignition で NFT をローカルデプロイするまで

0
Posted at

ふとNFTを触ってみたいと思ったので試してみました。
内容としてはチュートリアルとほぼ同じことをやっています。

NFTについては下記記事が参考になりました。
ソフトウェアエンジニアなら3秒で理解できる NFT 入門 - Okapies' Archive

コントラクトを作る

使うもの

Hardhat

  • スマートコントラクトの開発環境

OpenZeppelin

  • スマートコントラクトを安全に開発するためのライブラリ

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 をインストールする

Overview | OpenZeppelin Docs

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 してみたり、テストネットへのデプロイを試してみたいです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?