昨日、あるイーサリアムのトランザクションに、25億円の手数料を間違って払ってしまった人が出現しました。
下記がそのトランザクションです。
https://etherscan.io/.../0x2c9931793876db33b1a9aad123ad49...
手数料は、7676ETHとあり、まぎれもなく25億円です。
どうしてこのようなことになってしまったのでしょうか?また、このひとはどうなるのでしょうか?
イーサリアムの手数料の仕組みと落とし穴
イーサリアムの手数料(GAS)の支払いの仕組みはビットコインとはかなり違います。ビットコインは最初にユーザーが手数料を決めたらそこから変更が加わることはありません。またユーザーが決めるのは手数料の総額です。
一方で、イーサリアムの場合は、手数料の総額を決めるのではなく、単位処理あたりの手数料の単価を設定するようになっています。単位処理というのは、イーサリアムのスマートコントラクトの1行を処理するのに支払う金額と理解して概ね間違いないです。
なぜこうなっているかというと、イーサリアムの場合は、スマートコントラクトを実行してみないとその処理の総量というのが判明しないからです。
イーサリアムはチューリング完全といってあらゆるプログラム処理を実行できるようになっています。その最大のポイントがループ処理です。つまり有る条件が満たされるまで一定のループを行うといったもので、そのような場合、何回ループしたかによって処理の総量が変わってくるわけです。
また、ループ処理にプログラムの記述ミスがあると、延々と処理がおわらない無限ループになることもあります。そうなると無限に手数料がかかり続けるので、最大の手数料を設定し、それに達したらスマートコントラクトの処理が失敗するという安全策をもうけています。
イーサリアムで手数料を莫大に支払ってしまったケースは過去にも何度も発生しています。その多くが最大の手数料をアカウントに保持されているイーサリアム残高上限までに設定してしまい、そして無限ループが走ってしまうことです。そうすると、スマートコントラクトは残高上限までGASを食いつぶしながら無限ループを繰り返すことになります。