diff --git a/package.json b/package.json index cd595e5..0fd211a 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,6 @@ "typescript": "^5.3.3", "vitest": "^1.2.1" }, - "type": "module", "main": "./dist/index.cjs", "module": "./dist/index.js", "exports": { diff --git a/src/commands/fork.ts b/src/commands/fork.ts index 59fc965..c1c0409 100644 --- a/src/commands/fork.ts +++ b/src/commands/fork.ts @@ -2,9 +2,13 @@ import { Command } from '@commander-js/extra-typings'; import { tenderly } from '../utils/tenderlyClient'; import { getGovernance } from '../govv3/governance'; import { getPayloadsController } from '../govv3/payloadsController'; -import { Hex, PublicClient } from 'viem'; -import { DEFAULT_GOVERNANCE, DEFAULT_GOVERNANCE_CLIENT } from '../utils/constants'; +import { Hex, createWalletClient, getContract, http } from 'viem'; +import { DEFAULT_GOVERNANCE, DEFAULT_GOVERNANCE_CLIENT, EOA } from '../utils/constants'; import { CHAIN_ID_CLIENT_MAP } from '@bgd-labs/js-utils'; +import { findPayloadsController } from '../govv3/utils/checkAddress'; +import path from 'path'; +import { IPayloadsControllerCore_ABI } from '@bgd-labs/aave-address-book'; +import { getTransactionReceipt } from 'viem/actions'; export function addCommand(program: Command) { program @@ -15,16 +19,9 @@ export function addCommand(program: Command) { .option('--alias ', 'Set a custom alias') .option('--proposalId ', 'ProposalId to execute') .option('--payloadId ', 'PayloadId to execute') - .option('--payloadsController ', 'PayloadsController address') + .option('--artifactPath ', 'path to the local payload') .action(async (options) => { - const { - chainId, - blockNumber, - alias, - payloadId, - proposalId, - payloadsController: payloadsControllerAddress, - } = options; + const { chainId, blockNumber, alias, payloadId, proposalId, artifactPath } = options; function getAlias() { const unix = Math.floor(new Date().getTime() / 1000); if (alias) { @@ -42,19 +39,57 @@ export function addCommand(program: Command) { alias: getAlias(), blockNumber: Number(blockNumber), }; - const governance = getGovernance({ address: DEFAULT_GOVERNANCE, client: DEFAULT_GOVERNANCE_CLIENT }); if (proposalId) { + const governance = getGovernance({ address: DEFAULT_GOVERNANCE, client: DEFAULT_GOVERNANCE_CLIENT }); const payload = await governance.getSimulationPayloadForExecution(BigInt(proposalId)); const fork = await tenderly.fork({ ...forkConfig, blockNumber: forkConfig.blockNumber || payload.block_number, }); await tenderly.unwrapAndExecuteSimulationPayloadOnFork(fork, payload); - } else if (payloadId != undefined) { - if (!payloadsControllerAddress) throw new Error('you need to provide a payloadsController'); + return; + } + if (payloadId == undefined && artifactPath == undefined) throw new Error('you need to specify an id or artifact'); + const payloadsControllerAddress = findPayloadsController(forkConfig.chainId); + if (!payloadsControllerAddress) throw new Error('payloadscontroller not found on specified chain'); + + if (!payloadId) { + const fork = await tenderly.fork({ + ...forkConfig, + blockNumber: forkConfig.blockNumber, + }); + const payload = await tenderly.deployCode(fork, path.join(process.cwd(), artifactPath!)); + const walletProvider = createWalletClient({ + account: EOA, + chain: { id: fork.forkNetworkId, name: 'tenderly' } as any, + transport: http(fork.forkUrl), + }); + const payloadsController = getPayloadsController(payloadsControllerAddress as Hex, walletProvider); + const hash = await payloadsController.controllerContract.write.createPayload( + [ + [ + { + target: payload, + withDelegateCall: true, + accessLevel: 1, + value: 0n, + signature: 'execute()', + callData: '0x0', + }, + ], + ], + {} as any + ); + const tenderlyPayload = await payloadsController.getSimulationPayloadForExecution( + Number((await payloadsController.controllerContract.read.getPayloadsCount()) - 1) + ); + await tenderly.unwrapAndExecuteSimulationPayloadOnFork(fork, tenderlyPayload); + return; + } + if (payloadId != undefined) { const payloadsController = getPayloadsController( payloadsControllerAddress as Hex, - CHAIN_ID_CLIENT_MAP[forkConfig.chainId as keyof typeof CHAIN_ID_CLIENT_MAP] + CHAIN_ID_CLIENT_MAP[chainId] ); const payload = await payloadsController.getSimulationPayloadForExecution(Number(payloadId)); const fork = await tenderly.fork({ @@ -62,6 +97,7 @@ export function addCommand(program: Command) { blockNumber: forkConfig.blockNumber || payload.block_number, }); await tenderly.unwrapAndExecuteSimulationPayloadOnFork(fork, payload); + return; } }); } diff --git a/src/govv3/mocks/TestPayload.json b/src/govv3/mocks/TestPayload.json new file mode 100644 index 0000000..9f85858 --- /dev/null +++ b/src/govv3/mocks/TestPayload.json @@ -0,0 +1,2260 @@ +{ + "abi": [ + { + "type": "function", + "name": "CONFIG_ENGINE", + "inputs": [], + "outputs": [{ "name": "", "type": "address", "internalType": "contract IAaveV3ConfigEngine" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "assetsEModeUpdates", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "tuple[]", + "internalType": "struct IAaveV3ConfigEngine.AssetEModeUpdate[]", + "components": [ + { "name": "asset", "type": "address", "internalType": "address" }, + { "name": "eModeCategory", "type": "uint8", "internalType": "uint8" } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "borrowsUpdates", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "tuple[]", + "internalType": "struct IAaveV3ConfigEngine.BorrowUpdate[]", + "components": [ + { "name": "asset", "type": "address", "internalType": "address" }, + { "name": "enabledToBorrow", "type": "uint256", "internalType": "uint256" }, + { "name": "flashloanable", "type": "uint256", "internalType": "uint256" }, + { "name": "stableRateModeEnabled", "type": "uint256", "internalType": "uint256" }, + { "name": "borrowableInIsolation", "type": "uint256", "internalType": "uint256" }, + { "name": "withSiloedBorrowing", "type": "uint256", "internalType": "uint256" }, + { "name": "reserveFactor", "type": "uint256", "internalType": "uint256" } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "capsUpdates", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "tuple[]", + "internalType": "struct IAaveV3ConfigEngine.CapsUpdate[]", + "components": [ + { "name": "asset", "type": "address", "internalType": "address" }, + { "name": "supplyCap", "type": "uint256", "internalType": "uint256" }, + { "name": "borrowCap", "type": "uint256", "internalType": "uint256" } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "collateralsUpdates", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "tuple[]", + "internalType": "struct IAaveV3ConfigEngine.CollateralUpdate[]", + "components": [ + { "name": "asset", "type": "address", "internalType": "address" }, + { "name": "ltv", "type": "uint256", "internalType": "uint256" }, + { "name": "liqThreshold", "type": "uint256", "internalType": "uint256" }, + { "name": "liqBonus", "type": "uint256", "internalType": "uint256" }, + { "name": "debtCeiling", "type": "uint256", "internalType": "uint256" }, + { "name": "liqProtocolFee", "type": "uint256", "internalType": "uint256" } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "eModeCategoriesUpdates", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "tuple[]", + "internalType": "struct IAaveV3ConfigEngine.EModeCategoryUpdate[]", + "components": [ + { "name": "eModeCategory", "type": "uint8", "internalType": "uint8" }, + { "name": "ltv", "type": "uint256", "internalType": "uint256" }, + { "name": "liqThreshold", "type": "uint256", "internalType": "uint256" }, + { "name": "liqBonus", "type": "uint256", "internalType": "uint256" }, + { "name": "priceSource", "type": "address", "internalType": "address" }, + { "name": "label", "type": "string", "internalType": "string" } + ] + } + ], + "stateMutability": "pure" + }, + { "type": "function", "name": "execute", "inputs": [], "outputs": [], "stateMutability": "nonpayable" }, + { + "type": "function", + "name": "getPoolContext", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct IAaveV3ConfigEngine.PoolContext", + "components": [ + { "name": "networkName", "type": "string", "internalType": "string" }, + { "name": "networkAbbreviation", "type": "string", "internalType": "string" } + ] + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "newListings", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "tuple[]", + "internalType": "struct IAaveV3ConfigEngine.Listing[]", + "components": [ + { "name": "asset", "type": "address", "internalType": "address" }, + { "name": "assetSymbol", "type": "string", "internalType": "string" }, + { "name": "priceFeed", "type": "address", "internalType": "address" }, + { + "name": "rateStrategyParams", + "type": "tuple", + "internalType": "struct IV3RateStrategyFactory.RateStrategyParams", + "components": [ + { "name": "optimalUsageRatio", "type": "uint256", "internalType": "uint256" }, + { "name": "baseVariableBorrowRate", "type": "uint256", "internalType": "uint256" }, + { "name": "variableRateSlope1", "type": "uint256", "internalType": "uint256" }, + { "name": "variableRateSlope2", "type": "uint256", "internalType": "uint256" }, + { "name": "stableRateSlope1", "type": "uint256", "internalType": "uint256" }, + { "name": "stableRateSlope2", "type": "uint256", "internalType": "uint256" }, + { "name": "baseStableRateOffset", "type": "uint256", "internalType": "uint256" }, + { "name": "stableRateExcessOffset", "type": "uint256", "internalType": "uint256" }, + { "name": "optimalStableToTotalDebtRatio", "type": "uint256", "internalType": "uint256" } + ] + }, + { "name": "enabledToBorrow", "type": "uint256", "internalType": "uint256" }, + { "name": "stableRateModeEnabled", "type": "uint256", "internalType": "uint256" }, + { "name": "borrowableInIsolation", "type": "uint256", "internalType": "uint256" }, + { "name": "withSiloedBorrowing", "type": "uint256", "internalType": "uint256" }, + { "name": "flashloanable", "type": "uint256", "internalType": "uint256" }, + { "name": "ltv", "type": "uint256", "internalType": "uint256" }, + { "name": "liqThreshold", "type": "uint256", "internalType": "uint256" }, + { "name": "liqBonus", "type": "uint256", "internalType": "uint256" }, + { "name": "reserveFactor", "type": "uint256", "internalType": "uint256" }, + { "name": "supplyCap", "type": "uint256", "internalType": "uint256" }, + { "name": "borrowCap", "type": "uint256", "internalType": "uint256" }, + { "name": "debtCeiling", "type": "uint256", "internalType": "uint256" }, + { "name": "liqProtocolFee", "type": "uint256", "internalType": "uint256" }, + { "name": "eModeCategory", "type": "uint8", "internalType": "uint8" } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "newListingsCustom", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "tuple[]", + "internalType": "struct IAaveV3ConfigEngine.ListingWithCustomImpl[]", + "components": [ + { + "name": "base", + "type": "tuple", + "internalType": "struct IAaveV3ConfigEngine.Listing", + "components": [ + { "name": "asset", "type": "address", "internalType": "address" }, + { "name": "assetSymbol", "type": "string", "internalType": "string" }, + { "name": "priceFeed", "type": "address", "internalType": "address" }, + { + "name": "rateStrategyParams", + "type": "tuple", + "internalType": "struct IV3RateStrategyFactory.RateStrategyParams", + "components": [ + { "name": "optimalUsageRatio", "type": "uint256", "internalType": "uint256" }, + { "name": "baseVariableBorrowRate", "type": "uint256", "internalType": "uint256" }, + { "name": "variableRateSlope1", "type": "uint256", "internalType": "uint256" }, + { "name": "variableRateSlope2", "type": "uint256", "internalType": "uint256" }, + { "name": "stableRateSlope1", "type": "uint256", "internalType": "uint256" }, + { "name": "stableRateSlope2", "type": "uint256", "internalType": "uint256" }, + { "name": "baseStableRateOffset", "type": "uint256", "internalType": "uint256" }, + { "name": "stableRateExcessOffset", "type": "uint256", "internalType": "uint256" }, + { "name": "optimalStableToTotalDebtRatio", "type": "uint256", "internalType": "uint256" } + ] + }, + { "name": "enabledToBorrow", "type": "uint256", "internalType": "uint256" }, + { "name": "stableRateModeEnabled", "type": "uint256", "internalType": "uint256" }, + { "name": "borrowableInIsolation", "type": "uint256", "internalType": "uint256" }, + { "name": "withSiloedBorrowing", "type": "uint256", "internalType": "uint256" }, + { "name": "flashloanable", "type": "uint256", "internalType": "uint256" }, + { "name": "ltv", "type": "uint256", "internalType": "uint256" }, + { "name": "liqThreshold", "type": "uint256", "internalType": "uint256" }, + { "name": "liqBonus", "type": "uint256", "internalType": "uint256" }, + { "name": "reserveFactor", "type": "uint256", "internalType": "uint256" }, + { "name": "supplyCap", "type": "uint256", "internalType": "uint256" }, + { "name": "borrowCap", "type": "uint256", "internalType": "uint256" }, + { "name": "debtCeiling", "type": "uint256", "internalType": "uint256" }, + { "name": "liqProtocolFee", "type": "uint256", "internalType": "uint256" }, + { "name": "eModeCategory", "type": "uint8", "internalType": "uint8" } + ] + }, + { + "name": "implementations", + "type": "tuple", + "internalType": "struct IAaveV3ConfigEngine.TokenImplementations", + "components": [ + { "name": "aToken", "type": "address", "internalType": "address" }, + { "name": "vToken", "type": "address", "internalType": "address" }, + { "name": "sToken", "type": "address", "internalType": "address" } + ] + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "priceFeedsUpdates", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "tuple[]", + "internalType": "struct IAaveV3ConfigEngine.PriceFeedUpdate[]", + "components": [ + { "name": "asset", "type": "address", "internalType": "address" }, + { "name": "priceFeed", "type": "address", "internalType": "address" } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "rateStrategiesUpdates", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "tuple[]", + "internalType": "struct IAaveV3ConfigEngine.RateStrategyUpdate[]", + "components": [ + { "name": "asset", "type": "address", "internalType": "address" }, + { + "name": "params", + "type": "tuple", + "internalType": "struct IV3RateStrategyFactory.RateStrategyParams", + "components": [ + { "name": "optimalUsageRatio", "type": "uint256", "internalType": "uint256" }, + { "name": "baseVariableBorrowRate", "type": "uint256", "internalType": "uint256" }, + { "name": "variableRateSlope1", "type": "uint256", "internalType": "uint256" }, + { "name": "variableRateSlope2", "type": "uint256", "internalType": "uint256" }, + { "name": "stableRateSlope1", "type": "uint256", "internalType": "uint256" }, + { "name": "stableRateSlope2", "type": "uint256", "internalType": "uint256" }, + { "name": "baseStableRateOffset", "type": "uint256", "internalType": "uint256" }, + { "name": "stableRateExcessOffset", "type": "uint256", "internalType": "uint256" }, + { "name": "optimalStableToTotalDebtRatio", "type": "uint256", "internalType": "uint256" } + ] + } + ] + } + ], + "stateMutability": "pure" + } + ], + "bytecode": { + "object": "0x60a060405234801561001057600080fd5b5073a3e44d830440df5098520f62ebec285b1198c51e608052608051610f6a61004a6000396000818160e501526102370152610f6a6000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c8063b1af0d0d11610071578063b1af0d0d14610147578063c0a2558014610156578063ca8e89cc14610165578063d0c38c271461017a578063fabe34631461018f578063fbb256f61461019e57600080fd5b80631850edd8146100b95780632b179434146100d15780635e5eef7a146100e0578063614619541461011f578063922870951461012957806395a93cb114610138575b600080fd5b60606040516100c89190610823565b60405180910390f35b60606040516100c891906108ae565b6101077f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100c8565b6101276101b3565b005b60606040516100c89190610922565b60606040516100c89190610970565b60606040516100c891906109c5565b60606040516100c89190610c19565b61016d6103a4565b6040516100c89190610c2c565b6101826104b4565b6040516100c89190610cd7565b60606040516100c89190610dbf565b6101a66105da565b6040516100c89190610e09565b60006101bd6103a4565b9050606080808060006101ce6104b4565b8651909150606090819081901561025f5761025d63a192ac2460e01b8a6040516024016101fb9190610c2c565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690610639565b505b87511561028d5761028b633cb6502d60e01b6102796105da565b8a6040516024016101fb929190610e1c565b505b8651156102bb576102b96314d8093760e21b6102a76105da565b896040516024016101fb929190610e41565b505b8451156102e0576102de63bb06653560e01b866040516024016101fb9190610823565b505b855115610305576103036309d8332860e01b876040516024016101fb91906108ae565b505b83511561032a576103286324f4c44560e01b856040516024016101fb9190610cd7565b505b82511561034f5761034d63927c400360e01b846040516024016101fb91906109c5565b505b81511561037457610372632a90e62360e01b836040516024016101fb9190610922565b505b805115610399576103976355caa16360e01b826040516024016101fb9190610970565b505b505050505050505050565b60408051600180825281830190925260609160009190816020015b6104046040518060c00160405280600060ff16815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001606081525090565b8152602001906001900390816103bf5790505090506040518060c00160405280600160ff168152602001612454815260200161251c8152602001602a60001961044d9190610e7c565b815260200160506001600160a01b03168152602001604051806040016040528060138152602001724b4545505f43555252454e545f535452494e4760681b815250815250816000815181106104a4576104a4610e8f565b6020908102919091010152919050565b60408051600180825281830190925260609160009190816020015b6104d76107b4565b8152602001906001900390816104cf579050509050604051806040016040528073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03168152602001604051806101200160405280610531612328610667565b8152602001610543602a600019610e7c565b8152602001610555602a600019610e7c565b8152602001610567602a600019610e7c565b8152602001610579602a600019610e7c565b815260200161058b602a600019610e7c565b815260200161059d602a600019610e7c565b81526020016105af602a600019610e7c565b81526020016105c1602a600019610e7c565b815250815250816000815181106104a4576104a4610e8f565b60408051808201909152606080825260208201525060408051608081018252600881830190815267457468657265756d60c01b606083015281528151808301909252600382526208ae8d60eb1b60208381019190915281019190915290565b606061065e8383604051806060016040528060278152602001610f0e6027913961068c565b90505b92915050565b60006127106106826b033b2e3c9fd0803ce800000084610ea5565b6106619190610ebc565b6060600080856001600160a01b0316856040516106a99190610ede565b600060405180830381855af49150503d80600081146106e4576040519150601f19603f3d011682016040523d82523d6000602084013e6106e9565b606091505b50915091506106fa86838387610704565b9695505050505050565b60608315610778578251600003610771576001600160a01b0385163b6107715760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610782565b610782838361078a565b949350505050565b81511561079a5781518083602001fd5b8060405162461bcd60e51b81526004016107689190610efa565b604051806040016040528060006001600160a01b0316815260200161081e6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b905290565b602080825282518282018190526000919060409081850190868401855b828110156108a157815180516001600160a01b0316855286810151878601528581015186860152606080820151908601526080808201519086015260a0808201519086015260c0908101519085015260e09093019290850190600101610840565b5091979650505050505050565b602080825282518282018190526000919060409081850190868401855b828110156108a157815180516001600160a01b0316855286810151878601528581015186860152606080820151908601526080808201519086015260a0908101519085015260c090930192908501906001016108cb565b602080825282518282018190526000919060409081850190868401855b828110156108a157815180516001600160a01b0316855286015160ff1686850152928401929085019060010161093f565b602080825282518282018190526000919060409081850190868401855b828110156108a157815180516001600160a01b031685528681015187860152850151858501526060909301929085019060010161098d565b602080825282518282018190526000919060409081850190868401855b828110156108a157815180516001600160a01b03908116865290870151168685015292840192908501906001016109e2565b60005b83811015610a2f578181015183820152602001610a17565b50506000910152565b60008151808452610a50816020860160208601610a14565b601f01601f19169290920160200192915050565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301526101008082015181840152505050565b80516001600160a01b0316825260006103406020830151816020860152610ae782860182610a38565b9150506040830151610b0460408601826001600160a01b03169052565b506060830151610b176060860182610a64565b5060808301516101808581019190915260a08401516101a08087019190915260c08501516101c08088019190915260e08601516101e080890191909152610100870151610200808a0191909152610120880151610220808b01919091526101408901516102408b01526101608901516102608b0152948801516102808a0152928701516102a0890152908601516102c08801528501516102e087015284015161030086015283015160ff8116610320860152509392505050565b600081518084526020808501808196508360051b8101915082860160005b858110156108a1578284038952610c07848351610abe565b98850198935090840190600101610bef565b60208152600061065e6020830184610bd1565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015610cc957888303603f190185528151805160ff16845287810151888501528681015187850152606080820151908501526080808201516001600160a01b03169085015260a09081015160c091850182905290610cb581860183610a38565b968901969450505090860190600101610c53565b509098975050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015610d2e57835180516001600160a01b03168452850151610d1986850182610a64565b50928401926101409290920191600101610cf3565b50909695505050505050565b600081518084526020808501808196508360051b8101915082860160005b858110156108a1578284038952815160808151818752610d7a82880182610abe565b9288015180516001600160a01b03908116898b0152818a015181166040808b019190915290910151166060909701969096525098850198935090840190600101610d58565b60208152600061065e6020830184610d3a565b6000815160408452610de76040850182610a38565b905060208301518482036020860152610e008282610a38565b95945050505050565b60208152600061065e6020830184610dd2565b604081526000610e2f6040830185610dd2565b8281036020840152610e008185610bd1565b604081526000610e546040830185610dd2565b8281036020840152610e008185610d3a565b634e487b7160e01b600052601160045260246000fd5b8181038181111561066157610661610e66565b634e487b7160e01b600052603260045260246000fd5b808202811582820484141761066157610661610e66565b600082610ed957634e487b7160e01b600052601260045260246000fd5b500490565b60008251610ef0818460208701610a14565b9190910192915050565b60208152600061065e6020830184610a3856fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212202d0d6e224ef247468fcba9e3d0646519fd51a5169e4228635be8fa1c6a4bf2da64736f6c63430008130033", + "sourceMap": "897:1708:377:-:0;;;;;;;;;;;;-1:-1:-1;3750:42:35;1572:22:134;;897:1708:377;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c8063b1af0d0d11610071578063b1af0d0d14610147578063c0a2558014610156578063ca8e89cc14610165578063d0c38c271461017a578063fabe34631461018f578063fbb256f61461019e57600080fd5b80631850edd8146100b95780632b179434146100d15780635e5eef7a146100e0578063614619541461011f578063922870951461012957806395a93cb114610138575b600080fd5b60606040516100c89190610823565b60405180910390f35b60606040516100c891906108ae565b6101077f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100c8565b6101276101b3565b005b60606040516100c89190610922565b60606040516100c89190610970565b60606040516100c891906109c5565b60606040516100c89190610c19565b61016d6103a4565b6040516100c89190610c2c565b6101826104b4565b6040516100c89190610cd7565b60606040516100c89190610dbf565b6101a66105da565b6040516100c89190610e09565b60006101bd6103a4565b9050606080808060006101ce6104b4565b8651909150606090819081901561025f5761025d63a192ac2460e01b8a6040516024016101fb9190610c2c565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690610639565b505b87511561028d5761028b633cb6502d60e01b6102796105da565b8a6040516024016101fb929190610e1c565b505b8651156102bb576102b96314d8093760e21b6102a76105da565b896040516024016101fb929190610e41565b505b8451156102e0576102de63bb06653560e01b866040516024016101fb9190610823565b505b855115610305576103036309d8332860e01b876040516024016101fb91906108ae565b505b83511561032a576103286324f4c44560e01b856040516024016101fb9190610cd7565b505b82511561034f5761034d63927c400360e01b846040516024016101fb91906109c5565b505b81511561037457610372632a90e62360e01b836040516024016101fb9190610922565b505b805115610399576103976355caa16360e01b826040516024016101fb9190610970565b505b505050505050505050565b60408051600180825281830190925260609160009190816020015b6104046040518060c00160405280600060ff16815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001606081525090565b8152602001906001900390816103bf5790505090506040518060c00160405280600160ff168152602001612454815260200161251c8152602001602a60001961044d9190610e7c565b815260200160506001600160a01b03168152602001604051806040016040528060138152602001724b4545505f43555252454e545f535452494e4760681b815250815250816000815181106104a4576104a4610e8f565b6020908102919091010152919050565b60408051600180825281830190925260609160009190816020015b6104d76107b4565b8152602001906001900390816104cf579050509050604051806040016040528073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03168152602001604051806101200160405280610531612328610667565b8152602001610543602a600019610e7c565b8152602001610555602a600019610e7c565b8152602001610567602a600019610e7c565b8152602001610579602a600019610e7c565b815260200161058b602a600019610e7c565b815260200161059d602a600019610e7c565b81526020016105af602a600019610e7c565b81526020016105c1602a600019610e7c565b815250815250816000815181106104a4576104a4610e8f565b60408051808201909152606080825260208201525060408051608081018252600881830190815267457468657265756d60c01b606083015281528151808301909252600382526208ae8d60eb1b60208381019190915281019190915290565b606061065e8383604051806060016040528060278152602001610f0e6027913961068c565b90505b92915050565b60006127106106826b033b2e3c9fd0803ce800000084610ea5565b6106619190610ebc565b6060600080856001600160a01b0316856040516106a99190610ede565b600060405180830381855af49150503d80600081146106e4576040519150601f19603f3d011682016040523d82523d6000602084013e6106e9565b606091505b50915091506106fa86838387610704565b9695505050505050565b60608315610778578251600003610771576001600160a01b0385163b6107715760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610782565b610782838361078a565b949350505050565b81511561079a5781518083602001fd5b8060405162461bcd60e51b81526004016107689190610efa565b604051806040016040528060006001600160a01b0316815260200161081e6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b905290565b602080825282518282018190526000919060409081850190868401855b828110156108a157815180516001600160a01b0316855286810151878601528581015186860152606080820151908601526080808201519086015260a0808201519086015260c0908101519085015260e09093019290850190600101610840565b5091979650505050505050565b602080825282518282018190526000919060409081850190868401855b828110156108a157815180516001600160a01b0316855286810151878601528581015186860152606080820151908601526080808201519086015260a0908101519085015260c090930192908501906001016108cb565b602080825282518282018190526000919060409081850190868401855b828110156108a157815180516001600160a01b0316855286015160ff1686850152928401929085019060010161093f565b602080825282518282018190526000919060409081850190868401855b828110156108a157815180516001600160a01b031685528681015187860152850151858501526060909301929085019060010161098d565b602080825282518282018190526000919060409081850190868401855b828110156108a157815180516001600160a01b03908116865290870151168685015292840192908501906001016109e2565b60005b83811015610a2f578181015183820152602001610a17565b50506000910152565b60008151808452610a50816020860160208601610a14565b601f01601f19169290920160200192915050565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301526101008082015181840152505050565b80516001600160a01b0316825260006103406020830151816020860152610ae782860182610a38565b9150506040830151610b0460408601826001600160a01b03169052565b506060830151610b176060860182610a64565b5060808301516101808581019190915260a08401516101a08087019190915260c08501516101c08088019190915260e08601516101e080890191909152610100870151610200808a0191909152610120880151610220808b01919091526101408901516102408b01526101608901516102608b0152948801516102808a0152928701516102a0890152908601516102c08801528501516102e087015284015161030086015283015160ff8116610320860152509392505050565b600081518084526020808501808196508360051b8101915082860160005b858110156108a1578284038952610c07848351610abe565b98850198935090840190600101610bef565b60208152600061065e6020830184610bd1565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015610cc957888303603f190185528151805160ff16845287810151888501528681015187850152606080820151908501526080808201516001600160a01b03169085015260a09081015160c091850182905290610cb581860183610a38565b968901969450505090860190600101610c53565b509098975050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015610d2e57835180516001600160a01b03168452850151610d1986850182610a64565b50928401926101409290920191600101610cf3565b50909695505050505050565b600081518084526020808501808196508360051b8101915082860160005b858110156108a1578284038952815160808151818752610d7a82880182610abe565b9288015180516001600160a01b03908116898b0152818a015181166040808b019190915290910151166060909701969096525098850198935090840190600101610d58565b60208152600061065e6020830184610d3a565b6000815160408452610de76040850182610a38565b905060208301518482036020860152610e008282610a38565b95945050505050565b60208152600061065e6020830184610dd2565b604081526000610e2f6040830185610dd2565b8281036020840152610e008185610bd1565b604081526000610e546040830185610dd2565b8281036020840152610e008185610d3a565b634e487b7160e01b600052601160045260246000fd5b8181038181111561066157610661610e66565b634e487b7160e01b600052603260045260246000fd5b808202811582820484141761066157610661610e66565b600082610ed957634e487b7160e01b600052601260045260246000fd5b500490565b60008251610ef0818460208701610a14565b9190910192915050565b60208152600061065e6020830184610a3856fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212202d0d6e224ef247468fcba9e3d0646519fd51a5169e4228635be8fa1c6a4bf2da64736f6c63430008130033", + "sourceMap": "897:1708:377:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5349:88:134;5404:29;5349:88;;;;;;:::i;:::-;;;;;;;;5170:96;5404:29;5170:96;;;;;;:::i;1495:38::-;;;;;;;;-1:-1:-1;;;;;2656:32:388;;;2638:51;;2626:2;2611:18;1495:38:134;2463:232:388;1859:2436:134;;;:::i;:::-;;5915:96;5404:29;5915:96;;;;;;:::i;5000:83::-;5404:29;5000:83;;;;;;:::i;5515:94::-;5404:29;5515:94;;;;;;:::i;4611:80::-;5404:29;4611:80;;;;;;:::i;2000:603:377:-;;;:::i;:::-;;;;;;;:::i;1025:971::-;;;:::i;:::-;;;;;;;:::i;4810:118:134:-;5404:29;4810:118;;;;;;:::i;380:176:139:-;;;:::i;:::-;;;;;;;:::i;1859:2436:134:-;1913:52;1968:24;:22;:24::i;:::-;1913:79;-1:-1:-1;5404:29:134;;;;1998:33;2314:23;:21;:23::i;:::-;2547:22;;2270:67;;-1:-1:-1;5404:29:134;;;;;;2547:27;2543:194;;2584:146;2660:44;;;2706:15;2637:85;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2637:85:134;;;;;;;;;;;;;;-1:-1:-1;;;;;2637:85:134;-1:-1:-1;;;;;;2637:85:134;;;;;;;;;;-1:-1:-1;;;;;2592:13:134;2584:43;;;:146::i;:::-;;2543:194;2747:15;;:20;2743:187;;2777:146;-1:-1:-1;;;2888:16:134;:14;:16::i;:::-;2906:8;2830:85;;;;;;;;;:::i;2777:146::-;;2743:187;2940:21;;:26;2936:245;;2976:198;-1:-1:-1;;;3114:16:134;:14;:16::i;:::-;3142:14;3029:137;;;;;;;;;:::i;2976:198::-;;2936:245;3191:14;;:19;3187:173;;3220:133;3296:39;;;3337:7;3273:72;;;;;;;;:::i;3220:133::-;;3187:173;3370:18;;:23;3366:185;;3403:141;3479:43;;;3524:11;3456:80;;;;;;;;:::i;3403:141::-;;3366:185;3561:12;;:17;3557:173;;3588:135;3664:43;;;3709:5;3641:74;;;;;;;;:::i;3588:135::-;;3557:173;3740:17;;:22;3736:179;;3772:136;3848:39;;;3889:10;3825:75;;;;;;;;:::i;3772:136::-;;3736:179;3925:18;;:23;3921:182;;3958:138;4034:40;;;4076:11;4011:77;;;;;;;;:::i;3958:138::-;;3921:182;4113:11;;:16;4109:161;;4139:124;4215:33;;;4250:4;4192:63;;;;;;;;:::i;4139:124::-;;4109:161;1887:2408;;;;;;;;;1859:2436::o;2000:603:377:-;2208:48;;;2254:1;2208:48;;;;;;;;;2080;;2138:67;;2208:48;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2208:48:377;;;;;;;;;;;;;;;;2138:118;;2281:291;;;;;;;;34535:1:35;2281:291:377;;;;;;2392:5;2281:291;;;;2419:5;2281:291;;;;335:2:144;-1:-1:-1;;315:22:144;;;;:::i;:::-;2281:291:377;;;;877:42:144;-1:-1:-1;;;;;2281:291:377;;;;;2534:31;;;;;;;;;;;;;-1:-1:-1;;;2534:31:377;;;2281:291;;;2263:12;2276:1;2263:15;;;;;;;;:::i;:::-;;;;;;;;;;:309;2586:12;2000:603;-1:-1:-1;2000:603:377:o;1025:971::-;1232:47;;;1277:1;1232:47;;;;;;;;;1104;;1161:68;;1232:47;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1161:118;;1305:658;;;;;;;;6062:42:35;-1:-1:-1;;;;;1305:658:377;;;;;1411:545;;;;;;;;1482:16;1492:5;1482:9;:16::i;:::-;1411:545;;;;315:22:144;335:2;-1:-1:-1;;315:22:144;:::i;:::-;1411:545:377;;;;315:22:144;335:2;-1:-1:-1;;315:22:144;:::i;:::-;1411:545:377;;;;315:22:144;335:2;-1:-1:-1;;315:22:144;:::i;:::-;1411:545:377;;;;315:22:144;335:2;-1:-1:-1;;315:22:144;:::i;:::-;1411:545:377;;;;315:22:144;335:2;-1:-1:-1;;315:22:144;:::i;:::-;1411:545:377;;;;315:22:144;335:2;-1:-1:-1;;315:22:144;:::i;:::-;1411:545:377;;;;315:22:144;335:2;-1:-1:-1;;315:22:144;:::i;:::-;1411:545:377;;;;315:22:144;335:2;-1:-1:-1;;315:22:144;:::i;:::-;1411:545:377;;;1305:658;;;1285:14;1300:1;1285:17;;;;;;;;:::i;380:176:139:-;-1:-1:-1;;;;;;;;;;;;;;;;;;477:74:139;;;;;;;;;;;;;;;-1:-1:-1;;;477:74:139;;;;;;;;;;;;;;;;;-1:-1:-1;;;477:74:139;;;;;;;;;;;;;;;380:176::o;6239:192:102:-;6322:12;6349:77;6370:6;6378:4;6349:77;;;;;;;;;;;;;;;;;:20;:77::i;:::-;6342:84;;6239:192;;;;;:::o;4416:119:134:-;4474:7;4524:6;4497:23;704:4:20;4497:6:134;:23;:::i;:::-;4496:34;;;;:::i;6603:301:102:-;6730:12;6751;6765:23;6792:6;-1:-1:-1;;;;;6792:19:102;6812:4;6792:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6750:67;;;;6830:69;6857:6;6865:7;6874:10;6886:12;6830:26;:69::i;:::-;6823:76;6603:301;-1:-1:-1;;;;;;6603:301:102:o;7178:548::-;7340:12;7364:7;7360:362;;;7385:10;:17;7406:1;7385:22;7381:256;;-1:-1:-1;;;;;1513:19:102;;;7568:60;;;;-1:-1:-1;;;7568:60:102;;16224:2:388;7568:60:102;;;16206:21:388;16263:2;16243:18;;;16236:30;16302:31;16282:18;;;16275:59;16351:18;;7568:60:102;;;;;;;;;-1:-1:-1;7651:10:102;7644:17;;7360:362;7682:33;7690:10;7702:12;7682:7;:33::i;:::-;7178:548;;;;;;:::o;8192:476::-;8343:17;;:21;8339:325;;8545:10;8539:17;8593:15;8580:10;8576:2;8572:19;8565:44;8339:325;8644:12;8637:20;;-1:-1:-1;;;8637:20:102;;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;123:1201:388:-;356:2;408:21;;;478:13;;381:18;;;500:22;;;327:4;;356:2;541;;559:18;;;;600:15;;;327:4;643:655;657:6;654:1;651:13;643:655;;;716:13;;758:9;;-1:-1:-1;;;;;754:35:388;742:48;;830:11;;;824:18;810:12;;;803:40;883:11;;;877:18;863:12;;;856:40;919:4;963:11;;;957:18;943:12;;;936:40;999:4;1043:11;;;1037:18;1023:12;;;1016:40;777:3;1123:11;;;1117:18;1103:12;;;1096:40;1159:4;1203:11;;;1197:18;1183:12;;;1176:40;1245:4;1236:14;;;;1273:15;;;;786:1;672:9;643:655;;;-1:-1:-1;1315:3:388;;123:1201;-1:-1:-1;;;;;;;123:1201:388:o;1329:1129::-;1570:2;1622:21;;;1692:13;;1595:18;;;1714:22;;;1541:4;;1570:2;1755;;1773:18;;;;1814:15;;;1541:4;1857:575;1871:6;1868:1;1865:13;1857:575;;;1930:13;;1972:9;;-1:-1:-1;;;;;1968:35:388;1956:48;;2044:11;;;2038:18;2024:12;;;2017:40;2097:11;;;2091:18;2077:12;;;2070:40;2133:4;2177:11;;;2171:18;2157:12;;;2150:40;2213:4;2257:11;;;2251:18;2237:12;;;2230:40;1991:3;2337:11;;;2331:18;2317:12;;;2310:40;2379:4;2370:14;;;;2407:15;;;;2000:1;1886:9;1857:575;;2780:845;3021:2;3073:21;;;3143:13;;3046:18;;;3165:22;;;2992:4;;3021:2;3206;;3224:18;;;;3265:15;;;2992:4;3308:291;3322:6;3319:1;3316:13;3308:291;;;3381:13;;3423:9;;-1:-1:-1;;;;;3419:35:388;3407:48;;3499:11;;3493:18;3513:4;3489:29;3475:12;;;3468:51;3539:12;;;;3574:15;;;;3451:1;3337:9;3308:291;;3630:877;3859:2;3911:21;;;3981:13;;3884:18;;;4003:22;;;3830:4;;3859:2;4044;;4062:18;;;;4103:15;;;3830:4;4146:335;4160:6;4157:1;4154:13;4146:335;;;4219:13;;4261:9;;-1:-1:-1;;;;;4257:35:388;4245:48;;4333:11;;;4327:18;4313:12;;;4306:40;4386:11;;4380:18;4366:12;;;4359:40;4428:4;4419:14;;;;4456:15;;;;4289:1;4175:9;4146:335;;4512:866;4751:2;4803:21;;;4873:13;;4776:18;;;4895:22;;;4722:4;;4751:2;4936;;4954:18;;;;4995:15;;;4722:4;5038:314;5052:6;5049:1;5046:13;5038:314;;;5111:13;;5195:9;;-1:-1:-1;;;;;5191:18:388;;;5179:31;;5254:11;;;5248:18;5244:27;5230:12;;;5223:49;5292:12;;;;5327:15;;;;5164:1;5067:9;5038:314;;5383:250;5468:1;5478:113;5492:6;5489:1;5486:13;5478:113;;;5568:11;;;5562:18;5549:11;;;5542:39;5514:2;5507:10;5478:113;;;-1:-1:-1;;5625:1:388;5607:16;;5600:27;5383:250::o;5638:271::-;5680:3;5718:5;5712:12;5745:6;5740:3;5733:19;5761:76;5830:6;5823:4;5818:3;5814:14;5807:4;5800:5;5796:16;5761:76;:::i;:::-;5891:2;5870:15;-1:-1:-1;;5866:29:388;5857:39;;;;5898:4;5853:50;;5638:271;-1:-1:-1;;5638:271:388:o;5914:572::-;6004:5;5998:12;5993:3;5986:25;6060:4;6053:5;6049:16;6043:23;6036:4;6031:3;6027:14;6020:47;6116:4;6109:5;6105:16;6099:23;6092:4;6087:3;6083:14;6076:47;6172:4;6165:5;6161:16;6155:23;6148:4;6143:3;6139:14;6132:47;6228:4;6221:5;6217:16;6211:23;6204:4;6199:3;6195:14;6188:47;6284:4;6277:5;6273:16;6267:23;6260:4;6255:3;6251:14;6244:47;6340:4;6333:5;6329:16;6323:23;6316:4;6311:3;6307:14;6300:47;6396:4;6389:5;6385:16;6379:23;6372:4;6367:3;6363:14;6356:47;6422:6;6475:2;6468:5;6464:14;6458:21;6453:2;6448:3;6444:12;6437:43;;5914:572;;:::o;6491:1678::-;6603:12;;-1:-1:-1;;;;;80:31:388;68:44;;6541:3;6569:6;6667:4;6660:5;6656:16;6650:23;6705:2;6698:4;6693:3;6689:14;6682:26;6729:45;6770:2;6765:3;6761:12;6747;6729:45;:::i;:::-;6717:57;;;6822:4;6815:5;6811:16;6805:23;6837:50;6881:4;6876:3;6872:14;6856;-1:-1:-1;;;;;80:31:388;68:44;;14:104;6837:50;;6935:4;6928:5;6924:16;6918:23;6950:68;7012:4;7007:3;7003:14;6987;6950:68;:::i;:::-;-1:-1:-1;7054:4:388;7043:16;;7037:23;7079:6;7101:12;;;7094:24;;;;7154:4;7143:16;;7137:23;7179:6;7201:12;;;7194:24;;;;7254:4;7243:16;;7237:23;7279:6;7301:12;;;7294:24;;;;7354:4;7343:16;;7337:23;7379:6;7401:12;;;7394:24;;;;7455:6;7444:18;;7438:25;7483:6;7505:13;;;7498:26;;;;7561:6;7550:18;;7544:25;7589:6;7611:13;;;7604:26;;;;7681:6;7670:18;;7664:25;7655:6;7646:16;;7639:51;7741:6;7730:18;;7724:25;7715:6;7706:16;;7699:51;7790:14;;;7784:21;7775:6;7766:16;;7759:47;7846:14;;;7840:21;7831:6;7822:16;;7815:47;7902:14;;;7896:21;7887:6;7878:16;;7871:47;7958:14;;7952:21;7943:6;7934:16;;7927:47;8014:15;;8008:22;7999:6;7990:16;;7983:48;8068:15;;8062:22;2767:4;2756:16;;8135:6;8126:16;;2744:29;-1:-1:-1;8159:4:388;6491:1678;-1:-1:-1;;;6491:1678:388:o;8174:632::-;8234:3;8272:5;8266:12;8299:6;8294:3;8287:19;8325:4;8366:2;8361:3;8357:12;8391:11;8418;8411:18;;8468:6;8465:1;8461:14;8454:5;8450:26;8438:38;;8510:2;8503:5;8499:14;8531:1;8541:239;8555:6;8552:1;8549:13;8541:239;;;8626:5;8620:4;8616:16;8611:3;8604:29;8654:46;8695:4;8686:6;8680:13;8654:46;:::i;:::-;8758:12;;;;8646:54;-1:-1:-1;8723:15:388;;;;8577:1;8570:9;8541:239;;8811:320;9042:2;9031:9;9024:21;9005:4;9062:63;9121:2;9110:9;9106:18;9098:6;9062:63;:::i;9136:1422::-;9354:4;9383:2;9423;9412:9;9408:18;9453:2;9442:9;9435:21;9476:6;9511;9505:13;9542:6;9534;9527:22;9568:2;9558:12;;9601:2;9590:9;9586:18;9579:25;;9663:2;9653:6;9650:1;9646:14;9635:9;9631:30;9627:39;9701:2;9693:6;9689:15;9722:1;9732:797;9746:6;9743:1;9740:13;9732:797;;;9811:22;;;-1:-1:-1;;9807:36:388;9795:49;;9867:13;;9939:9;;9950:4;9935:20;9920:36;;9999:11;;;9993:18;9976:15;;;9969:43;10055:11;;;10049:18;10032:15;;;10025:43;10091:4;10138:11;;;10132:18;10115:15;;;10108:43;10174:4;10225:11;;;10219:18;-1:-1:-1;;;;;10215:44:388;10198:15;;;10191:69;10247:3;10326:11;;;10320:18;9903:4;10358:15;;;10351:27;;;10320:18;10401:48;10433:15;;;10320:18;10401:48;:::i;:::-;10507:12;;;;10391:58;-1:-1:-1;;;10472:15:388;;;;9768:1;9761:9;9732:797;;;-1:-1:-1;10546:6:388;;9136:1422;-1:-1:-1;;;;;;;;9136:1422:388:o;10563:896::-;10808:2;10860:21;;;10930:13;;10833:18;;;10952:22;;;10779:4;;10808:2;11031:15;;;;11005:2;10990:18;;;10779:4;11074:359;11088:6;11085:1;11082:13;11074:359;;;11147:13;;11189:9;;-1:-1:-1;;;;;11185:35:388;11173:48;;11260:11;;11254:18;11285:64;11336:12;;;11254:18;11285:64;:::i;:::-;-1:-1:-1;11408:15:388;;;;11378:6;11369:16;;;;;11110:1;11103:9;11074:359;;;-1:-1:-1;11450:3:388;;10563:896;-1:-1:-1;;;;;;10563:896:388:o;11464:1206::-;11538:3;11576:5;11570:12;11603:6;11598:3;11591:19;11629:4;11670:2;11665:3;11661:12;11695:11;11722;11715:18;;11772:6;11769:1;11765:14;11758:5;11754:26;11742:38;;11814:2;11807:5;11803:14;11835:1;11845:799;11859:6;11856:1;11853:13;11845:799;;;11930:5;11924:4;11920:16;11915:3;11908:29;11966:6;11960:13;11996:4;12039:2;12033:9;12068:2;12062:4;12055:16;12098:54;12148:2;12142:4;12138:13;12124:12;12098:54;:::i;:::-;12193:11;;;12187:18;12286:21;;-1:-1:-1;;;;;12282:30:388;;;12267:13;;;12260:53;12354:23;;;12348:30;12438:23;;12401:2;12423:13;;;12416:46;;;;12507:23;;;12501:30;12497:39;12492:2;12482:13;;;12475:62;;;;-1:-1:-1;12622:12:388;;;;12084:68;-1:-1:-1;12587:15:388;;;;12245:1;11874:9;11845:799;;12675:362;12934:2;12923:9;12916:21;12897:4;12954:77;13027:2;13016:9;13012:18;13004:6;12954:77;:::i;13042:360::-;13096:3;13140:5;13134:12;13167:4;13162:3;13155:17;13193:47;13234:4;13229:3;13225:14;13211:12;13193:47;:::i;:::-;13181:59;;13288:4;13281:5;13277:16;13271:23;13336:3;13330:4;13326:14;13319:4;13314:3;13310:14;13303:38;13357:39;13391:4;13375:14;13357:39;:::i;:::-;13350:46;13042:360;-1:-1:-1;;;;;13042:360:388:o;13407:272::-;13596:2;13585:9;13578:21;13559:4;13616:57;13669:2;13658:9;13654:18;13646:6;13616:57;:::i;13684:535::-;14003:2;13992:9;13985:21;13966:4;14029:57;14082:2;14071:9;14067:18;14059:6;14029:57;:::i;:::-;14134:9;14126:6;14122:22;14117:2;14106:9;14102:18;14095:50;14162:51;14206:6;14198;14162:51;:::i;14224:577::-;14571:2;14560:9;14553:21;14534:4;14597:57;14650:2;14639:9;14635:18;14627:6;14597:57;:::i;:::-;14702:9;14694:6;14690:22;14685:2;14674:9;14670:18;14663:50;14730:65;14788:6;14780;14730:65;:::i;14938:127::-;14999:10;14994:3;14990:20;14987:1;14980:31;15030:4;15027:1;15020:15;15054:4;15051:1;15044:15;15070:128;15137:9;;;15158:11;;;15155:37;;;15172:18;;:::i;15203:127::-;15264:10;15259:3;15255:20;15252:1;15245:31;15295:4;15292:1;15285:15;15319:4;15316:1;15309:15;15335:168;15408:9;;;15439;;15456:15;;;15450:22;;15436:37;15426:71;;15477:18;;:::i;15508:217::-;15548:1;15574;15564:132;;15618:10;15613:3;15609:20;15606:1;15599:31;15653:4;15650:1;15643:15;15681:4;15678:1;15671:15;15564:132;-1:-1:-1;15710:9:388;;15508:217::o;15730:287::-;15859:3;15897:6;15891:13;15913:66;15972:6;15967:3;15960:4;15952:6;15948:17;15913:66;:::i;:::-;15995:16;;;;;15730:287;-1:-1:-1;;15730:287:388:o;16380:220::-;16529:2;16518:9;16511:21;16492:4;16549:45;16590:2;16579:9;16575:18;16567:6;16549:45;:::i", + "linkReferences": {}, + "immutableReferences": { + "79090": [ + { "start": 229, "length": 32 }, + { "start": 567, "length": 32 } + ] + } + }, + "methodIdentifiers": { + "CONFIG_ENGINE()": "5e5eef7a", + "assetsEModeUpdates()": "92287095", + "borrowsUpdates()": "1850edd8", + "capsUpdates()": "95a93cb1", + "collateralsUpdates()": "2b179434", + "eModeCategoriesUpdates()": "ca8e89cc", + "execute()": "61461954", + "getPoolContext()": "fbb256f6", + "newListings()": "c0a25580", + "newListingsCustom()": "fabe3463", + "priceFeedsUpdates()": "b1af0d0d", + "rateStrategiesUpdates()": "d0c38c27" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"CONFIG_ENGINE\",\"outputs\":[{\"internalType\":\"contract IAaveV3ConfigEngine\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"assetsEModeUpdates\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"eModeCategory\",\"type\":\"uint8\"}],\"internalType\":\"struct IAaveV3ConfigEngine.AssetEModeUpdate[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"borrowsUpdates\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"enabledToBorrow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"flashloanable\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stableRateModeEnabled\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowableInIsolation\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withSiloedBorrowing\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveFactor\",\"type\":\"uint256\"}],\"internalType\":\"struct IAaveV3ConfigEngine.BorrowUpdate[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"capsUpdates\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"supplyCap\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowCap\",\"type\":\"uint256\"}],\"internalType\":\"struct IAaveV3ConfigEngine.CapsUpdate[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"collateralsUpdates\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"ltv\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liqThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liqBonus\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"debtCeiling\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liqProtocolFee\",\"type\":\"uint256\"}],\"internalType\":\"struct IAaveV3ConfigEngine.CollateralUpdate[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eModeCategoriesUpdates\",\"outputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"eModeCategory\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"ltv\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liqThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liqBonus\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"priceSource\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"label\",\"type\":\"string\"}],\"internalType\":\"struct IAaveV3ConfigEngine.EModeCategoryUpdate[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolContext\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"networkName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"networkAbbreviation\",\"type\":\"string\"}],\"internalType\":\"struct IAaveV3ConfigEngine.PoolContext\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"newListings\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"assetSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"optimalUsageRatio\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseVariableBorrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"variableRateSlope1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"variableRateSlope2\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stableRateSlope1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stableRateSlope2\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseStableRateOffset\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stableRateExcessOffset\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"optimalStableToTotalDebtRatio\",\"type\":\"uint256\"}],\"internalType\":\"struct IV3RateStrategyFactory.RateStrategyParams\",\"name\":\"rateStrategyParams\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"enabledToBorrow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stableRateModeEnabled\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowableInIsolation\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withSiloedBorrowing\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"flashloanable\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ltv\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liqThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liqBonus\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"supplyCap\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowCap\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"debtCeiling\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liqProtocolFee\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"eModeCategory\",\"type\":\"uint8\"}],\"internalType\":\"struct IAaveV3ConfigEngine.Listing[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"newListingsCustom\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"assetSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"optimalUsageRatio\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseVariableBorrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"variableRateSlope1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"variableRateSlope2\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stableRateSlope1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stableRateSlope2\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseStableRateOffset\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stableRateExcessOffset\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"optimalStableToTotalDebtRatio\",\"type\":\"uint256\"}],\"internalType\":\"struct IV3RateStrategyFactory.RateStrategyParams\",\"name\":\"rateStrategyParams\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"enabledToBorrow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stableRateModeEnabled\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowableInIsolation\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withSiloedBorrowing\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"flashloanable\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ltv\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liqThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liqBonus\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"supplyCap\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowCap\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"debtCeiling\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liqProtocolFee\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"eModeCategory\",\"type\":\"uint8\"}],\"internalType\":\"struct IAaveV3ConfigEngine.Listing\",\"name\":\"base\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"aToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sToken\",\"type\":\"address\"}],\"internalType\":\"struct IAaveV3ConfigEngine.TokenImplementations\",\"name\":\"implementations\",\"type\":\"tuple\"}],\"internalType\":\"struct IAaveV3ConfigEngine.ListingWithCustomImpl[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"priceFeedsUpdates\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"}],\"internalType\":\"struct IAaveV3ConfigEngine.PriceFeedUpdate[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rateStrategiesUpdates\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"optimalUsageRatio\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseVariableBorrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"variableRateSlope1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"variableRateSlope2\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stableRateSlope1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stableRateSlope2\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseStableRateOffset\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stableRateExcessOffset\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"optimalStableToTotalDebtRatio\",\"type\":\"uint256\"}],\"internalType\":\"struct IV3RateStrategyFactory.RateStrategyParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"internalType\":\"struct IAaveV3ConfigEngine.RateStrategyUpdate[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave Chan Initiative - Snapshot: https://snapshot.org/#/aave.eth/proposal/0xb8790aeb32267062c1500deb613ad15ebd5deac4d78d1786cb1690c12d0512c9 - Discussion: https://governance.aave.com/t/arfc-update-steth-and-weth-risk-params-on-aave-v3-ethereum-optimism-and-arbitrum/16168\",\"kind\":\"dev\",\"methods\":{\"assetsEModeUpdates()\":{\"details\":\"to be defined in the child with a list of assets for which eMode categories to update\"},\"borrowsUpdates()\":{\"details\":\"to be defined in the child with a list of borrows' params to update\"},\"capsUpdates()\":{\"details\":\"to be defined in the child with a list of caps to update\"},\"collateralsUpdates()\":{\"details\":\"to be defined in the child with a list of collaterals' params to update\"},\"eModeCategoriesUpdates()\":{\"details\":\"to be defined in the child with a list of eMode categories to update\"},\"getPoolContext()\":{\"details\":\"the lack of support for immutable strings kinds of forces for this Besides that, it can actually be useful being able to change the naming, but remote\"},\"newListings()\":{\"details\":\"to be defined in the child with a list of new assets to list\"},\"newListingsCustom()\":{\"details\":\"to be defined in the child with a list of new assets to list (with custom a/v/s tokens implementations)\"},\"priceFeedsUpdates()\":{\"details\":\"to be defined in the child with a list of priceFeeds to update\"},\"rateStrategiesUpdates()\":{\"details\":\"to be defined in the child with a list of set of parameters of rate strategies\"}},\"title\":\"Update stETH and WETH Risk Params on Aave v3 Ethereum, Optimism and Arbitrum\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/20240121_Multi_UpdateStETHAndWETHRiskParamsOnAaveV3EthereumOptimismAndArbitrum/AaveV3Ethereum_UpdateStETHAndWETHRiskParamsOnAaveV3EthereumOptimismAndArbitrum_20240121.sol\":\"AaveV3Ethereum_UpdateStETHAndWETHRiskParamsOnAaveV3EthereumOptimismAndArbitrum_20240121\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@aave/core-v3/=lib/aave-helpers/lib/aave-address-book/lib/aave-v3-core/\",\":@aave/periphery-v3/=lib/aave-helpers/lib/aave-address-book/lib/aave-v3-periphery/\",\":aave-address-book/=lib/aave-helpers/lib/aave-address-book/src/\",\":aave-helpers/=lib/aave-helpers/src/\",\":aave-v3-core/=lib/aave-helpers/lib/aave-address-book/lib/aave-v3-core/\",\":aave-v3-periphery/=lib/aave-helpers/lib/aave-address-book/lib/aave-v3-periphery/\",\":ds-test/=lib/aave-helpers/lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/aave-helpers/lib/forge-std/src/\",\":governance-crosschain-bridges/=lib/aave-helpers/lib/governance-crosschain-bridges/\",\":solidity-utils/=lib/aave-helpers/lib/solidity-utils/src/\"]},\"sources\":{\"lib/aave-helpers/lib/aave-address-book/lib/aave-v3-core/contracts/dependencies/chainlink/AggregatorInterface.sol\":{\"keccak256\":\"0x07df0744d1a393c574d7ee11b75a1690a82f3136a79c76b933724872298bf718\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://adf997c99c7d02ddc3f40da8d8c5b3fb98d7e815d89e2f009a18826115ddaf5b\",\"dweb:/ipfs/QmYGARhfrQUTM12obkZStw8vJzfkPuuVXC8xVvb3vyFapH\"]},\"lib/aave-helpers/lib/aave-address-book/lib/aave-v3-core/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://d327db93b636790909aa137124f30a856ac1631cb79c476aa188f9627fda8d03\",\"dweb:/ipfs/QmaxpmEoBFioeNYmpxJemyZ7aYF2nX1NKW1XDqREm7i6es\"]},\"lib/aave-helpers/lib/aave-address-book/lib/aave-v3-core/contracts/interfaces/IACLManager.sol\":{\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://e509aa66e54f44ce2d2e1b49639ed60a6b2decd17694f60052b02ad1c2c65f34\",\"dweb:/ipfs/QmZtjZk7KcfRJrqSsMA4BUjBzFBynp6fPZ8eDNKLKLaY1P\"]},\"lib/aave-helpers/lib/aave-address-book/lib/aave-v3-core/contracts/interfaces/IAToken.sol\":{\"keccak256\":\"0x4ec2e3180174f248c9308e03fa837d44ca91ca6c1ad67c9951a2951d46948417\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://764b8e56a62c7277efdd6dc29e1ce3f88cb997613a3142a79effa5b3d908a3fa\",\"dweb:/ipfs/QmWAF7rDjyVqkwDR6RGRwYvB3V2fe3T7G1ZSC9UuHjAAZf\"]},\"lib/aave-helpers/lib/aave-address-book/lib/aave-v3-core/contracts/interfaces/IAaveIncentivesController.sol\":{\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://b17473265a3ec2ec73dac797e0e60c147590f4e5cc7016f8eb61efbe072c49e0\",\"dweb:/ipfs/QmchQGeuyUw3VW4Kgwfg5Ys9ky1F7Q6QCcKbywbRaEUPt7\"]},\"lib/aave-helpers/lib/aave-address-book/lib/aave-v3-core/contracts/interfaces/IAaveOracle.sol\":{\"keccak256\":\"0x15942c0df4ce9f50a9cf172c9ed0efa0abbf841cd8560fbd0da3d6a7dea69a96\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://9eefeb1b2df351e6b766745bb9d0e115ec0c4266c8c47e126395eb4d992e0738\",\"dweb:/ipfs/QmVGeZY3E2SYHnoDYtcUmdJBecD99tDcRRNdkFj8N534Nj\"]},\"lib/aave-helpers/lib/aave-address-book/lib/aave-v3-core/contracts/interfaces/IDefaultInterestRateStrategy.sol\":{\"keccak256\":\"0xb7351f5dc779d86fc6d4aafb2fe48622b2dae3a00724923b8cd92b5c676ca893\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://6a30e8756c9aace5a326a23fa42ca66da6af9e926b0a9d6119174edb1c8bc209\",\"dweb:/ipfs/QmdWvsCdZBk2LkrxSCWokrSzcH85kzsq2dUPhMoVLA1n3g\"]},\"lib/aave-helpers/lib/aave-address-book/lib/aave-v3-core/contracts/interfaces/IInitializableAToken.sol\":{\"keccak256\":\"0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://67af6435a258e6d08151b0c37884475e040c2939c76cfb0ba7afd6264c45be87\",\"dweb:/ipfs/Qmf5wup15foyfWrGvhiZDyasJn9XZFn4Vs14Dui9smeLa3\"]},\"lib/aave-helpers/lib/aave-address-book/lib/aave-v3-core/contracts/interfaces/IPool.sol\":{\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://c6ff6221de0ea877932c73c0b99d3e4535f293053ae44f9f9d6b9d265e9af2f6\",\"dweb:/ipfs/QmSTaEKrhz1xNVnx4oBzWw8DenYPShVzJoP1A9GTEWkAzX\"]},\"lib/aave-helpers/lib/aave-address-book/lib/aave-v3-core/contracts/interfaces/IPoolAddressesProvider.sol\":{\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://978336a2a40229ccc7749344be890862ea12e17e9fffe5bb977ba3841de07b5a\",\"dweb:/ipfs/QmScNrQfDSPg1afJmkCty6fZkETUrWTmEXWeTmHoe7mSqa\"]},\"lib/aave-helpers/lib/aave-address-book/lib/aave-v3-core/contracts/interfaces/IPoolConfigurator.sol\":{\"keccak256\":\"0xd9083035ef01cdab5f60a04f817f3449814f37d5ade136a3d4734447ede04d71\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://08c658fd49f28384b75d21589a912b5b015906e7fef36f90c4f96b55df47474b\",\"dweb:/ipfs/QmQDaJaqKpTR4oxgxkSiPDLvotiu74JhxUknRaZjFcA9LX\"]},\"lib/aave-helpers/lib/aave-address-book/lib/aave-v3-core/contracts/interfaces/IPoolDataProvider.sol\":{\"keccak256\":\"0xeb42959448d545d6ee49985e4212f54d01fe3c653f6f65cfc4061983df39bf1e\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://6165d1444e0b816218a66a7267bfa047b5fdf2dd5419e2479e39a10ae84bcace\",\"dweb:/ipfs/QmV4ncV693y6a5Y8VLGvwemoYKyKYoeT7sAtf73DLeF4Do\"]},\"lib/aave-helpers/lib/aave-address-book/lib/aave-v3-core/contracts/interfaces/IPriceOracleGetter.sol\":{\"keccak256\":\"0xfe72e94869ca91465a7f57282b8d367b2c9ba798fdc13ac8546304db8d971df6\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://17eb0014e4dd33c8a177ff6a80aea1361d40cda65f0e832484d9dad9c80c9aea\",\"dweb:/ipfs/QmVNsRx7bJjKmgfTVnpArCRRFGAyds2d5pY4sigcvgmxtf\"]},\"lib/aave-helpers/lib/aave-address-book/lib/aave-v3-core/contracts/interfaces/IReserveInterestRateStrategy.sol\":{\"keccak256\":\"0x9028d29b6fda6f89b887a627ce5e03a401c4ccac98bfe14afcaf69ff09312202\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://f74116d7c2a230f3b09b42d5173d10edcea72b6eb9cfc576afcf793ff56a1f8f\",\"dweb:/ipfs/QmbFHdYfv9fHoNBRDVFEPkhPro5Z3LNmpeGmwt3LKFRUSZ\"]},\"lib/aave-helpers/lib/aave-address-book/lib/aave-v3-core/contracts/interfaces/IScaledBalanceToken.sol\":{\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://a5907c61cf65126001feebd94c7a869eff95045106d97e21bf7f0d3de22caf9d\",\"dweb:/ipfs/QmPARkA7YpsBtd1F3JgszZREJk6TAkqRLBkjWZUadCu3sM\"]},\"lib/aave-helpers/lib/aave-address-book/lib/aave-v3-core/contracts/protocol/libraries/helpers/Errors.sol\":{\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://a405589e8bb12568d3d4dbf936bcf40c43964170f3bbf380483e9df4d73f2cf7\",\"dweb:/ipfs/QmXCtAp2iom96rZnQWGDehxuPszgn6SMuB3mJcHzCq9uwx\"]},\"lib/aave-helpers/lib/aave-address-book/lib/aave-v3-core/contracts/protocol/libraries/math/WadRayMath.sol\":{\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://d2814d57ad47ba13959bf9a108c25374828a370f8d64b5adb7564876927a3a06\",\"dweb:/ipfs/Qmf9xfz7svNZAzgUHUTAj6gVC7SHiT7S4obfo1Sg1Fwzbx\"]},\"lib/aave-helpers/lib/aave-address-book/lib/aave-v3-core/contracts/protocol/libraries/types/ConfiguratorInputTypes.sol\":{\"keccak256\":\"0x1fb622bd7b4f68289b727a824c92ab4c05b06f4aa8308c7d2b0ccb0f9ae63b0b\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://37c68350d3d1058fcaae083f1e20e5d0d4bd13129921d3b83fbc8a1c45ca3a92\",\"dweb:/ipfs/QmdjpmtfBU76iHHozn23k5F1TagU1KQGyLd8nmvZ6CJ1yM\"]},\"lib/aave-helpers/lib/aave-address-book/lib/aave-v3-core/contracts/protocol/libraries/types/DataTypes.sol\":{\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://0f41689d1d58bc13678c749bae8830f5a8b19b89cd135e962bf07d483350f828\",\"dweb:/ipfs/QmQSNGDxjYGqT1GU2CZzsWUTNcAtcfkg1jDGTH516nCAfN\"]},\"lib/aave-helpers/lib/aave-address-book/src/AaveV3.sol\":{\"keccak256\":\"0xedb11299928dd4efd31ba54315f52c8e183fa27c5a78220501db5f82eacc6689\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40b1347c1106a9566bfaeb2a7393dea48cf271875a92075fab21302619822aee\",\"dweb:/ipfs/QmbmJBtinfYkutrS3tF3itUXjcNFmfuxfbtByhLQHy6iNG\"]},\"lib/aave-helpers/lib/aave-address-book/src/AaveV3Ethereum.sol\":{\"keccak256\":\"0x7ddefb2c9906dc0152144e26f37e7617f1f7f372681f3bf8c718235736b8bac5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9e9edb169e229b7df544a4e76db07d44144a4e7e5ebcb2753f9388a2b68eb9c0\",\"dweb:/ipfs/QmY5UxpcSe4gyKYZEoRJXvF1Jz3HcQc8NsTyuLhRoiYZx7\"]},\"lib/aave-helpers/lib/aave-address-book/src/common/ICollector.sol\":{\"keccak256\":\"0x5ecc457aff4929798a98357cff25772e71657e7005a2ad4aa224f8f4b4d48c9a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://86699d1299c2ef0de37999926584844451ee8fcceb954a4f11b142fe00c27112\",\"dweb:/ipfs/QmZzvLxFC47KDDF4J7Q4fKs3hvFK6X7f8zH9bGZHGizvxG\"]},\"lib/aave-helpers/lib/solidity-utils/src/contracts/oz-common/Address.sol\":{\"keccak256\":\"0xe641fb89c32466792ed9877ec915c699acfe5c04c655cf9e67738093a40c962c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://597b0804825a4c6acbec4e466f30138a527da64a8dd3cc7ae69a68d046e8852e\",\"dweb:/ipfs/QmVvhwnnWvMkaYNcfyeihW1ajwDiGhVV6KcTNoPD9HCVym\"]},\"lib/aave-helpers/src/v3-config-engine/AaveV3Payload.sol\":{\"keccak256\":\"0xe49fc3362217749814995505a2f65a1e68c8b55a379c28a09d085fe7195be46d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://751b1653cc16ae433462cb315b9a6594e8d2233e0c69e5bde1e2f715f82651e7\",\"dweb:/ipfs/QmR3xxuL9DZiz4NN63oKwYG15x8syJp5acXaHStTNET4pp\"]},\"lib/aave-helpers/src/v3-config-engine/AaveV3PayloadEthereum.sol\":{\"keccak256\":\"0xc0ae21b9e18ad59e6b22a2e5ddc0b33681e3922ff1cdb01028b72e0e9d0972b6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d365969ebe7ad8496efb511ad66f0d25e865e4a100a33529b1c4a217601acd64\",\"dweb:/ipfs/Qmd8PPUj71ZjwHyNHGPRGTkoocohNsmaez7ftrwDcFSBZr\"]},\"lib/aave-helpers/src/v3-config-engine/EngineFlags.sol\":{\"keccak256\":\"0xe281d7f8c87102afa8d96e7199c7c55ea364b59b07b6edf8519ddd22a0904534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e8c79ba96ae150906634c44860eb1854c09d796885e9935d853926116a1af5e6\",\"dweb:/ipfs/QmZ9hW3Zvv4WA9U1H9YTc96a3R3SfkmgXvSZM6BsYEQJmX\"]},\"lib/aave-helpers/src/v3-config-engine/IAaveV3ConfigEngine.sol\":{\"keccak256\":\"0x00119084de65f6cd5617ca6bb1804ba94ff357afdcb906a14b7e707a89d4eaf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://64b4954ab1a8166c20d32d65f4b981632d92e005358e3a7831d4b865b6dfbeb1\",\"dweb:/ipfs/QmbtVdH5JaLxvxcASqqVvwK1Ck81rqgQqip8FqwpDsZqyq\"]},\"lib/aave-helpers/src/v3-config-engine/IV3RateStrategyFactory.sol\":{\"keccak256\":\"0x2aab7dbb9f358259722eb5f00ddbbcf5c8f089a0c0b7794d804525abb37a5d0f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d35e9f7fcb122325cc3ea665c18df8fec79009b118f6f533c899e8531594a0d5\",\"dweb:/ipfs/QmS4LQLJpJBpkoTPuQpAdCTBPsMzBeaeG3dhLYB6ZBQti8\"]},\"src/20240121_Multi_UpdateStETHAndWETHRiskParamsOnAaveV3EthereumOptimismAndArbitrum/AaveV3Ethereum_UpdateStETHAndWETHRiskParamsOnAaveV3EthereumOptimismAndArbitrum_20240121.sol\":{\"keccak256\":\"0x5637f92c13da752e2906d33f474c67b44768bcb8e0c5540d0852793873db2cab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://584a323fc8f5dbd923295a89170fc6771d97f5a72af27f1708cfe20345b83bde\",\"dweb:/ipfs/QmPWdtvvZKNySUMACvCyun4hpNW28K1WRE4RDct2PqB4iy\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.19+commit.7dd6d404" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "CONFIG_ENGINE", + "outputs": [{ "internalType": "contract IAaveV3ConfigEngine", "name": "", "type": "address" }] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "assetsEModeUpdates", + "outputs": [ + { + "internalType": "struct IAaveV3ConfigEngine.AssetEModeUpdate[]", + "name": "", + "type": "tuple[]", + "components": [ + { "internalType": "address", "name": "asset", "type": "address" }, + { "internalType": "uint8", "name": "eModeCategory", "type": "uint8" } + ] + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "borrowsUpdates", + "outputs": [ + { + "internalType": "struct IAaveV3ConfigEngine.BorrowUpdate[]", + "name": "", + "type": "tuple[]", + "components": [ + { "internalType": "address", "name": "asset", "type": "address" }, + { "internalType": "uint256", "name": "enabledToBorrow", "type": "uint256" }, + { "internalType": "uint256", "name": "flashloanable", "type": "uint256" }, + { "internalType": "uint256", "name": "stableRateModeEnabled", "type": "uint256" }, + { "internalType": "uint256", "name": "borrowableInIsolation", "type": "uint256" }, + { "internalType": "uint256", "name": "withSiloedBorrowing", "type": "uint256" }, + { "internalType": "uint256", "name": "reserveFactor", "type": "uint256" } + ] + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "capsUpdates", + "outputs": [ + { + "internalType": "struct IAaveV3ConfigEngine.CapsUpdate[]", + "name": "", + "type": "tuple[]", + "components": [ + { "internalType": "address", "name": "asset", "type": "address" }, + { "internalType": "uint256", "name": "supplyCap", "type": "uint256" }, + { "internalType": "uint256", "name": "borrowCap", "type": "uint256" } + ] + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "collateralsUpdates", + "outputs": [ + { + "internalType": "struct IAaveV3ConfigEngine.CollateralUpdate[]", + "name": "", + "type": "tuple[]", + "components": [ + { "internalType": "address", "name": "asset", "type": "address" }, + { "internalType": "uint256", "name": "ltv", "type": "uint256" }, + { "internalType": "uint256", "name": "liqThreshold", "type": "uint256" }, + { "internalType": "uint256", "name": "liqBonus", "type": "uint256" }, + { "internalType": "uint256", "name": "debtCeiling", "type": "uint256" }, + { "internalType": "uint256", "name": "liqProtocolFee", "type": "uint256" } + ] + } + ] + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "eModeCategoriesUpdates", + "outputs": [ + { + "internalType": "struct IAaveV3ConfigEngine.EModeCategoryUpdate[]", + "name": "", + "type": "tuple[]", + "components": [ + { "internalType": "uint8", "name": "eModeCategory", "type": "uint8" }, + { "internalType": "uint256", "name": "ltv", "type": "uint256" }, + { "internalType": "uint256", "name": "liqThreshold", "type": "uint256" }, + { "internalType": "uint256", "name": "liqBonus", "type": "uint256" }, + { "internalType": "address", "name": "priceSource", "type": "address" }, + { "internalType": "string", "name": "label", "type": "string" } + ] + } + ] + }, + { "inputs": [], "stateMutability": "nonpayable", "type": "function", "name": "execute" }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "getPoolContext", + "outputs": [ + { + "internalType": "struct IAaveV3ConfigEngine.PoolContext", + "name": "", + "type": "tuple", + "components": [ + { "internalType": "string", "name": "networkName", "type": "string" }, + { "internalType": "string", "name": "networkAbbreviation", "type": "string" } + ] + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "newListings", + "outputs": [ + { + "internalType": "struct IAaveV3ConfigEngine.Listing[]", + "name": "", + "type": "tuple[]", + "components": [ + { "internalType": "address", "name": "asset", "type": "address" }, + { "internalType": "string", "name": "assetSymbol", "type": "string" }, + { "internalType": "address", "name": "priceFeed", "type": "address" }, + { + "internalType": "struct IV3RateStrategyFactory.RateStrategyParams", + "name": "rateStrategyParams", + "type": "tuple", + "components": [ + { "internalType": "uint256", "name": "optimalUsageRatio", "type": "uint256" }, + { "internalType": "uint256", "name": "baseVariableBorrowRate", "type": "uint256" }, + { "internalType": "uint256", "name": "variableRateSlope1", "type": "uint256" }, + { "internalType": "uint256", "name": "variableRateSlope2", "type": "uint256" }, + { "internalType": "uint256", "name": "stableRateSlope1", "type": "uint256" }, + { "internalType": "uint256", "name": "stableRateSlope2", "type": "uint256" }, + { "internalType": "uint256", "name": "baseStableRateOffset", "type": "uint256" }, + { "internalType": "uint256", "name": "stableRateExcessOffset", "type": "uint256" }, + { "internalType": "uint256", "name": "optimalStableToTotalDebtRatio", "type": "uint256" } + ] + }, + { "internalType": "uint256", "name": "enabledToBorrow", "type": "uint256" }, + { "internalType": "uint256", "name": "stableRateModeEnabled", "type": "uint256" }, + { "internalType": "uint256", "name": "borrowableInIsolation", "type": "uint256" }, + { "internalType": "uint256", "name": "withSiloedBorrowing", "type": "uint256" }, + { "internalType": "uint256", "name": "flashloanable", "type": "uint256" }, + { "internalType": "uint256", "name": "ltv", "type": "uint256" }, + { "internalType": "uint256", "name": "liqThreshold", "type": "uint256" }, + { "internalType": "uint256", "name": "liqBonus", "type": "uint256" }, + { "internalType": "uint256", "name": "reserveFactor", "type": "uint256" }, + { "internalType": "uint256", "name": "supplyCap", "type": "uint256" }, + { "internalType": "uint256", "name": "borrowCap", "type": "uint256" }, + { "internalType": "uint256", "name": "debtCeiling", "type": "uint256" }, + { "internalType": "uint256", "name": "liqProtocolFee", "type": "uint256" }, + { "internalType": "uint8", "name": "eModeCategory", "type": "uint8" } + ] + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "newListingsCustom", + "outputs": [ + { + "internalType": "struct IAaveV3ConfigEngine.ListingWithCustomImpl[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "struct IAaveV3ConfigEngine.Listing", + "name": "base", + "type": "tuple", + "components": [ + { "internalType": "address", "name": "asset", "type": "address" }, + { "internalType": "string", "name": "assetSymbol", "type": "string" }, + { "internalType": "address", "name": "priceFeed", "type": "address" }, + { + "internalType": "struct IV3RateStrategyFactory.RateStrategyParams", + "name": "rateStrategyParams", + "type": "tuple", + "components": [ + { "internalType": "uint256", "name": "optimalUsageRatio", "type": "uint256" }, + { "internalType": "uint256", "name": "baseVariableBorrowRate", "type": "uint256" }, + { "internalType": "uint256", "name": "variableRateSlope1", "type": "uint256" }, + { "internalType": "uint256", "name": "variableRateSlope2", "type": "uint256" }, + { "internalType": "uint256", "name": "stableRateSlope1", "type": "uint256" }, + { "internalType": "uint256", "name": "stableRateSlope2", "type": "uint256" }, + { "internalType": "uint256", "name": "baseStableRateOffset", "type": "uint256" }, + { "internalType": "uint256", "name": "stableRateExcessOffset", "type": "uint256" }, + { "internalType": "uint256", "name": "optimalStableToTotalDebtRatio", "type": "uint256" } + ] + }, + { "internalType": "uint256", "name": "enabledToBorrow", "type": "uint256" }, + { "internalType": "uint256", "name": "stableRateModeEnabled", "type": "uint256" }, + { "internalType": "uint256", "name": "borrowableInIsolation", "type": "uint256" }, + { "internalType": "uint256", "name": "withSiloedBorrowing", "type": "uint256" }, + { "internalType": "uint256", "name": "flashloanable", "type": "uint256" }, + { "internalType": "uint256", "name": "ltv", "type": "uint256" }, + { "internalType": "uint256", "name": "liqThreshold", "type": "uint256" }, + { "internalType": "uint256", "name": "liqBonus", "type": "uint256" }, + { "internalType": "uint256", "name": "reserveFactor", "type": "uint256" }, + { "internalType": "uint256", "name": "supplyCap", "type": "uint256" }, + { "internalType": "uint256", "name": "borrowCap", "type": "uint256" }, + { "internalType": "uint256", "name": "debtCeiling", "type": "uint256" }, + { "internalType": "uint256", "name": "liqProtocolFee", "type": "uint256" }, + { "internalType": "uint8", "name": "eModeCategory", "type": "uint8" } + ] + }, + { + "internalType": "struct IAaveV3ConfigEngine.TokenImplementations", + "name": "implementations", + "type": "tuple", + "components": [ + { "internalType": "address", "name": "aToken", "type": "address" }, + { "internalType": "address", "name": "vToken", "type": "address" }, + { "internalType": "address", "name": "sToken", "type": "address" } + ] + } + ] + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "priceFeedsUpdates", + "outputs": [ + { + "internalType": "struct IAaveV3ConfigEngine.PriceFeedUpdate[]", + "name": "", + "type": "tuple[]", + "components": [ + { "internalType": "address", "name": "asset", "type": "address" }, + { "internalType": "address", "name": "priceFeed", "type": "address" } + ] + } + ] + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "rateStrategiesUpdates", + "outputs": [ + { + "internalType": "struct IAaveV3ConfigEngine.RateStrategyUpdate[]", + "name": "", + "type": "tuple[]", + "components": [ + { "internalType": "address", "name": "asset", "type": "address" }, + { + "internalType": "struct IV3RateStrategyFactory.RateStrategyParams", + "name": "params", + "type": "tuple", + "components": [ + { "internalType": "uint256", "name": "optimalUsageRatio", "type": "uint256" }, + { "internalType": "uint256", "name": "baseVariableBorrowRate", "type": "uint256" }, + { "internalType": "uint256", "name": "variableRateSlope1", "type": "uint256" }, + { "internalType": "uint256", "name": "variableRateSlope2", "type": "uint256" }, + { "internalType": "uint256", "name": "stableRateSlope1", "type": "uint256" }, + { "internalType": "uint256", "name": "stableRateSlope2", "type": "uint256" }, + { "internalType": "uint256", "name": "baseStableRateOffset", "type": "uint256" }, + { "internalType": "uint256", "name": "stableRateExcessOffset", "type": "uint256" }, + { "internalType": "uint256", "name": "optimalStableToTotalDebtRatio", "type": "uint256" } + ] + } + ] + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "assetsEModeUpdates()": { + "details": "to be defined in the child with a list of assets for which eMode categories to update" + }, + "borrowsUpdates()": { "details": "to be defined in the child with a list of borrows' params to update" }, + "capsUpdates()": { "details": "to be defined in the child with a list of caps to update" }, + "collateralsUpdates()": { + "details": "to be defined in the child with a list of collaterals' params to update" + }, + "eModeCategoriesUpdates()": { + "details": "to be defined in the child with a list of eMode categories to update" + }, + "getPoolContext()": { + "details": "the lack of support for immutable strings kinds of forces for this Besides that, it can actually be useful being able to change the naming, but remote" + }, + "newListings()": { "details": "to be defined in the child with a list of new assets to list" }, + "newListingsCustom()": { + "details": "to be defined in the child with a list of new assets to list (with custom a/v/s tokens implementations)" + }, + "priceFeedsUpdates()": { "details": "to be defined in the child with a list of priceFeeds to update" }, + "rateStrategiesUpdates()": { + "details": "to be defined in the child with a list of set of parameters of rate strategies" + } + }, + "version": 1 + }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "settings": { + "remappings": [ + "@aave/core-v3/=lib/aave-helpers/lib/aave-address-book/lib/aave-v3-core/", + "@aave/periphery-v3/=lib/aave-helpers/lib/aave-address-book/lib/aave-v3-periphery/", + "aave-address-book/=lib/aave-helpers/lib/aave-address-book/src/", + "aave-helpers/=lib/aave-helpers/src/", + "aave-v3-core/=lib/aave-helpers/lib/aave-address-book/lib/aave-v3-core/", + "aave-v3-periphery/=lib/aave-helpers/lib/aave-address-book/lib/aave-v3-periphery/", + "ds-test/=lib/aave-helpers/lib/forge-std/lib/ds-test/src/", + "forge-std/=lib/aave-helpers/lib/forge-std/src/", + "governance-crosschain-bridges/=lib/aave-helpers/lib/governance-crosschain-bridges/", + "solidity-utils/=lib/aave-helpers/lib/solidity-utils/src/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { + "src/20240121_Multi_UpdateStETHAndWETHRiskParamsOnAaveV3EthereumOptimismAndArbitrum/AaveV3Ethereum_UpdateStETHAndWETHRiskParamsOnAaveV3EthereumOptimismAndArbitrum_20240121.sol": "AaveV3Ethereum_UpdateStETHAndWETHRiskParamsOnAaveV3EthereumOptimismAndArbitrum_20240121" + }, + "evmVersion": "paris", + "libraries": {} + }, + "sources": { + "lib/aave-helpers/lib/aave-address-book/lib/aave-v3-core/contracts/dependencies/chainlink/AggregatorInterface.sol": { + "keccak256": "0x07df0744d1a393c574d7ee11b75a1690a82f3136a79c76b933724872298bf718", + "urls": [ + "bzz-raw://adf997c99c7d02ddc3f40da8d8c5b3fb98d7e815d89e2f009a18826115ddaf5b", + "dweb:/ipfs/QmYGARhfrQUTM12obkZStw8vJzfkPuuVXC8xVvb3vyFapH" + ], + "license": "MIT" + }, + "lib/aave-helpers/lib/aave-address-book/lib/aave-v3-core/contracts/dependencies/openzeppelin/contracts/IERC20.sol": { + "keccak256": "0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c", + "urls": [ + "bzz-raw://d327db93b636790909aa137124f30a856ac1631cb79c476aa188f9627fda8d03", + "dweb:/ipfs/QmaxpmEoBFioeNYmpxJemyZ7aYF2nX1NKW1XDqREm7i6es" + ], + "license": "AGPL-3.0" + }, + "lib/aave-helpers/lib/aave-address-book/lib/aave-v3-core/contracts/interfaces/IACLManager.sol": { + "keccak256": "0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b", + "urls": [ + "bzz-raw://e509aa66e54f44ce2d2e1b49639ed60a6b2decd17694f60052b02ad1c2c65f34", + "dweb:/ipfs/QmZtjZk7KcfRJrqSsMA4BUjBzFBynp6fPZ8eDNKLKLaY1P" + ], + "license": "AGPL-3.0" + }, + "lib/aave-helpers/lib/aave-address-book/lib/aave-v3-core/contracts/interfaces/IAToken.sol": { + "keccak256": "0x4ec2e3180174f248c9308e03fa837d44ca91ca6c1ad67c9951a2951d46948417", + "urls": [ + "bzz-raw://764b8e56a62c7277efdd6dc29e1ce3f88cb997613a3142a79effa5b3d908a3fa", + "dweb:/ipfs/QmWAF7rDjyVqkwDR6RGRwYvB3V2fe3T7G1ZSC9UuHjAAZf" + ], + "license": "AGPL-3.0" + }, + "lib/aave-helpers/lib/aave-address-book/lib/aave-v3-core/contracts/interfaces/IAaveIncentivesController.sol": { + "keccak256": "0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd", + "urls": [ + "bzz-raw://b17473265a3ec2ec73dac797e0e60c147590f4e5cc7016f8eb61efbe072c49e0", + "dweb:/ipfs/QmchQGeuyUw3VW4Kgwfg5Ys9ky1F7Q6QCcKbywbRaEUPt7" + ], + "license": "AGPL-3.0" + }, + "lib/aave-helpers/lib/aave-address-book/lib/aave-v3-core/contracts/interfaces/IAaveOracle.sol": { + "keccak256": "0x15942c0df4ce9f50a9cf172c9ed0efa0abbf841cd8560fbd0da3d6a7dea69a96", + "urls": [ + "bzz-raw://9eefeb1b2df351e6b766745bb9d0e115ec0c4266c8c47e126395eb4d992e0738", + "dweb:/ipfs/QmVGeZY3E2SYHnoDYtcUmdJBecD99tDcRRNdkFj8N534Nj" + ], + "license": "AGPL-3.0" + }, + "lib/aave-helpers/lib/aave-address-book/lib/aave-v3-core/contracts/interfaces/IDefaultInterestRateStrategy.sol": { + "keccak256": "0xb7351f5dc779d86fc6d4aafb2fe48622b2dae3a00724923b8cd92b5c676ca893", + "urls": [ + "bzz-raw://6a30e8756c9aace5a326a23fa42ca66da6af9e926b0a9d6119174edb1c8bc209", + "dweb:/ipfs/QmdWvsCdZBk2LkrxSCWokrSzcH85kzsq2dUPhMoVLA1n3g" + ], + "license": "AGPL-3.0" + }, + "lib/aave-helpers/lib/aave-address-book/lib/aave-v3-core/contracts/interfaces/IInitializableAToken.sol": { + "keccak256": "0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee", + "urls": [ + "bzz-raw://67af6435a258e6d08151b0c37884475e040c2939c76cfb0ba7afd6264c45be87", + "dweb:/ipfs/Qmf5wup15foyfWrGvhiZDyasJn9XZFn4Vs14Dui9smeLa3" + ], + "license": "AGPL-3.0" + }, + "lib/aave-helpers/lib/aave-address-book/lib/aave-v3-core/contracts/interfaces/IPool.sol": { + "keccak256": "0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f", + "urls": [ + "bzz-raw://c6ff6221de0ea877932c73c0b99d3e4535f293053ae44f9f9d6b9d265e9af2f6", + "dweb:/ipfs/QmSTaEKrhz1xNVnx4oBzWw8DenYPShVzJoP1A9GTEWkAzX" + ], + "license": "AGPL-3.0" + }, + "lib/aave-helpers/lib/aave-address-book/lib/aave-v3-core/contracts/interfaces/IPoolAddressesProvider.sol": { + "keccak256": "0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5", + "urls": [ + "bzz-raw://978336a2a40229ccc7749344be890862ea12e17e9fffe5bb977ba3841de07b5a", + "dweb:/ipfs/QmScNrQfDSPg1afJmkCty6fZkETUrWTmEXWeTmHoe7mSqa" + ], + "license": "AGPL-3.0" + }, + "lib/aave-helpers/lib/aave-address-book/lib/aave-v3-core/contracts/interfaces/IPoolConfigurator.sol": { + "keccak256": "0xd9083035ef01cdab5f60a04f817f3449814f37d5ade136a3d4734447ede04d71", + "urls": [ + "bzz-raw://08c658fd49f28384b75d21589a912b5b015906e7fef36f90c4f96b55df47474b", + "dweb:/ipfs/QmQDaJaqKpTR4oxgxkSiPDLvotiu74JhxUknRaZjFcA9LX" + ], + "license": "AGPL-3.0" + }, + "lib/aave-helpers/lib/aave-address-book/lib/aave-v3-core/contracts/interfaces/IPoolDataProvider.sol": { + "keccak256": "0xeb42959448d545d6ee49985e4212f54d01fe3c653f6f65cfc4061983df39bf1e", + "urls": [ + "bzz-raw://6165d1444e0b816218a66a7267bfa047b5fdf2dd5419e2479e39a10ae84bcace", + "dweb:/ipfs/QmV4ncV693y6a5Y8VLGvwemoYKyKYoeT7sAtf73DLeF4Do" + ], + "license": "AGPL-3.0" + }, + "lib/aave-helpers/lib/aave-address-book/lib/aave-v3-core/contracts/interfaces/IPriceOracleGetter.sol": { + "keccak256": "0xfe72e94869ca91465a7f57282b8d367b2c9ba798fdc13ac8546304db8d971df6", + "urls": [ + "bzz-raw://17eb0014e4dd33c8a177ff6a80aea1361d40cda65f0e832484d9dad9c80c9aea", + "dweb:/ipfs/QmVNsRx7bJjKmgfTVnpArCRRFGAyds2d5pY4sigcvgmxtf" + ], + "license": "AGPL-3.0" + }, + "lib/aave-helpers/lib/aave-address-book/lib/aave-v3-core/contracts/interfaces/IReserveInterestRateStrategy.sol": { + "keccak256": "0x9028d29b6fda6f89b887a627ce5e03a401c4ccac98bfe14afcaf69ff09312202", + "urls": [ + "bzz-raw://f74116d7c2a230f3b09b42d5173d10edcea72b6eb9cfc576afcf793ff56a1f8f", + "dweb:/ipfs/QmbFHdYfv9fHoNBRDVFEPkhPro5Z3LNmpeGmwt3LKFRUSZ" + ], + "license": "AGPL-3.0" + }, + "lib/aave-helpers/lib/aave-address-book/lib/aave-v3-core/contracts/interfaces/IScaledBalanceToken.sol": { + "keccak256": "0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4", + "urls": [ + "bzz-raw://a5907c61cf65126001feebd94c7a869eff95045106d97e21bf7f0d3de22caf9d", + "dweb:/ipfs/QmPARkA7YpsBtd1F3JgszZREJk6TAkqRLBkjWZUadCu3sM" + ], + "license": "AGPL-3.0" + }, + "lib/aave-helpers/lib/aave-address-book/lib/aave-v3-core/contracts/protocol/libraries/helpers/Errors.sol": { + "keccak256": "0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86", + "urls": [ + "bzz-raw://a405589e8bb12568d3d4dbf936bcf40c43964170f3bbf380483e9df4d73f2cf7", + "dweb:/ipfs/QmXCtAp2iom96rZnQWGDehxuPszgn6SMuB3mJcHzCq9uwx" + ], + "license": "BUSL-1.1" + }, + "lib/aave-helpers/lib/aave-address-book/lib/aave-v3-core/contracts/protocol/libraries/math/WadRayMath.sol": { + "keccak256": "0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07", + "urls": [ + "bzz-raw://d2814d57ad47ba13959bf9a108c25374828a370f8d64b5adb7564876927a3a06", + "dweb:/ipfs/Qmf9xfz7svNZAzgUHUTAj6gVC7SHiT7S4obfo1Sg1Fwzbx" + ], + "license": "BUSL-1.1" + }, + "lib/aave-helpers/lib/aave-address-book/lib/aave-v3-core/contracts/protocol/libraries/types/ConfiguratorInputTypes.sol": { + "keccak256": "0x1fb622bd7b4f68289b727a824c92ab4c05b06f4aa8308c7d2b0ccb0f9ae63b0b", + "urls": [ + "bzz-raw://37c68350d3d1058fcaae083f1e20e5d0d4bd13129921d3b83fbc8a1c45ca3a92", + "dweb:/ipfs/QmdjpmtfBU76iHHozn23k5F1TagU1KQGyLd8nmvZ6CJ1yM" + ], + "license": "BUSL-1.1" + }, + "lib/aave-helpers/lib/aave-address-book/lib/aave-v3-core/contracts/protocol/libraries/types/DataTypes.sol": { + "keccak256": "0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88", + "urls": [ + "bzz-raw://0f41689d1d58bc13678c749bae8830f5a8b19b89cd135e962bf07d483350f828", + "dweb:/ipfs/QmQSNGDxjYGqT1GU2CZzsWUTNcAtcfkg1jDGTH516nCAfN" + ], + "license": "BUSL-1.1" + }, + "lib/aave-helpers/lib/aave-address-book/src/AaveV3.sol": { + "keccak256": "0xedb11299928dd4efd31ba54315f52c8e183fa27c5a78220501db5f82eacc6689", + "urls": [ + "bzz-raw://40b1347c1106a9566bfaeb2a7393dea48cf271875a92075fab21302619822aee", + "dweb:/ipfs/QmbmJBtinfYkutrS3tF3itUXjcNFmfuxfbtByhLQHy6iNG" + ], + "license": "MIT" + }, + "lib/aave-helpers/lib/aave-address-book/src/AaveV3Ethereum.sol": { + "keccak256": "0x7ddefb2c9906dc0152144e26f37e7617f1f7f372681f3bf8c718235736b8bac5", + "urls": [ + "bzz-raw://9e9edb169e229b7df544a4e76db07d44144a4e7e5ebcb2753f9388a2b68eb9c0", + "dweb:/ipfs/QmY5UxpcSe4gyKYZEoRJXvF1Jz3HcQc8NsTyuLhRoiYZx7" + ], + "license": "MIT" + }, + "lib/aave-helpers/lib/aave-address-book/src/common/ICollector.sol": { + "keccak256": "0x5ecc457aff4929798a98357cff25772e71657e7005a2ad4aa224f8f4b4d48c9a", + "urls": [ + "bzz-raw://86699d1299c2ef0de37999926584844451ee8fcceb954a4f11b142fe00c27112", + "dweb:/ipfs/QmZzvLxFC47KDDF4J7Q4fKs3hvFK6X7f8zH9bGZHGizvxG" + ], + "license": "MIT" + }, + "lib/aave-helpers/lib/solidity-utils/src/contracts/oz-common/Address.sol": { + "keccak256": "0xe641fb89c32466792ed9877ec915c699acfe5c04c655cf9e67738093a40c962c", + "urls": [ + "bzz-raw://597b0804825a4c6acbec4e466f30138a527da64a8dd3cc7ae69a68d046e8852e", + "dweb:/ipfs/QmVvhwnnWvMkaYNcfyeihW1ajwDiGhVV6KcTNoPD9HCVym" + ], + "license": "MIT" + }, + "lib/aave-helpers/src/v3-config-engine/AaveV3Payload.sol": { + "keccak256": "0xe49fc3362217749814995505a2f65a1e68c8b55a379c28a09d085fe7195be46d", + "urls": [ + "bzz-raw://751b1653cc16ae433462cb315b9a6594e8d2233e0c69e5bde1e2f715f82651e7", + "dweb:/ipfs/QmR3xxuL9DZiz4NN63oKwYG15x8syJp5acXaHStTNET4pp" + ], + "license": "MIT" + }, + "lib/aave-helpers/src/v3-config-engine/AaveV3PayloadEthereum.sol": { + "keccak256": "0xc0ae21b9e18ad59e6b22a2e5ddc0b33681e3922ff1cdb01028b72e0e9d0972b6", + "urls": [ + "bzz-raw://d365969ebe7ad8496efb511ad66f0d25e865e4a100a33529b1c4a217601acd64", + "dweb:/ipfs/Qmd8PPUj71ZjwHyNHGPRGTkoocohNsmaez7ftrwDcFSBZr" + ], + "license": "MIT" + }, + "lib/aave-helpers/src/v3-config-engine/EngineFlags.sol": { + "keccak256": "0xe281d7f8c87102afa8d96e7199c7c55ea364b59b07b6edf8519ddd22a0904534", + "urls": [ + "bzz-raw://e8c79ba96ae150906634c44860eb1854c09d796885e9935d853926116a1af5e6", + "dweb:/ipfs/QmZ9hW3Zvv4WA9U1H9YTc96a3R3SfkmgXvSZM6BsYEQJmX" + ], + "license": "MIT" + }, + "lib/aave-helpers/src/v3-config-engine/IAaveV3ConfigEngine.sol": { + "keccak256": "0x00119084de65f6cd5617ca6bb1804ba94ff357afdcb906a14b7e707a89d4eaf1", + "urls": [ + "bzz-raw://64b4954ab1a8166c20d32d65f4b981632d92e005358e3a7831d4b865b6dfbeb1", + "dweb:/ipfs/QmbtVdH5JaLxvxcASqqVvwK1Ck81rqgQqip8FqwpDsZqyq" + ], + "license": "MIT" + }, + "lib/aave-helpers/src/v3-config-engine/IV3RateStrategyFactory.sol": { + "keccak256": "0x2aab7dbb9f358259722eb5f00ddbbcf5c8f089a0c0b7794d804525abb37a5d0f", + "urls": [ + "bzz-raw://d35e9f7fcb122325cc3ea665c18df8fec79009b118f6f533c899e8531594a0d5", + "dweb:/ipfs/QmS4LQLJpJBpkoTPuQpAdCTBPsMzBeaeG3dhLYB6ZBQti8" + ], + "license": "MIT" + }, + "src/20240121_Multi_UpdateStETHAndWETHRiskParamsOnAaveV3EthereumOptimismAndArbitrum/AaveV3Ethereum_UpdateStETHAndWETHRiskParamsOnAaveV3EthereumOptimismAndArbitrum_20240121.sol": { + "keccak256": "0x5637f92c13da752e2906d33f474c67b44768bcb8e0c5540d0852793873db2cab", + "urls": [ + "bzz-raw://584a323fc8f5dbd923295a89170fc6771d97f5a72af27f1708cfe20345b83bde", + "dweb:/ipfs/QmPWdtvvZKNySUMACvCyun4hpNW28K1WRE4RDct2PqB4iy" + ], + "license": "MIT" + } + }, + "version": 1 + }, + "ast": { + "absolutePath": "src/20240121_Multi_UpdateStETHAndWETHRiskParamsOnAaveV3EthereumOptimismAndArbitrum/AaveV3Ethereum_UpdateStETHAndWETHRiskParamsOnAaveV3EthereumOptimismAndArbitrum_20240121.sol", + "id": 113703, + "exportedSymbols": { + "AaveV3EthereumAssets": [10330], + "AaveV3EthereumEModes": [10337], + "AaveV3Ethereum_UpdateStETHAndWETHRiskParamsOnAaveV3EthereumOptimismAndArbitrum_20240121": [113702], + "AaveV3PayloadEthereum": [79627], + "EngineFlags": [79805], + "IAaveV3ConfigEngine": [80168], + "IV3RateStrategyFactory": [80264] + }, + "nodeType": "SourceUnit", + "src": "32:2574:377", + "nodes": [ + { + "id": 113589, + "nodeType": "PragmaDirective", + "src": "32:23:377", + "nodes": [], + "literals": ["solidity", "^", "0.8", ".0"] + }, + { + "id": 113592, + "nodeType": "ImportDirective", + "src": "57:96:377", + "nodes": [], + "absolutePath": "lib/aave-helpers/lib/aave-address-book/src/AaveV3Ethereum.sol", + "file": "aave-address-book/AaveV3Ethereum.sol", + "nameLocation": "-1:-1:-1", + "scope": 113703, + "sourceUnit": 10338, + "symbolAliases": [ + { + "foreign": { + "id": 113590, + "name": "AaveV3EthereumAssets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10330, + "src": "65:20:377", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 113591, + "name": "AaveV3EthereumEModes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10337, + "src": "87:20:377", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 113594, + "nodeType": "ImportDirective", + "src": "154:94:377", + "nodes": [], + "absolutePath": "lib/aave-helpers/src/v3-config-engine/AaveV3PayloadEthereum.sol", + "file": "aave-helpers/v3-config-engine/AaveV3PayloadEthereum.sol", + "nameLocation": "-1:-1:-1", + "scope": 113703, + "sourceUnit": 79628, + "symbolAliases": [ + { + "foreign": { + "id": 113593, + "name": "AaveV3PayloadEthereum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79627, + "src": "162:21:377", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 113596, + "nodeType": "ImportDirective", + "src": "249:74:377", + "nodes": [], + "absolutePath": "lib/aave-helpers/src/v3-config-engine/EngineFlags.sol", + "file": "aave-helpers/v3-config-engine/EngineFlags.sol", + "nameLocation": "-1:-1:-1", + "scope": 113703, + "sourceUnit": 79806, + "symbolAliases": [ + { + "foreign": { + "id": 113595, + "name": "EngineFlags", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79805, + "src": "257:11:377", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 113598, + "nodeType": "ImportDirective", + "src": "324:90:377", + "nodes": [], + "absolutePath": "lib/aave-helpers/src/v3-config-engine/IAaveV3ConfigEngine.sol", + "file": "aave-helpers/v3-config-engine/IAaveV3ConfigEngine.sol", + "nameLocation": "-1:-1:-1", + "scope": 113703, + "sourceUnit": 80169, + "symbolAliases": [ + { + "foreign": { + "id": 113597, + "name": "IAaveV3ConfigEngine", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 80168, + "src": "332:19:377", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 113600, + "nodeType": "ImportDirective", + "src": "415:96:377", + "nodes": [], + "absolutePath": "lib/aave-helpers/src/v3-config-engine/IV3RateStrategyFactory.sol", + "file": "aave-helpers/v3-config-engine/IV3RateStrategyFactory.sol", + "nameLocation": "-1:-1:-1", + "scope": 113703, + "sourceUnit": 80265, + "symbolAliases": [ + { + "foreign": { + "id": 113599, + "name": "IV3RateStrategyFactory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 80264, + "src": "423:22:377", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 113702, + "nodeType": "ContractDefinition", + "src": "897:1708:377", + "nodes": [ + { + "id": 113659, + "nodeType": "FunctionDefinition", + "src": "1025:971:377", + "nodes": [], + "body": { + "id": 113658, + "nodeType": "Block", + "src": "1155:841:377", + "nodes": [], + "statements": [ + { + "assignments": [113616], + "declarations": [ + { + "constant": false, + "id": 113616, + "mutability": "mutable", + "name": "rateStrategies", + "nameLocation": "1215:14:377", + "nodeType": "VariableDeclaration", + "scope": 113658, + "src": "1161:68:377", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_RateStrategyUpdate_$80005_memory_ptr_$dyn_memory_ptr", + "typeString": "struct IAaveV3ConfigEngine.RateStrategyUpdate[]" + }, + "typeName": { + "baseType": { + "id": 113614, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 113613, + "name": "IAaveV3ConfigEngine.RateStrategyUpdate", + "nameLocations": ["1161:19:377", "1181:18:377"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 80005, + "src": "1161:38:377" + }, + "referencedDeclaration": 80005, + "src": "1161:38:377", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RateStrategyUpdate_$80005_storage_ptr", + "typeString": "struct IAaveV3ConfigEngine.RateStrategyUpdate" + } + }, + "id": 113615, + "nodeType": "ArrayTypeName", + "src": "1161:40:377", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_RateStrategyUpdate_$80005_storage_$dyn_storage_ptr", + "typeString": "struct IAaveV3ConfigEngine.RateStrategyUpdate[]" + } + }, + "visibility": "internal" + } + ], + "id": 113623, + "initialValue": { + "arguments": [ + { + "hexValue": "31", + "id": 113621, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1277:1:377", + "typeDescriptions": { "typeIdentifier": "t_rational_1_by_1", "typeString": "int_const 1" }, + "value": "1" + } + ], + "expression": { + "argumentTypes": [{ "typeIdentifier": "t_rational_1_by_1", "typeString": "int_const 1" }], + "id": 113620, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "1232:44:377", + "typeDescriptions": { + "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_RateStrategyUpdate_$80005_memory_ptr_$dyn_memory_ptr_$", + "typeString": "function (uint256) pure returns (struct IAaveV3ConfigEngine.RateStrategyUpdate memory[] memory)" + }, + "typeName": { + "baseType": { + "id": 113618, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 113617, + "name": "IAaveV3ConfigEngine.RateStrategyUpdate", + "nameLocations": ["1236:19:377", "1256:18:377"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 80005, + "src": "1236:38:377" + }, + "referencedDeclaration": 80005, + "src": "1236:38:377", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RateStrategyUpdate_$80005_storage_ptr", + "typeString": "struct IAaveV3ConfigEngine.RateStrategyUpdate" + } + }, + "id": 113619, + "nodeType": "ArrayTypeName", + "src": "1236:40:377", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_RateStrategyUpdate_$80005_storage_$dyn_storage_ptr", + "typeString": "struct IAaveV3ConfigEngine.RateStrategyUpdate[]" + } + } + }, + "id": 113622, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1232:47:377", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_RateStrategyUpdate_$80005_memory_ptr_$dyn_memory_ptr", + "typeString": "struct IAaveV3ConfigEngine.RateStrategyUpdate memory[] memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1161:118:377" + }, + { + "expression": { + "id": 113654, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 113624, + "name": "rateStrategies", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 113616, + "src": "1285:14:377", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_RateStrategyUpdate_$80005_memory_ptr_$dyn_memory_ptr", + "typeString": "struct IAaveV3ConfigEngine.RateStrategyUpdate memory[] memory" + } + }, + "id": 113626, + "indexExpression": { + "hexValue": "30", + "id": 113625, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1300:1:377", + "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, + "value": "0" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1285:17:377", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RateStrategyUpdate_$80005_memory_ptr", + "typeString": "struct IAaveV3ConfigEngine.RateStrategyUpdate memory" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "expression": { + "id": 113629, + "name": "AaveV3EthereumAssets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10330, + "src": "1359:20:377", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_AaveV3EthereumAssets_$10330_$", + "typeString": "type(library AaveV3EthereumAssets)" + } + }, + "id": 113630, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "1380:15:377", + "memberName": "WETH_UNDERLYING", + "nodeType": "MemberAccess", + "referencedDeclaration": 9765, + "src": "1359:36:377", + "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } + }, + { + "arguments": [ + { + "arguments": [ + { + "hexValue": "39305f3030", + "id": 113634, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1492:5:377", + "typeDescriptions": { + "typeIdentifier": "t_rational_9000_by_1", + "typeString": "int_const 9000" + }, + "value": "90_00" + } + ], + "expression": { + "argumentTypes": [ + { "typeIdentifier": "t_rational_9000_by_1", "typeString": "int_const 9000" } + ], + "id": 113633, + "name": "_bpsToRay", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79403, + "src": "1482:9:377", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) pure returns (uint256)" + } + }, + "id": 113635, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1482:16:377", + "tryCall": false, + "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } + }, + { + "expression": { + "id": 113636, + "name": "EngineFlags", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79805, + "src": "1532:11:377", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_EngineFlags_$79805_$", + "typeString": "type(library EngineFlags)" + } + }, + "id": 113637, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "1544:12:377", + "memberName": "KEEP_CURRENT", + "nodeType": "MemberAccess", + "referencedDeclaration": 79747, + "src": "1532:24:377", + "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } + }, + { + "expression": { + "id": 113638, + "name": "EngineFlags", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79805, + "src": "1586:11:377", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_EngineFlags_$79805_$", + "typeString": "type(library EngineFlags)" + } + }, + "id": 113639, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "1598:12:377", + "memberName": "KEEP_CURRENT", + "nodeType": "MemberAccess", + "referencedDeclaration": 79747, + "src": "1586:24:377", + "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } + }, + { + "expression": { + "id": 113640, + "name": "EngineFlags", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79805, + "src": "1640:11:377", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_EngineFlags_$79805_$", + "typeString": "type(library EngineFlags)" + } + }, + "id": 113641, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "1652:12:377", + "memberName": "KEEP_CURRENT", + "nodeType": "MemberAccess", + "referencedDeclaration": 79747, + "src": "1640:24:377", + "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } + }, + { + "expression": { + "id": 113642, + "name": "EngineFlags", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79805, + "src": "1692:11:377", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_EngineFlags_$79805_$", + "typeString": "type(library EngineFlags)" + } + }, + "id": 113643, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "1704:12:377", + "memberName": "KEEP_CURRENT", + "nodeType": "MemberAccess", + "referencedDeclaration": 79747, + "src": "1692:24:377", + "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } + }, + { + "expression": { + "id": 113644, + "name": "EngineFlags", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79805, + "src": "1744:11:377", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_EngineFlags_$79805_$", + "typeString": "type(library EngineFlags)" + } + }, + "id": 113645, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "1756:12:377", + "memberName": "KEEP_CURRENT", + "nodeType": "MemberAccess", + "referencedDeclaration": 79747, + "src": "1744:24:377", + "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } + }, + { + "expression": { + "id": 113646, + "name": "EngineFlags", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79805, + "src": "1800:11:377", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_EngineFlags_$79805_$", + "typeString": "type(library EngineFlags)" + } + }, + "id": 113647, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "1812:12:377", + "memberName": "KEEP_CURRENT", + "nodeType": "MemberAccess", + "referencedDeclaration": 79747, + "src": "1800:24:377", + "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } + }, + { + "expression": { + "id": 113648, + "name": "EngineFlags", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79805, + "src": "1858:11:377", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_EngineFlags_$79805_$", + "typeString": "type(library EngineFlags)" + } + }, + "id": 113649, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "1870:12:377", + "memberName": "KEEP_CURRENT", + "nodeType": "MemberAccess", + "referencedDeclaration": 79747, + "src": "1858:24:377", + "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } + }, + { + "expression": { + "id": 113650, + "name": "EngineFlags", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79805, + "src": "1923:11:377", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_EngineFlags_$79805_$", + "typeString": "type(library EngineFlags)" + } + }, + "id": 113651, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "1935:12:377", + "memberName": "KEEP_CURRENT", + "nodeType": "MemberAccess", + "referencedDeclaration": 79747, + "src": "1923:24:377", + "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } + } + ], + "expression": { + "argumentTypes": [ + { "typeIdentifier": "t_uint256", "typeString": "uint256" }, + { "typeIdentifier": "t_uint256", "typeString": "uint256" }, + { "typeIdentifier": "t_uint256", "typeString": "uint256" }, + { "typeIdentifier": "t_uint256", "typeString": "uint256" }, + { "typeIdentifier": "t_uint256", "typeString": "uint256" }, + { "typeIdentifier": "t_uint256", "typeString": "uint256" }, + { "typeIdentifier": "t_uint256", "typeString": "uint256" }, + { "typeIdentifier": "t_uint256", "typeString": "uint256" }, + { "typeIdentifier": "t_uint256", "typeString": "uint256" } + ], + "expression": { + "id": 113631, + "name": "IV3RateStrategyFactory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 80264, + "src": "1411:22:377", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IV3RateStrategyFactory_$80264_$", + "typeString": "type(contract IV3RateStrategyFactory)" + } + }, + "id": 113632, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1434:18:377", + "memberName": "RateStrategyParams", + "nodeType": "MemberAccess", + "referencedDeclaration": 80202, + "src": "1411:41:377", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_RateStrategyParams_$80202_storage_ptr_$", + "typeString": "type(struct IV3RateStrategyFactory.RateStrategyParams storage pointer)" + } + }, + "id": 113652, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "structConstructorCall", + "lValueRequested": false, + "nameLocations": [ + "1463:17:377", + "1508:22:377", + "1566:18:377", + "1620:18:377", + "1674:16:377", + "1726:16:377", + "1778:20:377", + "1834:22:377", + "1892:29:377" + ], + "names": [ + "optimalUsageRatio", + "baseVariableBorrowRate", + "variableRateSlope1", + "variableRateSlope2", + "stableRateSlope1", + "stableRateSlope2", + "baseStableRateOffset", + "stableRateExcessOffset", + "optimalStableToTotalDebtRatio" + ], + "nodeType": "FunctionCall", + "src": "1411:545:377", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_RateStrategyParams_$80202_memory_ptr", + "typeString": "struct IV3RateStrategyFactory.RateStrategyParams memory" + } + } + ], + "expression": { + "argumentTypes": [ + { "typeIdentifier": "t_address", "typeString": "address" }, + { + "typeIdentifier": "t_struct$_RateStrategyParams_$80202_memory_ptr", + "typeString": "struct IV3RateStrategyFactory.RateStrategyParams memory" + } + ], + "expression": { + "id": 113627, + "name": "IAaveV3ConfigEngine", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 80168, + "src": "1305:19:377", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IAaveV3ConfigEngine_$80168_$", + "typeString": "type(contract IAaveV3ConfigEngine)" + } + }, + "id": 113628, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1325:18:377", + "memberName": "RateStrategyUpdate", + "nodeType": "MemberAccess", + "referencedDeclaration": 80005, + "src": "1305:38:377", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_RateStrategyUpdate_$80005_storage_ptr_$", + "typeString": "type(struct IAaveV3ConfigEngine.RateStrategyUpdate storage pointer)" + } + }, + "id": 113653, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "structConstructorCall", + "lValueRequested": false, + "nameLocations": ["1352:5:377", "1403:6:377"], + "names": ["asset", "params"], + "nodeType": "FunctionCall", + "src": "1305:658:377", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_RateStrategyUpdate_$80005_memory_ptr", + "typeString": "struct IAaveV3ConfigEngine.RateStrategyUpdate memory" + } + }, + "src": "1285:678:377", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RateStrategyUpdate_$80005_memory_ptr", + "typeString": "struct IAaveV3ConfigEngine.RateStrategyUpdate memory" + } + }, + "id": 113655, + "nodeType": "ExpressionStatement", + "src": "1285:678:377" + }, + { + "expression": { + "id": 113656, + "name": "rateStrategies", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 113616, + "src": "1977:14:377", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_RateStrategyUpdate_$80005_memory_ptr_$dyn_memory_ptr", + "typeString": "struct IAaveV3ConfigEngine.RateStrategyUpdate memory[] memory" + } + }, + "functionReturnParameters": 113610, + "id": 113657, + "nodeType": "Return", + "src": "1970:21:377" + } + ] + }, + "baseFunctions": [79484], + "functionSelector": "d0c38c27", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "rateStrategiesUpdates", + "nameLocation": "1034:21:377", + "overrides": { "id": 113605, "nodeType": "OverrideSpecifier", "overrides": [], "src": "1082:8:377" }, + "parameters": { "id": 113604, "nodeType": "ParameterList", "parameters": [], "src": "1055:2:377" }, + "returnParameters": { + "id": 113610, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 113609, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 113659, + "src": "1104:47:377", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_RateStrategyUpdate_$80005_memory_ptr_$dyn_memory_ptr", + "typeString": "struct IAaveV3ConfigEngine.RateStrategyUpdate[]" + }, + "typeName": { + "baseType": { + "id": 113607, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 113606, + "name": "IAaveV3ConfigEngine.RateStrategyUpdate", + "nameLocations": ["1104:19:377", "1124:18:377"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 80005, + "src": "1104:38:377" + }, + "referencedDeclaration": 80005, + "src": "1104:38:377", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RateStrategyUpdate_$80005_storage_ptr", + "typeString": "struct IAaveV3ConfigEngine.RateStrategyUpdate" + } + }, + "id": 113608, + "nodeType": "ArrayTypeName", + "src": "1104:40:377", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_RateStrategyUpdate_$80005_storage_$dyn_storage_ptr", + "typeString": "struct IAaveV3ConfigEngine.RateStrategyUpdate[]" + } + }, + "visibility": "internal" + } + ], + "src": "1103:49:377" + }, + "scope": 113702, + "stateMutability": "pure", + "virtual": false, + "visibility": "public" + }, + { + "id": 113701, + "nodeType": "FunctionDefinition", + "src": "2000:603:377", + "nodes": [], + "body": { + "id": 113700, + "nodeType": "Block", + "src": "2132:471:377", + "nodes": [], + "statements": [ + { + "assignments": [113672], + "declarations": [ + { + "constant": false, + "id": 113672, + "mutability": "mutable", + "name": "eModeUpdates", + "nameLocation": "2193:12:377", + "nodeType": "VariableDeclaration", + "scope": 113700, + "src": "2138:67:377", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_EModeCategoryUpdate_$79999_memory_ptr_$dyn_memory_ptr", + "typeString": "struct IAaveV3ConfigEngine.EModeCategoryUpdate[]" + }, + "typeName": { + "baseType": { + "id": 113670, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 113669, + "name": "IAaveV3ConfigEngine.EModeCategoryUpdate", + "nameLocations": ["2138:19:377", "2158:19:377"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 79999, + "src": "2138:39:377" + }, + "referencedDeclaration": 79999, + "src": "2138:39:377", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EModeCategoryUpdate_$79999_storage_ptr", + "typeString": "struct IAaveV3ConfigEngine.EModeCategoryUpdate" + } + }, + "id": 113671, + "nodeType": "ArrayTypeName", + "src": "2138:41:377", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_EModeCategoryUpdate_$79999_storage_$dyn_storage_ptr", + "typeString": "struct IAaveV3ConfigEngine.EModeCategoryUpdate[]" + } + }, + "visibility": "internal" + } + ], + "id": 113679, + "initialValue": { + "arguments": [ + { + "hexValue": "31", + "id": 113677, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2254:1:377", + "typeDescriptions": { "typeIdentifier": "t_rational_1_by_1", "typeString": "int_const 1" }, + "value": "1" + } + ], + "expression": { + "argumentTypes": [{ "typeIdentifier": "t_rational_1_by_1", "typeString": "int_const 1" }], + "id": 113676, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "2208:45:377", + "typeDescriptions": { + "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_EModeCategoryUpdate_$79999_memory_ptr_$dyn_memory_ptr_$", + "typeString": "function (uint256) pure returns (struct IAaveV3ConfigEngine.EModeCategoryUpdate memory[] memory)" + }, + "typeName": { + "baseType": { + "id": 113674, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 113673, + "name": "IAaveV3ConfigEngine.EModeCategoryUpdate", + "nameLocations": ["2212:19:377", "2232:19:377"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 79999, + "src": "2212:39:377" + }, + "referencedDeclaration": 79999, + "src": "2212:39:377", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EModeCategoryUpdate_$79999_storage_ptr", + "typeString": "struct IAaveV3ConfigEngine.EModeCategoryUpdate" + } + }, + "id": 113675, + "nodeType": "ArrayTypeName", + "src": "2212:41:377", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_EModeCategoryUpdate_$79999_storage_$dyn_storage_ptr", + "typeString": "struct IAaveV3ConfigEngine.EModeCategoryUpdate[]" + } + } + }, + "id": 113678, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2208:48:377", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_EModeCategoryUpdate_$79999_memory_ptr_$dyn_memory_ptr", + "typeString": "struct IAaveV3ConfigEngine.EModeCategoryUpdate memory[] memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2138:118:377" + }, + { + "expression": { + "id": 113696, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 113680, + "name": "eModeUpdates", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 113672, + "src": "2263:12:377", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_EModeCategoryUpdate_$79999_memory_ptr_$dyn_memory_ptr", + "typeString": "struct IAaveV3ConfigEngine.EModeCategoryUpdate memory[] memory" + } + }, + "id": 113682, + "indexExpression": { + "hexValue": "30", + "id": 113681, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2276:1:377", + "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, + "value": "0" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "2263:15:377", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EModeCategoryUpdate_$79999_memory_ptr", + "typeString": "struct IAaveV3ConfigEngine.EModeCategoryUpdate memory" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "expression": { + "id": 113685, + "name": "AaveV3EthereumEModes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10337, + "src": "2344:20:377", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_AaveV3EthereumEModes_$10337_$", + "typeString": "type(library AaveV3EthereumEModes)" + } + }, + "id": 113686, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "2365:14:377", + "memberName": "ETH_CORRELATED", + "nodeType": "MemberAccess", + "referencedDeclaration": 10336, + "src": "2344:35:377", + "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } + }, + { + "hexValue": "39335f3030", + "id": 113687, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2392:5:377", + "typeDescriptions": { + "typeIdentifier": "t_rational_9300_by_1", + "typeString": "int_const 9300" + }, + "value": "93_00" + }, + { + "hexValue": "39355f3030", + "id": 113688, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2419:5:377", + "typeDescriptions": { + "typeIdentifier": "t_rational_9500_by_1", + "typeString": "int_const 9500" + }, + "value": "95_00" + }, + { + "expression": { + "id": 113689, + "name": "EngineFlags", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79805, + "src": "2442:11:377", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_EngineFlags_$79805_$", + "typeString": "type(library EngineFlags)" + } + }, + "id": 113690, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "2454:12:377", + "memberName": "KEEP_CURRENT", + "nodeType": "MemberAccess", + "referencedDeclaration": 79747, + "src": "2442:24:377", + "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } + }, + { + "expression": { + "id": 113691, + "name": "EngineFlags", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79805, + "src": "2487:11:377", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_EngineFlags_$79805_$", + "typeString": "type(library EngineFlags)" + } + }, + "id": 113692, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "2499:20:377", + "memberName": "KEEP_CURRENT_ADDRESS", + "nodeType": "MemberAccess", + "referencedDeclaration": 79758, + "src": "2487:32:377", + "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } + }, + { + "expression": { + "id": 113693, + "name": "EngineFlags", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79805, + "src": "2534:11:377", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_EngineFlags_$79805_$", + "typeString": "type(library EngineFlags)" + } + }, + "id": 113694, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "2546:19:377", + "memberName": "KEEP_CURRENT_STRING", + "nodeType": "MemberAccess", + "referencedDeclaration": 79751, + "src": "2534:31:377", + "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", "typeString": "string memory" } + } + ], + "expression": { + "argumentTypes": [ + { "typeIdentifier": "t_uint8", "typeString": "uint8" }, + { "typeIdentifier": "t_rational_9300_by_1", "typeString": "int_const 9300" }, + { "typeIdentifier": "t_rational_9500_by_1", "typeString": "int_const 9500" }, + { "typeIdentifier": "t_uint256", "typeString": "uint256" }, + { "typeIdentifier": "t_address", "typeString": "address" }, + { "typeIdentifier": "t_string_memory_ptr", "typeString": "string memory" } + ], + "expression": { + "id": 113683, + "name": "IAaveV3ConfigEngine", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 80168, + "src": "2281:19:377", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IAaveV3ConfigEngine_$80168_$", + "typeString": "type(contract IAaveV3ConfigEngine)" + } + }, + "id": 113684, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2301:19:377", + "memberName": "EModeCategoryUpdate", + "nodeType": "MemberAccess", + "referencedDeclaration": 79999, + "src": "2281:39:377", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_EModeCategoryUpdate_$79999_storage_ptr_$", + "typeString": "type(struct IAaveV3ConfigEngine.EModeCategoryUpdate storage pointer)" + } + }, + "id": 113695, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "structConstructorCall", + "lValueRequested": false, + "nameLocations": [ + "2329:13:377", + "2387:3:377", + "2405:12:377", + "2432:8:377", + "2474:11:377", + "2527:5:377" + ], + "names": ["eModeCategory", "ltv", "liqThreshold", "liqBonus", "priceSource", "label"], + "nodeType": "FunctionCall", + "src": "2281:291:377", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_EModeCategoryUpdate_$79999_memory_ptr", + "typeString": "struct IAaveV3ConfigEngine.EModeCategoryUpdate memory" + } + }, + "src": "2263:309:377", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EModeCategoryUpdate_$79999_memory_ptr", + "typeString": "struct IAaveV3ConfigEngine.EModeCategoryUpdate memory" + } + }, + "id": 113697, + "nodeType": "ExpressionStatement", + "src": "2263:309:377" + }, + { + "expression": { + "id": 113698, + "name": "eModeUpdates", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 113672, + "src": "2586:12:377", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_EModeCategoryUpdate_$79999_memory_ptr_$dyn_memory_ptr", + "typeString": "struct IAaveV3ConfigEngine.EModeCategoryUpdate memory[] memory" + } + }, + "functionReturnParameters": 113666, + "id": 113699, + "nodeType": "Return", + "src": "2579:19:377" + } + ] + }, + "baseFunctions": [79466], + "functionSelector": "ca8e89cc", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "eModeCategoriesUpdates", + "nameLocation": "2009:22:377", + "overrides": { "id": 113661, "nodeType": "OverrideSpecifier", "overrides": [], "src": "2058:8:377" }, + "parameters": { "id": 113660, "nodeType": "ParameterList", "parameters": [], "src": "2031:2:377" }, + "returnParameters": { + "id": 113666, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 113665, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 113701, + "src": "2080:48:377", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_EModeCategoryUpdate_$79999_memory_ptr_$dyn_memory_ptr", + "typeString": "struct IAaveV3ConfigEngine.EModeCategoryUpdate[]" + }, + "typeName": { + "baseType": { + "id": 113663, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 113662, + "name": "IAaveV3ConfigEngine.EModeCategoryUpdate", + "nameLocations": ["2080:19:377", "2100:19:377"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 79999, + "src": "2080:39:377" + }, + "referencedDeclaration": 79999, + "src": "2080:39:377", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EModeCategoryUpdate_$79999_storage_ptr", + "typeString": "struct IAaveV3ConfigEngine.EModeCategoryUpdate" + } + }, + "id": 113664, + "nodeType": "ArrayTypeName", + "src": "2080:41:377", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_EModeCategoryUpdate_$79999_storage_$dyn_storage_ptr", + "typeString": "struct IAaveV3ConfigEngine.EModeCategoryUpdate[]" + } + }, + "visibility": "internal" + } + ], + "src": "2079:50:377" + }, + "scope": 113702, + "stateMutability": "pure", + "virtual": false, + "visibility": "public" + } + ], + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 113602, + "name": "AaveV3PayloadEthereum", + "nameLocations": ["999:21:377"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 79627, + "src": "999:21:377" + }, + "id": 113603, + "nodeType": "InheritanceSpecifier", + "src": "999:21:377" + } + ], + "canonicalName": "AaveV3Ethereum_UpdateStETHAndWETHRiskParamsOnAaveV3EthereumOptimismAndArbitrum_20240121", + "contractDependencies": [], + "contractKind": "contract", + "documentation": { + "id": 113601, + "nodeType": "StructuredDocumentation", + "src": "513:383:377", + "text": " @title Update stETH and WETH Risk Params on Aave v3 Ethereum, Optimism and Arbitrum\n @author Aave Chan Initiative\n - Snapshot: https://snapshot.org/#/aave.eth/proposal/0xb8790aeb32267062c1500deb613ad15ebd5deac4d78d1786cb1690c12d0512c9\n - Discussion: https://governance.aave.com/t/arfc-update-steth-and-weth-risk-params-on-aave-v3-ethereum-optimism-and-arbitrum/16168" + }, + "fullyImplemented": true, + "linearizedBaseContracts": [113702, 79627, 79492], + "name": "AaveV3Ethereum_UpdateStETHAndWETHRiskParamsOnAaveV3EthereumOptimismAndArbitrum_20240121", + "nameLocation": "906:87:377", + "scope": 113703, + "usedErrors": [] + } + ], + "license": "MIT" + }, + "id": 377 +} diff --git a/src/govv3/utils/checkAddress.ts b/src/govv3/utils/checkAddress.ts index e53dc93..21a2d81 100644 --- a/src/govv3/utils/checkAddress.ts +++ b/src/govv3/utils/checkAddress.ts @@ -21,3 +21,10 @@ export function isKnownAddress(value: Address, chainId: number): string[] | void if (typeof results === 'string') return [results]; return results; } + +export function findPayloadsController(chainId: number): Address | void { + const key = Object.keys(addresses).find( + (key) => addresses[key].CHAIN_ID === chainId && addresses[key].PAYLOADS_CONTROLLER + ); + if (key) return addresses[key].PAYLOADS_CONTROLLER; +} diff --git a/src/utils/tenderlyClient.ts b/src/utils/tenderlyClient.ts index 1d14290..6f24529 100644 --- a/src/utils/tenderlyClient.ts +++ b/src/utils/tenderlyClient.ts @@ -1,8 +1,5 @@ import { Hex, - Transaction as ViemTransaction, - createPublicClient, - createWalletClient, http, toHex, parseEther, @@ -11,11 +8,13 @@ import { Chain, Address, Client, + createClient, + getContractAddress, } from 'viem'; import { EOA } from './constants'; import { logError, logInfo, logSuccess, logWarning } from './logger'; import { GetTransactionReturnType } from 'viem'; -import { getBlock } from 'viem/actions'; +import { deployContract, getBlock, getTransactionReceipt, sendTransaction } from 'viem/actions'; export type StateObject = { balance?: string; code?: string; @@ -445,8 +444,8 @@ class Tenderly { return fork; }; - deployCode = (fork: Fork, filePath: string, from?: Hex) => { - const walletProvider = createWalletClient({ + deployCode = async (fork: Fork, filePath: string, from?: Hex) => { + const walletProvider = createClient({ account: from || EOA, chain: { id: fork.forkNetworkId, name: 'tenderly' } as any, transport: http(fork.forkUrl), @@ -455,14 +454,18 @@ class Tenderly { const artifact = require(filePath); logInfo('tenderly', `deploying ${filePath}`); - return walletProvider.deployContract({ + const hash = await deployContract(walletProvider, { abi: artifact.abi, - bytecode: artifact.bytecode, + bytecode: artifact.bytecode.object, + account: walletProvider.account, } as any); + + const receipt = await getTransactionReceipt(walletProvider, { hash }); + return getContractAddress({ from: receipt.from, nonce: receipt.nonce }); }; warpTime = async (fork: Fork, timestamp: bigint) => { - const client = createPublicClient({ + const client = createClient({ chain: { id: fork.forkNetworkId } as any, transport: http(fork.forkUrl), }); @@ -484,7 +487,7 @@ class Tenderly { }; warpBlocks = async (fork: Fork, blockNumber: bigint) => { - const client = createPublicClient({ + const client = createClient({ chain: { id: fork.forkNetworkId } as any, transport: http(fork.forkUrl), }); @@ -504,7 +507,7 @@ class Tenderly { // 0. fund account await this.fundAccount(fork, request.from); - const publicProvider = createPublicClient({ + const publicProvider = createClient({ chain: { id: fork.forkNetworkId } as any, transport: http(fork.forkUrl), }); @@ -538,17 +541,17 @@ class Tenderly { // 3. execute txn if (request.input) { logInfo('tenderly', 'execute transaction'); - const walletProvider = createWalletClient({ + const walletProvider = createClient({ account: request.from, chain: { id: fork.forkNetworkId, name: 'tenderly' } as any, transport: http(fork.forkUrl), }); - const hash = await walletProvider.sendTransaction({ + const hash = await sendTransaction(walletProvider, { data: request.input, to: request.to, value: request.value || 0n, } as any); - const receipt = await publicProvider.getTransactionReceipt({ hash }); + const receipt = await getTransactionReceipt(walletProvider, { hash }); if (receipt.status === 'success') { logSuccess('tenderly', 'transaction successfully executed'); } else { @@ -571,7 +574,7 @@ class Tenderly { }; replaceCode = (fork: Fork, address: Hex, code: Hex) => { - const publicProvider = createPublicClient({ + const publicProvider = createClient({ chain: { id: fork.forkNetworkId } as any, transport: http(fork.forkUrl), });