スマート コントラクトを更新できるようにした NFT 実装のサンプル コードです。@openzeppelin/contracts-upgradeable
パッケージの ERC721EnumerableUpgradeable
を利用しています。
- 適切なディレクトリでこのレポジトリをクローンし、ライブラリをダウンロードします。
git clone https://github.com/takeiyuto/upgradable-nft.git
cd upgradable-nft
yarn
- コンパイルします。
yarn truffle compile
- 新しいターミナルを開いて、同じディレクトリから、ローカル環境でテスト用ブロックチェーン Ganache を起動します。このとき、以下の
<MNEMONIC>
の箇所を、テストに用いるウォレット アカウントのニーモニックで置き換えて実行します。
yarn ganache -m "<MNEMONIC>"
- 手順 2. のターミナルに戻って、デプロイします。
プロキシ コントラクトが 0x... にデプロイされました。
という表示によって、デプロイされたプロキシ コントラクトのアドレスが表示されます。また最後にあとでこの行をコメントアウトします
というエラー表示が出て終了します。
yarn truffle migrate
- さらに新しいターミナルを開いて、適切なディレクトリでフロントエンドのレポジトリをクローンし、ライブラリをダウンロードします。もし既にクローン済みである場合は、
git checkout upgradable
コマンドでブランチを切り替えてください。
git clone -b upgradable https://github.com/takeiyuto/hello-nft-web.git
cd hello-nft-web
yarn
- 手順 5. と同じターミナル上で、ローカル Web サーバを起動して、フロントエンドを開始します。
yarn http-server .
-
MetaMask などのソフトウェア ウォレットが入ったブラウザで、http://127.0.0.1:8080/ を開きます。フロントエンドの表示に従って、手順 4. で確認したプロキシ コントラクトのアドレスを入力すると、コントラクトのバージョンが 1 であることを確認できます。
-
コントラクトをアップグレードするために、
migrations
フォルダ内の 3_version_2_deploy.js の、以下の行をコメントアウトします。
throw "あとでこの行をコメントアウトします";
- 手順 4. と同じターミナルに戻り、デプロイします。
アップグレードが完了しました。
という表示が出ます。
yarn truffle migrate
-
手順 7. と同じブラウザに戻ります。すると、同一のプロキシ アドレスを入力したまま、コントラクトのバージョンが 2 であることを確認できます。手順 7. の前後で NFT を発行していれば、それらも引き継がれていることが確認できます。
-
Ganache およびローカル Web サーバは、それぞれ Ctrl + C で終了できます。
yarn
は npm
と同様、Node.js 向けのパッケージ マネージャです。次のコマンドで、システム全体で使えるように、インストールできます (macOS や Linux では、システム ディレクトリに書き込む権限を得るため、先頭に sudo
が必要になるかもしれません)。
npm install -g yarn
yarn
を使わない場合、上記の手順を次のように読み替えると、npm
でも同じように実行できます。
- 引数のない単独の
yarn
コマンドはnpm install
にする。 - それ以外の
yarn
コマンド (例えばyarn truffle ...
など) は、yarn
をnpx
に読み替える。
このサンプル コードは、MIT Licenseで提供しています。
徹底解説 NFTの理論と実践の第5章3節を参照してください。本書の Web サイトも参考にしてください。