コンテンツにスキップ

キルスイッチ

契約を作成する際には、特に安全なコードを書くことに注意し、バグがコードに存在する場合にそれを排除できるようにキルスイッチを含めることが重要です。キルスイッチを含めず、スマートコントラクトに悪用可能な脆弱性がある場合、これによりスマートコントラクトや他の個人からリソースが盗まれる可能性があります。

これは悪名高いDAO事件の際に特に明らかになりました。DAOスマートコントラクトは、複雑な分散型ベンチャーキャピタルファンドとして機能し、投資家グループから集めた2億5000万ドル相当のイーサを保持していました。ハッカーはスマートコントラクトの脆弱性を悪用し、5000万ドル相当のイーサを盗みました。

イーサではトランザクションを元に戻す方法がないため、コミュニティの大多数が不正な状態変化を含むブロックを受け入れることに合意した非常に物議を醸す「ハードフォーク」が行われました。これにより、DAOの資金が特別な「WithdrawDAO」回復コントラクトに流れ込みました。この不正なブロックを有効とするように十分なマイナーを説得することで、DAOは投資家の資金を返還することができました。しかし、すべての人がこのチェーンに同意したわけではなく、異議を唱えた人々は不正なブロックを拒否し、Ethereum Classicネットワークを形成しました。それぞれのブロックチェーンは独立して成長しました。

制限事項

キルスイッチは独自の問題を引き起こす可能性があります。たとえば、ライブラリである契約がキルスイッチを切り替えられた場合、この契約に依存するすべての契約は、基盤となるライブラリコードが不変であっても、意図した通りに機能できなくなります。最近、攻撃者が基盤となるライブラリ関数のキルスイッチをトリガーし、50万以上のイーサがマルチシグウォレットに閉じ込められる事態が発生しました。マルチシグライブラリのユーザーは、コードの不変性がライブラリが常に予想通りに動作することを意味すると考え、ブロックを受け入れました。この事態を受けて、スマートコントラクトのバグをチェックしたり、バグバウンティを有効にするツールが多数登場しています。

ブロックチェーンと相互作用するスマートコントラクトは、ブロックチェーンの状態を考慮に入れた場合にのみ決定論的です。

これはどのように異なるのか?

これは透明性と説明責任を提供するための根本的に異なるアプローチです。すべての契約とトランザクションが公開され、コンセンサスによって検証されるため、信頼は少数の大きな機関に集中するのではなく、人々の間で分散されます。

機関に与えられる信頼は歴史的なものです。この歴史が信頼性を築きます。

コンセンサスベースのアルゴリズムに置かれる信頼は、ほとんどの人が正直であるという仮定、またはより正確には、十分に大きなサブセットの人々が悪意のある結果を生み出すために共謀することができないという仮定に基づいています。これが信頼の民主化です。DAO攻撃では、大多数のノードが不正な状態遷移を受け入れることに合意しました。これにより、攻撃の被害が実質的に元に戻され、少なくともブロックチェーンの世界では、認識が現実であることが示されました。ほとんどの人が「信じた」ため — この不正なブロックを受け入れたため、それは「実際の」 — 有効なブロックとなりました。