This document outlines the technical process for upgrading the Aave V3 protocol from version 3.6 to version 3.7 across various networks.
The upgrade is executed via a single UpgradePayload contract deployed on each network.
- New implementations: New implementations for the
PoolandPoolConfiguratorcontracts are deployed, incorporating v3.7 features and optimizations. - Upgrade payload:
UpgradePayloadcontains the sequenced steps to orchestrate the upgrade on all networks. - Deployment scripts: A single Forge script (
Deploy.s.sol) per chain deterministically deploys the new implementation contracts, the upgrade payload, theAaveV3ConfigEngine, and a newUiPoolDataProviderV3.
Before upgrading the implementations, the payload cleans up reserve configuration flags and settings that are removed in v3.7. For each reserve:
- Reset debtCeiling: If a reserve has a non-zero debt ceiling, it is set to zero via
setDebtCeiling(reserve, 0). This also resetsisolationModeTotalDebtto zero. - Disable borrowableInIsolation: If a reserve has
borrowableInIsolationenabled, it is set to false viasetBorrowableInIsolation(reserve, false).
Additionally, if a sequencer uptime price oracle sentinel is configured, it is unset via setPriceOracleSentinel(address(0)), as this feature is removed in v3.7.
These cleanup steps use the v3.6 interfaces to interact with the pre-upgrade contracts.
After the cleanup, the payload upgrades the core protocol contracts:
- Upgrade Pool implementation: The
Poolcontract proxy is updated to point to the new v3.7 implementation viaPOOL_ADDRESSES_PROVIDER.setPoolImpl(POOL_IMPL). - Upgrade PoolConfigurator implementation: The
PoolConfiguratorcontract proxy is updated to the new v3.7 implementation viaPOOL_ADDRESSES_PROVIDER.setPoolConfiguratorImpl(POOL_CONFIGURATOR_IMPL).