イーサリアムのトランザクションに必要な‘GAS’(ガス)を安く抑える方法を考えてみる

Taishi
Ethereum Tech Lab. | イーサリアム研究所
20 min readJun 28, 2018

Ethereum(イーサリアム)の“送金手数料”として説明されることが多いGas(ガス)。今回は、なぜイーサリアムのトランザクションに際してGasが必要なのか、そもそものイーサリアムにおけるGasの仕組み、そしてGasの支払いを、できる限り安く抑える方法を解説してきます。

イーサリアムのGas(ガス)とは何か

イーサリアムのGas(ガス)とは、イーサリアムのブロックチェーン上においてトランザクションを実行するために支払われる手数料のことです。

ビットコインにおいても、よく、 “取引手数料が高すぎてマイクロペイメントには向いていない!!”と揶揄されることがありますが、イーサリアムにおけるGasも同等の手数料的概念であると理解して問題なく、ビットコインと同様に徐々に価格も値上がりを始めています。

また、ウォレットに預けているイーサリアムに関しては自分自身でGasの値段を設定することができます。

反して、仮想通貨取引所から直接送金トランザクションを実行する場合、通常、取引所によってあらかじめ決められた分のGasを送金手数料として支払う形式をとることが多くなっています。

取引手数料が足りないと、ビットコインと同様にトランザクションが実行されないことが起こり得るため、取引所は依頼されたトランザクションが確実に実行されるよう、本来必要な手数料よりも割高なGASを設定している場合が多くなっています。

ビットコインとイーサリアムのトランザクションにおける違いを挙げるとすれば、ビットコインでは、取引が実行されない、すなわちトランザクションがブロックチェーン内の有効ブロックに取り込まれない限り、自ら設定した取引手数料を支払う必要はありません。

しかし、イーサリアムでは、本来トランザクション実行に必要だったGasよりも自分が設定したGasが下回った場合には、トランザクションは実行されず、途中までのトランザクション遂行に必要だった分の実行手数料だけが差し引かれて、取引が終了してしまいます。逆に、設定したGasよりも実際に必要だったGasの方が少なかった場合、実際に必要だった分のGasだけが消費され、取引が実行されます。

Gas Price(ガスプライス)/ Gas Limit(ガスリミット)

イーサリアムにおけるトランザクションの実行手数料として消費されるGasには、大きく分けて2つの構成要素があります。それが、Gas Price(ガスプライス)とGas Limit(ガスリミット)です。

Gas Priceは1Gasあたりにおける単位を表しており、Gas Limitは発行するトランザクションの実行において消費されるGas消費の上限を示しています。

実際にトランザクションの際に使用するGasの上限は、Gas PriceとGas Limitの掛け算で算出され、通常トランザクションの生成者が自ら設定することが出来ます。

上述の様に、あくまで設定するGasは消費される上限値のため、実際に消費したGas(これをGas Usedという)が少なかった場合には、使用した分だけ手数料として消費されます。

つまり、簡潔に表すとイーサリアムにおける手数料Gasは以下の様な式の元に成り立っているといえます。

Gas = Gas Price*Gas Limit

ガソリンに例えると、Gas Priceはガソリンの単価(120円/リットル)で、Gas Limitは自分で決めることが出来る給油量の上限(30リットル)の様なものであるということが出来ます。

また、Gas Price自体の単位は ‘GWei’ (ギガウェイ)で以下の式が成り立っています。

1Gwei = 0.000 000 001 ETH

イーサリアムのウォレットの1つとして知名度の高いMetamask(メタマスク)では、トランザクション実行時の入力欄にGas Priceが4Gwei、Gas Limitが21,000にデフォルトで設定されています。これを現在(2018年6月)のイーサリアムの価格に当てはめて計算すると次の通りとなります。

Gas = 4Gwei*21,000 = 0.000084ETH = 4.156 JPY

後述するように、トランザクションによって実行されるコントラクトの複雑さによって、目安となるGas量は異なりますが、通常イーサリアムの送金を目的に実行されるトランザクションのケースでは、おおよそ上記の価格でトランザクションを実行することができます。

このように、事実上はGas Limitを用いて概算の送金手数料となるGasを事前に導き出すことは可能なのですが、トランザクションの実行以前からイーサリアムの取引手数料を“確定”させることは出来ないという問題点をイーサリアムにおけるGasという手数料システムは抱えているといえます。

また、設定したGasが必要最低限のGas量を下回り、たとえトランザクションの処理が途中までしか行われなかった場合でも、その分までの手数料としてのGasが差し引かれる仕組みとなっています。

そして、ビットコインと同じように、トランザクションを処理するマイナーは、生成したブロックに含まれるGasの合計を報酬として受け取ることが出来ます。(イーサリアムはPoWと呼ばれるコンセンサスアルゴリズムを現在採用していますが、将来的にはPoSと呼ばれる新たなコンセンサスアルゴリズムへの移行が決定しています。*その件に関しては次のストーリーで書こうと思っています。)

PoW(プルーフオブワーク)というコンセンサスアルゴリズムの性質上、マイナーは、受け取る報酬を最大化するため、Gas Priceが比較的高く設定されたトランザクションから優先してブロックに取り込もうとします。そのため、Gas Priceを高く設定すればするほど、より早くトランザクションが実行されることになります。

一方で、実際に使用されるGasの総量、その時のイーサリアムネットワークの混雑状況に左右されるため、トランザクションを実際に処理するマイナー自身も、どの程度のGasを必要とするのかに関して正確な値を事前に知ることはできません。

Block Gas Limit (ブロックガスリミット)

EthereumにおけるGas Limitは正確には2種類存在しています。

最初の一つは、先述したトランザクション実行時に設定する ‘トランザクション・ガスリミット’。そしてもう一つが、イーサリアムにおいてビットコインのブロックサイズの様な意味を持つ ‘ブロック・ガスリミット’です。

ブロック・ガスリミットを用いて、1ブロックあたりに格納されるGasの総量を制限することによって、1ブロックあたりに格納できるトランザクション数が決定されています。

ビットコインでは、現在(2018年6月)ブロックサイズ上限が1MBと固定されていますが、イーサリアムのブロック・ガスリミットは可変であり、次の図のように頻繁に変更されていることがわかります。

https://etherscan.io/chart/gaslimit

ビットコインの場合、ブロックサイズはプロトコルレベルで上限が定められていますが、イーサリアムはマイナーの投票によってブロック生成ごとに変動する仕組みを取っています。

マイナーは、マイニングを行う際、最新の有効ブロックのブロック・ガスリミットから1/1024(約0.1%)の範囲内で新しいブロック・ガスリミットを設定することができます。

次の図は、過去24時間における各マイナーの投票行動を表にしたものです。この時点では、ブロック・ガスリミットはおよそ8,000,000Gas前後で推移していることがわかります。

https://www.etherchain.org/tools/gasLimitVoting

マイナーは、原則としてトランザクション量を見てブロック・ガスリミットの増減に投票を行います。直近で、ブロック・ガスリミットが急上昇したのは2017年12月11日ですが、これはイーサリアム上におけるDApps(分散型アプリケーション)の一部である‘CryptoKitties’のヒットによってトランザクション数が急増し、未処理のトランザクションが滞ったことが背景にあります。

イーサリアムのスケーラビリティー

現在(2018年6月)、ビットコインと同様にイーサリアムもスケーラビリティに問題を抱えており、様々な議論が行われています。

上述の様に、イーサリアムにおいてもDAppsの急激な増加などによって、トランザクションの実行に対応できず、結果としてトランザクションの実行に必要なGasが高騰する状況が発生しました。

イーサリアムでは、スケーラビリティ問題の解決に向けて大きく3つのソリューションが現在進められています。

Plasma(プラズマ)

Plasma( プラズマ)は、オフチェーンを用いたスケーラビリティ問題に対する解決策で、イーサリアムのサイドチェーンとして計画されています。

サイドチェーンの概念を簡潔に述べると、イーサリアムのブロックチェーンを‘親’とし、重層的にチェーンを重ねていく構造となっています。

Plasmaのホワイトペーパーでは、分散型取引所(DEX)やSNS、またマイクロペイメントなど様々な種類のチェーンが構成できることが図示されています。

https://plasma.io/plasma.pdf

イーサリアムにおけるPlasmaは2017年08月にイーサリアムの考案者であるVitalik Buterin(ヴィタリック・ブテリン)と、ビットコインのLightning Networkの考案者の一人であるJoseph Poon(ジョセフ・プーン)によって提唱され、実装が進められています。

Raiden

Raiden(ライデン)は、オフチェーンによるスケーラビリティ問題の解決策で、ビットコインにおけるライトニングネットワークの様なマイクロペイメントの実現を試みているプロジェクトです。

https://raiden.network/101.html

ERC20に準拠したトークンが対象となっており、 ‘Raiden Network’, ‘μRaiden’,また ‘Raidos’という3つのミクロプロジェクトから成り立っています。

Sharding

Sharding(シャーディング)は、上記二つのスケーラビリティ問題の解決策とは違い、オンチェーンを用いて行われているプロジェクトです。

Shardingでは、トランザクションをShard(かけら)に分割し、これを複数のノードからなるグループごとに並列で処理を行うことでスケーラビリティ問題の解決を成し遂げようとしています。

https://github.com/ethereum/wiki/wiki/Sharding-FAQs

なお、セキュリティー上の観点からShardingの実装はイーサリアムで予定されているアップデート‘セレニティー’によるProof of WorkからProof of Stake(PoS: プルーフオブステーク)の移行後に行うのが望ましいとされています。

では、なぜGas(ガス)が必要なのか?

ここまで述べた上で、では、なぜイーサリアムではGasという仕組みを採用し、エコシステムを構築しているのでしょうか。

その理由には主に次の3つが挙げられます。

  1. トランザクションを処理するマイナーへの報酬のため
  2. コントラクトの無限ループを回避するため
  3. ネットワークへの攻撃コストを高めて、セキュリティーを堅牢にするため

1.についてはビットコインと同様の考え方であり、イーサリアムネットワークの維持にはマイナーの貢献が欠かせません。私たちが支払うGasは、そのトランザクションの整合性を検証し、実行してくれたマイナーに支払われます。

トランザクションを実行するマイナーの立場にたつと、より多くのGasが設定されたトランザクションから順に実行した方が、自らの収入増加に繋がります。そのため、多くのGasが設定されているトランザクションが、より早く処理されるのです。

ワールドコンピュータとしてのイーサリアム

2.の「コントラクトの無限ループを回避するため」とはどういうことなのでしょうか。これを理解するには、イーサリアムの基本思想を知ることが必要です。イーサリアムは、通貨としての利用を目的としてつくられたものではありません。

イーサリアムは、“Blockchain App Platform”、すなわち、ブロックチェーン上に構築されるアプリケーションのプラットフォームとなることを目的として作られています。

Ethereum Project

イーサリアムの考案者であるVitalik Buterin(ヴィタリック・ブテリン)は、イーサリアムを‘ワールドコンピューター’であると表現しています。

イーサリアムの目的は、コンピュータリソースの分散化であり、誰もが手数料を払うことによって、いつでも自由に計算能力を利用できるネットワークの構築です。

本来のGasの役割は、‘ワールドコンピューター’としてのイーサリアムを稼働させるための手数料であるといえます。

イーサリアム自体がまだ開発途中で不完全ということもあり、現在(2018年06月)はイーサリアム上に構築されたアプリケーションの数自体が少なく、トランザクションのほとんどは送金目的で実行されています。

このため、Gasは“送金手数料”と説明されることが多いですが、実際はより広義に、イーサリアム上のトランザクションを実行するための手数料であるという表現の仕方が正しいといえます。

イーサリアムが持つTuring Completeness(チューリング完全性)

イーサリアムは、ワールドコンピュータになることを目的としているため、ビットコインにはないある特徴を備えています。それが、 ‘Turing Completeness(チューリング完全性)です。

チューリング完全性とは、一言で言えばあらゆる処理を実行できる計算能力を備えている性質のことです。

ビットコインがチューリング完全性を備えていない理由は、ビットコインは通貨として利用されることを目的としてSatoshi Nakamotoにより考案されているため、通貨としての利用に関係する処理だけを行うことができればよいからです。

イーサリアムは、上述のように、ワールドコンピュータとなることを目指しているため、イーサリアム上であらゆる処理を行えるようにする必要があります。

チューリング完全性を備えることによって起こりうる問題のひとつが、無限ループの問題です。

イーサリアムでは、誰もがイーサリアムブロックチェーン上にプログラムを記述して実行することができますが、何らかのバグがある、あるいは悪意を持った誰かが、無限ループになり永遠に終わらないプログラムを実行した場合どうなるでしょうか。

そのプログラムは無限に実行され続けるため、イーサリアムネットワークはそのプログラムを処理し続けなければならない状況が発生します。このような事態を避けるために設けられているのがGasという仕組みです。

Gas Limitによって、トランザクションの実行に使用するガスの上限が設定されていれば、万が一、実行したコントラクトで無限ループが発生した場合でも、消費したGasがGas Limitに達した時点でコントラクトの実行は停止します。

3.の「ネットワークへの攻撃コストを高めてセキュリティを堅牢にするため」とはどういうことでしょうか。

上述のように、イーサリアムはチューリング完全性を持つため、ネットワークに負荷を与えることを目的としたトランザクションを実行しようとする悪意ある攻撃が発生する可能性があります。

ブロック・ガスリミットとトランザクション・ガスリミットが決まっていることにより、攻撃者はこれらを超えてGasを使用するトランザクションを実行できません。またトランザクションの実行が最後まで完了しなくても、途中まで使用した分のGasを消費するため、攻撃すればするほど、コストがかかる仕組みになっています。

ガスプライス、ガスリミットの決め方

冒頭で述べたように、仮想通貨取引所から送金のトランザクションを実行する場合、送金手数料として一定額が固定されて決まっている場合が多いため、自分でGas PriceやGas Limitを設定する必要はありません。

国内の代表的な取引所であるコインチェックでは、取り扱い通貨ごとに固定で送金手数料が決まっています。

https://coincheck.com/ja/info/fee

イーサリアムの代表的なウォレットであるMyEtherWallet(マイ・イーサ・ウォレット)やMetamask(メタマスク)を使用している場合など、送金のトランザクションの実行時にGas PriceやGas Limitを設定することができます。送金のトランザクションの場合、通常ガスリミットは21,000に設定していれば問題なく処理されます。

Metamaskでは、デフォルトの値でGas Limitが21,000、Gas Priceが4Gweiに設定されています。仮にこの設定で、ガスリミットまでガスが消費されトランザクションが実行されたとすると、

21,000 (Gas Used) * 4 Gwei (Gas Price) = 0.000084 Ether

でトランザクションが処理できる計算になります。

もちろん、イーサリアムネットワーク上に未処理のトランザクションが溜まっている時にはGas Priceを引き上げなければいつまで経ってもトランザクションが処理されないということも起こり得るでしょう。

これは取引所から直接送金処理を行うよりもはるかに安い金額なので、セキュリティの観点だけでなく送金手数料の観点から見た場合でも、取引所からウォレットに移動して保持していた方が良いといえます。

トランザクションを実行する際に必要なGas Priceの目安を知るには、ETH Gas Stationというサービスが便利です。(参考:https://ethgasstation.info/)その時のイーサリアムネットワークの混雑状況から、適切なGas Priceをレコメンドしてくれます。

https://ethgasstation.info/

では、送金以外のトランザクション実行時のGas LimitやGas Priceはどのように設定するべきなのでしょうか。上述したとおり、実際に使用されるGasの総量はトランザクションによって実行されるコントラクトの複雑さに依存します。

例えば、ICO(Initial Coin Offering: イニシャル・コイン・オファリング)に参加する際は、複雑なコントラクトが実行される場合が多く、通常はICOを行う主体から目安となるGas Limitが提示されることが多いです。

下図のICOの例では、最低でもGas Priceは10Gwei、Gas Limitは200,000に設定するよう推奨されています。

https://podone.io/wp-content/uploads/2017/11/ICOPurchaseInstructions.pdf

最後に

ここまで、イーサリアムにおけるGas(ガス)の概念と、その役割について説明しました。Gasはイーサリアムネットワークの維持のためにマイナーに支払う必要がある手数料である事実に変わりはありませんが、その仕組みを知ると自身の裁量で節約することも可能だということがわかります。

特に、今後DAppsの広がりにより、イーサリアムのブロックチェーンを使い、そのトランザクションに触れる機会が多くなることが想像できます。

一例で言うと、イーサリアムのブロックチェーンを利用し、更にはERC721トークンを用いたCryptocupと呼ばれる、サッカーワールドカップの結果を予測することでイーサリアムをリワードとして獲得することが出来るサービスが展開され始めました。

https://www.cryptocup.io/landing

この様に徐々にではありますが、私たちの周りに分散型アプリケーション(DApps)の“影”が近づいてきている気がします。

EthereumTech Lab.ではブロックチェーン、特にイーサリアムに対して強い興味を持った学生または社会人のメンバーを募集しています。
発信はMedium上で行い、本格的な開発状況に関する分析、または開発者それぞれの思想をリサーチし、日本語にて発信するなど様々な方向性の記事を作成しています。

EthereumTech Lab.はイーサリアムのモバイルウォレットを開発している”Wei Wallet Team”(*https://github.com/popshootjapan/WeiWallet-iOS) が中心となり、活動を行っています。そのため、オフラインでのイベント/ミートアップ実施の機会も多く開催していく予定です。

ご興味のある方は、こちら

EthereumTech Lab | イーサリアム研究所

今後の記事更新のお知らせ・イベント情報・最新ニュースはFacebookグループへの参加がおすすめです。

--

--

Taishi
Ethereum Tech Lab. | イーサリアム研究所

PR & Blockchain Researcher at Quantstamp inc. Now in Seattle studying Econ/Cybersecurity at University of Washington. Originally from 🇯🇵.