巨額手数料 2100ETH がマイナーへ - Ethereum の送金手数料体系
先日 2100ETH (約30万ドル)もの巨額の手数料がマイナーへ支払われるという珍事が発生しました。
Hey @sparkpool_eth, would be great if you could return this gas fat finger that resulted in a 2100 ETH fee.https://t.co/a9iwmAZHOh
— Eric Conner (@econoar) 2019年2月19日
sparkpool と呼ばれるマイニングプールが受け取ったようです。
今回はなぜこのような事態が発生したか、そもそも Ethereum の送金(トランザクション実行)手数料体系はどうなっているか説明および考察します。色々なブログで手数料について説明がありますが、大事な事なので本ブログでも扱い、併せて次回ウォレットの説明も行う予定です。
送金やアプリの実行には手数料がかかる
Ethereum では送金を行ったり、アプリケーション(例: Compound や Uniswap 等)を利用(実行)する場合にはトランザクションを発行することになります。トランザクションとは分割できない一連の流れの事で、すべてのトランザクションには手数料がかかります。これをトランザクション手数料(Transaction Fee)と言います。
トランザクション手数料はどう決まるか
トランザクション手数料は、消費された燃料(gas)と燃料の値段から算出されます。
燃料(Gas)って何? Ether の事?
Ether は Ethereum の中であたかも燃料のように扱われると聞いたことがあるでしょう。これは比喩としては Ether の特徴をうまく説明していますが、料金体系の説明をするには不適切です。なぜなら、柔軟な料金体系を実現するために考えられた概念である燃料(gas) が別にあるからです。Ether は燃料だから価値が無いほうがいい(安いほうがいい)という主張を見聞きしたことがあるでしょう。これはトランザクション手数料がどうのように決まるか理解していないことに起因しています。
燃料は計算作業のコストです。Ethereum は一種の仮想的なコンピュータです。この上で送金手続きやアプリの実行が行われ、物理的なコンピュータと同じように CPU やメモリ、ストレージを使うわけです。計算コストは処理内容に応じてあらかじめ決まっていて、例えば 256bit のワードをストレージへ保存するのに 20000gas 消費するというようになっています。
燃料はどれくらい消費されるか?
送金手続きなら21,000gasです。アプリの場合は、アプリ毎にやる事が違うので具体的にどうなるか計算することは難しいです。こういったケースに対応するため、消費上限を決めることができます。これを Gas Limit と言います。100,000gasあれば十分かと思います。Gas Limit を超える Gas が消費されるとエラーになってトランザクションは失敗します。失敗した場合、手数料や送ろうとした Ether やトークンは失うことはありません。
燃料の値段(Gas price)はどう決まるのか
値段は相場で決まります。この相場は Ether の相場とは別です。ある程度自由に任意で我々の方で決めることができます。ただし、Gas Price が高いほどトランザクションの実行が早くなることに気を付けてください。
相場が幾らになるか参考になるサービスがあります。
ETH Gas Station | Consumer oriented metrics for the Ethereum gas market
「Transaction Count by Gas Price」 に注目してください。4≦20が最も多いですね。これは待合室に Gas Price 4gweiから20gwei の間のトランザクションが多いことを意味します。ですので、相場は 4gweiから20gwei の間が無難だろうと想像できます。
※ 1Ether = 1000000000gweiです。Ethereum Unit Converter で単位変換できます。
次に「Confirmation Time by Gas Price」に注目してください。承認されるのに1gweiが10分以上かかり、6gweiなら1分程で承認されそうな事が分かります。
ここまでで Gas Price のおおよその決め方がお分かり頂けたかと思います。一日かかっても良いならば 1gwei でも十分でもっと少なくてもよいかもしれない、数分後にはトランザクションを終わらせたいなら 6gwei くらいが良さそうだと想像できます。
ethgasstation.info は親切でこういった考察をしなくても推奨値を教えてくれます。それが、「Recommended Gas Prices」です。2分以内に送金したいなら13gwei払えば良いとわかります。
ここまでのまとめ
用語 | 説明 |
---|---|
Gas | 計算作業量の単位 |
Gas Price | Gas の値段。単位は Gwei。大きいほどトランザクション実行が早くなる |
Transaction Fee | 消費 Gas 量 x Gas Price。Ether で支払えます |
Gas Limit | 特定のトランザクションのために使用できる最大の Gas 量。これを超えて Gas は消費されない |
2100ETH について考察
etherscan.io で該当のトランザクションを見てみましょう。
https://etherscan.io/tx/0x1f73b43dc9c48cc131a931fac7095de9e5eba0c5184ec0c5c5f1f32efa2a6babetherscan.io
0.1Ether を送金するために、Gas Price は 0.1 Ether(100,000,000 Gwei)提示されています。先ほど燃料の値段の決め方を説明しましたが、どんなに多くても 100gwei もあれば十分なのに、高すぎる Gas Price を提示してしまったようです。送金時には最大の手数料を確認できるのでよく確認してから実行するようにしましょう。
推測になりますが、単純に間違ったのだと思われます。受け取ったマイナーには元の方のアドレスが分かるので返金してほしいですね。自作自演の可能性は恐らくないでしょう。トランザクション承認を特定のマイナーに限定させることができないからです。
手数料面倒くさい。。。
なんとか理解していただけるように成るべく分かりやすく説明したつもりですが、それでも面倒に思われたり、理解できなかった方がいるかもしれません。
でも、安心してください。実際の利用にあたっては色々考える必要はありません。Metamask 等、最近のウォレットアプリは面倒な事を考えなくても最後に送金手数料の最大値を確認するだけでトランザクションを発行できます!次回詳しく Metamask を例に説明します。(次回に続く)