昨日、あるイーサリアムのトランザクションに、25億円の手数料を間違って払ってしまった人が出現しました。

下記がそのトランザクションです。

https://etherscan.io/.../0x2c9931793876db33b1a9aad123ad49...

手数料は、7676ETHとあり、まぎれもなく25億円です。

どうしてこのようなことになってしまったのでしょうか?また、このひとはどうなるのでしょうか?

イーサリアムの手数料の仕組みと落とし穴

イーサリアムの手数料(GAS)の支払いの仕組みはビットコインとはかなり違います。ビットコインは最初にユーザーが手数料を決めたらそこから変更が加わることはありません。またユーザーが決めるのは手数料の総額です。

一方で、イーサリアムの場合は、手数料の総額を決めるのではなく、単位処理あたりの手数料の単価を設定するようになっています。単位処理というのは、イーサリアムのスマートコントラクトの1行を処理するのに支払う金額と理解して概ね間違いないです。

なぜこうなっているかというと、イーサリアムの場合は、スマートコントラクトを実行してみないとその処理の総量というのが判明しないからです。

イーサリアムはチューリング完全といってあらゆるプログラム処理を実行できるようになっています。その最大のポイントがループ処理です。つまり有る条件が満たされるまで一定のループを行うといったもので、そのような場合、何回ループしたかによって処理の総量が変わってくるわけです。

また、ループ処理にプログラムの記述ミスがあると、延々と処理がおわらない無限ループになることもあります。そうなると無限に手数料がかかり続けるので、最大の手数料を設定し、それに達したらスマートコントラクトの処理が失敗するという安全策をもうけています。

イーサリアムで手数料を莫大に支払ってしまったケースは過去にも何度も発生しています。その多くが最大の手数料をアカウントに保持されているイーサリアム残高上限までに設定してしまい、そして無限ループが走ってしまうことです。そうすると、スマートコントラクトは残高上限までGASを食いつぶしながら無限ループを繰り返すことになります。

今回の場合は、どういうことでこうなったのかは、ちょっと良くわかりませんが、いずれにしても設定ミスなどがあったのでしょう。

ユーザーがMetamaskなどを使っている分にはこうしたミスはおこりませんが、フルノードをつかって自動処理プログラムを書いてやっている場合、プログラムミスでこうなってしまうことがありえます。怖いですね。

有名なジェイコム事件

なお、過去にはビットコインでもこういう高額の手数料支払いミスはおきています。100ビットコインを送金、0.000023が手数料というところを、0.000023ビットコインを100ビットコインの手数料で送金してしまうというようなミスです。これは単純に入力ミスですね。

かつて証券市場でも数量と単価を入れ替えて売り注文を出してしまった有名なジェイコム事件がありました。みずほ証券の男性担当者が「61万円1株売り」とすべき注文を「1円61万株売り」と誤ってコンピュータに入力したのが原因です。証券市場でもこういうことがおこるので、仮想通貨ではさもありなんということです。

マイナーは返還に応じてくれるのか?

さて、この手数料ですが、マイナーから殆どが返還されるようです。優しいマイナーですね。

一旦確定したトランザクションは巻き戻すことはできないものの、マイナーが手に入れた手数料を別途送金して返してあげるというアナログな対応をしています。

クリプトの場合電子署名を提示すれば本人確認が容易なため、マイナーも安心して返還できるということになります。

過去多くの手数料ミスの事件がありましたが、たいがいはマイナーが返還に応じているようです。

マイナーという匿名なひとびとですが、手数料過払いの際にはアナログで対応してくれるというのもとてもおもしろいところです。そしてお互い匿名なままこうした返金が完了するというのは、まさにクリプトの仕組み冥利といえましょう。

(大石)