現在の4,800ガスの払い戻しは、一般ユーザーがスマートコントラクトを操作する際に実際に感じ取れる影響がありますか?
一般ユーザーにとって、この払い戻しの実際の体感は通常かなり限られている——4,800ガスは、1回の取引全体の消費量(数万から数十万ガスに及ぶこともある)と比べると相対的に小さな相殺にすぎず、さらに払い戻し額は「総消費量の5分の1を超えない」という上限にも制約されている。実務上、ユーザーがある操作が削除払い戻しをトリガーしたからといって手数料が明らかに安くなったと感じることはあまりない。
この払い戻しは現在、ユーザー体験レベルで積極的に認識されるような変化というよりも、技術レベルの計算の詳細に近いものになっている——実際にこのメカニズムに注目するのは主にスマートコントラクトの開発者であり、コントラクトのロジックを設計する際、この相対的に小額な払い戻しを得るために、もう必要のないストレージ位置を積極的に空にするかどうかを検討することがあるが、それはガス全体の最適化の一環であり、単一の決定的な要因ではない。
SELFDESTRUCTはほとんどの機能がすでに名ばかりになっているのに、開発者は今でも使っていますか?
EIP-6780以降、SELFDESTRUCTはほとんどのケースで元々の「コントラクトのコードを削除する」という中核的な役割を失っており、残っているのはコントラクトの残高を転送する機能だけである。これはつまり、この操作に依存してコントラクトの「アップグレード」(新しいコントラクトをデプロイし、古いコントラクトを破壊し、資産を移転する)を行っていた過去の設計パターンはもはや適用できず、類似の目的を達成するには別のアーキテクチャ(アップグレード可能なコントラクトのパターンなど)に切り替える必要があるということだ。
現在この操作が完全な効果を保持している唯一のシナリオは、「コントラクトのデプロイと自己破壊が同じ取引の中で発生する」場合である——このシナリオは、ファクトリーコントラクトを通じて一時的に作成され、使用後すぐに破壊される使い捨てのコントラクトなど、特定の用途でより一般的に見られる。この種の特殊なアーキテクチャは依然としてSELFDESTRUCTの元々の完全な効果を利用できる可能性があるが、これはもはや相対的に少数の、特定の状況における使い方であり、一般的なスマートコントラクト開発における日常的なツールではない。
GasToken以外に、払い戻しメカニズムによって生じた他の予期しない副作用はありましたか?
GasTokenのような直接的なアービトラージ操作以外にも、払い戻しメカニズムの存在はブロックの実際のガス使用量の計算をより複雑にした——ある取引が最終的に消費するガスは、まず総使用量を計算し、次に該当する払い戻しを差し引いて初めて実際の請求額になるためだ。これはつまり、ブロックプロデューサーが取引をパッケージし、ブロックがあとどれだけの取引を収容できるかを見積もる際、取引が宣言するガス上限だけを見るわけにはいかず、払い戻しによって実際の消費が予想より低くなる可能性も考慮しなければならなかったということだ。この不確実性が、ブロック容量の計画を単純にガス上限を合計するよりも複雑なものにしていた。
これもまた、EIP-3529がGasTokenのアービトラージを防ぐこと以外に持っていた重要な設計上の考慮事項だった——払い戻し上限を設定することで、同時にこの計算の複雑さも軽減され、ブロック容量の見積もりが実際の状況により近づくようになった。これは1回のアップグレードで2つの問題を解決する一石二鳥の設計である。
この歴史を理解することは、新しいプロトコルの経済的インセンティブ設計を評価する際にどう役立ちますか?
この事例の本当の価値は、「4,800ガス」という具体的な数字を覚えておくことではなく、あらゆる経済的インセンティブ設計を評価する際に持つべき思考習慣を示している点にある:善意から生まれたように見える報酬メカニズム(ストレージの整理を奨励し、ネットワークにとって有益)は、「ユーザーがアービトラージのためにこのメカニズムを逆に操作しようとするかどうか」を十分に考慮していなければ、実際に運用された後に逆効果であることが証明される可能性が非常に高い——GasTokenの出現は、ユーザーが悪意を持ってシステムを破壊しようとしたからではなく、既存のルールの範囲内で自分にとって最も有利な操作方法を完全に合理的に見つけ出した結果であり、これこそがメカニズム設計において最も予測しにくく、しかし最もよく実際に起こることである。
どんな新しいプロトコルやトークンの経済モデルを評価する際にも、そのインセンティブが「そもそも何を達成しようとしていたか」を見るだけでなく、「もし自己利益を最大化しようとする合理的な参加者がいたら、このルールをどう利用して設計者が予想しなかった操作を行うか」を問う方が重要である。この種の逆方向のストレステストの思考方法こそが、ガス払い戻しメカニズムの歴史がその後のプロトコル設計に残した最も実用的な教訓である。
もしあなたが「データを削除するとむしろ手数料の払い戻しがもらえる」という話を聞いたことがあるなら、これはEthereum上でかつて確かに本当だったことである——しかしこのメカニズムの完全な物語は、実は「善意から生まれた経済的インセンティブが、最終的には市場に悪用され尽くして大幅に弱められることを余儀なくされた」という具体的な事例だ。この仕組みが今何を残し、なぜ弱められたのかを理解しておくことは、スマートコントラクトの開発や利用における実際のコストをより正確に判断するのに役立つ。
オンチェーンでデータを書き込むすべての動作(基盤となるSSTORE操作)は、ネットワーク全体のノードが永久に保存する必要があるスペースを占有する。ますます多くのスマートコントラクトがますます多くのデータを蓄積するにつれて、ネットワーク全体のストレージ需要(「状態」と呼ばれる)は膨張し続け、これはノード運営者にとって長期的な負担となる。設計者が当初考えていたのは、開発者がもう必要のないデータを積極的に削除する(あるストレージ位置の値をゼロに戻すなど)ことを奨励できれば、ネットワーク全体にとって良いことであり、手数料の払い戻しでこの行動に報いる価値があるというものだった。
このロジック自体は理にかなっている:ゼロでないストレージ位置をゼロに戻すことは、理論上そのデータをノードのストレージ負担から解放し、ネットワーク全体が恩恵を受ける——削除操作を実行した人に払い戻しで報いることは、標準的な経済的インセンティブ設計である。
問題は、払い戻しメカニズムが設計者の予想していなかった操作に利用されたことだった——最も典型的な事例はGasTokenのようなプロジェクトだ:ユーザーはネットワークの混雑度が低く手数料が安いときに、意図的にストレージ位置にデータを書き込み(比較的安価な手数料を「貯蓄」しておく)、ネットワークが混雑し手数料が高くなったときにこれらのストレージ位置を空にして払い戻しをトリガーする——これは今日の安い手数料を使って将来の高価な期間の割引の一部と交換するのと同等である。この方法は個々のユーザーにとっては確かに割に合うものだったが、ネットワーク全体にとっては逆効果をもたらした:払い戻しメカニズムはそもそも「状態の膨張を減らす」ことを奨励するためのものだったが、GasTokenのような操作はむしろ最初に積極的に状態を増やし(書き込み)、その後払い戻しをアービトラージするためだけのものであり、ネットワーク全体のストレージ負担を実際には減らしていなかった。それどころか、払い戻しの計算方法のせいで、ブロックの実際に利用可能な取引スペースが予測しづらくなった。
それに加えて、もう一つの典型的な手口はSELFDESTRUCT(コントラクトを自己破壊させ、残った資産を転送できる操作)と組み合わせるものだった——この操作にも元々払い戻しが付随しており、SSTOREの削除払い戻しと重ねて使うことで、アービトラージの余地をさらに拡大していた。
2021年8月にロンドンアップグレードを通じて有効化されたEIP-3529は、直接2つの手を打った:SELFDESTRUCTの払い戻しを完全に撤廃し、SSTOREでストレージ位置を空にする払い戻し額を元の15,000ガスから4,800ガスへと大幅に引き下げ、同時に単一取引が受け取れる払い戻しの総額に厳格な上限(その取引の総消費量の5分の1を超えられない)を設定した。これによりアービトラージの余地を根本的に圧縮し、GasTokenのような操作をもはや割に合わないものにした。
2024年3月のDencunアップグレードはさらに、EIP-6780を通じてSELFDESTRUCTという操作の効果をほぼ無効に近いレベルまで縮小した——現在では「コントラクトのデプロイと自己破壊が同じ取引の中で発生する」という極めて限定的な状況でのみ、実際にコントラクトのコードとストレージが削除される。それ以外の状況でSELFDESTRUCTを呼び出しても、コントラクトの残高を転送するだけで、ストレージの削除も払い戻しも行われなくなった——この操作が元々持っていた中核的な機能は、事実上名ばかりのものになってしまった。
もしあなたが開発者であるか、あるスマートコントラクトの実際のガスコストを評価しているなら、現在の払い戻しメカニズムは初期の予想とは大きく異なっている——ストレージ位置を空にすることは確かに依然として(現在は4,800ガスの)比較的小さな払い戻しを得られるが、この払い戻しを操作全体のコストを大幅に相殺できる主要な考慮事項として扱うべきではなく、払い戻し上限の存在も、大量の削除操作を積み重ねて払い戻しの効果を無限に拡大することができないことを意味する。もしあなたが「データを削除すると大きな払い戻しがもらえる」あるいは「SELFDESTRUCTを通じて手数料を節約できる」と書かれた古いチュートリアルや記事を見かけたら、その内容がおそらく2021年以前の情報であり、実際のルールはとうの昔に変わっていることを意識すべきだ——ガスコストの計算に関連する情報を確認する際は、まずその資料がいつ書かれたものかを確認することが、スマートコントラクトの開発コストを評価する際に見落とされがちだが重要なステップである。