プラスプラス開発者ブログ

岩手県盛岡市のシステム開発会社「株式会社プラスプラス」の開発者ブログです。

スマートコントラクトの関数を実行する際に必要なGASはどれくらいか?の実験

プラスプラスの澤田です。

Ethereum でスマートコントラクトを動かす際に問題になるのが、GAS(手数料のようなもの)ですが、 実際のところいくらぐらい掛かるものなのかを実験してみました。

この記事は作成したプライベートネットで実験した結果をもとに記載しています。

文字列をそのまま保存する場合

サンプルとして使用するスマートコントラクトです。

ソースコードはこちらです。

単純に、関数の実行者のアドレス単位で文字列を保持・照会・削除する・・・というだけのものです。 (この処理に意味があるのかはここでは問いません)

GAS単価 18(単位:Gwei)の場合でこのような結果となりました。

※JPYは 1 ETHER = 61,911JPY で計算しています。

1文字の場合

  • GAS USED 64,997
  • 0.001169946 ETHER
  • 72 JPY

100文字の場合

  • GAS USED 123,025
  • 0.00221445 ETHER
  • 137 JPY

1,000文字の場合

  • GAS USED 695,538
  • 0.012519684 ETHER
  • 775 JPY

5,000文字の場合

  • GAS USED 3,097,979
  • 0.055763622 ETHER
  • 3,452 JPY

ざっくりしか調べていないですが、6000文字以上はGASリミットで実行もできなかったので、 プライベートネットでETH使わない状況でも大きなデータストアには向かないようです。

文字列をハッシュ化して保存する場合

次に、文字列そのものを保持するのではなく、与えられた文字列をハッシュとして保持するスマートコントラクトで実験をしてみました。

ソースコードはこちらです。

1文字

  • GAS USED 64,024
  • 0.001152432 ETHER
  • 71 JPY

100文字

  • GAS USED 41,035
  • 0.00073863 ETHER
  • 46 JPY

1,000文字

  • GAS USED 105,008
  • 0.001890144 ETHER
  • 117 JPY

5,000文字

  • GAS USED 389,321
  • 0.007007778 ETHER
  • 434 JPY

10,000文字

ハッシュ化して保存しますので、思い切って10,000文字の実験も行ってみました。

  • GAS USED 744,999
  • 0.013409982 ETHER
  • 830 JPY

文字そのものを保管するよりは削減できましたがそれでもまだ高いかなと思います。

実際の設計ではこういったGASの料金も考慮に入れてどういった情報をスマートコントラクトに保持しておくのが良いか、考える必要がありそうです。

サンプルコード

今回の記事で使用したサンプルコードはこちらに公開しています。