Multichain Stable Debt Token Upgrades
01Summary
This proposal updates stable debt token implementations across Aave V2 Ethereum and Aave V3 (Arbitrum, Optimism, Avalanche, Polygon) to prevent new minting of stable debt tokens in response to a reported white-hat attack vector.
- Type
- contract upgrade
Key changes
- Update stable debt token implementation on AaveV2Ethereum via updateStableDebtToken()(high)
- Update stable debt token implementation on AaveV3Arbitrum via updateStableDebtToken()(high)
- Update stable debt token implementation on AaveV3Optimism via updateStableDebtToken()(high)
- Update stable debt token implementation on AaveV3Avalanche via updateStableDebtToken()(high)
- Update stable debt token implementation on AaveV3Polygon via updateStableDebtToken()(high)
- Prevent new minting of StableDebt tokens across all affected pools and networks(high)
Notable concerns
- Implementation addresses security vulnerability reported by white-hat
- Proposal follows emergency measures (pausing, freezing, disabling stable borrowing) already taken on affected assets
- Affects all tokens with stable debt across multiple networks and versions
Generated by Kvorum
02Description
Simple Summary
This proposal updates the stable borrow implementations for all tokens that have stable debt across all pools on all networks. The implementation will effectively stop minting new stable debt tokens.
Motivation
In response to an attack vector reported by a white-hat, some immediate steps where taken to protect the Aave Pools by pausing, freezing, and disabling stable borrowing on the affected assets.
Upon further investigation it turned out to be necessary to also prevent new minting of StableDebt.
Specification
On AaveV2Ethereum the proposal will call:
AaveV2Ethereum.POOL_CONFIGURATOR.updateStableDebtToken(underlyingAsset,newSTokenImpl);
On AaveV3Arbitrum, AaveV3Optimism, AaveV3Avalanche, AaveV3Polygon the proposal will call:
POOL_CONFIGURATOR.updateStableDebtToken(input);
The proposal has been tested by BGD Labs and reviewed by Aave Companies and Certora.
References
- Implementation: AaveV2Ethereum, AaveV3Polygon, AaveV3Avalanche, AaveV3Optimism, AaveV3Arbitrum
- Tests: AaveV2Ethereum, AaveV3Polygon, AaveV3Avalanche, AaveV3Optimism, AaveV3Arbitrum
- Stable debt token tests: AaveV2Ethereum, AaveV3Polygon, AaveV3Avalanche, AaveV3Optimism, AaveV3Arbitrum
- Discussion
Copyright
Copyright and related rights waived via CC0.
03Mismatch analysis
The proposal's top-level calldata consists of five calls to the standard Aave cross-chain governance bridge (forwardPayloadForExecution), each targeting a distinct chain ID (1, 137, 43114, 10, 42161) that correspond exactly to the five networks named in the description: Ethereum, Polygon, Avalanche, Optimism, and Arbitrum. Each call forwards a payload identifier and access level to a chain-specific contract address, which is the well-known BGD Labs pattern for executing network-specific governance payloads (the actual `updateStableDebtToken` calls happen inside those forwarded payload contracts, as documented in the referenced implementation and test links for each network). The description's Specification section accurately describes the ultimate on-chain effect on each network, and the number and ordering of calls (one per network) matches the calldata exactly, with no extra chains, missing chains, or altered targets. There are no numeric parameters to compare (no percentages or amounts), so value_mismatch is not applicable. No unexplained extra actions (e.g., fund transfers, role grants) are present. Given the well-documented nature of this cross-chain forwarding mechanism and the clean 1:1 mapping between description and calldata, I assess this proposal as consistent with high confidence.
Generated by Kvorum
04Actions
- Target
- 0x9aee…2bc7
- Value
- 0 wei
- Function
- forwardPayloadForExecution((uint256,uint8,address,uint40))
- Arguments
{ "0": [ "1", "1", "0xdAbad81aF85554E9ae636395611C58F7eC1aAEc5", "5" ] }- Calldata
- Target
- 0x9aee…2bc7
- Value
- 0 wei
- Function
- forwardPayloadForExecution((uint256,uint8,address,uint40))
- Arguments
{ "0": [ "137", "1", "0x401B5D0294E23637c18fcc38b1Bca814CDa2637C", "1" ] }- Calldata
- Target
- 0x9aee…2bc7
- Value
- 0 wei
- Function
- forwardPayloadForExecution((uint256,uint8,address,uint40))
- Arguments
{ "0": [ "43114", "1", "0x1140CB7CAfAcC745771C2Ea31e7B5C653c5d0B80", "1" ] }- Calldata
- Target
- 0x9aee…2bc7
- Value
- 0 wei
- Function
- forwardPayloadForExecution((uint256,uint8,address,uint40))
- Arguments
{ "0": [ "10", "1", "0x0E1a3Af1f9cC76A62eD31eDedca291E63632e7c4", "1" ] }- Calldata
- Target
- 0x9aee…2bc7
- Value
- 0 wei
- Function
- forwardPayloadForExecution((uint256,uint8,address,uint40))
- Arguments
{ "0": [ "42161", "1", "0x89644CA1bB8064760312AE4F03ea41b05dA3637C", "1" ] }- Calldata
05Tally
Summed from votes
06Voters
No votes recorded yet.
07Forum
No forum thread is confidently linked to this proposal.
08Similar proposals
- aaveexecutedV2 Stable Debt Offboarding78%
- aaveexecutedUpgrade all Aave instances to 3.278%
- aaveexecutedAave Pool update76%
- aaveexecutedAave V2 deprecation76%
- aavecanceledUpgrade Aave V3 pools to Aave V3.0.275%
- aaveexecutedUpgrade Aave V3 pools to Aave V3.0.275%
- aaveexecutedUpgrade Aave instances to v3.574%
- aaveexecuted3.2 patch for legacy periphery74%
- aaveexecutedUpgrade Aave instances to v3.6 Part 373%
- aaveexecutedUpgrade Aave instances to v3.7 Part 273%