KVORUM
aaveSource: Aave governor v2 · #324

Rescue Mission Phase 2, 3

executedSep 22, 2023, 03:00 AM UTCbyF70xf71f…1e02

01Summary

AISummary by Kvorumclaude-haiku-4-5

This proposal completes the Aave Rescue Mission by recovering tokens accidentally sent to Aave v1, v2, v2 AMM, and v3 contracts across Ethereum, Polygon, Avalanche, and Optimism. Affected tokens totaling millions in value will be transferred to Merkle distributor contracts, allowing users to claim their mistakenly transferred funds via a utility interface.

Type
protocol addition

Key changes

  • Add rescue function to 10 Aave contracts enabling transfer of stuck tokens to Merkle distributor contracts(high)
  • Deploy new Merkle distributor contracts on Polygon, Avalanche, and Optimism networks with short executor as owner(high)
  • Enable user claims of mistakenly sent tokens across multiple Aave versions and networks via Merkle tree distribution(high)
  • Implementation diffs reviewed to ensure rescue logic is isolated change with no other contract modifications(medium)

Notable concerns

  • Avalanche payload execution delegated to guardian rather than standard governance process
  • Multiple network deployments increase operational complexity and potential for execution inconsistencies
  • Users required to interact with external interface or directly call smart contracts to claim recovered tokens
ContractsAave v1 PoolAave v2 AMM PoolAave v2 Ethereum PoolAave v2 Polygon PoolAave v2 Avalanche PoolAave v2 aRAI ContractAave v2 aUSDT ContractAave v2 aDAI ContractAave v2 aUSDC ContractAave v3 Optimism PoolAaveMerkleDistributor
Generated by Kvorum
model: claude-haiku-4-5
provider: anthropic
profile: anthropic-fast-v1
prompt: v1.0
generated: 2mo ago
Read the description ↗

02Description

686 words

Simple Summary

This proposal outlines the final stages of the "Rescue Mission" for tokens erroneously sent to Aave ecosystem smart contracts. Phase 2 and 3 amalgamates the efforts of both phases into a single proposal, covering tokens locked in Aave v1, v2, v2 amm and v3 contracts (across various networks) provided their aggregated value exceeds $1,000. The proposal aims to release these locked tokens which the users can claim by interacting with the Rescue Mission smart contract, or via the utility interface available on https://rescue.bgdlabs.com/

Motivation

As an item part of the Aave <> BGD engagement Phase 1 described here, the rescue mission was created to support users of the Aave ecosystem who sent by mistake the tokens to the wrong smart contract addresses. While Phase 1 of the Rescue Mission has been completed, phases 2 and 3 remained pending. After evaluating the necessary interactions for both phases, it was decided to present them as a unified proposal.

The following table represents the tokens to rescue from various aave ecosystem contracts:

Tokens to RescueContract where tokens are stuckAmountNetwork
AAVE V2 A_RAIAAVE V2 A_RAI1481.16074087007480402ETHEREUM
AAVE V1 A_WBTCAAVE V1 POOL1.92454215ETHEREUM
USDTAAVE V2 AMM_POOL20600.057405ETHEREUM
DAIAAVE V2 POOL22000ETHEREUM
GUSDAAVE V2 POOL19994.86ETHEREUM
LINKAAVE V1 POOL4084ETHEREUM
USDTAAVE V2 A_USDT11010ETHEREUM
USDCAAVE V2 POOL1089.889717ETHEREUM
WBTCAAVE V2 POOL0.22994977POLYGON
AAVE V2 A_DAIAAVE V2 A_DAI4250.580268097645600939POLYGON
AAVE V2 A_USDCAAVE V2 A_USDC514131.378018POLYGON
USDCAAVE V2 POOL4515.242949POLYGON
USDT.eAAVE V2 POOL1772.206585AVALANCHE
USDC.eAAVE V2 POOL2522.408895AVALANCHE
USDC.eWETH_GATEWAY14100AVALANCHE
USDCAAVE V3 POOL44428.421035OPTIMISM

Specification

For wallets to be able to claim the tokens they sent to the contracts specified on Phase 2 and 3, we have created a different Merkle tree for every claimable token. With the roots and amounts, every wallet will be able to claim by calling the AaveMerkleDistributor contract similar to what was being done in Phase 1. For more details of which wallets are eligible for claims you can check here.

The following Aave contracts will be updated by adding a rescue function that can transfer the stuck funds to the Merkle distributor contract by the payloads.

  • Aave v1 pool
  • Aave v2 amm pool
  • Aave v2 ethereum pool
  • Aave v2 polygon pool
  • Aave v2 avalanche pool
  • Aave v2 aRai contract on ethereum
  • Aave v2 aUsdt contract on ethereum
  • Aave v2 aDai contract on polygon
  • Aave v2 aUsdc contract on polygon
  • Aave v3 pool on optimism

Once the contracts are updated, the payload will activate the Merkle distributor contract and rescue the stuck funds and send them to the Merkle distributor contract. For ethereum network we will use the same Merkle distributor contract as in Phase 1, while for other networks new ones will be deployed with the owner of the Merkle distributor set as the short executor.

Note: The payload on avalanche will be executed by the guardian

Security Considerations

  • Implementation diffs have been generated to see that the new implementations only differ on the rescue logic.
  • Storage layouts diffs have also been generated for the contracts where the implementation is updated.

Both the implementation diffs and storage diffs for all the contracts can be found here.

References

Copyright

Copyright and related rights waived via CC0.

03Mismatch analysis

AIMismatch analysis by Kvorummedium confidenceclaude-sonnet-5
Consistent

The proposal describes a multi-chain 'rescue mission' that upgrades several Aave pool/aToken contracts to add a rescue function, then activates Merkle distributor contracts to receive and later distribute stuck user funds, with the Avalanche leg executed by the guardian. The decoded calldata shows only three actions, all tagged to Ethereum mainnet (chain 0x1): a fallback execute() call to one payload address, and two execute(address) calls to two other addresses, both passing the same target address as an argument. This structure is typical of Aave's governance pattern where a mainnet AIP delegatecalls an Ethereum-specific rescue payload and separately triggers cross-chain forwarder/controller contracts that relay execution to Polygon/Avalanche/Optimism bridge executors — consistent with the description's claim of a unified multi-network rescue. However, because the decoder only surfaces the outer wrapper calls (not the internal delegatecall logic or cross-chain message payloads), it is not possible to fully confirm that the specific contracts, amounts, and distributor addresses named in the description match the actual on-chain effects. Nothing in the visible calldata contradicts the description, and no unexplained transfers, role grants, or unrelated actions appear. Given the shallow depth of the decoded data, I assess this as consistent with medium confidence rather than high, and flag the limited visibility as a low-severity note rather than a material discrepancy, since it reflects tooling limitations rather than an actual mismatch.

Discrepancies

  • lowomitted in description

    The decoded calldata only exposes three high-level wrapper calls (execute() and execute(address)x2), all tagged as executing on Ethereum mainnet. The description claims direct upgrades and fund-rescue actions across Ethereum, Polygon, Avalanche, and Optimism, but the specific per-network payload calls, rescue targets, and Merkle distributor addresses are not visible in the decoded actions — likely because they are encapsulated inside delegatecall/cross-chain-forwarder logic not surfaced by the decoder. This isn't necessarily a problem with the proposal itself, but a reviewer cannot fully verify multi-chain execution details from the given calldata alone.

    “The following Aave contracts will be updated by adding a rescue function that can transfer the stuck funds to the Merkle distributor contract by the payloads.”

Generated by Kvorum
model: claude-sonnet-5
provider: anthropic
profile: anthropic-strong-v1
prompt: v1.0
generated: 2mo ago
Review the decoded actions ↗

04Actions

3 total
#0fallback()chain 0x1
Target
0x5d7e…ad2c
Value
0 wei
Function
fallback()
Arguments
{}
Calldata
#1execute(address)chain 0x1
Target
0x158a…d45b
Value
0 wei
Function
execute(address)
Arguments
{
  "0": "0x7B74938583Eb03e06042fcB651046BaF0bf15644"
}
Calldata
#2execute(address)chain 0x1
Target
0x5f5c…6711
Value
0 wei
Function
execute(address)
Arguments
{
  "0": "0x7B74938583Eb03e06042fcB651046BaF0bf15644"
}
Calldata

05Tally

Summed from votes

Voters90
VP participating669K
Outcome (current)For
Current support100%

06Voters

90 total
Filter:
VoterChoice% of totalRationale
320x329c…3ed4For108.5K16.22%—3y ago
070x0703…961bFor107.2K16.03%—3y ago
B80xb83b…cf5cFor84.6K12.64%—3y ago
620x62a4…816aFor81.5K12.18%—3y ago
130x13bd…8548For80.4K12.02%—3y ago
EA0xea17…6676For46.6K6.97%—3y ago
B90xb933…8dd1For42K6.28%—3y ago
EZezr3al.eth0x8659…7d0eFor37.7K5.64%—3y ago
2C0x2cc1…4df1For27.8K4.16%—3y ago
570x57ab…2922For24.7K3.69%—3y ago
E40xe459…e666For20K2.99%—3y ago
180x1855…98baFor5K0.75%—3y ago
C20xc20e…c12bFor1.3K0.19%—3y ago
870x8787…ea52For1.1K0.17%—3y ago
5A0x5acb…eedfFor2820.04%—3y ago
710x71fb…a08dFor83.70.01%—3y ago
210x21d7…102bFor200.00%—3y ago
6F0x6f9b…8a1dFor14.70.00%—3y ago
7F0x7f24…7845Against5.40.00%—3y ago
A70xa772…6171For2.10.00%—3y ago
C30xc34a…68c2For1.90.00%—3y ago
670x6799…ed9cFor1.40.00%—3y ago
010x0151…c3b9For1.20.00%—3y ago
8B0x8bc8…7276For1.20.00%—3y ago
4F0x4f49…95ccFor1.10.00%—3y ago
2B0x2ba0…8412For1.10.00%—3y ago
C70xc724…b01dFor10.00%—3y ago
740x74a2…c125For10.00%—3y ago
730x7306…c011For10.00%—3y ago
0C0x0c9f…408bFor10.00%—3y ago
180x1831…a736For10.00%—3y ago
420x4295…8429For10.00%—3y ago
CE0xceeb…2257For0.90.00%—3y ago
510x5183…6216For0.90.00%—3y ago
8C0x8ccf…c275For0.30.00%—3y ago
480x48ea…b9bbFor0.30.00%—3y ago
2F0x2fa9…d4f3For0.30.00%—3y ago
DC0xdcaa…600cFor0.30.00%—3y ago
B80xb8c4…756dFor0.30.00%—3y ago
350x35a2…6217For0.30.00%—3y ago
290x2946…5469For0.30.00%—3y ago
DF0xdfd3…8380For0.20.00%—3y ago
7C0x7c45…6af8For0.20.00%—3y ago
450x45cf…a1f4For0.20.00%—3y ago
EC0xecd0…6d74For0.20.00%—3y ago
E30xe371…c8bcFor0.20.00%—3y ago
150x1557…a892For0.20.00%—3y ago
770x77fc…33f9For0.20.00%—3y ago
D70xd7b2…4489For0.20.00%—3y ago
DE0xde1a…a1c3For0.10.00%—3y ago
Showing 50

07Forum

No forum thread is confidently linked to this proposal.