💸
【Solidity】コントラクトの色々なガス代を事前に計測する方法
概要
- hardhatを用いたプロジェクトでコントラクト関連のガス代を計測する
- デプロイ時のガス代や関数実行時のガス代等
- coinmarketcap apiを用いて自動で日本円変換して表示する
環境
- macOS 12.0.1
- hardhat 2.11.2
- hardhat-gas-reporter 1.0.8
初期設定
CoinMarketCap APIの取得
CoinMarketCapより、APIキーの発行を行い、保管しておく。
自動的にETHから日本円変換するのにはこのAPIが必要。
ライブラリ導入
hardhat-gas-reporter ライブラリを導入する
このプラグインを利用することで、ユニットテストあたりのガス使用量とデプロイ時のガス代が計測できる。
npm install hardhat-gas-reporter --save-dev
プロジェクト設定
import { HardhatUserConfig } from "hardhat/config";
import "@nomicfoundation/hardhat-toolbox";
const COINMARKETCAP_API_KEY = process.env.COINMARKETCAP_API_KEY;
const config: HardhatUserConfig = {
gasReporter: {
enabled: process.env.REPORT_GAS ? true : false,
currency: "JPY",
gasPriceApi:
"https://api.etherscan.io/api?module=proxy&action=eth_gasPrice",
coinmarketcap: COINMARKETCAP_API_KEY,
},
solidity: "0.8.17",
};
export default config;
テストコード作成
前述の通り、ユニットテストからガス使用量を計算するためいくつかテストケースを用意しておく。
環境変数の設定
テストを実行する前に必要な環境変数を設定する。
今回は envchain を使用。 NAMESPACEを report-example
とした
evnchain --set NAMESPACE #example
envchain --set report-example COINMARKETCAP_API_KEY REPORT_GAS
ガス計測
envchain report-example npx hardhat test
下記のようにレポートが出力されればOK!🙌
- ガス代
2gwei
, 円/ETHレートが20.8万円
の場合 - withdraw関数 -> 14円
- コントラクトデプロイ -> 135円
etc
Solidityについてワイワイ学ぶコミュニティ「solidity-jp」を作りました!
いまから学んでみたい/学習中だけどの日本語の情報が少ない/古くて時間がかかっているという方、一緒に学びましょう〜!!
また、TwitterにてSolidityに関する技術情報を発信しています。良ければフォローお願いします!
Discussion