Approve & Deposit

Aave LendingPool contract is the main contract of the protocol. It exposes all the user-oriented actions that can be invoked using either Solidity or web3 libraries.

  • LendingPool contracts are upgradable. This means that their addresses may change in the future.

  • To prevent third party DApps from falling behind, Aave provides a LendingPoolAddressesProvider contract that will never be upgraded.

  • This is used to retrieve the latest LendingPool. As soon as we have the latest LendingPool, we can start depositing.

To interact with ILendingPoolAddressesProvider contract, we will need its address and ABI.

ILendingPoolAddressesProvider

ABI

To obtain the ABI, we will use an interface.

Since we only require a select few functions: deposit, withdraw and so forth, we can create our own interface.

  • create ILendingPoolAddressesProvider.sol in interfaces folder.

  • either create your own interface by defining the functions (refer to etherscan or github)

  • or, just copy aave's interfaces

Address

Addresses Provider -> Deployed Contracts Section

Add these to brownie-config.yaml

Lending Pool

ABI -> interface

Original:

Modified:

compile after, to check if interfaces are correct.

Address

We will get the address by calling getLendingPool() from the ILendingPoolAddressesProvider

Code thus far

Approve

Before we can deposit we must approve Aave's contract to use our WETH tokens. This is done with the approve function.

ERC20.sol

Because DApps (decentralized applications) use smart contracts to execute transactions, you must give permission for the smart contract to transfer up to a certain amount of your token (allowance).

To reiterate, transacting with ERC-20 tokens is a 2-step process:

  1. Approval of token allowance

  2. Submission of transaction

approve_erc20()

In a generic implementation, we would create IERC20.sol in our interfaces folder, and pass the ERC20 token contract into the interface as above. Subsequently, we call on the token contract to approve setting our allowance for another 3rd party contract (via erc20.approve).

Added to main():

  • approve_erc20(deposit_amount, lending_pool.address, deposit_token, account)

  • deposit_amount as global variable

since we are always runnning on mainnet-fork, set default = mainnet-fork in brownie-config.yaml, under the networks section.

Deposit

We will the below to main():

Last updated