コンテンツへスキップ
0%

ethers.jsでNFTをミントする方法

著者: Alchemy Team

最終更新日: 2021年8月30日1分で読めます

このチュートリアルでは、Ethersを使用してEthereumブロックチェーン上でNFTをミントする方法を、ethers.jsライブラリと、Part I: How to Create an NFTで作成したスマートコントラクトを使って説明します。基本的なテストのセットアップについても取り上げます。

本ガイドの完了までの推定時間: 約10分

また、NFTチュートリアルシリーズの他の記事もぜひご覧ください。

別のチュートリアルでは、Web3とOpenZeppelin contracts libraryを使ってNFTをミントする方法を学びました。今回の演習では、OpenZeppelin libraryのバージョン4と、Web3の代わりにEthers.jsというEthereumライブラリを使った別の実装方法を説明します。

また、HardhatとWaffleを使ったコントラクトのテストの基本についても取り上げます。このチュートリアルではYarnを使用していますが、好みに応じてnpm/npxを使用しても構いません。

最後に、TypeScriptを使用します。これについてはドキュメントが比較的充実しているため、ここでは取り上げません。

その他の点については、このチュートリアルはWeb3版と同じ手順で進みます。PinataやIPFSなどのツールも含めて同様です。

簡単なおさらい

おさらいですが、「NFTをミントする」とは、あなたのERC721トークンの一意のインスタンスをブロックチェーン上に公開する行為を指します。このチュートリアルは、NFTチュートリアルシリーズのPart IでRopstenネットワークにスマートコントラクトをデプロイ済みであることを前提としています。これにはEthersのインストールも含まれます。

Step 1: Solidityコントラクトを作成する

OpenZeppelinは、安全なスマートコントラクト開発のためのライブラリです。ERC20やERC721などの一般的な規格の実装をそのまま継承し、必要に応じて動作を拡張するだけで済みます。このファイルはcontracts/MyNFT.solに配置します。

Step 2: コントラクトのデプロイとNFTのミントを行うHardhatタスクを作成する

以下の内容でtasks/nft.tsファイルを作成します。

Step 3: ヘルパーを作成する

タスクの中でいくつかのヘルパーをインポートしたことに気づいたと思います。以下がそれらです。

contract.ts

env.ts

provider.ts

最後のgetProvider()関数はropstenネットワークを使用している点に注意してください。この引数は省略可能で、省略した場合は"homestead"がデフォルトとなります。ここではもちろんAlchemyを使用していますが、他にもサポートされている選択肢がいくつかあります。

wallet.ts

Step 4: テストを作成する

testディレクトリ内に、以下のファイルを作成します。なお、これらのテストは網羅的なものではありません。OpenZeppelinライブラリが提供するERC721の機能の一部のみをテストしており、より堅牢なテストを構築するための基礎を提供することを目的としています。

test/MyNFT.spec.ts (unit tests)

tasks.spec.ts (integration specs)

test-helpers.ts これには、sinon、chai、sinon-chaiを含む、インポートされたNPMライブラリが必要であることに注意してください。sinon.restore()の呼び出しは、スタブの使用のために必要です。

Step 5: 設定

こちらが、かなりシンプルなhardhat.config.tsです。

テストを実行していない場合にのみdotenvを呼び出す条件分岐に注目してください。本番環境ではこれを実行したくない場合もあるかもしれませんが、.envファイルが存在しない場合、dotenvは何も出力せずに無視するので安心してください。

タスクを実行する

これらのファイルを配置したので、hardhatを実行してタスクを確認できます(簡潔にするため、組み込みタスクは除いています)。

タスクの引数を忘れてしまった場合でも問題ありません。

テストを実行する

テストを実行するには、hardhat testを実行します。

まとめ

このチュートリアルでは、Solidityをベースとした、十分にテストされたNFTインフラの基盤を作成しました。**waffle.provider.getWallets()**で提供されるウォレットは、テストトランザクションの資金として利用できるeth残高があらかじめ用意された、ローカルの仮のHardhat Networkアカウントにリンクしています。

Alchemy Newsletter

リリース情報をいち早く受け取る

ニュースレターに登録する

Alchemyの最新のプロダクト情報とリソースをお届けします

A
O
D
+
80,000人以上が購読中

メールアドレスを入力すると、当社のマーケティング情報およびプロダクト最新情報の受信に同意したことになります。Alchemyが受け取った情報をプライバシー通知に従って取り扱うことに同意するものとします。購読はいつでも解除できます。