Addresses Provider

The smart contracts in Aave Protocol are upgradeable through governance. The protocol keeps a global register of the latest addresses deployed on a particular network (i.e. Mainnet, Kovan, Ropsten).

Whenever the LendingPool contract is needed, we recommended you fetch the correct address from the LendingPoolAddressesProvider smart contract, show in the example below.

The source code of the LendingPoolAddressProvider can be found here.

If you need development support, join the #developers channel on our Aave community Discord server.

LendingPoolAddressesProvider

Global addresses register of the protocol. This contract is immutable and the address will never change. This contract must be used to fetch the address of the latest implementation of the LendingPool contract.

The following addresses can be added / modified:

For all of the above values, relevant events will be emitted when the values are created or modified. If you have access to your own Ethereum node with an archive state, you will be able to extract the history of all emitted events (i.e. address changes).

Alternatively, you can use a service such as Etherscan to view all of the contract's emitted events.

The current owner of the LendingPoolAddressProvider contract is our internal multisig wallet. In the future, ownership will be transferred to a DAO that is governed by LEND token holders.

An example to fetch the latest LendingPool address is below:

Solidity
Web3.js
Solidity
/// Retrieve LendingPool address
LendingPoolAddressesProvider provider = LendingPoolAddressesProvider(address(0x24a42fD28C976A61Df5D00D0599C34c4f90748c8)); // mainnet address, for other addresses: https://docs.aave.com/developers/deployed-contracts/deployed-contract-instances
LendingPool lendingPool = LendingPool(provider.getLendingPool());
Web3.js
// Import the ABIs, see: https://docs.aave.com/developers/developing-on-aave/deployed-contract-instances
import LendingPoolAddressesProviderABI from "./LendingPoolAddressesProvider.json"
import LendingPoolABI from "./LendingPool.json"
// Retrieve the LendingPool address
const lpAddressProviderAddress = '0x24a42fD28C976A61Df5D00D0599C34c4f90748c8' // mainnet address, for other addresses: https://docs.aave.com/developers/developing-on-aave/deployed-contract-instances
const lpAddressProviderContract = new web3.eth.Contract(LendingPoolAddressesProviderABI, lpAddressProviderAddress)
// Get the latest LendingPool contract address
const lpAddress = await lpAddressProviderContract.methods
.getLendingPool()
.call()
.catch((e) => {
throw Error(`Error getting lendingPool address: ${e.message}`)
})