はじめに
スマートコントラクトの開発を行なっていると、ガス代がどれだけかかるのか、知りたいということは多々あると思います。実際にテストネットなどにデプロイして、実行してみるというのもありですが、非常に面倒くさいです。そこで、本記事では、超絶簡単にガス代を見積もることのできるhardhat-gas-reporterを紹介します。
hardhat-gas-reporterとは
hardhat-gas-reporterはnpmで公開されているhardhatのプラグインです。テストコードのなかで実行されたスマートコントラクトの関数や、コントラクトのデプロイにかかるガス代を見積もってくれます。
インストール
npm install hardhat-gas-reporter --save-dev
使い方
初めに、hardhat.config.tsを開き、モジュールのimportとHardhatUserConfigの設定を行います。このHardhatUserConfigには、gasReporter
の設定を加え、その中で「enabled」をtrueに設定してください。
import "hardhat-gas-reporter";
.
. (中略)
.
const config: HardhatUserConfig = {
solidity: "0.8.19",
gasReporter: {
enabled: true, // falseにすると実行されない
}
};
その後、テストを実行すると、テスト通過後にガス代の表が出力するはずです。
hardhat test
あれ、ドル換算のガス代が出てないぞ??
上の表をよく見ると、usd(avg)
のカラムが全て空になっていることに気がつくと思います。一方で、人によっては出力されたという人もいるのではないでしょうか?この違いは一体何なのでしょうか?
実は、hardhat-gas-reporterはデフォルト設定で、共有のCoinMarketCapのAPIキー(無料枠)を使用してイーサリアムの価格と平均ガス価格を取得しています。この無料プランでは、月に最大1万回のリクエストまで可能ですが、多くのユーザーが利用すると、リクエストの上限に達してしまい、データが取得できなくなることがあります。
自分でAPIキーを取得し、設定することでこの問題を解決できます。CoinMarketCapのこのページからAPIを取得しましょう。その後、先ほどのHardhatUserConfigにAPIをコピペします。
gasReporter: {
enabled: true,
coinmarketcap: "API_KEY_HERE",
}
再度テストを実行すると、以下のように、実行時点でのガス価格、イーサリアムの価格から関数の平均ガス代をドル単位で見積もってくれるはずです。
その他のオプション
gasReporterにはいくつかのオプションが用意されています。ここでは便利そうなものを3つ紹介します。より詳しくはこのページにあります。
currency
例えば、"JPY"を指定すると日本円で出力してくれます。
token & gasPriceApi
他のチェーンでのガス代を計算します。デフォルトではイーサリアムになっています。具体的な設定についてはここを参考にしてください。
gasPrice
ガス価格を現時点の値ではなく、指定したい時に使います。単位はgweiになっています。