2017.06.19

gasとetherについて


ethereum_logo
こんにちは、次世代システム研究室のN.O.です。

ブロックチェーンではトランザクションを処理してブロックをマイニングするインセンティブとして、マイナーに対してそのトランザクションの送信者が報酬として手数料を支払う仕組みがあることが知られています。

Z.com Cloud ブロックチェーン/ConoHaブロックチェーンではEthereumを採用しておりますが、そのEthereumにおける手数料について解説します。

なお、あくまでEthereumにおける手数料の話ですので、取引所や交換所で取引をされる場合の手数料や、ブロックチェーン/ConoHaブロックチェーンでの利用料金についてはこの限りではありません。なおZ.com Cloud ブロックチェーン/ConoHaブロックチェーンはベータ版として現在無料で提供しております。

手数料を決めるgasとgasPrice


まずEtherはEthereumで取引やスマートコントラクトの利用や処理を行うために使用されるもので、ガソリンなどの燃料に例えることができます。ガソリンがお金で取引されるのと同様に、Etherも交換所で盛んに取引されております。

Ethereumで実際に処理(トランザクション)を行うには、その処理を行ってくれるマイナーに対して手数料を提示して処理を依頼します。この時手数料として提示するのがgasおよびgasPriceです。
gas × gasPriceが実際に手数料として支払われるEtherとなります。手数料ならばEtherで直接支払えば良いでは無いか?と思いますが、マイナーの様々な処理(OPCODEと呼ばれています)をgasという数値に置き換え、それに対してgasPriceで値付けすることにより柔軟に手数料の価格をコントロールできるようになっています。

gasPriceについて


gasPriceはトランザクションの送信者が任意の数値を入れることができます。
go-ethereumにはこのgasPriceを予測する機能(gas price oracle)があります。
ここでパブリックネットワークのgasPriceの変遷をご覧ください。

gasprice_2017 出典 Etherescan : https://etherscan.io/chart/gasprice (2017/6/19時点)


上記は2017年に入ってからのgasPriceです。ほぼ横ばいであることがわかります。しかしながらパブリックネットワークのEtherはここ最近高騰しているため、トランザクションの送信者にとっての実質的な手数料は上昇していることになり、手数料が柔軟にコントロールされているとは言えない状況です。

ETH-USDのグラフeth_usd_2017 出典 Etherescan : https://etherscan.io/chart/etherprice (2017/6/19時点)


gasの消費を抑える2つのgasLimit


gasは無制限に消費できるかというと、そうではありません。トランザクションを処理するためのコンピューターリソースは有限だからです。gasの消費を制限するものとしてgasLimitがあります。gasLimitにはトランザクションにおけるgasLimitと、ブロックにおけるgasLimitがあります。この2つのgasLimitについて説明します。

トランザクションのgasLimit


トランザクションにおけるgasLimitは、そのトランザクションが消費できるgasの上限となります。これは意図しない大量のgas消費によるetherの損失を出さないための安全弁となります。トランザクションのgasLimitは送信者が任意の数値を設定することができますが、通常はwalletが自動的にgas消費量を見積もるなどして、適切な値を設定します。

ブロックのgasLimit


一方ブロックのgasLimitは、そのブロックに含まれるトランザクションの、gasの総和の上限です。
マイナーがブロックをマイニングするときは、このブロックのgasLimitを超えないようトランザクションを選択します。マイナーにとってはブロックのgasLimitが決まっているため、より高いgasPriceが設定されたトランザクションを選択したほうが多くの報酬を得ることができます。実際、go-ethereumやparityのminingオプションにはブロックに含めるトランザクションにおいて、gasPriceの最低価格を指定したり、トランザクションの優先順位づけをgasPriceに基づいて行う、などがあります。

ブロックのgasLimitはどのようにして決まるのか


ブロックのgasLimitはトランザクションのgasLimitと違い、値の決定には制約があります。それは前のブロックのgasLimitを引き継ぎ、マイナーは少しだけ値を変えることができる、とされています。
go-ethereumでは次のようになっています。

	/*
		strategy: gasLimit of block-to-mine is set based on parent's
		gasUsed value.  if parentGasUsed > parentGasLimit * (2/3) then we
		increase it, otherwise lower it (or leave it unchanged if it's right
		at that usage) the amount increased/decreased depends on how far away
		from parentGasLimit * (2/3) parentGasUsed is.
	*/

前のブロックで消費したgas(parentgasUsed)が、前のブロックのgasLimitを3分の2した数値を上回れば当該ブロックのgasLimitを増やし、満たなければ減らします。また増減の幅は前のブロックのgasLimitの1/1024以内となります。

また実際にパブリックネットワークにおけるブロックのgasLimitの変遷をみても、その動きは緩やかであることがわかります。

gaslimit_2017 出典 Etherescan : https://etherscan.io/chart/gaslimit (2017/6/19時点)



あとがき

ブロックのgasLimitはスループットの上限を決めてしまいます。またその値は前述のように緩やかに上下します。パブリックネットワークではこのような仕組みを取ることでマイニングに必要なコンピュータスペックの要求を緩和し参入障壁を和らげ、よりマイニングに参加しやすくなっているのではないかと考えます。
一方プライベートネットワークではある程度マイニングのコンピュータスペックをそろえることができるため、よりスループットを追求したチューニングが可能となります。

次世代システム研究室では、グループ全体のインテグレーションを支援してくれるアーキテクトを募集しています。インフラ設計、構築経験者の方、次世代システム研究室にご興味を持って頂ける方がいらっしゃいましたら、ぜひ 募集職種一覧 からご応募をお願いします。

皆さんのご応募をお待ちしています。