From 198281130656afdb67959cfd957018fcf773a5fa Mon Sep 17 00:00:00 2001 From: The-3D <37953689+The-3D@users.noreply.github.com> Date: Sat, 20 Jan 2024 05:17:40 +0100 Subject: [PATCH] StkGHO Initialization proposal (#170) * Add proposal for Gho Incident Report 20231113 (#1) * chore: add payload and deploy script for update of GHO variable debt token * forge install: gho-core * chore: add gho-core to dependency * test: Add tests for update of gho variable token * test: Add tests for update of gho variable token * fix: add modifier in method of interface * fix: remove gho dependency from repo and fix test * fix: Remove unnecesary dependency * fix: Add latest details --------- Co-authored-by: miguelmtzinf * fix: Make new impl constant (#3) * fix: Amend AIP text (#4) * fix: Make new impl constant * fix: Fix AIP text * test: Tweak default tests with borrow cap update (#5) * fix: lint issue (#6) * test: Add diffs from test running (#7) * fix: Add payload address (#8) * fix: Fix payload address in script (#9) * fix: Remove unneeded diff file (#10) * feat: added stkgho initialization proposal * feat: fixed proposal description * feat: removed submodule * feat: fixed deployment script * feat: replaced duration calculation * git commit remove submodule * feat: fixed payload build function * update proposal * sync branch * fix: variable name * fix: Fix AIP payload * fix: Fix tests * test: added further test on emission per day * refactor: removed unused constants * fix: catapulta commands * fix: Add fixes to payload * fix: Rebuild proposal with autogenerate tool --------- Co-authored-by: Parth Patel Co-authored-by: miguelmtzinf Co-authored-by: miguelmtz <36620902+miguelmtzinf@users.noreply.github.com> Co-authored-by: Mark Hinschberger --- lib/aave-helpers | 2 +- package.json | 2 +- ...3Ethereum_GhoIncidentReport_20231113.t.sol | 2 +- ...veV3Ethereum_StkGHOActivation_20240119.sol | 41 ++++ ...V3Ethereum_StkGHOActivation_20240119.t.sol | 97 +++++++++ .../IStakeToken.sol | 194 ++++++++++++++++++ .../StkGHOActivation.md | 37 ++++ .../StkGHOActivation_20240119.s.sol | 58 ++++++ .../config.ts | 14 ++ yarn.lock | 8 +- 10 files changed, 448 insertions(+), 7 deletions(-) create mode 100644 src/20240119_AaveV3Ethereum_StkGHOActivation/AaveV3Ethereum_StkGHOActivation_20240119.sol create mode 100644 src/20240119_AaveV3Ethereum_StkGHOActivation/AaveV3Ethereum_StkGHOActivation_20240119.t.sol create mode 100644 src/20240119_AaveV3Ethereum_StkGHOActivation/IStakeToken.sol create mode 100644 src/20240119_AaveV3Ethereum_StkGHOActivation/StkGHOActivation.md create mode 100644 src/20240119_AaveV3Ethereum_StkGHOActivation/StkGHOActivation_20240119.s.sol create mode 100644 src/20240119_AaveV3Ethereum_StkGHOActivation/config.ts diff --git a/lib/aave-helpers b/lib/aave-helpers index d6d5d50d2..fae3da081 160000 --- a/lib/aave-helpers +++ b/lib/aave-helpers @@ -1 +1 @@ -Subproject commit d6d5d50d2188b9f11e7d953f73f137df6d9c9dda +Subproject commit fae3da0811f41ecb30da1129976c53d15350b895 diff --git a/package.json b/package.json index a0c19d5aa..efb10b836 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "vitest": "^1.0.4" }, "dependencies": { - "@bgd-labs/aave-address-book": "^2.14.0", + "@bgd-labs/aave-address-book": "^2.17.0", "@bgd-labs/aave-cli": "0.2.1", "@inquirer/prompts": "^3.3.0", "@inquirer/testing": "^2.1.9", diff --git a/src/20231207_AaveV3Ethereum_GhoIncidentReport_20231126/AaveV3Ethereum_GhoIncidentReport_20231113.t.sol b/src/20231207_AaveV3Ethereum_GhoIncidentReport_20231126/AaveV3Ethereum_GhoIncidentReport_20231113.t.sol index fb324580d..cdd4517c2 100644 --- a/src/20231207_AaveV3Ethereum_GhoIncidentReport_20231126/AaveV3Ethereum_GhoIncidentReport_20231113.t.sol +++ b/src/20231207_AaveV3Ethereum_GhoIncidentReport_20231126/AaveV3Ethereum_GhoIncidentReport_20231113.t.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.0; import 'forge-std/Test.sol'; -import {AaveV3EthereumAssets, AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol'; +import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; import {ProtocolV3TestBase} from 'aave-helpers/ProtocolV3TestBase.sol'; import {IPoolConfigurator} from 'aave-address-book/AaveV3.sol'; import {AaveV3Ethereum_GhoIncidentReport_20231113} from './AaveV3Ethereum_GhoIncidentReport_20231113.sol'; diff --git a/src/20240119_AaveV3Ethereum_StkGHOActivation/AaveV3Ethereum_StkGHOActivation_20240119.sol b/src/20240119_AaveV3Ethereum_StkGHOActivation/AaveV3Ethereum_StkGHOActivation_20240119.sol new file mode 100644 index 000000000..cc87e11b6 --- /dev/null +++ b/src/20240119_AaveV3Ethereum_StkGHOActivation/AaveV3Ethereum_StkGHOActivation_20240119.sol @@ -0,0 +1,41 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol'; +import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol'; +import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; +import {AaveSafetyModule} from 'aave-address-book/AaveSafetyModule.sol'; +import {IStakeToken} from './IStakeToken.sol'; + +/** + * @title StkGHO Activation + * @author Aave Labs & ACI + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x4bc99a842adab6cdd8c7d5c7a787ee4c0056be554fde0d008d53b45b3e795065 + * - Discussion: https://governance.aave.com/t/arfc-upgrade-safety-module-with-stkgho/15635 + */ +contract AaveV3Ethereum_StkGHOActivation_20240119 is IProposalGenericExecutor { + uint128 public constant AAVE_EMISSION_PER_SECOND = uint128(50e18) / 1 days; // 50 AAVE per day + uint256 public constant DISTRIBUTION_DURATION = 90 days; // 3 months + + function execute() external { + // Configure distribution + IStakeToken(AaveSafetyModule.STK_GHO).setDistributionEnd( + block.timestamp + DISTRIBUTION_DURATION + ); + IStakeToken.AssetConfigInput[] memory enableConfigs = new IStakeToken.AssetConfigInput[](1); + enableConfigs[0] = IStakeToken.AssetConfigInput({ + emissionPerSecond: AAVE_EMISSION_PER_SECOND, + totalStaked: 0, // it's overwritten internally + underlyingAsset: AaveSafetyModule.STK_GHO + }); + IStakeToken(AaveSafetyModule.STK_GHO).configureAssets(enableConfigs); + + // Allowance to pull funds from Ecosystem Reserve + MiscEthereum.AAVE_ECOSYSTEM_RESERVE_CONTROLLER.approve( + MiscEthereum.ECOSYSTEM_RESERVE, + AaveV3EthereumAssets.AAVE_UNDERLYING, + AaveSafetyModule.STK_GHO, + AAVE_EMISSION_PER_SECOND * DISTRIBUTION_DURATION + ); + } +} diff --git a/src/20240119_AaveV3Ethereum_StkGHOActivation/AaveV3Ethereum_StkGHOActivation_20240119.t.sol b/src/20240119_AaveV3Ethereum_StkGHOActivation/AaveV3Ethereum_StkGHOActivation_20240119.t.sol new file mode 100644 index 000000000..9ec271373 --- /dev/null +++ b/src/20240119_AaveV3Ethereum_StkGHOActivation/AaveV3Ethereum_StkGHOActivation_20240119.t.sol @@ -0,0 +1,97 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol'; +import {AaveSafetyModule} from 'aave-address-book/AaveSafetyModule.sol'; +import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol'; +import {IStakeToken} from './IStakeToken.sol'; +import {AaveV3Ethereum_StkGHOActivation_20240119} from './AaveV3Ethereum_StkGHOActivation_20240119.sol'; + +/** + * @dev Test for AaveV3Ethereum_StkGHOActivation_20240119 + * command: make test-contract filter=AaveV3Ethereum_StkGHOActivation_20240119 + */ +contract AaveV3Ethereum_StkGHOActivation_20240119_Test is ProtocolV3TestBase { + AaveV3Ethereum_StkGHOActivation_20240119 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('mainnet'), 19042382); + proposal = new AaveV3Ethereum_StkGHOActivation_20240119(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest('AaveV3Ethereum_StkGHOActivation_20240119', AaveV3Ethereum.POOL, address(proposal)); + } + + function test_checkConfig() public { + (uint128 emissionPerSecondBefore, , ) = IStakeToken(AaveSafetyModule.STK_GHO).assets( + AaveV3EthereumAssets.GHO_UNDERLYING + ); + + executePayload(vm, address(proposal)); + + ( + uint128 emissionPerSecondAfter, + uint128 lastUpdateTimestampAfter, // uint256 indexAfter + + ) = IStakeToken(AaveSafetyModule.STK_GHO).assets(AaveSafetyModule.STK_GHO); + + // NOTE index is still 0 + assertEq(emissionPerSecondBefore + emissionPerSecondAfter, proposal.AAVE_EMISSION_PER_SECOND()); + assertEq(lastUpdateTimestampAfter, block.timestamp); + } + + function test_checkAllowance() public { + uint256 allowanceBefore = IERC20(AaveV3EthereumAssets.AAVE_UNDERLYING).allowance( + MiscEthereum.ECOSYSTEM_RESERVE, + AaveSafetyModule.STK_GHO + ); + + executePayload(vm, address(proposal)); + + uint256 allowanceAfter = IERC20(AaveV3EthereumAssets.AAVE_UNDERLYING).allowance( + MiscEthereum.ECOSYSTEM_RESERVE, + AaveSafetyModule.STK_GHO + ); + + assertEq( + allowanceAfter - allowanceBefore, + proposal.AAVE_EMISSION_PER_SECOND() * proposal.DISTRIBUTION_DURATION() + ); + } + + function test_checkRewards() public { + address prankAddress = 0xF5Fb27b912D987B5b6e02A1B1BE0C1F0740E2c6f; + + uint256 confidenceMargin = 1e6; // margin of error due to rounding + uint256 rewardsPerDay = 50e18; + + executePayload(vm, address(proposal)); + + // impersonating address with AAVE balance + vm.startPrank(prankAddress); + IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).approve(AaveSafetyModule.STK_GHO, 1e18); + + IStakeToken(AaveSafetyModule.STK_GHO).stake(prankAddress, 1e18); + + vm.warp(block.timestamp + 1 days); + + uint256 rewardsBalance = IStakeToken(AaveSafetyModule.STK_GHO).getTotalRewardsBalance( + prankAddress + ); + + assertTrue( + rewardsBalance >= (rewardsPerDay - confidenceMargin) && + rewardsBalance <= (rewardsPerDay + confidenceMargin) + ); + + vm.stopPrank(); + } +} diff --git a/src/20240119_AaveV3Ethereum_StkGHOActivation/IStakeToken.sol b/src/20240119_AaveV3Ethereum_StkGHOActivation/IStakeToken.sol new file mode 100644 index 000000000..412bb2301 --- /dev/null +++ b/src/20240119_AaveV3Ethereum_StkGHOActivation/IStakeToken.sol @@ -0,0 +1,194 @@ +pragma solidity ^0.8.10; + +interface IStakeToken { + event Approval(address indexed owner, address indexed spender, uint256 value); + event AssetConfigUpdated(address indexed asset, uint256 emission); + event AssetIndexUpdated(address indexed asset, uint256 index); + event Cooldown(address indexed user, uint256 amount); + event CooldownSecondsChanged(uint256 cooldownSeconds); + event DistributionEndChanged(uint256 endTimestamp); + event EIP712DomainChanged(); + event ExchangeRateChanged(uint216 exchangeRate); + event FundsReturned(uint256 amount); + event Initialized(uint64 version); + event MaxSlashablePercentageChanged(uint256 newPercentage); + event PendingAdminChanged(address indexed newPendingAdmin, uint256 role); + event Redeem(address indexed from, address indexed to, uint256 assets, uint256 shares); + event RewardsAccrued(address user, uint256 amount); + event RewardsClaimed(address indexed from, address indexed to, uint256 amount); + event RoleClaimed(address indexed newAdmin, uint256 role); + event Slashed(address indexed destination, uint256 amount); + event SlashingExitWindowDurationChanged(uint256 windowSeconds); + event SlashingSettled(); + event Staked(address indexed from, address indexed to, uint256 assets, uint256 shares); + event Transfer(address indexed from, address indexed to, uint256 value); + event UserIndexUpdated(address indexed user, address indexed asset, uint256 index); + + struct AssetConfigInput { + uint128 emissionPerSecond; + uint256 totalStaked; + address underlyingAsset; + } + + function CLAIM_HELPER_ROLE() external view returns (uint256); + + function COOLDOWN_ADMIN_ROLE() external view returns (uint256); + + function DOMAIN_SEPARATOR() external view returns (bytes32); + + function EMISSION_MANAGER() external view returns (address); + + function EXCHANGE_RATE_UNIT() external view returns (uint256); + + function INITIAL_EXCHANGE_RATE() external view returns (uint216); + + function LOWER_BOUND() external view returns (uint256); + + function PRECISION() external view returns (uint8); + + function REWARDS_VAULT() external view returns (address); + + function REWARD_TOKEN() external view returns (address); + + function SLASH_ADMIN_ROLE() external view returns (uint256); + + function STAKED_TOKEN() external view returns (address); + + function UNSTAKE_WINDOW() external view returns (uint256); + + function allowance(address owner, address spender) external view returns (uint256); + + function approve(address spender, uint256 value) external returns (bool); + + function assets( + address + ) external view returns (uint128 emissionPerSecond, uint128 lastUpdateTimestamp, uint256 index); + + function balanceOf(address account) external view returns (uint256); + + function claimRewards(address to, uint256 amount) external; + + function claimRewardsAndRedeem(address to, uint256 claimAmount, uint256 redeemAmount) external; + + function claimRewardsAndRedeemOnBehalf( + address from, + address to, + uint256 claimAmount, + uint256 redeemAmount + ) external; + + function claimRewardsOnBehalf( + address from, + address to, + uint256 amount + ) external returns (uint256); + + function claimRoleAdmin(uint256 role) external; + + function configureAssets(AssetConfigInput[] memory assetsConfigInput) external; + + function cooldown() external; + + function cooldownOnBehalfOf(address from) external; + + function decimals() external view returns (uint8); + + function distributionEnd() external view returns (uint256); + + function eip712Domain() + external + view + returns ( + bytes1 fields, + string memory name, + string memory version, + uint256 chainId, + address verifyingContract, + bytes32 salt, + uint256[] memory extensions + ); + + function getAdmin(uint256 role) external view returns (address); + + function getCooldownSeconds() external view returns (uint256); + + function getExchangeRate() external view returns (uint216); + + function getMaxSlashablePercentage() external view returns (uint256); + + function getPendingAdmin(uint256 role) external view returns (address); + + function getTotalRewardsBalance(address staker) external view returns (uint256); + + function getUserAssetData(address user, address asset) external view returns (uint256); + + function inPostSlashingPeriod() external view returns (bool); + + function initialize( + string memory name, + string memory symbol, + address slashingAdmin, + address cooldownPauseAdmin, + address claimHelper, + uint256 maxSlashablePercentage, + uint256 cooldownSeconds + ) external; + + function name() external view returns (string memory); + + function nonces(address owner) external view returns (uint256); + + function permit( + address owner, + address spender, + uint256 value, + uint256 deadline, + uint8 v, + bytes32 r, + bytes32 s + ) external; + + function previewRedeem(uint256 shares) external view returns (uint256); + + function previewStake(uint256 assets) external view returns (uint256); + + function redeem(address to, uint256 amount) external; + + function redeemOnBehalf(address from, address to, uint256 amount) external; + + function returnFunds(uint256 amount) external; + + function setCooldownSeconds(uint256 cooldownSeconds) external; + + function setDistributionEnd(uint256 newDistributionEnd) external; + + function setMaxSlashablePercentage(uint256 percentage) external; + + function setPendingAdmin(uint256 role, address newPendingAdmin) external; + + function settleSlashing() external; + + function slash(address destination, uint256 amount) external returns (uint256); + + function stake(address to, uint256 amount) external; + + function stakeWithPermit( + uint256 amount, + uint256 deadline, + uint8 v, + bytes32 r, + bytes32 s + ) external; + + function stakerRewardsToClaim(address) external view returns (uint256); + + function stakersCooldowns(address) external view returns (uint40 timestamp, uint216 amount); + + function symbol() external view returns (string memory); + + function totalSupply() external view returns (uint256); + + function transfer(address to, uint256 value) external returns (bool); + + function transferFrom(address from, address to, uint256 value) external returns (bool); +} diff --git a/src/20240119_AaveV3Ethereum_StkGHOActivation/StkGHOActivation.md b/src/20240119_AaveV3Ethereum_StkGHOActivation/StkGHOActivation.md new file mode 100644 index 000000000..c71fbc237 --- /dev/null +++ b/src/20240119_AaveV3Ethereum_StkGHOActivation/StkGHOActivation.md @@ -0,0 +1,37 @@ +--- +title: "StkGHO Activation" +author: "Aave Labs & ACI" +discussions: "https://governance.aave.com/t/arfc-upgrade-safety-module-with-stkgho/15635" +--- + +## Simple Summary + +This AIP activates the new GHO based Safety module by initiating the emission schedule approved by the community during the [Snapshot vote](https://snapshot.org/#/aave.eth/proposal/0x4bc99a842adab6cdd8c7d5c7a787ee4c0056be554fde0d008d53b45b3e795065) + +## Motivation + +The GHO Safety Module will fortify the Aave Protocol’s resilience by adding a stablecoin asset, which is inherently less volatile than AAVE. This strategic move diversifies the Safety Module’s capacity to absorb shocks from various risk vectors in case of shortfall events. + +## Specification + +The GHO Safety module will be activated with the following parameters: + +- Base emission: 50 AAVE/day +- Duration: Three months + +## References + +- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240119_AaveV3Ethereum_StkGHOActivation/AaveV3Ethereum_StkGHOActivation_20240119.sol) +- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240119_AaveV3Ethereum_StkGHOActivation/AaveV3Ethereum_StkGHOActivation_20240119.t.sol) +- [Snapshot](https://snapshot.org/#/aave.eth/proposal/0x4bc99a842adab6cdd8c7d5c7a787ee4c0056be554fde0d008d53b45b3e795065) +- [Discussion](https://governance.aave.com/t/arfc-upgrade-safety-module-with-stkgho/15635) +- [StkGHO](https://etherscan.io/address/0x1a88Df1cFe15Af22B3c4c783D4e6F7F9e0C1885d) +- [StakeToken Repository](https://github.com/bgd-labs/stake-token) + +## Disclaimer + +Aave Labs, and ACI receive no compensation beyond Aave protocol for the creation of this proposal. ACI is delegate within the Aave ecosystem. + +## Copyright + +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20240119_AaveV3Ethereum_StkGHOActivation/StkGHOActivation_20240119.s.sol b/src/20240119_AaveV3Ethereum_StkGHOActivation/StkGHOActivation_20240119.s.sol new file mode 100644 index 000000000..a37a72673 --- /dev/null +++ b/src/20240119_AaveV3Ethereum_StkGHOActivation/StkGHOActivation_20240119.s.sol @@ -0,0 +1,58 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; +import {EthereumScript} from 'aave-helpers/ScriptUtils.sol'; +import {AaveV3Ethereum_StkGHOActivation_20240119} from './AaveV3Ethereum_StkGHOActivation_20240119.sol'; + +/** + * @dev Deploy Ethereum + * deploy-command: make deploy-ledger contract=src/20240119_AaveV3Ethereum_StkGHOActivation/StkGHOActivation_20240119.s.sol:DeployEthereum chain=mainnet + * verify-command: npx catapulta-verify -b broadcast/StkGHOActivation_20240119.s.sol/1/run-latest.json + */ +contract DeployEthereum is EthereumScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Ethereum_StkGHOActivation_20240119).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Create Proposal + * command: make deploy-ledger contract=src/20240119_AaveV3Ethereum_StkGHOActivation/StkGHOActivation_20240119.s.sol:CreateProposal chain=mainnet + */ +contract CreateProposal is EthereumScript { + function run() external { + // create payloads + PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](1); + + // compose actions for validation + IPayloadsControllerCore.ExecutionAction[] + memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1); + actionsEthereum[0] = GovV3Helpers.buildAction( + type(AaveV3Ethereum_StkGHOActivation_20240119).creationCode + ); + payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); + + // create proposal + vm.startBroadcast(); + GovV3Helpers.createProposal( + vm, + payloads, + GovV3Helpers.ipfsHashFile( + vm, + 'src/20240119_AaveV3Ethereum_StkGHOActivation/StkGHOActivation.md' + ) + ); + } +} diff --git a/src/20240119_AaveV3Ethereum_StkGHOActivation/config.ts b/src/20240119_AaveV3Ethereum_StkGHOActivation/config.ts new file mode 100644 index 000000000..5323ef21e --- /dev/null +++ b/src/20240119_AaveV3Ethereum_StkGHOActivation/config.ts @@ -0,0 +1,14 @@ +import {ConfigFile} from '../../generator/types'; +export const config: ConfigFile = { + rootOptions: { + pools: ['AaveV3Ethereum'], + title: 'StkGHO Activation', + shortName: 'StkGHOActivation', + date: '20240119', + author: 'Aave Labs & ACI', + discussion: 'https://governance.aave.com/t/arfc-upgrade-safety-module-with-stkgho/15635', + snapshot: + 'https://snapshot.org/#/aave.eth/proposal/0x4bc99a842adab6cdd8c7d5c7a787ee4c0056be554fde0d008d53b45b3e795065', + }, + poolOptions: {AaveV3Ethereum: {configs: {OTHERS: {}}, cache: {blockNumber: 19042382}}}, +}; diff --git a/yarn.lock b/yarn.lock index 419baa37d..a090e2c67 100644 --- a/yarn.lock +++ b/yarn.lock @@ -44,10 +44,10 @@ resolved "https://registry.yarnpkg.com/@bgd-labs/aave-address-book/-/aave-address-book-2.10.0.tgz#19873ec0edf9ee1f1a5539162e6092b0a2b2c4b4" integrity sha512-DVglkDCYUf7etb6mnCziIY2HPgap4X3AnC/1tC0ZqpXFrhO0lQzWBiMeWy20r1x/b81iHMQa02ULaco3LhdeVw== -"@bgd-labs/aave-address-book@^2.14.0": - version "2.14.0" - resolved "https://registry.yarnpkg.com/@bgd-labs/aave-address-book/-/aave-address-book-2.14.0.tgz#5cf20d1d9bfd2f9dbb57ebadb4e066ff7631009d" - integrity sha512-FFlfxOByUclzb6tY7LuA4rVRY6lRv3U6+FFXOegV6wxwYrsZEP9v3g0gQK0PTnbo3+Ua3kl+TlvySMQU7Klalw== +"@bgd-labs/aave-address-book@^2.17.0": + version "2.17.0" + resolved "https://registry.yarnpkg.com/@bgd-labs/aave-address-book/-/aave-address-book-2.17.0.tgz#06f5e8950135d00039220a0a6f44055e520924e2" + integrity sha512-JhKGyaCm6Qg+0jtX3UiNNi7c8+vYqFp8gbAsgMnxMZhDOEoNo4gPtiEq9M9rFl1PwjSEdMyzoRcP/nquFPC52g== "@bgd-labs/aave-cli@0.2.1": version "0.2.1"