💸

【Solidity】コントラクトの色々なガス代を事前に計測する方法

2022/09/18に公開

概要

  • hardhatを用いたプロジェクトでコントラクト関連のガス代を計測する
    • デプロイ時のガス代や関数実行時のガス代等
  • coinmarketcap apiを用いて自動で日本円変換して表示する

環境

初期設定

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」を作りました!
いまから学んでみたい/学習中だけどの日本語の情報が少ない/古くて時間がかかっているという方、一緒に学びましょう〜!!

https://solidity-jp.dev/

また、TwitterにてSolidityに関する技術情報を発信しています。良ければフォローお願いします!

https://twitter.com/k0uhashi

Discussion