Rescue Mission Phase 2, 3
01Summary
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
Generated by Kvorum
02Description
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 Rescue | Contract where tokens are stuck | Amount | Network |
|---|---|---|---|
| AAVE V2 A_RAI | AAVE V2 A_RAI | 1481.16074087007480402 | ETHEREUM |
| AAVE V1 A_WBTC | AAVE V1 POOL | 1.92454215 | ETHEREUM |
| USDT | AAVE V2 AMM_POOL | 20600.057405 | ETHEREUM |
| DAI | AAVE V2 POOL | 22000 | ETHEREUM |
| GUSD | AAVE V2 POOL | 19994.86 | ETHEREUM |
| LINK | AAVE V1 POOL | 4084 | ETHEREUM |
| USDT | AAVE V2 A_USDT | 11010 | ETHEREUM |
| USDC | AAVE V2 POOL | 1089.889717 | ETHEREUM |
| WBTC | AAVE V2 POOL | 0.22994977 | POLYGON |
| AAVE V2 A_DAI | AAVE V2 A_DAI | 4250.580268097645600939 | POLYGON |
| AAVE V2 A_USDC | AAVE V2 A_USDC | 514131.378018 | POLYGON |
| USDC | AAVE V2 POOL | 4515.242949 | POLYGON |
| USDT.e | AAVE V2 POOL | 1772.206585 | AVALANCHE |
| USDC.e | AAVE V2 POOL | 2522.408895 | AVALANCHE |
| USDC.e | WETH_GATEWAY | 14100 | AVALANCHE |
| USDC | AAVE V3 POOL | 44428.421035 | OPTIMISM |
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
- Implementation: Ethereum, Polygon, Avalanche, Optimism
- Tests: Ethereum, Polygon, Avalanche, Optimism
- Discussion
Copyright
Copyright and related rights waived via CC0.
03Mismatch analysis
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
04Actions
- Target
- 0x5d7e…ad2c
- Value
- 0 wei
- Function
- fallback()
- Arguments
{}- Calldata
- Target
- 0x158a…d45b
- Value
- 0 wei
- Function
- execute(address)
- Arguments
{ "0": "0x7B74938583Eb03e06042fcB651046BaF0bf15644" }- Calldata
- Target
- 0x5f5c…6711
- Value
- 0 wei
- Function
- execute(address)
- Arguments
{ "0": "0x7B74938583Eb03e06042fcB651046BaF0bf15644" }- Calldata
05Tally
Summed from votes
06Voters
| Voter | Choice | % of total | Rationale | ||
|---|---|---|---|---|---|
| 320x329c…3ed4 | For | 108.5K | 16.22% | — | 3y ago |
| 070x0703…961b | For | 107.2K | 16.03% | — | 3y ago |
| B80xb83b…cf5c | For | 84.6K | 12.64% | — | 3y ago |
| 620x62a4…816a | For | 81.5K | 12.18% | — | 3y ago |
| 130x13bd…8548 | For | 80.4K | 12.02% | — | 3y ago |
| EA0xea17…6676 | For | 46.6K | 6.97% | — | 3y ago |
| B90xb933…8dd1 | For | 42K | 6.28% | — | 3y ago |
| EZezr3al.eth0x8659…7d0e | For | 37.7K | 5.64% | — | 3y ago |
| 2C0x2cc1…4df1 | For | 27.8K | 4.16% | — | 3y ago |
| 570x57ab…2922 | For | 24.7K | 3.69% | — | 3y ago |
| E40xe459…e666 | For | 20K | 2.99% | — | 3y ago |
| 180x1855…98ba | For | 5K | 0.75% | — | 3y ago |
| C20xc20e…c12b | For | 1.3K | 0.19% | — | 3y ago |
| 870x8787…ea52 | For | 1.1K | 0.17% | — | 3y ago |
| 5A0x5acb…eedf | For | 282 | 0.04% | — | 3y ago |
| 710x71fb…a08d | For | 83.7 | 0.01% | — | 3y ago |
| 210x21d7…102b | For | 20 | 0.00% | — | 3y ago |
| 6F0x6f9b…8a1d | For | 14.7 | 0.00% | — | 3y ago |
| 7F0x7f24…7845 | Against | 5.4 | 0.00% | — | 3y ago |
| A70xa772…6171 | For | 2.1 | 0.00% | — | 3y ago |
| C30xc34a…68c2 | For | 1.9 | 0.00% | — | 3y ago |
| 670x6799…ed9c | For | 1.4 | 0.00% | — | 3y ago |
| 010x0151…c3b9 | For | 1.2 | 0.00% | — | 3y ago |
| 8B0x8bc8…7276 | For | 1.2 | 0.00% | — | 3y ago |
| 4F0x4f49…95cc | For | 1.1 | 0.00% | — | 3y ago |
| 2B0x2ba0…8412 | For | 1.1 | 0.00% | — | 3y ago |
| C70xc724…b01d | For | 1 | 0.00% | — | 3y ago |
| 740x74a2…c125 | For | 1 | 0.00% | — | 3y ago |
| 730x7306…c011 | For | 1 | 0.00% | — | 3y ago |
| 0C0x0c9f…408b | For | 1 | 0.00% | — | 3y ago |
| 180x1831…a736 | For | 1 | 0.00% | — | 3y ago |
| 420x4295…8429 | For | 1 | 0.00% | — | 3y ago |
| CE0xceeb…2257 | For | 0.9 | 0.00% | — | 3y ago |
| 510x5183…6216 | For | 0.9 | 0.00% | — | 3y ago |
| 8C0x8ccf…c275 | For | 0.3 | 0.00% | — | 3y ago |
| 480x48ea…b9bb | For | 0.3 | 0.00% | — | 3y ago |
| 2F0x2fa9…d4f3 | For | 0.3 | 0.00% | — | 3y ago |
| DC0xdcaa…600c | For | 0.3 | 0.00% | — | 3y ago |
| B80xb8c4…756d | For | 0.3 | 0.00% | — | 3y ago |
| 350x35a2…6217 | For | 0.3 | 0.00% | — | 3y ago |
| 290x2946…5469 | For | 0.3 | 0.00% | — | 3y ago |
| DF0xdfd3…8380 | For | 0.2 | 0.00% | — | 3y ago |
| 7C0x7c45…6af8 | For | 0.2 | 0.00% | — | 3y ago |
| 450x45cf…a1f4 | For | 0.2 | 0.00% | — | 3y ago |
| EC0xecd0…6d74 | For | 0.2 | 0.00% | — | 3y ago |
| E30xe371…c8bc | For | 0.2 | 0.00% | — | 3y ago |
| 150x1557…a892 | For | 0.2 | 0.00% | — | 3y ago |
| 770x77fc…33f9 | For | 0.2 | 0.00% | — | 3y ago |
| D70xd7b2…4489 | For | 0.2 | 0.00% | — | 3y ago |
| DE0xde1a…a1c3 | For | 0.1 | 0.00% | — | 3y ago |
07Forum
No forum thread is confidently linked to this proposal.
08Similar proposals
- aaveexecutedRescue Mission Phase 1 Short Executor87%
- aaveexecutedRescue Mission Phase 1 Long Executor87%
- aaveexecutedAave <> Starknet - Phase I (Part 2)69%
- aaveexecutedAave <> Starknet - Phase I67%
- aaveexecutedEthereum v2 Collector Contract Consolidation67%
- aaveexecutedAave StarkNet Phase I - Aave <> StarkNet Bridge deployment/activation by Aave governance67%
- aaveexecutedSwap assets to aUSDC62%
- aaveexecutedTreasury Managemet - Acquire wstETH & rETH61%
- aaveexecutedAcquire More aUSDC on Aave Ethereum Collector61%
- lidoexecutedSend 3999999999999997473694078 tokens at 0x5A98FcBEA516Cf06857215779Fd812CA3beF1B32 to 0x4b3edb22952fb4a70140e39fb1add05a6b49622b: transfer to the airdrop distributor contract47%