HardHatによるローカルブロックチェーンでNFTを試す手順
この資料では、スマートコントラクトについていろいろ試せるように、ローカルブロックチェーン環境を作り、スマートコントラクトを試す手順を説明します。
スマートコントラクトツールとして「thirdweb」を使っており、公式のチュートリアルをもとに、未解説箇所の追記と画面ショットを追加しつつ、Ubuntu環境向けアレンジしています。
手を動かして確認することは、インターネット上で公開されているドキュメントを読む場合や、市販されている本を読む場合に、共通して必要なスキルです。
情報技術やデジタル技術は、ドキュメントを公開したり、本(書籍)として販売したり、教科書として印刷にかけた時点で陳腐化し、古い情報になるので、お金を出そうが無料であろうが、書いてあるとおりに動く保証がないことは、一般常識としてご留意ください。自ら手を動かして確認しましょう。
目次
- 1 概要
- 2 用語
- 3 開発および検証用ローカルブロックチェーンの構築
- 3.1 前提
- 3.2 ローカルブロックチェーンを動かす仮想マシンの用意
- 3.3 仮想マシンのスペック
- 3.4 GUIを追加
- 3.5 作業ディレクトリ
- 3.6 Ubuntu(Linux)に最新のソフトウェアを適用
- 3.7 yarnのインストール
- 3.8 Node.js 20(LTS) のインストール
- 3.9 Chromiumのインストール
- 3.10 Linuxを再起動
- 3.11 thirdweb CLIのインストール
- 3.12 HardHat によるローカルブロックチェーンの作成
- 3.13 HardHatによるローカルブロックチェーン設定ファイルの編集
- 3.14 HardHatによるローカルブロックチェーンの起動
- 3.15 HardHat ネットワークヘルパーのインストール
- 3.16 ウォレットに資金(1000ETH)を追加
- 4 MetaMask
- 4.1 Metamask のインストールとウォレットの作成
- 4.2 Metamaskとローカルブロックチェーンの接続
- 4.2.1 ネットワークの追加
- 4.2.2 ウォレットで使うアカウントの追加
- 5 Thirdwebによるスマートコントラクトの開発
- 5.1 コントラクトのサムネイルイメージやNFTに用いるデータの用意
- 5.2 ウォレットへの接続
- 5.3 スマートコントラクトの作成
- 5.3.1 Metadataの設定
- 6 NFT画像のアップロード
- 7 まとめ
- 8 参考資料資料
概要
ノーコードで、NFTを発行する手順について紹介します。
用語
ブロックチェーン
情報を記録する技術の1つ。トランザクションを記録し、ブロックチェーンネットワークに接続されたサーバーが相互に同期する。
2019年に東海大学で講義した時の資料 >> https://drive.google.com/file/d/1_IUQ8oUawE_Hy7K3Ohb7rewGYqFYjg3r/view?usp=sharing
ブロックチェーンの弱点
一度記録された情報は削除できない
悪意ある利用者も、正規の利用者も、ブロックチェーン管理者も、一度記録されたトランザクションは変更できない。改ざんしようとしたことさえも記録され、記録を削除できない。結果として、改ざんができない。
あらゆる処理(トランザクション)を記録するため、ストレージサーバーの容量を大量に消費しがち。
(ブロックチェーン)パブリックネットワーク / パブリックチェーン
非中央集権型
Bitcoin等の仮想通貨向き
不特定多数が利用できる
単一の管理者がいないため、すべての取引履歴がオープンで透明性が高い
トラブルが起きたときの責任の所在が明確ではない。<< 中央集権型ではないことの影響
(ブロックチェーン)プライベートネットワーク / プライベートチェーン
中央集権型
単一の管理者がおり、参加者(利用者)が限定されているブロックチェーンネットワークのこと。単一の管理者がいるため、悪意ある利用者を防ぎやすく、秘匿性の高い機密情報を扱いやすい
マイニング報酬等のインセンティブが不要。
企業間取引の記録、政府等がコントロールする必要のある、銀行等の一般的な金融機関の取引の記録、特定の会員限定サービスなど
開発環境としても向く
特定の人だけが使うパソコンやサーバーに構築 >> ローカルブロックチェーン。パブリックチェーンに公開する前に、プライベートチェーンやローカルブロックチェーンで動作確認を行う。
Ethereum(イーサリアム)
ブロックチェーンを前提とした分散型アプリケーションやスマート・コントラクトを構築するためのブロックチェーン・プラットフォームの名称。Ethereumの他に、Hyperledger というものも有名どころとしてある。
スマートコントラクト
ブロックチェーン上の概念の1つで、あらかじめ決められた処理を、ブロックチェーンでの取引(トランザクション)やブロックチェーン外からのアクションといった所定の条件を満たしている場合に、自動実行するプログラム。
ウォレット
ユーザーの公開鍵と秘密鍵を保存し、暗号化残高を管理するための機能 = 財布のような役割でウォレットと呼ばれる。
Metamask
Ethereum系ブロックチェーンの通貨やNFTを一括で補完・管理できるソフトウェアウォレット
NFTや仮想通貨をノーコードで発行できるフレームワークを提供している。
NFT
非代替性トークン >> 替えが効かないデジタルデータ
NFTは、次のような情報で構成されている。従って画像や動画といったデータ自体は複製可能。しかし、その他のデータ、ブロックチェーンで管理される取引履歴までを含めれば、コピー不可の唯一な作品と言える。
NFT名称
NFT作品情報
保存場所
作者名
タイトル
ファイル形式
作品本体データのURL
NFT発行者情報
取引履歴
開発および検証用ローカルブロックチェーンの構築
開発の際にはパブリックなブロックチェーンではなく、プライベートなブロックチェーンネットワークを構築します。パブリックなブロックチェーンネットワークを前提とした学習は、環境維持費用として毎月300ドルかそれ以上かかるため、学習に毎月3~5万円程度使える必要があり定期的な収入を確保していることが重要です。
しかし、1人あたり毎月3~5万円程度のコスト割り当てが難しい、たとえば大学の授業や自治体の講座のようなケースでは困難であるため、パソコン上にプライベートなローカルブロックチェーンネットワークを構築することで、ブロックチェーンを活用したシステム開発環境を整えます。
前提
このドキュメントは、GUIありの仮想サーバーを用います。
ローカルブロックチェーンを動かす仮想マシンの用意
仮想マシンのスペック
例として、仮想環境としてVirtualBoxを使っていますが、他の仮想環境でも構いませんです。以下のスペックの仮想サーバーを用意します。
OS:Ubutnu Server 20.04 または、Ubutnu Server 22.04
仮想CPU割り当て数 : 2
仮想メモリ割り当て:4096MB(4GB)以上
仮想ディスク:64GB以上
GUIを追加
ローカルブロックチェーンとして、Ganache(ガナシュ)を使うため、デスクトップ環境を用意します。軽量な「lubuntu-desktop」が良いでしょう。
手順書 >> 仮想マシンにGUIを追加する手順 (Ubuntu)
GUIとして、Lubuntu デスクトップ環境をインストールした例。GUIは「lubuntu-desktop」以外のものでも良いので、基本的には好みのものを使いましょう。
画面左下をクリックすると、スタートメニューが起動します。
「システムツール」>>「QTerminal」の順にクリックすることで、ターミナルアプリが起動し、各コマンドを実行することができます。
作業ディレクトリ
仮想マシンのユーザー名を、vboxuser とする。パスは、/home/vboxuser になる。
Ubuntu(Linux)に最新のソフトウェアを適用
次のコマンドを実行します。
sudo apt update -y
sudo apt upgrade -y
sudo apt autoremove -y
yarnのインストール
次のコマンドを実行します。
sudo apt remove yarn
sudo apt remove cmdtest
sudo apt autoremove
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt update
sudo apt install yarn
Node.js 20(LTS) のインストール
次のコマンドを実行します。
sudo apt-get install -y curl
curl -fsSL https://deb.nodesource.com/setup_20.x -o nodesource_setup.sh
sudo -E bash nodesource_setup.sh
sudo apt-get install -y nodejs
node -v
実行結果
v20.14.0
Chromiumのインストール
Chromiumのインストールは、Snapコマンドを使ってインストールします。
sudo snap install chromium
Linuxを再起動
再起動後、Chromiumブラウザが使用可能になる。Google ChromeやMicrosoft Edgeは、Chromiumブラウザを元にしています。
sudo reboot
thirdweb CLIのインストール
次のコマンドを実行します。
sudo npm i -g thirdweb
HardHat によるローカルブロックチェーンの作成
次のコマンドを実行します。
npx thirdweb@latest create contract
実行結果
Need to install the following packages:
thirdweb@5.28.0
Ok to proceed? (y)
と表示されるので、y を入力して、Enterキーを押します。
次のように表示されます。
$$\ $$\ $$\ $$\ $$\
$$ | $$ | \__| $$ | $$ |
$$$$$$\ $$$$$$$\ $$\ $$$$$$\ $$$$$$$ |$$\ $$\ $$\ $$$$$$\ $$$$$$$\
\_$$ _| $$ __$$\ $$ |$$ __$$\ $$ __$$ |$$ | $$ | $$ |$$ __$$\ $$ __$$\
$$ | $$ | $$ |$$ |$$ | \__|$$ / $$ |$$ | $$ | $$ |$$$$$$$$ |$$ | $$ |
$$ |$$\ $$ | $$ |$$ |$$ | $$ | $$ |$$ | $$ | $$ |$$ ____|$$ | $$ |
\$$$$ |$$ | $$ |$$ |$$ | \$$$$$$$ |\$$$$$\$$$$ |\$$$$$$$\ $$$$$$$ |
\____/ \__| \__|\__|\__| \_______| \_____\____/ \_______|\_______/
💎 thirdweb v0.14.5 💎
画面指示にしたがって、操作します。
下記の質問には、local-hardhat を入力してEnterキーを押します。local-hardhatというプロジェクト名のローカルブロックチェーンが作成できます。
What is your project named? local-hardhat
Hardhatが選ばれた状態で、Enterキーを押します。
? What framework do you want to use? › - Use arrow-keys. Return to submit.
❯ Hardhat
Forge
スマートコントラクト名を英数字で入力します。そのままでも良ければ、Enterキーを押します。
? What will be the name of your new smart contract? › MyContract
スマートコントラクトのテンプレート選択で、Empty Contract が選ばれた状態で、Enterキーを押します。ERC721はNFT、ERC20は仮想通貨、ERC1155はNFT向けですが、NFTでもゲーム内アイテム向きです。
? What type of contract do you want to start from? › - Use arrow-keys. Return to submit.
❯ Empty Contract
ERC721
ERC20
ERC1155
これらの操作により、プロジェクト名で入力した名称のローカルブロックチェーンの起動に必要なファイルが作成されました。
Success! Created local-hardhat at /home/ログインしているユーザー名/local-hardhat
Inside that directory, you can run several commands:
yarn build
Compiles your contracts and detects thirdweb extensions implemented on them.
yarn deploy
Deploys your contracts with the thirdweb deploy flow.
yarn publish
Publishes your contracts with the thirdweb publish flow.
We suggest that you begin by typing:
cd local-hardhat << プロジェクト名がディレクトリ名
実行結果に表示された文章にしたがって、プロジェクト名がついたディレクトリに下に移動します。
cd local-hardhat
HardHatによるローカルブロックチェーン設定ファイルの編集
Ethereum互換のローカルブロックチェーンを起動するために必要な設定ファイル「hardhat.config.js」を編集します。
まずはオリジナルファイルをバックアップします。バックアップしれおけば、いつでも再利用できます。
cp hardhat.config.js hardhat.config.js.bk
オリジナルファイルを削除し、作り直します。
rm hardhat.config.js
nano hardhat.config.js
設定ファイル「hardhat.config.js」の中身を次のように書きます。
/** @type import('hardhat/config').HardhatUserConfig */
module.exports = {
solidity: {
version: "0.8.17",
settings: {
optimizer: {
enabled: true,
runs: 200,
},
},
},
defaultNetwork: "running",
networks: {
hardhat: {
chainId: 1337,
},
running: {
url: "http://127.0.0.1:8545",
chainId: 1337,
},
},
};
HardHatによるローカルブロックチェーンの起動
Ethereum互換のローカルブロックチェーンを実際に起動します。
npx hardhat node --network hardhat
起動すると、開発 / 検証用のアカウントが生成されます。この後の作業で、デジタル資産を送金や交換を行う仕組みである「ウォレット」アプリの「Metamask」で、生成されたアカウントを使います。
Started HTTP and WebSocket JSON-RPC server at http://127.0.0.1:8545/
Accounts
========
WARNING: These accounts, and their private keys, are publicly known.
Any funds sent to them on Mainnet or any other live network WILL BE LOST.
Account #0: 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 (10000 ETH)
Private Key: 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80
Account #1: 0x70997970C51812dc3A010C7d01b50e0d17dc79C8 (10000 ETH)
Private Key: 0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d
Account #2: 0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC (10000 ETH)
Private Key: 0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a
Account #3: 0x90F79bf6EB2c4f870365E785982E1f101E93b906 (10000 ETH)
Private Key: 0x7c852118294e51e653712a81e05800f419141751be58f605c371e15141b007a6
Account #4: 0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65 (10000 ETH)
Private Key: 0x47e179ec197488593b187f80a00eb0da91f1b9d0b13f8733639f19c30a34926a
Account #5: 0x9965507D1a55bcC2695C58ba16FB37d819B0A4dc (10000 ETH)
Private Key: 0x8b3a350cf5c34c9194ca85829a2df0ec3153be0318b5e2d3348e872092edffba
Account #6: 0x976EA74026E726554dB657fA54763abd0C3a0aa9 (10000 ETH)
Private Key: 0x92db14e403b83dfe3df233f83dfa3a0d7096f21ca9b0d6d6b8d88b2b4ec1564e
Account #7: 0x14dC79964da2C08b23698B3D3cc7Ca32193d9955 (10000 ETH)
Private Key: 0x4bbbf85ce3377467afe5d46f804f221813b2bb87f24d81f60f1fcdbf7cbf4356
Account #8: 0x23618e81E3f5cdF7f54C3d65f7FBc0aBf5B21E8f (10000 ETH)
Private Key: 0xdbda1821b80551c9d65939329250298aa3472ba22feea921c0cf5d620ea67b97
Account #9: 0xa0Ee7A142d267C1f36714E4a8F75612F20a79720 (10000 ETH)
Private Key: 0x2a871d0798f97d79848a013d4936a73bf4cc922c825d33c1cf7073dff6d409c6
Account #10: 0xBcd4042DE499D14e55001CcbB24a551F3b954096 (10000 ETH)
Private Key: 0xf214f2b2cd398c806f84e317254e0f0b801d0643303237d97a22a48e01628897
Account #11: 0x71bE63f3384f5fb98995898A86B02Fb2426c5788 (10000 ETH)
Private Key: 0x701b615bbdfb9de65240bc28bd21bbc0d996645a3dd57e7b12bc2bdf6f192c82
Account #12: 0xFABB0ac9d68B0B445fB7357272Ff202C5651694a (10000 ETH)
Private Key: 0xa267530f49f8280200edf313ee7af6b827f2a8bce2897751d06a843f644967b1
Account #13: 0x1CBd3b2770909D4e10f157cABC84C7264073C9Ec (10000 ETH)
Private Key: 0x47c99abed3324a2707c28affff1267e45918ec8c3f20b8aa892e8b065d2942dd
Account #14: 0xdF3e18d64BC6A983f673Ab319CCaE4f1a57C7097 (10000 ETH)
Private Key: 0xc526ee95bf44d8fc405a158bb884d9d1238d99f0612e9f33d006bb0789009aaa
Account #15: 0xcd3B766CCDd6AE721141F452C550Ca635964ce71 (10000 ETH)
Private Key: 0x8166f546bab6da521a8369cab06c5d2b9e46670292d85c875ee9ec20e84ffb61
Account #16: 0x2546BcD3c84621e976D8185a91A922aE77ECEc30 (10000 ETH)
Private Key: 0xea6c44ac03bff858b476bba40716402b03e41b8e97e276d1baec7c37d42484a0
Account #17: 0xbDA5747bFD65F08deb54cb465eB87D40e51B197E (10000 ETH)
Private Key: 0x689af8efa8c651a91ad287602527f3af2fe9f6501a7ac4b061667b5a93e037fd
Account #18: 0xdD2FD4581271e230360230F9337D5c0430Bf44C0 (10000 ETH)
Private Key: 0xde9be858da4a475276426320d5e9262ecfc3ba460bfac56360bfa6c4c28b4ee0
Account #19: 0x8626f6940E2eb28930eFb4CeF49B2d1F2C9C1199 (10000 ETH)
Private Key: 0xdf57089febbacf7ba0bc227dafbffa9fc08a93fdc68e1e42411a14efcf23656e
WARNING: These accounts, and their private keys, are publicly known.
Any funds sent to them on Mainnet or any other live network WILL BE LOST.
http://127.0.0.1:8545/ でローカルブロックチェーンサーバーが起動したことがわかります。
また、アカウントは、次のように表示ルールで表示されます。
アカウント名 : アドレス
Private Key : アカウントの秘密鍵
ローカルブロックチェーンを起動したターミナルアプリはそのままにして、ターミナルアプリを別タブ、あるいは別ウィンドウで開きます。その後、ローカルブロックチェーンのプロジェクト名のディレクトリに移動します。
HardHat ネットワークヘルパーのインストール
ローカルブロックチェーン内で、ウォレットに資金を追加する処理を行わないと、NFTの発行や売買の検証ができないので、それらを行うためのHardhatネットワークヘルパーをインストールします。次のコマンドを実行します。
yarn add @nomicfoundation/hardhat-network-helpers
ローカルブロックチェーンのプロジェクト名のディレクトリ下に、「scripts」という名前のディレクトリを作成します。
その後、指定したアカウントのアドレスに、資金追加処理を行うファイルを作成します。
mkdir -p scripts
nano scripts/init.js
「const address =」には、検証用アカウントのうち、Account#1 のアドレスを記入しています。アドレスの値は、各自で異なりますから、自分の環境に表示されたものは使いましょう。
const helpers = require("@nomicfoundation/hardhat-network-helpers");
async function init() {
const address = "0x70997970C51812dc3A010C7d01b50e0d17dc79C8";
await helpers.setBalance(address, 1000 * 1e18);
}
init()
.then(() => process.exit(0))
.catch((error) => {
console.error(error);
process.exit(1);
});
ウォレットに資金(1000ETH)を追加
作成した、init.js を実行し、検証用アカウントに、1000ETHの資金を追加します。
npx hardhat run ./scripts/init.js
MetaMask
Metamaskは、デジタル資産の送金や売買等の取引を行うウォレットと呼ばれる仕組みを実現するアプリの1つです。
Metamask のインストールとウォレットの作成
Linux内のChromiumを起動します。Chromiumは、Chromeブラウザの親のような存在でほぼ同じです。拡張アドオンとして、Metamaskをインストールするため、下記にアクセスします。
https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn?hl=ja
Metamaskoの画面内で、「Chromeに追加」>> 「拡張機能を追加」の順にクリックします。
これで、Chromium で、Metamaskのアイコンをクリックすることで、Metamaskを使用可能になります。
Metamaskが日本語表示されていない場合は、画面右上で、言語設定をEnglishから日本語に変更します。
「始めましょう」が表示されます。「利用規約」をクリックすることで、利用規約が表示されるので要確認。「I agree to Metamask’s 利用規約」にチェックを入れ、「新規ウォレットを作成」をクリックする。
「Metamaskの改善にご協力ください。」と表示されます。
ここでは、「同意する」「結構です」のどちらをクリックしても良い。どちらかをクリックしよう。
「パスワードを作成」が表示されます。パスワードを2回入れます。ここで入力したパスワードは、忘れても復元することはできません。(例 zxcvfr45metamask )
「私はMetaMaskがこのパスワードを復元できないことを理解しています。」にチェックを入れ、「新規ウォレットを作成」をクリックします。
「ウォレットの保護」に関する動画を視聴します。その後、「ウォレットの安全を確保(推奨)」をクリックします。
自分のパソコンを覗き見る人がいないか周囲を確認しましょう。「シークレットリカバリーフレーズを公開する」をクリックします。
「シークレットリカバリーフレーズを書き留めてください」と表示されるので、表示されている1~12までの文字列をメモしておきます。
「次へ」をクリックします。「シークレットバックアップフレーズの確認」画面が表示されます。
表示されている単語をクリックして組み合わせ、確認した「シークレットバックアップフレーズ」と同じになるようします。その後、「確認」をクリックします。
「ウォレットが作成されました」と表示されます。「了解」をクリックします。
「MetaMaskのインストールが完了しました」と表示されるので、「次へ」をクリックします。
「MetaMask」のインストールが完了しました」と表示されるので、「完了」をクリックします。
「Enhanced Transaction Protection」を有効化するのか聞いてきた場合は、Enable をクリックして有効化します。
作成したEthereum(イーサリアム)のウォレットが表示されます。「Account1」と表示されている箇所の右端の「⁝」をクリックし、「アカウントの詳細」をクリックすると、ウォレットのアカウントIDなど詳細情報が表示されます。
Metamaskとローカルブロックチェーンの接続
ネットワークの追加
ウォレットの画面で「イーサリアムメインネット」をクリックし、下図のように表示されます。「ネットワークを追加」をクリックします。
画面下に移動し、「ネットワークを手動で追加」をクリックします。
「ネットワーク名」、「新しいRPC URL」、「チェーンID」、「通貨記号」を入力し、「保存」をクリックします。「新しいRPC URL」は、ローカルブロックチェーンサーバーのURLです。
これで、ウォレットに、HardHatによるローカルブロックチェーンサーバーが追加されました。
ウォレットで使うアカウントの追加
ウォレットでは、最初からAccount1が追加されていますが、ローカルブロックチェーンサーバーで使えないので、ローカルブロックチェーン向けにアカウントを追加します。
下図のように、Account1が表示されたアバターアイコンの下向きの矢印部分をクリックします。
表示される「Add account or hardware waller」をクリックします。
「アカウントをインポート」をクリックします。
ローカルブロックチェーン起動時に生成された検証用アカウント20個から1つ選びます。選んだアカウントのPRIVATE KEY(秘密鍵)を入力します。
今回は、生成された検証用アカウントに「Account#01」の秘密鍵を入力します。その後、「インポート」をクリックします。ローカルブロックチェーンの検証用アカウントの1つが、ウォレットにアカウント登録されます。今回は、検証用アカウントのうちAccount#01 を使いました。
「Account2」と表示されている箇所の右端の「⁝」をクリックし、「アカウントの詳細」をクリックすると、ウォレットのアカウントIDなど詳細情報が表示されます。ローカルブロックチェーンの検証用アカウントのアドレスと同じ値が表示されていることが確認できます。
Thirdwebによるスマートコントラクトの開発
コントラクトのサムネイルイメージやNFTに用いるデータの用意
画像データを用意しましょう。Stable DiffusionやMicrosoft Copilot などの画像生成AI で作ってしまうと簡単です。
ウォレットへの接続
Linux上のChromiumから、https://thirdweb.com/explore にアクセスします。画面右上の「Connect Wallet」をクリックします。
「MetaMask」をクリックします。
「Account2」にチェックを入れ、「次へ」をクリックします。
「許可」と表示されます。「確認」をクリックします。
「sign in」をクリックします。
「署名リクエスト」が表示されるので、「署名」をクリックします。
MetaMaskのアカウントが表示されます。これで、ローカルチェーンで動くウォレットに接続されました。
スマートコントラクトの作成
https://thirdweb.com/explore の画面で、「NFT Drop」をクリックします。
「Deploy now >>」をクリックします。
Metadataの設定
作成するスマートコントラクトの設定値を決めます。
Contract Metadataのうち、
Image : 「Upload file」と表示されているように、コントラクトのサムネイルイメージを指定。
Name : コントラクト名を指定します。例 Learner Image Collection
Symbol:NFTのシンボル名を指定。例 LIC
Description : NFTの説明です。例 image of a learner
Royalties
Recipient Address:二次流通時のNFTの販売料金の受取先のWallet Address
Percentage : マージン率
Primary Sales
Recipient Address:NFTの販売料金の受取先のWallet Address
まだ下にも続きがあります。Networkは、デプロイ先のブロックチェーンを指します。デプロイ先が「Localhost」となっていることから、あなたのサーバーで実行中のローカルブロックチェーンにデプロイしようとしていることがわかります。「Deploy Now」をクリックします。
「Deploy Status」の画面が表示されます。メッセージが、4つのトランザクションに対して、確認が要求されることがわかります。
トランザクションを処理するための費用である「ガス代」の見積もりが表示され、「トランザクション」への同意が求められます。ETHの送信、コントラクトの展開などで、「確認」を画面指示に従って押していきます。今回は、トランザクション処理が4回生じます。
「署名の要求」が表示されます。「署名」をクリックします。
スマートコントラクトを作成することができました。
NFT画像のアップロード
作成したコントラクトに、NFTとして用いる画像をアップロードします。画面左下の「NFTs」をクリックします。ここではイメージしやすいようにイラストの画像データにしていますが、団体の会員証のようなものでは構わないです。アップロードできる画像データであれば良いです。
「+ Single Upload」をクリックします。
NFTとして発行(ミント = Mint)するためのNFTの名前とデータをアップロードします。データは、画像以外にPDFや3DCGモデルも利用することができます。
最低限、「Name」を入力し、「Media」でNFTとして扱うファイルを選択し、「Lazy Mint NFT」をクリックします。
Walletへの同意を求められます。「確認」をクリックします。
1つ目のNFTが登録されました。
Clam Conditions(請求条件)の設定
画面左側の「Claim Conditions」をクリックします。先ほど使った「NFTs」の1つ下にあります。
初期状態では、何もないので、「Add Phase」をクリックします。NFTを購入可能な対象を4つの中から選びます。今回は、テスト環境のローカルブロックチェーンなので、「Allowlist Only」にしましょう。つまり許可した人のみになります。
請求条件である「Allowlist Only」の設定を行います。
Name :請求条件、つまり販売条件の名称
When will this phase start? : 販売開始日時
How many NFTs will you drop in this phase?:在庫数量 ( 無制限ならば、Unlimited )
How much do you want to charge to claim each NFT?:NFTの販売金額(Ehtereum環境を使っているので単位は、ETH)
販売先のウォレットアドレスと、購入可能な数の上限を指定する必要があります。次のようなフォーマットです。また、UTF-8のCSV形式でなければならないのでご注意ください。
ここでは、販売先のウォレットアドレスとして、HardHatによるローカルブロックチェーンで発行した検証用アカウントのアドレスを指定しています。
購入を許可するアドレスと、購入可能な上限数を書いたCSVを用意したら、「Add Allowlist」の「Edit Claimer Snapshot」をクリックします。「Upload Snapshot」が表示されます。
「Drag & Drop a CSV file here」をクリックし、用意しておいたCSVファイルを指定します。その後、「Next」をクリックします。
読み込んだCSVファイルの中身が表示されます。「Next」をクリックすることで、購入を許可するアドレスが登録されます。
例として、NFTの購入金額は、0.0005ETH(日本円で277円くらい)かかるものとし、上限は無制限 で「Save Phases」をクリックし、請求条件を作成しました。
NFT発行のため、Wallet アドレスがあるMetaMaskが起動し、確認を求めてくるので、「確認」をクリックします。
これで、コントラクトに請求条件が1つ追加されました。
埋め込みコードの取得
画面左側の「Embed」をクリックします。NFTを公開するための情報が表示されます。「Embed Code」には、WebサイトにNFTを表示するための<iframe>タグによる埋め込みコードが表示されます。
画面下には、埋め込みコードを使った場合のプレビューも表示されます。
また、「Code Snippets」をクリックすることで、JavaScriptやPythonなど、プログラミング言語に合わせたアプリケーション開発のためのガイドも表示されます。
例えば、Unity で呼び出す場合のサンプルコード。「Choose a language」で、対応するプログラミング言語に合わせてサンプルコードが表示されます。
まとめ
ここまでの作業により、NFTについて最初の請求(つまり売れること)が生じていないため、「Contract checklist」の「Fist NFT claimed」にチェックがありませんが、ローカルブロックチェーンを使って、スマートコントラクトとしてNFTを発行する手順を確認することができました。
この資料で用いたスマートコントラクト開発プラットフォームの「Thirdweb」と、「Hardhat」によるローカルブロックチェーンを使うことで、スマートコントラクトについて、安全に検証を行うことができます。
Metamask 等でウォレットを用意し、許可済みのアドレスを使うアカウントでNFTのMINT(配布)サイトにアクセスを購入すれば、NFTが売れたことになります。
参考資料資料
本資料は、下記の公式ガイドについて、実際に動かすにあたり、未開設箇所の追記と画面ショットを追加し、Ubuntu向けにアレンジしたものになります。
https://blog.thirdweb.com/guides/how-to-deploy-contracts-to-local-blockchain-using-thirdweb/ (英語)
本資料では、NFTのMINT(配布)サイトは自分で作ることになりますが、テンプレートを使って作る場合は、Thirdwebの公式ガイドで、例の1つとして解説があります。読むだけでは理解することが難しいので、英語ですが、実際に手を動かしてみましょう。
https://blog.thirdweb.com/guides/nft-minting-website/ (英語)
もっと手軽に、ローカルブロックチェーン使わずに、テストネットを使う場合は、下記の公式ドキュメントもあります。こちらの方法は、日本語で解説している人たちがいますが、インターネット上で公開されているドキュメントは、バージョンアップや機能の廃止などで常に動くわけではないので、自分で手を動かして確認することが必要です。
https://blog.thirdweb.com/tag/nft-drop/ << スマートコントラクト開発プラットフォーム「Thirdweb」のNFT関連の公式ガイドなどのドキュメント
https://blog.thirdweb.com/guides/how-to-build-an-nft-drop-website-with-no-code/ << ノーコードで、NFTのMINT(配布)サイトを作る解説の例