Skip to content

Commit 311a59f

Browse files
authored
feat: Update aToken versions (#43)
* feat: aToken instance + deploy scripts * feat: env clean up * chore: lint * feat: modularize impl deployments; utilize AaveV3TokensProcedure * chore: lint
1 parent 2e176d9 commit 311a59f

7 files changed

Lines changed: 79 additions & 43 deletions

File tree

.env.example

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# Required for all deployments
2-
CHAIN=
3-
ACCOUNT= # Account name from encrypted keystore, see https://getfoundry.sh/cast/reference/cast-wallet-import/
2+
chain= # e.g. mainnet
3+
account= # Account name from encrypted keystore, see https://getfoundry.sh/cast/reference/cast-wallet-import/
4+
dry=true # leave blank to broadcast
45

56
# Required for all operations
67
# Should be replaced with dedicated RPC endpoints

Makefile

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -43,19 +43,19 @@ git-diff :
4343

4444
# Deploy
4545
deploy-libs-one :;
46-
FOUNDRY_PROFILE=${CHAIN} forge script scripts/misc/LibraryPreCompileOne.sol \
47-
--rpc-url ${CHAIN} --account ${ACCOUNT} --slow --broadcast --gas-estimate-multiplier 150 \
48-
--verify --chain ${CHAIN}
46+
FOUNDRY_PROFILE=${chain} forge script scripts/misc/LibraryPreCompileOne.sol \
47+
--rpc-url ${chain} --account ${account} --slow --broadcast --gas-estimate-multiplier 150 \
48+
--verify --chain ${chain}
4949
deploy-libs-two :;
50-
FOUNDRY_PROFILE=${CHAIN} forge script scripts/misc/LibraryPreCompileTwo.sol \
51-
--rpc-url ${CHAIN} --account ${ACCOUNT} --slow --broadcast --gas-estimate-multiplier 150 \
52-
--verify --chain ${CHAIN}
50+
FOUNDRY_PROFILE=${chain} forge script scripts/misc/LibraryPreCompileTwo.sol \
51+
--rpc-url ${chain} --account ${account} --slow --broadcast --gas-estimate-multiplier 150 \
52+
--verify --chain ${chain}
5353

5454
# STEP 1: Deploy scaled price adapters. `make deploy-scaled-price-adapter source=<PRICE_FEED_ADDRESS>`
5555
deploy-scaled-price-adapter :;
56-
FOUNDRY_PROFILE=${CHAIN} forge script scripts/misc/DeployScaledPriceAdapter.sol:DeployScaledPriceAdapter \
57-
--rpc-url ${CHAIN} --account ${ACCOUNT} --slow --broadcast --gas-estimate-multiplier 150 \
58-
--verify --chain ${CHAIN} --verifier-url ${VERIFIER_URL} \
56+
FOUNDRY_PROFILE=${chain} forge script scripts/misc/DeployScaledPriceAdapter.sol:DeployScaledPriceAdapter \
57+
--rpc-url ${chain} --account ${account} --slow --broadcast --gas-estimate-multiplier 150 \
58+
--verify --chain ${chain} --verifier-url ${verifier_url} \
5959
--sig "run(address)" ${source}
6060

6161
# STEP 2: Deploy Libraries
@@ -65,33 +65,39 @@ deploy-libs :
6565

6666
# STEP 3: Deploy Pool Contracts once libraries are deployed and updated on .env
6767
deploy-v3-batched-broadcast :;
68-
FOUNDRY_PROFILE=${CHAIN} forge script scripts/DeployAaveV3MarketBatched.sol:Default \
69-
--rpc-url ${CHAIN} --sender $$(cast wallet address --account ${ACCOUNT}) --account ${ACCOUNT} --slow --broadcast --gas-estimate-multiplier 150 \
70-
--verify --chain ${CHAIN} --verifier-url ${VERIFIER_URL} -vvvv
68+
FOUNDRY_PROFILE=${chain} forge script scripts/DeployAaveV3MarketBatched.sol:Default \
69+
--rpc-url ${chain} --sender $$(cast wallet address --account ${account}) --account ${account} --slow --broadcast --gas-estimate-multiplier 150 \
70+
--verify --chain ${chain} --verifier-url ${verifier_url} -vvvv
7171

7272
# STEP 4: Deploys payload to list phase one assets. `make deploy-phase-one-payload reportPath=<PATH_TO_REPORT>`
7373
deploy-phase-one-payload :;
74-
FOUNDRY_PROFILE=${CHAIN} forge script scripts/misc/DeployHorizonPhaseOnePayload.sol:DeployHorizonPhaseOnePayload \
75-
--rpc-url ${CHAIN} --account ${ACCOUNT} --slow --broadcast --gas-estimate-multiplier 150 \
76-
--verify --chain ${CHAIN} --verifier-url ${VERIFIER_URL} \
74+
FOUNDRY_PROFILE=${chain} forge script scripts/misc/DeployHorizonPhaseOnePayload.sol:DeployHorizonPhaseOnePayload \
75+
--rpc-url ${chain} --account ${account} --slow --broadcast --gas-estimate-multiplier 150 \
76+
--verify --chain ${chain} --verifier-url ${verifier_url} \
7777
--sig "run(string)" ${reportPath}
7878

7979
# STEP 5: Deploys payload to update phase one assets. `make deploy-phase-one-update-payload`
8080
deploy-phase-one-update-payload :;
81-
FOUNDRY_PROFILE=${CHAIN} forge script scripts/misc/DeployHorizonPhaseOneUpdatePayload.sol:DeployHorizonPhaseOneUpdatePayload \
82-
--rpc-url ${CHAIN} --account ${ACCOUNT} --slow --gas-estimate-multiplier 150 \
83-
--chain ${CHAIN} --verifier etherscan \
81+
FOUNDRY_PROFILE=${chain} forge script scripts/misc/DeployHorizonPhaseOneUpdatePayload.sol:DeployHorizonPhaseOneUpdatePayload \
82+
--rpc-url ${chain} --account ${account} --slow --gas-estimate-multiplier 150 \
83+
--chain ${chain} --verifier etherscan \
8484
--sig "run()" \
8585
--verify --broadcast
8686

87-
# Deploy liquidation data provider. `make deploy-liquidation-data-provider CHAIN=mainnet ACCOUNT=<account>`
87+
# Deploy liquidation data provider. `make deploy-liquidation-data-provider chain=mainnet account=<account>`
8888
deploy-liquidation-data-provider :;
89-
FOUNDRY_PROFILE=${CHAIN} forge script scripts/misc/DeployLiquidationDataProvider.sol:DeployLiquidationDataProvider \
90-
--rpc-url ${CHAIN} --account ${ACCOUNT} --slow --gas-estimate-multiplier 150 \
91-
--chain ${CHAIN} --verifier-url ${VERIFIER_URL} \
89+
FOUNDRY_PROFILE=${chain} forge script scripts/misc/DeployLiquidationDataProvider.sol:DeployLiquidationDataProvider \
90+
--rpc-url ${chain} --account ${account} --slow --gas-estimate-multiplier 150 \
91+
--chain ${chain} --verifier-url ${verifier_url} \
9292
--sig "run(address,address)" ${pool} ${addressesProvider} \
9393
--verify --broadcast
9494

95+
# Deploy AToken implementations. `make deploy-atoken-impls chain=mainnet account=<account>`
96+
deploy-atoken-impls :;
97+
FOUNDRY_PROFILE=${chain} forge script scripts/misc/DeployATokenImplementations.sol:DeployATokenImplementations \
98+
--rpc-url ${chain} --account ${account} --slow $(if $(dry),,--broadcast --verify) --gas-estimate-multiplier 150 \
99+
--chain ${chain} --verifier-url ${verifier_url}
100+
95101
# Invariants
96102
echidna:
97103
echidna tests/invariants/Tester.t.sol --contract Tester --config ./tests/invariants/_config/echidna_config.yaml --corpus-dir ./tests/invariants/_corpus/echidna/default/_data/corpus

foundry.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ scroll = { key = "${ETHERSCAN_API_KEY}", chainId = 534352 }
5555
celo = { key = "${ETHERSCAN_API_KEY}", chainId = 42220 }
5656
bnb = { key = "${ETHERSCAN_API_KEY}", chainId = 56 }
5757
gnosis = { key = "${ETHERSCAN_API_KEY}", chainId = 100 }
58-
base = { key = "${ETHERSCAN_API_KEY}", chain = 8453 }
58+
base = { key = "${ETHERSCAN_API_KEY}", chainId = 8453 }
5959
metis = { key = "", chainId = 1088, url = 'https://api.routescan.io/v2/network/mainnet/evm/1088/etherscan/api' }
6060
linea = { key = "${ETHERSCAN_API_KEY}", chainId = 59144 }
6161
sepolia = { key = "${ETHERSCAN_API_KEY}", chainId = 11155111 }
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// SPDX-License-Identifier: BUSL-1.1
2+
pragma solidity ^0.8.0;
3+
4+
import {AaveV3TokensProcedure} from '../../src/deployments/contracts/procedures/AaveV3TokensProcedure.sol';
5+
import {ATokenInstance} from '../../src/contracts/instances/ATokenInstance.sol';
6+
import {RwaATokenInstance} from '../../src/contracts/instances/RwaATokenInstance.sol';
7+
import {AaveV3HorizonEthereum} from '../../tests/horizon/utils/AaveV3HorizonEthereum.sol';
8+
import {IPool} from '../../src/contracts/interfaces/IPool.sol';
9+
import {Script} from 'forge-std/Script.sol';
10+
11+
contract DeployATokenImplementations is Script, AaveV3TokensProcedure {
12+
function run() public returns (address, address) {
13+
vm.startBroadcast();
14+
(address aToken, address rwaAToken) = _deployAaveV3ATokensImplementations(
15+
AaveV3HorizonEthereum.POOL
16+
);
17+
vm.stopBroadcast();
18+
return (aToken, rwaAToken);
19+
}
20+
}

src/contracts/instances/ATokenInstance.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ pragma solidity ^0.8.0;
44
import {AToken, IPool, IAaveIncentivesController, IInitializableAToken, Errors, VersionedInitializable} from '../protocol/tokenization/AToken.sol';
55

66
contract ATokenInstance is AToken {
7-
uint256 public constant ATOKEN_REVISION = 2;
7+
uint256 public constant ATOKEN_REVISION = 3;
88

99
constructor(IPool pool) AToken(pool) {}
1010

src/contracts/instances/RwaATokenInstance.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import {RwaAToken} from '../protocol/tokenization/RwaAToken.sol';
55
import {IPool, IAaveIncentivesController, IInitializableAToken, Errors, VersionedInitializable} from '../protocol/tokenization/AToken.sol';
66

77
contract RwaATokenInstance is RwaAToken {
8-
uint256 public constant ATOKEN_REVISION = 2;
8+
uint256 public constant ATOKEN_REVISION = 3;
99

1010
constructor(IPool pool) RwaAToken(pool) {}
1111

src/deployments/contracts/procedures/AaveV3TokensProcedure.sol

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,32 @@ contract AaveV3TokensProcedure {
2020
TokensReport memory tokensReport;
2121
bytes memory empty;
2222

23+
VariableDebtTokenInstance variableDebtToken = new VariableDebtTokenInstance(IPool(poolProxy));
24+
25+
variableDebtToken.initialize(
26+
IPool(poolProxy), // initializingPool
27+
address(0), // underlyingAsset
28+
IAaveIncentivesController(address(0)), // incentivesController
29+
0, // debtTokenDecimals
30+
'VARIABLE_DEBT_TOKEN_IMPL', // debtTokenName
31+
'VARIABLE_DEBT_TOKEN_IMPL', // debtTokenSymbol
32+
empty // params
33+
);
34+
35+
(tokensReport.aToken, tokensReport.rwaAToken) = _deployAaveV3ATokensImplementations(poolProxy);
36+
tokensReport.variableDebtToken = address(variableDebtToken);
37+
38+
return tokensReport;
39+
}
40+
41+
/// @return aToken impl address
42+
/// @return rwaAToken impl address
43+
function _deployAaveV3ATokensImplementations(
44+
address poolProxy
45+
) internal returns (address, address) {
46+
bytes memory empty;
2347
ATokenInstance aToken = new ATokenInstance(IPool(poolProxy));
2448
RwaATokenInstance rwaAToken = new RwaATokenInstance(IPool(poolProxy));
25-
VariableDebtTokenInstance variableDebtToken = new VariableDebtTokenInstance(IPool(poolProxy));
2649

2750
aToken.initialize(
2851
IPool(poolProxy), // pool proxy
@@ -46,20 +69,6 @@ contract AaveV3TokensProcedure {
4669
empty // params
4770
);
4871

49-
variableDebtToken.initialize(
50-
IPool(poolProxy), // initializingPool
51-
address(0), // underlyingAsset
52-
IAaveIncentivesController(address(0)), // incentivesController
53-
0, // debtTokenDecimals
54-
'VARIABLE_DEBT_TOKEN_IMPL', // debtTokenName
55-
'VARIABLE_DEBT_TOKEN_IMPL', // debtTokenSymbol
56-
empty // params
57-
);
58-
59-
tokensReport.aToken = address(aToken);
60-
tokensReport.rwaAToken = address(rwaAToken);
61-
tokensReport.variableDebtToken = address(variableDebtToken);
62-
63-
return tokensReport;
72+
return (address(aToken), address(rwaAToken));
6473
}
6574
}

0 commit comments

Comments
 (0)