mookim

mookim

mookim.eth

AAVEクロスチェーンガバナンスの技術的詳細

理由#

AAVE は最近、金利を更新するガバナンスを通過させましたが、その結果、Polygon 上の BTC、ETH、USDT、MATIC のプールが凍結され、1.1 億ドルの資金に影響を与えました。詳細は以下をご覧ください:BlockSec のツイート技術分析公式声明

公式は、修正はガバナンス投票を通じてのみ行えると主張しており、少なくとも 7 日間待たなければならず、emergencyAdmin 権限を使用するつもりはないとしています。

そのため、AAVE のクロスチェーンガバナンスがどのように行われているのか、技術的にはどのように実現されているのか、実際に 7 日間待つ必要があるのか、自然に疑問が生じます。

提案の提出から実行までの全プロセス#

今回問題が発生した提案 224 を例に、この提案の全体のタイムラインを見てみましょう。

1. 2023/4/22 フォーラムでの議論#

https://governance.aave.com/t/arfc-aave-v2-interest-rate-curve-recommendations-from-gauntlet-2023-04-21/

2. 2023/4/29~2023/5/6 スナップショットのオフチェーン投票#

2023/4/29 開始、2023/5/6 終了

合計 15854 人が投票に参加し、574K AAVE が賛成(99.93%)

https://snapshot.org/#/aave.eth/proposal/0x65b77de92c88a6046a9179abe8e67d5c0e9e4203eace4425aac215dbb7d5a885

3. 2023/5/10 ペイロード契約のデプロイ#

今回の提案は、ETH チェーンと Polygon チェーンの金利モデルを同時に変更しました。

2023/5/10 に ETH 上にペイロード契約 0x24bdacf6bbebaf567123da16cdb79a266597e92b をデプロイし、その中で新しい金利契約が含まれています。例えば、USDT の金利契約 は 2023/5/8 にデプロイされました。

2023/5/10 に Polygon 上にペイロード契約0xF22c8255eA615b3Da6CA5CF5aeCc8956bfF07Aa8 をデプロイし、その中で新しい金利契約が含まれています。例えば、USDT の金利契約 は 2023/5/7 にデプロイされました。

4. 2023/5/11 オンチェーン提案の提出#

今回のオンチェーン提案はマルチシグウォレットによって提出されました。
https://etherscan.io/tx/0x05152e33582d861b7047254680588b249783be8d680936423f91bb90a74717cf#eventlog

image

提案提出のブロック高は 17240283、投票開始高は 17247483(7200 ブロックの間隔)、終了高は 17266683(投票期間中 19200 ブロック)

Executor は0xEE56e2B3D491590B5b31738cC34d5232F378a8D5 で、この Executor は実際には AAVE のグローバル admin 契約です。

提案が実行することは 2 つです:

  1. delegatecall を使用して ETH 上のペイロード契約 0x24db...e92bexecute()
  2. delegatecall を使用して ETH 上の CrosschainForwarderPolygon 契約 0x158a...d45bexecute(0xF22C8255EA615B3DA6CA5CF5AECC8956BFF07AA8) を実行し、Polygon で実行する必要があるペイロード契約のアドレスをパラメータとして渡します。

5. 2023/5/11 ~ 2023/5/15 オンチェーン投票#

https://app.aave.com/governance/proposal/?proposalId=224

投票が通過するために満たすべき条件:

  • クォーラム 320K
  • 差異 80K

合計 11 のアドレスが投票を完了しました。例えば、aavechan.eth の投票取引。

6. 2023/5/15 ETH チェーン上での実行待機#

投票終了後、queue(224) を呼び出して提案を投票成功状態から Queued 状態に変更する必要があります:

https://etherscan.io/tx/0x7dbfef2616f1efa17328d4bfe97b7bfd7e72f05d9f413c64a3c934278f54d242

この取引は ChainLink Keeper によってトリガーされ、その後、1684280195 の時間が経過した後にオンチェーンで実行できます。

また、grace period の概念もあり、提案が実行可能でも grace period(432000 秒 = 5 日)を超えても実行されない場合は expired 状態に入り、提案は期限切れとなり実行できなくなります。

7. 2023/5/17 ETH チェーン上での実行#

提案実行の取引: https://etherscan.io/tx/0xe0e0ab8f7524f0165e6cb1182db18cf3ffe1c4f7cb57f335b40a322d8026de3f タイムスタンプ 1684284539

これも ChainLink Keeper によってトリガーされ、EthRobotKeeper が Goverance 契約のexecute(224)を呼び出します。

その後、Executor.executeTransaction が delegatecall を使用してペイロード契約を呼び出します。

image

Executor 契約はグローバル admin ですので、この方法で任意の操作を実行できることになります。

ETH 上での実行のメッセージはどのように Polygon 上に伝達されるのでしょうか?これには Polygon 公式ブリッジを使用します。

CrosschainForwarderPolygon は Executor によって delegatecall の方法で呼び出され、Polygon 公式ブリッジ FX_ROOT_ADDRESS = 0xfe5e5D361b2ad62c541bAb87C45a0B9B018389a2 を呼び出し、メッセージを Polygon のターゲット契約 POLYGON_BRIDGE_EXECUTOR = 0xdc9A35B16DB4e126cFeDC41322b3a36454B1F772 に伝達します。

したがって、Polygon 公式ブリッジから見ると、メッセージの送信者は依然として Executor のアドレス 0xee56...a8d5 という admin アドレスです。

Polygon 公式ブリッジ契約がこの呼び出しを受け取ると、StateSynced(counter, receiver, data)イベントを発生させます。ここで、counter はグローバルインクリメントカウンター、receiver は固定の fxChild、data は(msg.sender, _receiver, _data)の abi エンコードです。ここでのインスタンスは:

image

data を abi デコードすると、次のようになります:

msg.sender = 0xee56e2b3d491590b5b31738cc34d5232f378a8d5
receiver = 0xdc9a35b16db4e126cfedc41322b3a36454b1f772
data = 00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f22c8255ea615b3da6ca5cf5aecc8956bff07aa800000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000009657865637574652829000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001

この長い data は何のためにあるのでしょうか。

8. 2023/5/17 Polygon チェーン上でのメッセージ受信#

Polygon 公式ブリッジは0x0000000000000000000000000000000000001001アドレスの身分で FxChild 契約 0x8397259c983751DAf40400790063935a11afa28a を呼び出し、その後 receiver のprocessMessageFromRoot(stateId, rootMessageSender, data)関数を呼び出します。

https://polygonscan.com/tx/0x52ed6243fc44b0b3999685020ca4b7b42c2629582194789a25792c044743dd59

この取引は Polygon システム取引で、sender と to は両方とも 0 アドレスであり、他の無関係なクロスチェーン取引も含まれています。

タイムスタンプ 1684285952 では、このクロスチェーンメッセージの伝達に 23 分かかったことがわかります。かなり早いです。

メッセージを受け取った後、receiver PolygonBridgeExecutor 0xdc9a...f772 の processMessageFromRoot 関数に入ります。この関数は、msg.sender がクロスチェーンブリッジ FxChild であること、メッセージの送信元が_fxRootSender、つまり ETH 上の admin 契約であることを検証します。

image

data は実際には targets、values、signatures、alldatas、withDelegates の 5 つの配列の abi エンコードであることがわかります。したがって、デコードすると次のようになります:

targets: (('0xf22c8255ea615b3da6ca5cf5aecc8956bff07aa8',)
values: (0,)
signatures: ('execute()',)
calldatas: (b'',)
withDelegatecalls: (True,)

ここでの targets はペイロード契約です。

メッセージを受け取った後、すぐに実行されるわけではなく、172800=2 日の遅延待機期間があります。同様に、3 日の GracePeriod もあります。

9. 2023/5/19 Polygon チェーン上での実行#

https://polygonscan.com/tx/0x6172ae452fb2c6abab7aef013e33cf899e3de09e4933433eeeae5fa41be46457

これも ChainLink Keeper によってトリガーされ、PolygonBridgeExecutor が delegatecall の方法でペイロード契約を実行し、パラメータの変更を完了します。

image

したがって、全体のプロセスは確かに 7 日間を要します:

ガバナンスの時間を考慮すると、承認されれば、修正は今から約 7 日後に適用されます:

  • 投票開始までの 1 日の遅延、
  • 3 日の投票、
  • ETH 上での 1 日のタイムロック
  • そして Polygon 上での 2 日の追加タイムロック。
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。