Skip to content
Merged
Show file tree
Hide file tree
Changes from 36 commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
290d92a
feat: Add RwaAToken implementation to restrict aToken transfers (#1)
avniculae May 15, 2025
2d079e6
feat: Restrict supply onBehalfOf in RwaAToken
yan-man May 15, 2025
0f5aa34
feat: Block RwaAToken::mintToTreasury and RwaAToken::transferUnderlyi…
yan-man May 16, 2025
f383426
feat: Add RWA aToken Manager (#2)
avniculae May 16, 2025
1efa031
RWA Instance Documentation (#7)
yan-man May 20, 2025
18f0aa9
Merge branch 'main' into feat/update-from-upstream
avniculae May 21, 2025
28503b3
Merge pull request #10 from aave/feat/update-from-upstream
avniculae May 22, 2025
b53ac1c
feat: RWA deployment scripts
avniculae May 23, 2025
a85a78c
test: Add RWA Tests (#8)
avniculae May 27, 2025
871d15e
fix: Address Certora Review comments (#12)
avniculae May 29, 2025
e4b8cab
Merge branch 'feat/rwa-instance' into feat/rwa-deployment-scripts
avniculae May 29, 2025
6a64ba6
feat: Add Certora formal verification for RwaAToken (#18)
miguelmtzinf Jun 10, 2025
dcdba65
fix: cleanup
avniculae Jun 12, 2025
9c08abf
Merge branch 'feat/rwa-instance' into feat/rwa-deployment-scripts
avniculae Jun 12, 2025
404a520
Merge branch 'main' into feat/rwa-deployment-scripts
yan-man Jul 7, 2025
4f11a3b
feat: init updated scripts, fork tests
yan-man Jul 9, 2025
4da30a4
feat: initial horizon deployment scripts
avniculae Jul 14, 2025
01da30f
fix: lint
avniculae Jul 14, 2025
83b9c03
fix: small fixes
avniculae Jul 14, 2025
50305a7
feat: refactor tests
avniculae Jul 14, 2025
4f5e6e9
fix: add rwaATokenManager to the MarketReport
avniculae Jul 14, 2025
c79fca7
feat: add additional roles at deployment time
avniculae Jul 15, 2025
6cc1bdd
feat: refactor horizon deployment tests
avniculae Jul 16, 2025
3176182
fix: add Executor support for listings
avniculae Jul 16, 2025
0751ee6
Merge branch 'main' into feat/horizon-rwa-deployment
avniculae Jul 17, 2025
c6aef32
feat: adjust scripts (executor owned by adv multisig)
avniculae Jul 18, 2025
3fc22e3
Merge branch 'main' into feat/horizon-rwa-deployment
avniculae Jul 18, 2025
298d24a
feat: deploy price adapters
avniculae Jul 18, 2025
13411a5
fix: tests
avniculae Jul 18, 2025
d12f2ac
chore: update makefile
avniculae Jul 18, 2025
279728d
feat: use price adapters
avniculae Jul 18, 2025
72fc923
chore: remove old config files
avniculae Jul 18, 2025
951366d
feat: use setPoolPause
avniculae Jul 18, 2025
1ea92ec
fix: small adjustments
avniculae Jul 18, 2025
7762f1f
feat: small test refactor
avniculae Jul 21, 2025
3fd4453
fix: token names
avniculae Jul 22, 2025
6ec650c
fix: comments
avniculae Aug 6, 2025
3a3ca21
fix: comments
avniculae Aug 6, 2025
dda4f7b
fix: cicd
avniculae Aug 6, 2025
5a3c77a
fix: adjust existing risk params
avniculae Aug 7, 2025
d50e862
feat: add JTRSY & JAAA
avniculae Aug 7, 2025
2a6b200
fix: update to new addresses
avniculae Aug 8, 2025
91e94c9
feat: emode collateralization tests
avniculae Aug 8, 2025
bfceecf
fix: update to latest risk params
avniculae Aug 8, 2025
e429410
fix: skip pr comments
avniculae Aug 8, 2025
df6dfda
feat: add additional roles
avniculae Aug 11, 2025
eb52ad2
feat: atoken admin permission to rwa atoken manager
avniculae Aug 11, 2025
aa61964
feat: initial deposits
avniculae Aug 11, 2025
fb462f8
fix: comments
avniculae Aug 12, 2025
edaf3ad
fix: small fix
avniculae Aug 12, 2025
7aa315c
fix: cleanup
avniculae Aug 12, 2025
419d0d9
fix: comments
avniculae Aug 12, 2025
b668904
feat: update rwa caps
avniculae Aug 12, 2025
82c464a
fix: add gho to stablecoin emodes
avniculae Aug 12, 2025
925e1b3
fix: comment
avniculae Aug 13, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 16 additions & 36 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,44 +1,24 @@
# Broadcast user address
SENDER=
# Required for all deployments
CHAIN=
ACCOUNT= # Account name from encrypted keystore, see https://getfoundry.sh/cast/reference/cast-wallet-import/

# Deployment via ledger
MNEMONIC_INDEX=
LEDGER_SENDER=

# Deployment via private key
PRIVATE_KEY=

# Test rpc_endpoints
# Required for all operations
# Should be replaced with dedicated RPC endpoints
RPC_MAINNET=https://eth.llamarpc.com
RPC_AVALANCHE=https://api.avax.network/ext/bc/C/rpc
RPC_OPTIMISM=https://optimism.llamarpc.com
RPC_AVALANCHE=https://api.avax.network/ext/bc/C/rpc
RPC_POLYGON=https://polygon.llamarpc.com
RPC_ARBITRUM=https://arbitrum.llamarpc.com
RPC_FANTOM=https://rpc.ftm.tools
RPC_HARMONY=https://api.harmony.one
RPC_METIS=https://andromeda.metis.io/?owner=1088
RPC_BASE=https://base.llamarpc.com
RPC_ZKEVM=https://zkevm-rpc.com
RPC_GNOSIS=https://rpc.ankr.com/gnosis
RPC_BNB=https://binance.llamarpc.com
RPC_SCROLL=https://rpc.scroll.io
RPC_AMOY="https://rpc-amoy.polygon.technology"

# Etherscan api keys for verification & download utils
ETHERSCAN_API_KEY_MAINNET=
ETHERSCAN_API_KEY_POLYGON=
ETHERSCAN_API_KEY_AVALANCHE=
ETHERSCAN_API_KEY_FANTOM=
ETHERSCAN_API_KEY_OPTIMISM=
ETHERSCAN_API_KEY_ARBITRUM=
ETHERSCAN_API_KEY_BASE=
ETHERSCAN_API_KEY_ZKEVM=
ETHERSCAN_API_KEY_GNOSIS=
ETHERSCAN_API_KEY_BNB=
ETHERSCAN_API_KEY_SCROLL=
ETHERSCAN_API_KEY_CELO=
RPC_CELO=https://rpc.ankr.com/celo
RPC_BNB=https://binance.llamarpc.com
RPC_GNOSIS=https://rpc.ankr.com/gnosis
RPC_BASE=https://base.llamarpc.com
RPC_METIS=https://andromeda.metis.io/?owner=1088
RPC_LINEA=https://linea.drpc.org
RPC_SEPOLIA=https://ethereum-sepolia-rpc.publicnode.com

# Simulation/fork creation
TENDERLY_ACCESS_TOKEN=
TENDERLY_ACCOUNT=
TENDERLY_PROJECT=
# Required for all operations. Uses etherscan v2.
ETHERSCAN_API_KEY=
VERIFIER_URL=https://api.etherscan.io/api
38 changes: 30 additions & 8 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -43,16 +43,38 @@ git-diff :

# Deploy
deploy-libs-one :;
FOUNDRY_PROFILE=${chain} forge script scripts/misc/LibraryPreCompileOne.sol --rpc-url ${chain} --ledger --mnemonic-indexes ${MNEMONIC_INDEX} --sender ${LEDGER_SENDER} --slow --broadcast
FOUNDRY_PROFILE=${CHAIN} forge script scripts/misc/LibraryPreCompileOne.sol \
--rpc-url ${CHAIN} --account ${ACCOUNT} --slow --broadcast --gas-estimate-multiplier 150 \
--verify --chain ${CHAIN}
deploy-libs-two :;
FOUNDRY_PROFILE=${chain} forge script scripts/misc/LibraryPreCompileTwo.sol --rpc-url ${chain} --ledger --mnemonic-indexes ${MNEMONIC_INDEX} --sender ${LEDGER_SENDER} --slow --broadcast

FOUNDRY_PROFILE=${CHAIN} forge script scripts/misc/LibraryPreCompileTwo.sol \
--rpc-url ${CHAIN} --account ${ACCOUNT} --slow --broadcast --gas-estimate-multiplier 150 \
--verify --chain ${CHAIN}

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

# STEP 2: Deploy Libraries
deploy-libs :
make deploy-libs-one chain=${chain}
npx catapulta-verify -b broadcast/LibraryPreCompileOne.sol/${chainId}/run-latest.json
make deploy-libs-two chain=${chain}
npx catapulta-verify -b broadcast/LibraryPreCompileTwo.sol/${chainId}/run-latest.json

make deploy-libs-one
make deploy-libs-two

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

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

# Invariants
echidna:
Expand Down
43 changes: 19 additions & 24 deletions foundry.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,15 @@ optimizer_runs = 200
solc = '0.8.22'
evm_version = 'shanghai'
bytecode_hash = 'none'
ignored_warnings_from = ["src/periphery/contracts/treasury/RevenueSplitter.sol"]
ignored_warnings_from = [
"src/contracts/treasury/RevenueSplitter.sol",
"src/contracts/dependencies/openzeppelin/ReentrancyGuard.sol",
]
out = 'out'
libs = ['lib']
remappings = []
fs_permissions = [
{ access = "write", path = "./reports" },
{ access = "read-write", path = "./reports" },
{ access = "read", path = "./out" },
{ access = "read", path = "./config" },
]
Expand All @@ -34,33 +37,25 @@ arbitrum = "${RPC_ARBITRUM}"
fantom = "${RPC_FANTOM}"
scroll = "${RPC_SCROLL}"
celo = "${RPC_CELO}"
fantom_testnet = "${RPC_FANTOM_TESTNET}"
harmony = "${RPC_HARMONY}"
sepolia = "${RPC_SEPOLIA}"
mumbai = "${RPC_MUMBAI}"
amoy = "${RPC_AMOY}"
bnb_testnet = "${RPC_BNB_TESTNET}"
bnb = "${RPC_BNB}"
gnosis = "${RPC_GNOSIS}"
base = "${RPC_BASE}"
metis = "${RPC_METIS}"
linea = "${RPC_LINEA}"
sepolia = "${RPC_SEPOLIA}"

[etherscan]
mainnet = { key = "${ETHERSCAN_API_KEY_MAINNET}", chainId = 1 }
optimism = { key = "${ETHERSCAN_API_KEY_OPTIMISM}", chainId = 10 }
avalanche = { key = "${ETHERSCAN_API_KEY_AVALANCHE}", chainId = 43114 }
polygon = { key = "${ETHERSCAN_API_KEY_POLYGON}", chainId = 137 }
arbitrum = { key = "${ETHERSCAN_API_KEY_ARBITRUM}", chainId = 42161 }
# fantom = { key = "${ETHERSCAN_API_KEY_FANTOM}", chainId = 250 }
scroll = { key = "${ETHERSCAN_API_KEY_SCROLL}", chainId = 534352, url = 'https://api.scrollscan.com/api\?' }
# celo = { key = "${ETHERSCAN_API_KEY_CELO}", chainId = 42220 }
# sepolia = { key = "${ETHERSCAN_API_KEY_MAINNET}", chainId = 11155111 }
# mumbai = { key = "${ETHERSCAN_API_KEY_POLYGON}", chainId = 80001 }
# amoy = { key = "${ETHERSCAN_API_KEY_POLYGON}", chainId = 80002 }
# bnb_testnet = { key = "${ETHERSCAN_API_KEY_BNB}", chainId = 97, url = 'https://api-testnet.bscscan.com/api' }
bnb = { key = "${ETHERSCAN_API_KEY_BNB}", chainId = 56, url = 'https://api.bscscan.com/api' }
base = { key = "${ETHERSCAN_API_KEY_BASE}", chain = 8453 }
gnosis = { key = "${ETHERSCAN_API_KEY_GNOSIS}", chainId = 100 }
mainnet = { key = "${ETHERSCAN_API_KEY}", chainId = 1 }
optimism = { key = "${ETHERSCAN_API_KEY}", chainId = 10 }
avalanche = { key = "${ETHERSCAN_API_KEY}", chainId = 43114 }
polygon = { key = "${ETHERSCAN_API_KEY}", chainId = 137 }
arbitrum = { key = "${ETHERSCAN_API_KEY}", chainId = 42161 }
fantom = { key = "${ETHERSCAN_API_KEY}", chainId = 250 }
scroll = { key = "${ETHERSCAN_API_KEY}", chainId = 534352 }
celo = { key = "${ETHERSCAN_API_KEY}", chainId = 42220 }
bnb = { key = "${ETHERSCAN_API_KEY}", chainId = 56 }
gnosis = { key = "${ETHERSCAN_API_KEY}", chainId = 100 }
base = { key = "${ETHERSCAN_API_KEY}", chain = 8453 }
metis = { key = "", chainId = 1088, url = 'https://api.routescan.io/v2/network/mainnet/evm/1088/etherscan/api' }
# See more config options https://github.com/gakonst/foundry/tree/master/config
linea = { key = "${ETHERSCAN_API_KEY}", chainId = 59144 }
sepolia = { key = "${ETHERSCAN_API_KEY}", chainId = 11155111 }
4 changes: 2 additions & 2 deletions scripts/DeployAaveV3MarketBatched.sol
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@ pragma solidity ^0.8.0;

import {DeployAaveV3MarketBatchedBase} from './misc/DeployAaveV3MarketBatchedBase.sol';

import {DefaultMarketInput} from '../src/deployments/inputs/DefaultMarketInput.sol';
import {HorizonInput} from '../src/deployments/inputs/HorizonInput.sol';

contract Default is DeployAaveV3MarketBatchedBase, DefaultMarketInput {}
contract Default is DeployAaveV3MarketBatchedBase, HorizonInput {}
4 changes: 2 additions & 2 deletions scripts/misc/DeployAaveV3MarketBatchedBase.sol
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import {MarketInput} from '../../src/deployments/inputs/MarketInput.sol';
abstract contract DeployAaveV3MarketBatchedBase is DeployUtils, MarketInput, Script {
using stdJson for string;

function run() external {
function run() public returns (string memory reportFilePath) {
Roles memory roles;
MarketConfig memory config;
DeployFlags memory flags;
Expand All @@ -35,7 +35,7 @@ abstract contract DeployAaveV3MarketBatchedBase is DeployUtils, MarketInput, Scr
IMetadataReporter metadataReporter = IMetadataReporter(
_deployFromArtifacts('MetadataReporter.sol:MetadataReporter')
);
metadataReporter.writeJsonReportMarket(report);
return metadataReporter.writeJsonReportMarket(report);
}

function _loadWarnings(MarketConfig memory config, DeployFlags memory flags) internal pure {
Expand Down
24 changes: 24 additions & 0 deletions scripts/misc/DeployHorizonPhaseOnePayload.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.0;

import {MarketReport} from '../../src/deployments/interfaces/IMarketReportTypes.sol';
import {HorizonPhaseOneListing} from '../../src/deployments/inputs/HorizonPhaseOneListing.sol';
import {IMetadataReporter} from '../../src/deployments/interfaces/IMetadataReporter.sol';
import {DeployUtils} from '../../src/deployments/contracts/utilities/DeployUtils.sol';
import {HorizonInput} from '../../src/deployments/inputs/HorizonInput.sol';
import {Script} from 'forge-std/Script.sol';

contract DeployHorizonPhaseOnePayload is Script, DeployUtils, HorizonInput {
function run(string memory reportPath) public returns (address) {
IMetadataReporter metadataReporter = IMetadataReporter(
_deployFromArtifacts('MetadataReporter.sol:MetadataReporter')
);
MarketReport memory report = metadataReporter.parseMarketReport(reportPath);

vm.startBroadcast();
HorizonPhaseOneListing horizonInitialListing = new HorizonPhaseOneListing(report);
vm.stopBroadcast();

return address(horizonInitialListing);
}
}
14 changes: 14 additions & 0 deletions scripts/misc/DeployScaledPriceAdapter.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.0;

import {ScaledPriceAdapter} from '../../src/contracts/extensions/price-adapters/ScaledPriceAdapter.sol';
import {Script} from 'forge-std/Script.sol';

contract DeployScaledPriceAdapter is Script {
function run(address source) public returns (address) {
vm.startBroadcast();
ScaledPriceAdapter scaledPriceAdapter = new ScaledPriceAdapter(source);
vm.stopBroadcast();
return address(scaledPriceAdapter);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
pragma solidity ^0.8.0;

import '../../interfaces/IMarketReportTypes.sol';
import {RwaATokenManager} from '../../../contracts/misc/RwaATokenManager.sol';
import {PriceOracleSentinel, ISequencerOracle} from '../../../contracts/misc/PriceOracleSentinel.sol';
import {DefaultReserveInterestRateStrategyV2} from '../../../contracts/misc/DefaultReserveInterestRateStrategyV2.sol';
import {IErrors} from '../../interfaces/IErrors.sol';
Expand All @@ -11,7 +12,8 @@ contract AaveV3MiscProcedure is IErrors {
bool l2Flag,
address poolAddressesProvider,
address sequencerUptimeOracle,
uint256 gracePeriod
uint256 gracePeriod,
address rwaATokenManagerAdmin
) internal returns (MiscReport memory miscReport) {
if (poolAddressesProvider == address(0)) revert ProviderNotFound();

Expand All @@ -29,6 +31,8 @@ contract AaveV3MiscProcedure is IErrors {
new DefaultReserveInterestRateStrategyV2(poolAddressesProvider)
);

miscReport.rwaATokenManager = address(new RwaATokenManager(rwaATokenManagerAdmin));

return miscReport;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,11 @@ contract AaveV3SetupProcedure {

manager.grantRole(manager.DEFAULT_ADMIN_ROLE(), roles.poolAdmin);

for (uint256 i = 0; i < roles.additionalRoles.length; ++i) {
(bytes32 role, address account) = abi.decode(roles.additionalRoles[i], (bytes32, address));
manager.grantRole(role, account);
}

manager.revokeRole(manager.DEFAULT_ADMIN_ROLE(), address(this));

return aclManager;
Expand Down
4 changes: 3 additions & 1 deletion src/deployments/contracts/utilities/MarketReportUtils.sol
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,9 @@ library MarketReportUtils {
variableDebtToken: IVariableDebtToken(report.variableDebtToken),
emissionManager: IEmissionManager(report.emissionManager),
rewardsControllerImplementation: IRewardsController(report.rewardsControllerImplementation),
rewardsControllerProxy: IRewardsController(report.rewardsControllerProxy)
rewardsControllerProxy: IRewardsController(report.rewardsControllerProxy),
revenueSplitter: IRevenueSplitter(report.revenueSplitter),
rwaATokenManager: IRwaATokenManager(report.rwaATokenManager)
});
}
}
59 changes: 57 additions & 2 deletions src/deployments/contracts/utilities/MetadataReporter.sol
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,9 @@ contract MetadataReporter is IMetadataReporter {

Vm private constant vm = Vm(address(bytes20(uint160(uint256(keccak256('hevm cheat code'))))));

function writeJsonReportMarket(MarketReport memory report) external {
function writeJsonReportMarket(
MarketReport memory report
) external returns (string memory filePath) {
string memory factoryV3Commit;
string memory factoryV3Branch;

Expand All @@ -38,6 +40,7 @@ contract MetadataReporter is IMetadataReporter {
);
vm.serializeAddress(jsonReport, 'aaveOracle', report.aaveOracle);
vm.serializeAddress(jsonReport, 'treasury', report.treasury);
vm.serializeAddress(jsonReport, 'revenueSplitter', report.revenueSplitter);
vm.serializeAddress(jsonReport, 'dustBin', report.dustBin);
vm.serializeAddress(jsonReport, 'wrappedTokenGateway', report.wrappedTokenGateway);
vm.serializeAddress(jsonReport, 'walletBalanceProvider', report.walletBalanceProvider);
Expand All @@ -47,7 +50,9 @@ contract MetadataReporter is IMetadataReporter {
vm.serializeAddress(jsonReport, 'emptyImplementation', report.emptyImplementation);
vm.serializeAddress(jsonReport, 'l2Encoder', report.l2Encoder);
vm.serializeAddress(jsonReport, 'aToken', report.aToken);
vm.serializeAddress(jsonReport, 'rwaAToken', report.rwaAToken);
vm.serializeAddress(jsonReport, 'variableDebtToken', report.variableDebtToken);
vm.serializeAddress(jsonReport, 'rwaATokenManager', report.rwaATokenManager);
vm.serializeAddress(jsonReport, 'emissionManager', report.emissionManager);
vm.serializeAddress(
jsonReport,
Expand Down Expand Up @@ -94,7 +99,57 @@ contract MetadataReporter is IMetadataReporter {
report.paraSwapRepayAdapter
);

vm.writeJson(output, string.concat('./reports/', timestamp, '-market-deployment.json'));
filePath = string.concat('./reports/', timestamp, '-market-deployment.json');
vm.writeJson(output, filePath);
}

function parseMarketReport(
string memory reportFilePath
) external view returns (MarketReport memory report) {
string memory json = vm.readFile(reportFilePath);
report.poolAddressesProviderRegistry = _parseAddr(json, '.poolAddressesProviderRegistry');
report.poolAddressesProvider = _parseAddr(json, '.poolAddressesProvider');
report.poolProxy = _parseAddr(json, '.poolProxy');
report.poolImplementation = _parseAddr(json, '.poolImplementation');
report.poolConfiguratorProxy = _parseAddr(json, '.poolConfiguratorProxy');
report.poolConfiguratorImplementation = _parseAddr(json, '.poolConfiguratorImplementation');
report.protocolDataProvider = _parseAddr(json, '.protocolDataProvider');
report.aaveOracle = _parseAddr(json, '.aaveOracle');
report.defaultInterestRateStrategy = _parseAddr(json, '.defaultInterestRateStrategy');
report.priceOracleSentinel = _parseAddr(json, '.priceOracleSentinel');
report.aclManager = _parseAddr(json, '.aclManager');
report.treasury = _parseAddr(json, '.treasury');
report.treasuryImplementation = _parseAddr(json, '.treasuryImplementation');
report.wrappedTokenGateway = _parseAddr(json, '.wrappedTokenGateway');
report.walletBalanceProvider = _parseAddr(json, '.walletBalanceProvider');
report.uiIncentiveDataProvider = _parseAddr(json, '.uiIncentiveDataProvider');
report.uiPoolDataProvider = _parseAddr(json, '.uiPoolDataProvider');
report.paraSwapLiquiditySwapAdapter = _parseAddr(json, '.paraSwapLiquiditySwapAdapter');
report.paraSwapRepayAdapter = _parseAddr(json, '.paraSwapRepayAdapter');
report.paraSwapWithdrawSwapAdapter = _parseAddr(json, '.paraSwapWithdrawSwapAdapter');
report.l2Encoder = _parseAddr(json, '.l2Encoder');
report.aToken = _parseAddr(json, '.aToken');
report.rwaAToken = _parseAddr(json, '.rwaAToken');
report.variableDebtToken = _parseAddr(json, '.variableDebtToken');
report.emissionManager = _parseAddr(json, '.emissionManager');
report.rewardsControllerImplementation = _parseAddr(json, '.rewardsControllerImplementation');
report.rewardsControllerProxy = _parseAddr(json, '.rewardsControllerProxy');
report.configEngine = _parseAddr(json, '.configEngine');
report.transparentProxyFactory = _parseAddr(json, '.transparentProxyFactory');
report.staticATokenFactoryImplementation = _parseAddr(
json,
'.staticATokenFactoryImplementation'
);
report.staticATokenFactoryProxy = _parseAddr(json, '.staticATokenFactoryProxy');
report.staticATokenImplementation = _parseAddr(json, '.staticATokenImplementation');
report.revenueSplitter = _parseAddr(json, '.revenueSplitter');
report.dustBin = _parseAddr(json, '.dustBin');
report.emptyImplementation = _parseAddr(json, '.emptyImplementation');
report.rwaATokenManager = _parseAddr(json, '.rwaATokenManager');
}

function _parseAddr(string memory json, string memory key) internal view returns (address) {
return abi.decode(vm.parseJsonType(json, key, 'address'), (address));
}

function writeJsonReportLibraryBatch1(LibrariesReport memory libraries) external {
Expand Down
1 change: 1 addition & 0 deletions src/deployments/inputs/DefaultMarketInput.sol
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ contract DefaultMarketInput is MarketInput {
roles.marketOwner = deployer;
roles.emergencyAdmin = deployer;
roles.poolAdmin = deployer;
roles.rwaATokenManagerAdmin = deployer;

config.marketId = 'Aave V3 Testnet Market';
config.providerId = 8080;
Expand Down
Loading
Loading