あるプロトコルのタイムロックの遅延設定が非常に短い場合(6時間だけなど)、この程度の防護力は十分ですか?
必ずしも十分ではなく、具体的な状況による。6時間の遅延は確かにタイムロックがまったくないよりは良く、理論上フラッシュローン(同一トランザクション内で完了する)だけに依存する攻撃パターンを排除できる。攻撃者は借入を6時間留めておくことができないからだ。しかしもし攻撃者が本物の資金(フラッシュローンではなく)を使って十分なガバナンストークンを6時間保有する意思があれば、これほど短い遅延時間ではコミュニティが異常な提案をタイムリーに発見し、十分な反対勢力を組織し、提案が実行される前に対応策(緊急提案による拒否、あるいは売り圧力を調整して攻撃者の保有を希薄化させるなど)を講じるには不十分かもしれない。
より安全な遅延時間の設定は、業界で一般的な参考範囲は24時間から72時間であり、この長さはタイムゾーンや祝日などの要因の影響を受けても、コミュニティが依然として合理的な反応と対応の時間を持てることをおおむね確保する。遅延時間の長さ自体もトレードオフである——短すぎると防護力が不十分になり、長すぎるとプロトコルが本当に緊急で迅速な対応が必要な状況に直面した際に反応速度が遅くなる。普遍的に最適な数字は存在せず、プロトコルのガバナンストークンの分散度、コミュニティの活発さなどの要因を総合的に判断する必要がある。
もし私がタイムロックの遅延期間中にコミュニティがある提案に問題があることを発見した場合、実行前にそれを阻止する方法はありますか?
これはプロトコルの具体的なガバナンスメカニズムの設計に依存し、すべてのプロトコルに「拒否」の仕組みが組み込まれているわけではない。いくつかの一般的な対応設計:一部のプロトコルは一般的な投票プロセスから独立した「緊急拒否」の役割やマルチシグ委員会を設置しており、タイムロックの遅延期間中に悪意ある提案が発見されれば、この役割は拒否権を行使し、まもなく実行される提案を直接取り消せる;一部のプロトコルは完全にコミュニティの自発的な対応に依存しており、例えばコミュニティのコミュニケーションチャネルを通じて緊急にトークン保有者を動員し、タイムロックが満了する前に新たな投票を発起して元の決定を覆そうとする(ただしこの方法が成功するかどうかは、プロトコルが迅速な反対投票をサポートする対応する仕組みの設計を持っているかどうかによる)。
あるプロトコルのタイムロックの設計にまったく拒否や緊急対応の仕組みがなく、単に「実行を遅延させる」だけであれば、これはコミュニティが遅延期間中に問題を発見しても、実際に取れる行動はかなり限られている可能性があることを意味する——遅延時間で得られるものは、ある意味で「提案の実行を本当に阻止できる」ことよりも「みんなが資金を引き揚げる時間を得る」ことに近い。これはあるプロトコルのガバナンス防御メカニズムを検証する際、さらに確認する価値のある詳細であり、単に「タイムロックがあるかどうか」という表面的な指標だけで判断すべきではない。
ガバナンス提案自体以外に、他のプロトコル操作にもタイムロックを適用すべきものがあり、併せて確認する価値がありますか?
ある。タイムロックの適用範囲は「一般的なガバナンス提案」だけに限定されるべきではなく、プロトコルが他の高リスクな操作にも類似の仕組みを適用しているかを確認する価値がある:スマートコントラクトのアップグレード(プロトコルがアップグレード可能なアーキテクチャで設計されている場合、新しいコードへのアップグレード自体が極めて高リスクな操作であり、理想的にはこれもタイムロックの遅延を経るべきであり、悪意ある、あるいは問題のあるコードのアップグレードが瞬時にオンラインに反映されることを避ける);重要パラメータの調整(融資プロトコルが担保率や清算報酬の比率を調整する、あるいはステーブルコインプロトコルが担保のホワイトリストを調整するなど、これらのパラメータの異常な変更はユーザーの資金の安全性に直接影響する可能性があり、同様に遅延保護の価値がある);金庫資金の大口移転(正常なプロトコルの運営支出であっても、大口の資金流出前にもタイムロックを適用すれば、コミュニティにもう一層の監視の機会を与えられる)。
これらの追加のタイムロック適用範囲を検証するには、通常プロトコルの技術文書をより深く確認するか、複数の関連するスマートコントラクトを直接調べる必要があるが、この労力は価値がある——「ガバナンス投票」にのみタイムロックを適用し、コントラクトのアップグレードや重要パラメータの調整を単一のマルチシグウォレットに瞬時に実行させているプロトコルは、ある意味で表面的な作業しか行っておらず、全体的な遅延防御の哲学を本当には実装していない。
あるプロトコルのタイムロックコントラクトが本当に回避されていないか、バックドアがないかを確認したい場合、一般ユーザーにこれを行う能力はありますか?
プログラミングの背景を持たない一般ユーザーにとって、コントラクトのコードを一行ずつ完全に審査することは確かに難しいが、それでも比較的実行可能ないくつかの間接的な検証方法がある:このタイムロックコントラクトが著名な監査機関の監査を受け、監査報告書が公開されているかを確認する。監査報告書にタイムロックメカニズムの評価結果が明確に言及されていれば、これは自分でコードを読むよりも信頼できる参考になる;コントラクトの所有者権限(ownerやadmin)の設定を確認する。タイムロックコントラクト自体の管理権限が単一のアドレスによって回避または一時停止できるよう設計されている場合(「緊急一時停止タイムロック」機能が存在し、この機能がより高いしきい値の仕組みではなく一般的なマルチシグだけでトリガーできるなど)、これはタイムロックの実際の保護力が表面上見えるよりも弱い可能性があることを意味する;コミュニティやセキュリティ研究者による過去のこのプロトコルのガバナンスメカニズムに関する公開の議論を参考にする。もし誰かが以前に類似の設計上の懸念を発見し指摘していれば、通常コミュニティフォーラムやセキュリティブログの記事で関連する議論を見つけられる。
これらの間接的な検証方法は自分でコードを審査するほど正確ではないが、すでにかなりの程度の参考の基礎を提供でき、ほとんどの一般ユーザーにとって実践的で十分な検証の深さである。
2022年、Beanstalkプロトコルは単一のブロック内でフラッシュローン型ガバナンス攻撃により約1億8,000万ドルを空にされた。この一連の攻撃が数秒で完了できた重要な理由の一つは、このプロトコルのガバナンス提案が可決後即座に自動的に実行され、コミュニティが反応する緩衝時間がまったくなかったことだ。この事件の後、「タイムロックがあるか」があるDAOのガバナンスメカニズムがどれだけ安全かを評価する際の最も基本的で重要なチェック項目の一つとなった。この記事では、この検証を数分で完了する方法を教える。
タイムロックとは、プロトコルがガバナンス提案の「投票可決」と「実際の実行」という2つのステップの間に強制的に待機期間(一般的な設定は24時間から72時間、一部のプロトコルはさらに長く設定している)を挿入することを指す。この待機期間が存在する核心的な目的は、フラッシュローン型ガバナンス攻撃の技術的な特性に対する防御を行うことだ——この種の攻撃が成立する鍵は、攻撃者が借りた巨額のトークンを「1つのトランザクションの時間」だけ留めておけば投票を完了できることにある。もしプロトコルが投票可決後さらに48時間待たなければ実行できないことを要求すれば、攻撃者はこの借入を48時間持続させる必要があり、これはすでにフラッシュローンの「同一トランザクション内での返済」という技術的制約を完全に超えており、この種の攻撃を技術的に実行不可能にすることに等しい。
ほとんどの成熟したプロトコルは公式文書でガバナンスプロセスの各段階を明確に説明しており、提案期間、投票期間、そして可決から実行までの待機期間の長さを含む。これが最も速く直接的な検証チャネルであり、優先的に確認する価値がある。文書に「実行遅延」や「タイムロック」といった言葉がまったく言及されていなければ、それ自体がさらなる検証が必要な警告サインである。
公式文書が十分に明確でない、あるいはより確実な答えが欲しい場合、プロトコルのガバナンス関連のスマートコントラクトを直接照会できる。タイムロックメカニズムを採用しているほとんどのプロトコルには独立した「タイムロック」コントラクトがあり、通常ブロックチェーンエクスプローラーで公開されソースコードの検証が完了している。このコントラクト内に`delay`、`minDelay`、`executeTransaction`といった関数や変数名がないか検索でき、これらは通常タイムロックの具体的な設計と遅延時間を直接明らかにする。
理論上の仕組みの設計と実際の運用状況には時に差がある。より安全な方法はこのプロトコルが過去にすでに実行したガバナンス提案を直接確認し、各提案の「投票終了時刻」と「実際の実行時刻」の間隔を観察することだ。毎回想定される待機時間の間隔があれば、このタイムロックメカニズムが本当に正常に機能していることを意味する。もしほとんどの提案が投票終了後ほぼ即座に実行されていれば、文書にタイムロックがあると書かれていても、この仕組みが本当に有効になっているか、何らかの方法で回避されていないかをさらに確認する価値がある。
もしあなたがあるプロトコルのガバナンストークンを保有している、あるいはDAOによってガバナンスされているプロトコルに大口の資金を預けている場合、この3つの検証ステップを完了するのに数分かけることで、このプロトコルがフラッシュローン型ガバナンス攻撃にどれだけ耐性があるかを判断する助けになる。タイムロックがないことは、このプロトコルが必ず攻撃されることを意味しないが、このプロトコルに重要な防御メカニズムが一つ欠けていることを意味する。タイムロックがあることも絶対的な安全性を保証しない(遅延時間が短すぎればやはり間に合わない可能性がある)が、少なくともプロトコル設計者がこの種のリスクを意識し具体的な行動を取ったことを意味する。この検証には複雑な技術的背景は必要ないが、単にプロトコルの規模や知名度を見るよりもはるかに具体的な安全性の参考を提供してくれる。