Bible Network Crypto DeFi Onchain RWA AI Agent Stablecoin Chain SAFU CryptoTax DeFAI AGI Claude Me Claude Skill Claude Design Claude Cowork
独立メディア
いかなるプロジェクトとも無提携
オンチェーンデータ、市場の最もリアルな声を読み解く
onchain-bible.com
最新
コントラクトは「自己破壊」したのに、実際には消えていない:EIP-6780後、オンチェーンの「死」は幻影だ  ·  オンチェーンで見えるのは結果だけ、過程は見えない:インテントベース取引はいかにSolverの意思決定を不可視化するか  ·  このアドレスは「人」なのか「コントラクト」なのか:EIP-7702がオンチェーン最も基本的な分類を崩す  ·  鯨魚残高は47%増加したが、同時に13万ドルを純売却していた——「保有量増加=強気」という神話を暴く3つのトークン  ·  15人中5人が裏切ればいい:Liquid Networkの3.2億ドル事件が露呈したマルチシグの前提の穴  ·  1億1,600万ドルの盗難資金はどこへ消えたのか?Coldcardハック後、オンチェーン鑑識が発見した3つの異常
advanced

コントラクトは「自己破壊」したのに、実際には消えていない:EIP-6780後、オンチェーンの「死」は幻影だ

30秒バージョン · 忙しい方へ
コントラクトが自己破壊を実行しても、本当に消滅したわけではない。コードと履歴はチェーン上に残り、見えるが触れられない抜け殻になる。

詳しく読む +
01 · なぜ起きたのか?

EIP-6780は、SELFDESTRUCTオペコードの挙動を変更するイーサリアムのプロトコルアップグレードだ。中核となる変更は、SELFDESTRUCTがコントラクトの「デプロイと同一のトランザクション内」で呼び出された場合にのみコード、ストレージ、アカウントを完全に削除するようになったことだ。それ以外の場合(実際の使用例の大多数)は、コントラクトの資金を転出させるだけで、コードとストレージデータはすべてチェーン上にそのまま残る。これはSELFDESTRUCTの元々の挙動——実行後にコントラクト全体が消滅する——とは完全に異なる。

02 · 仕組みは?

この変更が存在するのは、イーサリアムが将来Verkle treeという新しい状態ストレージアーキテクチャを採用する予定であり、その下ではアカウントデータが複数のキーに分割して保存されるため、「1つのアカウントに属するすべてのデータをアトミックに一度に削除する」ことが技術的に非現実的かつ非効率になるからだ。EIP-6780は、古い削除ロジックに合わせるために状態ツリー全体の設計を異常に複雑にするのではなく、SELFDESTRUCTの挙動を新しいアーキテクチャの制約に合わせて調整することを選んだ。これは「古い機能の完全性を犠牲にして将来のスケーラビリティを得る」という典型的なエンジニアリング上のトレードオフだ。

03 · 自分にどう影響する?

具体的なルールは2つの分岐に分かれる。分岐1:SELFDESTRUCTがコントラクトのデプロイと同一のトランザクション内で呼び出された場合——従来の挙動を維持し、コード、ストレージ、アカウントがすべて削除される。これはファクトリーコントラクトパターンにおける「使い捨て」の補助コントラクトで一般的だ。分岐2:デプロイ完了後、一定時間を経てSELFDESTRUCTが呼び出された場合——資金転送のアクションのみが実行され、コントラクトのコードと過去に書き込まれたストレージデータはすべてそのままチェーン上に残り照会可能であり、アカウント自体も存在し続ける。分析者が「自己破壊した」コントラクトの現在の状態を判断するには、コントラクトの現在の残高がゼロか(資金転出が完了したか)、そしてコントラクトのコードとストレージが依然として照会可能か(大多数のケースで照会可能)を別々に確認する必要がある。

04 · どうすればいい?

読者にとっての実際的な影響は、オンチェーンのデューデリジェンスを行ったり、あるコントラクトの過去の資金フローや脆弱性記録を追跡したりしていて「このコントラクトはSELFDESTRUCTを実行した」と見た場合、それを「このコントラクトはもう存在せず無視してよい」というシグナルとして直接扱ってはいけないということだ。正しい対応は、さらに確認することだ。コントラクトのコードとストレージデータが依然として照会可能か(通常は可能)。過去の取引履歴とロジックは完全なオンチェーンの証拠として残っており、コントラクトが自己破壊命令を実行したからといって消えたり信頼できなくなったりすることはない。

全文 +

SELFDESTRUCTが本来果たすべき役割

イーサリアムの初期設計では、SELFDESTRUCTはスマートコントラクトが呼び出せるオペコードで、実行されると残りの資金を指定されたアドレスに転送し、同時にこのコントラクトのコード、ストレージデータ、アカウント自体をチェーンの状態から完全に削除していた。「消滅」という表現がまさに当てはまり、このコントラクトアカウントはその後存在しなくなる。この設計は元々、開発者がコントラクトが不要になった際に状態スペースを解放し、おまけとして一部のガス返金(過去はデータ削除で一部のガスコストが返金された)を得られるようにするためのものだった。

なぜこの挙動を変える必要があったのか

問題はイーサリアムの長期的なスケーラビリティのロードマップにある。イーサリアムは将来、Verkle treeと呼ばれる新しい状態ストレージ構造を採用する予定で、この構造の下ではアカウントデータは複数の異なるキーに分割して保存される。この構造の下では、1つのアカウントに関連するすべてのデータを「アトミックに」一度に削除することは技術的に非現実的になる。不可能というわけではなく、状態ツリーの設計全体が異常に複雑で非効率になってしまうということだ。EIP-6780の解決策は、アーキテクチャ全体を古い削除ロジックに適合させるよう強制することではなく、逆にSELFDESTRUCTというオペコードの挙動を調整し、新しいアーキテクチャの制約に合わせることだった。

EIP-6780が実際に変更した内容

調整後のルールは次の通りだ。SELFDESTRUCTがコントラクトの「デプロイと同一のトランザクション」内で呼び出された場合、従来通りの挙動を維持する——コード、ストレージ、アカウントを完全に削除する。しかし、デプロイが完了してから一定時間後に呼び出された場合(実際の使用状況の大多数がこちらに該当する)、現在は資金転送のみを実行し、コントラクトのコードとストレージデータはすべてそのままチェーン上に残る。この設計は、デプロイの瞬間に自己破壊するファクトリーコントラクトパターン(使い捨ての補助コントラクト)によく見られる正当な使用例を維持しつつ、問題を引き起こしていた削除動作を取り除いている。

オンチェーン状態分析への実際の影響

これは、「SELFDESTRUCTを実行した」コントラクトを見た分析者が、それがチェーンから消滅したと単純に仮定できなくなったことを意味する。より正確な状況は次の通りだ。コントラクトの残高はゼロになり、資金は転出済みだが、そのコードは依然として照会可能であり、過去に書き込まれたストレージデータも依然として読み取れる。ただ、このコントラクトはもう誰にも正常に呼び出されたり操作されたりすることはなく、文字通りの「空の抜け殻」になる。オンチェーンのデューデリジェンスや過去の資金フローの追跡を行う人にとって、この区別は重要だ。「実際に削除された」コントラクトと「残高はゼロだがコードはまだ存在する」コントラクトは、リスク評価の観点では全く異なる意味を持つ。後者の過去のロジック、過去の脆弱性記録、かつての攻撃対象領域は、すべて完全に検証可能であり、コントラクトが「自己破壊したように見える」からといって消えてしまうわけではない。

「このコントラクトはまだ生きているか」を判断する方法論への変化

かつては、コントラクトが「死んでいる」かどうかの判断は、「SELFDESTRUCTが呼び出されたことがあるか」という二元的な問いに単純化できた。EIP-6780以降、この問いは少なくとも2つの層に分割する必要がある。コントラクトに残高があるか(資金が転出されたか)、そしてコントラクトのコードとストレージが依然として照会可能か(大多数のケースでは答えは「はい」)。「SELFDESTRUCTイベントが発動したか」だけを確認してそのコントラクトを「消滅した」とラベル付けし、追跡リストから外す分析プラットフォームは、実際には完全な履歴データをまだ保持し、理論上は何らかの残存権限を通じて操作され得るコントラクトを見落としている可能性がある。

出典:EIP-6780: SELFDESTRUCT only in same transaction、Dedaub — EIP-4758 and EIP-6780: Removal of SELFDESTRUCT
図解
合約執行了「自毀」,卻沒有真的消失:EIP-6780 之後,鏈上的「死亡」是假象EIP-6780: SELFDESTRUCT Before vs. AfterBefore EIP-6780SELFDESTRUCT called✕ code deleted✕ storage deleted✕ account deletedAfter EIP-6780 (post-deployment)SELFDESTRUCT called✓ funds transferred out⚠ code still queryable⚠ storage still queryable⚠ account still existsException: same-tx-as-deployment callsstill trigger full deletion (factory pattern)An "empty shell" is not the same as "deleted"onchain-bible.com
スクリーンショット歓迎。転載時は出典を明記してください。
質問する
10文字以上入力してください
関連記事
オンチェーンで見えるのは結果だけ、過程は見えない:インテントベース取引はいかにSolverの意思決定を不可視化するか
advanced · 10/02
取引が1つの証明に圧縮されるとき:ZK-Rollup上でオンチェーンアナリストは何を見られるのか?
advanced · 09/03
1回の取引で87万ドルが消えた:サンドイッチ攻撃のオンチェーン証拠連鎖を解剖する——1つのボットが市場の7割を握る理由
advanced · 08/29
このアドレスは「人」なのか「コントラクト」なのか:EIP-7702がオンチェーン最も基本的な分類を崩す
smart-contracts · 10/02
関連トピック