Skip to content

Commit

Permalink
feat: add gov v3 helpers (#139)
Browse files Browse the repository at this point in the history
* feat: add gov v3 helpers

* fix: added helper methods

* fix: patch stdStorage

* fix: make it build

* fix: v2 helper fix

* fix: deduplicate ipfs tools

* fix: stash local changes

* feat: push gov v3helpers

* fix: update aligned with discussion

* feat: add proposal execution flow

* fix: allow overwriting proposals count

* feat: inject payloads

* fix: update to new address book

* fix: change visibility

* feat: initial ready proposal

* feat: implement readyProposal for govv3

* feat: add overload for single proposal

* fix: update scripts

* fix: update ipfs test

* fix: add broken methods

* feat: integrate cli into helpers

* stash: stash local changes

* feat: add overloads

* docs: add a sentence on readme

* Update src/GovV3Helpers.sol

* fix: add voting script

* fix: add readme

* fix: some patches to storage utils

* fix: add activateVoting to test

* fix: remove unncessary tests

* fix: last few patches

* Update src/ChainIds.sol

Co-authored-by: sendra <[email protected]>

* fix: add sepolia rpc

* fix: typo

* Update src/GovV3Helpers.sol

Co-authored-by: Andrey <[email protected]>

* Update src/GovV3Helpers.sol

Co-authored-by: Andrey <[email protected]>

* fix: update address book

---------

Co-authored-by: Lukas <[email protected]>
Co-authored-by: Andrey <[email protected]>
  • Loading branch information
3 people authored Oct 12, 2023
1 parent 4c084bf commit 1e1c177
Show file tree
Hide file tree
Showing 13 changed files with 1,189 additions and 37 deletions.
5 changes: 5 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@ RPC_FANTOM=https://rpc.ftm.tools
RPC_HARMONY=https://api.harmony.one
RPC_METIS=https://andromeda.metis.io/
RPC_BASE=https://mainnet.base.org
RPC_BNB=https://binance.llamarpc.com

# Testnet rpc_endpoints
RPC_SEPOLIA=wss://ethereum-sepolia.publicnode.com

ETHERSCAN_API_KEY_MAINNET=
ETHERSCAN_API_KEY_POLYGON=
Expand All @@ -19,3 +23,4 @@ ETHERSCAN_API_KEY_FANTOM=
ETHERSCAN_API_KEY_OPTIMISM=
ETHERSCAN_API_KEY_ARBITRUM=
ETHERSCAN_API_KEY_BASE=
ETHERSCAN_API_KEY_BNB=
5 changes: 4 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -55,4 +55,7 @@ deploy-config-engine-v2-ava :; forge script scripts/AaveV2ConfigEngine.s.sol:Dep
download :; cast etherscan-source --chain ${chain} -d src/etherscan/${chain}_${address} ${address}
git-diff :
@mkdir -p diffs
@printf '%s\n%s\n%s\n' "\`\`\`diff" "$$(git diff --no-index --diff-algorithm=patience --ignore-space-at-eol ${before} ${after})" "\`\`\`" > diffs/${out}.md
@printf '%s\n%s\n%s\n' "\`\`\`diff" "$$(git diff --no-index --diff-algorithm=patience --ignore-space-at-eol ${before} ${after})" "\`\`\`" > diffs/${out}.md

# Voting scripts
vote :; forge script scripts/VotingScripts.s.sol:VoteForProposal --rpc-url mainnet --broadcast --ledger --mnemonic-indexes ${MNEMONIC_INDEX} --sender ${LEDGER_SENDER} --verify -vvvv ${proposalId} ${support}
13 changes: 12 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,17 @@

This package contains various contracts which allow you to streamline testing within the aave protocol in foundry.

## GovHelpers
## GovHelpers (deprecated)

These helpers allow you to create and execute proposals on L1 so you don't have to care about having enough proposition power, timings, etc.

## GovV3Helpers

These helpers allow the creation of proposal for aave governance v3.

The GovernanceV3Helpers also contain scripts to cast a vote directly via foundry.
To do so just run `make vote proposalId=n support=true/false`.

## ProxyHelpers

These helpers allow you to fetch the current implementation & admin for a specified proxy.
Expand All @@ -19,3 +26,7 @@ These helpers allow you to simulate execution of proposals on governance control
The ProtocolV3TestBase is intended to be used with proposals that alter a V3 pool. While the `helpers` are libraries, you can use from where ever you want `ProtocolV3TestBase` is intended to be inherited from in your test via `is ProtocolV3TestBase`.

When inheriting from `ProtocolV3TestBase` you have access to methods to create readable configuration snapshots of a pool and e2e tests of a pool.

## ProtocolV2TestBase

Analog to ProtocolV3TestBase but for v2 pools.
5 changes: 4 additions & 1 deletion foundry.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ fantom = "${RPC_FANTOM}"
harmony = "${RPC_HARMONY}"
metis = "${RPC_METIS}"
base = "${RPC_BASE}"
bnb = "${RPC_BNB}"
sepolia = "${RPC_SEPOLIA}"

[etherscan]
mainnet={key="${ETHERSCAN_API_KEY_MAINNET}",chainId=1}
Expand All @@ -29,5 +31,6 @@ polygon={key="${ETHERSCAN_API_KEY_POLYGON}",chainId=137}
arbitrum={key="${ETHERSCAN_API_KEY_ARBITRUM}",chainId=42161}
fantom={key="${ETHERSCAN_API_KEY_FANTOM}",chainId=250}
base={key="${ETHERSCAN_API_KEY_BASE}",chain=8453}

bnb={key="${ETHERSCAN_API_KEY_BNB}",chainId=56}
sepolia={key="${ETHERSCAN_API_KEY_MAINNET}",chainId=11155111}
# See more config options https://github.com/gakonst/foundry/tree/master/config
2 changes: 1 addition & 1 deletion lib/aave-address-book
Submodule aave-address-book updated 97 files
+31 −0 CHANGELOG.md
+4 −2 package.json
+0 −263 scripts/abi/collector_v2_abi.json
+0 −73 scripts/abi/collector_v3_abi.json
+0 −37 scripts/abi/erc20_abi.json
+0 −886 scripts/abi/payloadsController.ts
+0 −1,227 scripts/abi/pool_v3_abi.json
+22 −0 scripts/configs/abis.ts
+3 −3 scripts/configs/governance/bnb.ts
+8 −0 scripts/configs/networks/arbitrum.ts
+8 −0 scripts/configs/networks/avalanche.ts
+8 −0 scripts/configs/networks/base.ts
+8 −0 scripts/configs/networks/ethereum.ts
+8 −0 scripts/configs/networks/fantom.ts
+8 −0 scripts/configs/networks/optimism.ts
+8 −0 scripts/configs/networks/polygon.ts
+1 −1 scripts/configs/pools/arbitrum.ts
+2 −2 scripts/configs/pools/avalanche.ts
+4 −0 scripts/configs/pools/base.ts
+2 −2 scripts/configs/pools/ethereum.ts
+1 −1 scripts/configs/pools/optimism.ts
+2 −2 scripts/configs/pools/polygon.ts
+12 −0 scripts/configs/types.ts
+29 −0 scripts/generateABIs.ts
+31 −13 scripts/generateAddresses.ts
+3 −45 scripts/generator/abis.ts
+1 −1 scripts/generator/chains.ts
+1 −1 scripts/generator/clients.ts
+15 −15 scripts/generator/governanceV2Generator.ts
+61 −17 scripts/generator/governanceV3Generator.ts
+35 −0 scripts/generator/networkGenerator.ts
+8 −1 src/AaveAddressBook.sol
+10 −10 src/AaveGovernanceV2.sol
+3 −3 src/AaveMisc.sol
+2 −2 src/AaveV2Avalanche.sol
+4 −4 src/AaveV2Ethereum.sol
+2 −2 src/AaveV2Polygon.sol
+4 −4 src/AaveV3Arbitrum.sol
+2 −2 src/AaveV3Avalanche.sol
+13 −0 src/AaveV3Base.sol
+4 −4 src/AaveV3Ethereum.sol
+4 −4 src/AaveV3Optimism.sol
+4 −4 src/AaveV3Polygon.sol
+11 −877 src/GovernanceV3.sol
+1 −1 src/GovernanceV3Arbitrum.sol
+9 −1 src/GovernanceV3Avalanche.sol
+26 −0 src/GovernanceV3BNB.sol
+1 −1 src/GovernanceV3Base.sol
+1 −1 src/GovernanceV3Binance.sol
+12 −1 src/GovernanceV3Ethereum.sol
+9 −1 src/GovernanceV3Fuji.sol
+12 −1 src/GovernanceV3Goerli.sol
+1 −1 src/GovernanceV3Metis.sol
+9 −1 src/GovernanceV3Mumbai.sol
+1 −1 src/GovernanceV3Optimism.sol
+9 −1 src/GovernanceV3Polygon.sol
+8 −0 src/MiscArbitrum.sol
+8 −0 src/MiscAvalanche.sol
+8 −0 src/MiscBase.sol
+8 −0 src/MiscEthereum.sol
+8 −0 src/MiscFantom.sol
+8 −0 src/MiscOptimism.sol
+8 −0 src/MiscPolygon.sol
+102 −0 src/governance-v3/Errors.sol
+41 −0 src/governance-v3/IExecutor.sol
+482 −0 src/governance-v3/IGovernanceCore.sol
+22 −0 src/governance-v3/IGovernancePowerStrategy.sol
+220 −0 src/governance-v3/IPayloadsControllerCore.sol
+1 −0 src/governance-v3/IVotingMachineWithProofs.sol
+1 −0 src/governance-v3/IVotingStrategy.sol
+25 −0 src/governance-v3/PayloadsControllerUtils.sol
+8 −1 src/ts/AaveAddressBook.ts
+10 −10 src/ts/AaveGovernanceV2.ts
+3 −3 src/ts/AaveMisc.ts
+2 −2 src/ts/AaveV2Avalanche.ts
+3 −3 src/ts/AaveV2Ethereum.ts
+2 −2 src/ts/AaveV2Polygon.ts
+3 −3 src/ts/AaveV3Arbitrum.ts
+2 −2 src/ts/AaveV3Avalanche.ts
+12 −0 src/ts/AaveV3Base.ts
+3 −3 src/ts/AaveV3Ethereum.ts
+3 −3 src/ts/AaveV3Optimism.ts
+3 −3 src/ts/AaveV3Polygon.ts
+6 −0 src/ts/GovernanceV3Avalanche.ts
+0 −0 src/ts/GovernanceV3BNB.ts
+9 −0 src/ts/GovernanceV3Ethereum.ts
+6 −0 src/ts/GovernanceV3Fuji.ts
+9 −0 src/ts/GovernanceV3Goerli.ts
+6 −0 src/ts/GovernanceV3Mumbai.ts
+6 −0 src/ts/GovernanceV3Polygon.ts
+3 −0 src/ts/MiscArbitrum.ts
+3 −0 src/ts/MiscAvalanche.ts
+3 −0 src/ts/MiscBase.ts
+3 −0 src/ts/MiscEthereum.ts
+3 −0 src/ts/MiscFantom.ts
+3 −0 src/ts/MiscOptimism.ts
+3 −0 src/ts/MiscPolygon.ts
14 changes: 14 additions & 0 deletions scripts/VotingScripts.s.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import {IVotingMachineWithProofs} from 'aave-address-book/governance-v3/IVotingMachineWithProofs.sol';
import '../src/ScriptUtils.sol';
import {GovV3Helpers} from '../src/GovV3Helpers.sol';

contract VoteForProposal is EthereumScript {
function run(uint256 proposalId, bool support) external broadcast {
IVotingMachineWithProofs.VotingBalanceProof[] memory votingBalanceProofs = GovV3Helpers
.getVotingProofs(vm, proposalId, msg.sender);
GovV3Helpers.vote(vm, proposalId, votingBalanceProofs, support);
}
}
43 changes: 42 additions & 1 deletion src/ChainIds.sol
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import {Vm} from 'forge-std/Vm.sol';

library ChainIds {
uint256 internal constant MAINNET = 1;
uint256 internal constant OPTIMISM = 10;
uint256 internal constant BSC = 56;
uint256 internal constant BNB = 56;
uint256 internal constant POLYGON = 137;
uint256 internal constant FANTOM = 250;
uint256 internal constant ZK_SYNC = 324;
Expand All @@ -16,3 +17,43 @@ library ChainIds {
uint256 internal constant SEPOLIA = 11155111;
uint256 internal constant HARMONY = 1666600000;
}

library ChainHelpers {
error UnknownChainId();

function selectChain(Vm vm, uint256 chainId) internal returns (uint256, uint256) {
uint256 previousFork = vm.activeFork();
if (chainId == block.chainid) return (previousFork, previousFork);
uint256 newFork;
if (chainId == ChainIds.MAINNET) {
newFork = vm.createFork(vm.rpcUrl('mainnet'));
} else if (chainId == ChainIds.OPTIMISM) {
newFork = vm.createFork(vm.rpcUrl('optimism'));
} else if (chainId == ChainIds.BNB) {
newFork = vm.createFork(vm.rpcUrl('bnb'));
} else if (chainId == ChainIds.POLYGON) {
newFork = vm.createFork(vm.rpcUrl('polygon'));
} else if (chainId == ChainIds.FANTOM) {
newFork = vm.createFork(vm.rpcUrl('fantom'));
} else if (chainId == ChainIds.ZK_SYNC) {
newFork = vm.createFork(vm.rpcUrl('zkSync'));
} else if (chainId == ChainIds.METIS) {
newFork = vm.createFork(vm.rpcUrl('metis'));
} else if (chainId == ChainIds.ZK_EVM) {
newFork = vm.createFork(vm.rpcUrl('zkEvm'));
} else if (chainId == ChainIds.BASE) {
newFork = vm.createFork(vm.rpcUrl('base'));
} else if (chainId == ChainIds.ARBITRUM) {
newFork = vm.createFork(vm.rpcUrl('arbitrum'));
} else if (chainId == ChainIds.AVALANCHE) {
newFork = vm.createFork(vm.rpcUrl('avalanche'));
} else if (chainId == ChainIds.SEPOLIA) {
newFork = vm.createFork(vm.rpcUrl('sepolia'));
} else if (chainId == ChainIds.HARMONY) {
newFork = vm.createFork(vm.rpcUrl('harmony'));
} else {
revert UnknownChainId();
}
return (previousFork, newFork);
}
}
32 changes: 2 additions & 30 deletions src/GovHelpers.sol
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ pragma abicoder v2;

import {Vm} from 'forge-std/Vm.sol';
import {console2} from 'forge-std/console2.sol';
import {IpfsUtils} from './IpfsUtils.sol';
import {AaveGovernanceV2, IAaveGovernanceV2, IExecutorWithTimelock} from 'aave-address-book/AaveGovernanceV2.sol';
import {IPoolAddressesProvider} from 'aave-address-book/AaveV3.sol';
import {AaveV3Avalanche} from 'aave-address-book/AaveV3Avalanche.sol';
Expand Down Expand Up @@ -42,37 +43,8 @@ library GovHelpers {
bool withDelegatecall;
}

function ipfsHashFile(Vm vm, string memory filePath, bool upload) internal returns (bytes32) {
string[] memory inputs = new string[](8);
inputs[0] = 'npx';
inputs[1] = '--yes';
inputs[2] = '-s';
inputs[3] = '@bgd-labs/[email protected]';
inputs[4] = 'ipfs';
inputs[5] = filePath;
inputs[6] = '-u';
inputs[7] = vm.toString(upload);
bytes memory bs58Hash = vm.ffi(inputs);
// currenty there is no better way as ffi silently fails
// revisit once https://github.com/foundry-rs/foundry/pull/4908 progresses
require(
bs58Hash.length != 0,
'CALCULATED_HASH_IS_ZERO_CHECK_IF_YARN_DEPENDENCIES_ARE_INSTALLED'
);
console2.logString('Info: This preview will only work when the file has been uploaded to ipfs');
console2.logString(
string(
abi.encodePacked(
'Preview: https://app.aave.com/governance/ipfs-preview/?ipfsHash=',
vm.toString(bs58Hash)
)
)
);
return bytes32(bs58Hash);
}

function ipfsHashFile(Vm vm, string memory filePath) internal returns (bytes32) {
return ipfsHashFile(vm, filePath, false);
return IpfsUtils.ipfsHashFile(vm, filePath, false);
}

function buildMainnet(address payloadAddress) internal pure returns (Payload memory) {
Expand Down
Loading

1 comment on commit 1e1c177

@github-actions
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Foundry report

forge 0.2.0 (5068b7a 2023-10-12T00:22:06.981802088Z)
Build log
Compiling 255 files with 0.8.18
Solc 0.8.18 finished in 100.19s
Compiler run successful with warnings:
Warning (8760): This declaration has the same name as another declaration.
  --> src/dependencies/DefaultReserveInterestRateStrategy.sol:60:5:
   |
60 |     uint256 baseVariableBorrowRate,
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Note: The other declaration is here:
  --> src/dependencies/DefaultReserveInterestRateStrategy.sol:92:3:
   |
92 |   function baseVariableBorrowRate() external view override returns (uint256) {
   |   ^ (Relevant source part starts here and spans across multiple lines).

Warning (8760): This declaration has the same name as another declaration.
  --> src/dependencies/DefaultReserveInterestRateStrategy.sol:61:5:
   |
61 |     uint256 variableRateSlope1,
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
Note: The other declaration is here:
  --> src/dependencies/DefaultReserveInterestRateStrategy.sol:76:3:
   |
76 |   function variableRateSlope1() external view returns (uint256) {
   |   ^ (Relevant source part starts here and spans across multiple lines).

Warning (8760): This declaration has the same name as another declaration.
  --> src/dependencies/DefaultReserveInterestRateStrategy.sol:62:5:
   |
62 |     uint256 variableRateSlope2,
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
Note: The other declaration is here:
  --> src/dependencies/DefaultReserveInterestRateStrategy.sol:80:3:
   |
80 |   function variableRateSlope2() external view returns (uint256) {
   |   ^ (Relevant source part starts here and spans across multiple lines).

Warning (8760): This declaration has the same name as another declaration.
  --> src/dependencies/DefaultReserveInterestRateStrategy.sol:63:5:
   |
63 |     uint256 stableRateSlope1,
   |     ^^^^^^^^^^^^^^^^^^^^^^^^
Note: The other declaration is here:
  --> src/dependencies/DefaultReserveInterestRateStrategy.sol:84:3:
   |
84 |   function stableRateSlope1() external view returns (uint256) {
   |   ^ (Relevant source part starts here and spans across multiple lines).

Warning (8760): This declaration has the same name as another declaration.
  --> src/dependencies/DefaultReserveInterestRateStrategy.sol:64:5:
   |
64 |     uint256 stableRateSlope2
   |     ^^^^^^^^^^^^^^^^^^^^^^^^
Note: The other declaration is here:
  --> src/dependencies/DefaultReserveInterestRateStrategy.sol:88:3:
   |
88 |   function stableRateSlope2() external view returns (uint256) {
   |   ^ (Relevant source part starts here and spans across multiple lines).

Warning (2462): Visibility for constructor is ignored. If you want the contract to be non-deployable, making it "abstract" is sufficient.
  --> src/dependencies/DefaultReserveInterestRateStrategy.sol:57:3:
   |
57 |   constructor(
   |   ^ (Relevant source part starts here and spans across multiple lines).

Warning (5667): Unused function parameter. Remove or comment out the variable name to silence this warning.
   --> src/GovV3Helpers.sol:644:5:
    |
644 |     address votingPortal
    |     ^^^^^^^^^^^^^^^^^^^^

| Contract                                    | Size (kB) | Margin (kB) |
|---------------------------------------------|-----------|-------------|
| AaveGovernanceV2                            | 0.086     | 24.49       |
| AaveMisc                                    | 0.086     | 24.49       |
| AavePolEthERC20Bridge                       | 3.027     | 21.549      |
| AaveSafetyModule                            | 0.086     | 24.49       |
| AaveSwapper                                 | 5.613     | 18.963      |
| AaveV2Avalanche                             | 0.086     | 24.49       |
| AaveV2AvalancheAssets                       | 0.086     | 24.49       |
| AaveV2ConfigEngine                          | 3.18      | 21.396      |
| AaveV2Ethereum                              | 0.086     | 24.49       |
| AaveV2EthereumAMM                           | 0.086     | 24.49       |
| AaveV2EthereumAMMAssets                     | 0.086     | 24.49       |
| AaveV2EthereumArc                           | 0.086     | 24.49       |
| AaveV2EthereumArcAssets                     | 0.086     | 24.49       |
| AaveV2EthereumAssets                        | 0.086     | 24.49       |
| AaveV2EthereumRatesUpdate                   | 1.512     | 23.064      |
| AaveV2Fuji                                  | 0.086     | 24.49       |
| AaveV2FujiAssets                            | 0.086     | 24.49       |
| AaveV2Goerli                                | 0.086     | 24.49       |
| AaveV2GoerliAssets                          | 0.086     | 24.49       |
| AaveV2Mumbai                                | 0.086     | 24.49       |
| AaveV2MumbaiAssets                          | 0.086     | 24.49       |
| AaveV2Polygon                               | 0.086     | 24.49       |
| AaveV2PolygonAssets                         | 0.086     | 24.49       |
| AaveV3Arbitrum                              | 0.086     | 24.49       |
| AaveV3ArbitrumAssets                        | 0.086     | 24.49       |
| AaveV3ArbitrumEModes                        | 0.086     | 24.49       |
| AaveV3ArbitrumGoerli                        | 0.086     | 24.49       |
| AaveV3ArbitrumGoerliAssets                  | 0.086     | 24.49       |
| AaveV3ArbitrumGoerliEModes                  | 0.086     | 24.49       |
| AaveV3ArbitrumRatesUpdates070322            | 4.674     | 19.902      |
| AaveV3Avalanche                             | 0.086     | 24.49       |
| AaveV3AvalancheAssets                       | 0.086     | 24.49       |
| AaveV3AvalancheCollateralUpdate             | 3.408     | 21.168      |
| AaveV3AvalancheCollateralUpdateCorrectBonus | 3.408     | 21.168      |
| AaveV3AvalancheCollateralUpdateNoChange     | 3.428     | 21.148      |
| AaveV3AvalancheCollateralUpdateWrongBonus   | 3.408     | 21.168      |
| AaveV3AvalancheEModeCategoryUpdateEdgeBonus | 3.379     | 21.197      |
| AaveV3AvalancheEModeCategoryUpdateNoChange  | 3.443     | 21.133      |
| AaveV3AvalancheEModes                       | 0.086     | 24.49       |
| AaveV3AvalancheRatesUpdates070322           | 5.115     | 19.461      |
| AaveV3Base                                  | 0.086     | 24.49       |
| AaveV3BaseAssets                            | 0.086     | 24.49       |
| AaveV3BaseEModes                            | 0.086     | 24.49       |
| AaveV3ConfigEngine                          | 8.273     | 16.303      |
| AaveV3Ethereum                              | 0.086     | 24.49       |
| AaveV3EthereumAssetEModeUpdate              | 3.257     | 21.319      |
| AaveV3EthereumAssets                        | 0.086     | 24.49       |
| AaveV3EthereumEModes                        | 0.086     | 24.49       |
| AaveV3EthereumMockCapUpdate                 | 3.335     | 21.241      |
| AaveV3EthereumMockCustomListing             | 4.168     | 20.408      |
| AaveV3Fantom                                | 0.086     | 24.49       |
| AaveV3FantomAssets                          | 0.086     | 24.49       |
| AaveV3FantomEModes                          | 0.086     | 24.49       |
| AaveV3FantomTestnet                         | 0.086     | 24.49       |
| AaveV3FantomTestnetAssets                   | 0.086     | 24.49       |
| AaveV3FantomTestnetEModes                   | 0.086     | 24.49       |
| AaveV3Fuji                                  | 0.086     | 24.49       |
| AaveV3FujiAssets                            | 0.086     | 24.49       |
| AaveV3FujiEModes                            | 0.086     | 24.49       |
| AaveV3GoerliGho                             | 0.086     | 24.49       |
| AaveV3GoerliGhoAssets                       | 0.086     | 24.49       |
| AaveV3GoerliGhoEModes                       | 0.086     | 24.49       |
| AaveV3Harmony                               | 0.086     | 24.49       |
| AaveV3HarmonyAssets                         | 0.086     | 24.49       |
| AaveV3HarmonyEModes                         | 0.086     | 24.49       |
| AaveV3Metis                                 | 0.086     | 24.49       |
| AaveV3MetisAssets                           | 0.086     | 24.49       |
| AaveV3MetisEModes                           | 0.086     | 24.49       |
| AaveV3Mumbai                                | 0.086     | 24.49       |
| AaveV3MumbaiAssets                          | 0.086     | 24.49       |
| AaveV3MumbaiEModes                          | 0.086     | 24.49       |
| AaveV3Optimism                              | 0.086     | 24.49       |
| AaveV3OptimismAssets                        | 0.086     | 24.49       |
| AaveV3OptimismEModes                        | 0.086     | 24.49       |
| AaveV3OptimismGoerli                        | 0.086     | 24.49       |
| AaveV3OptimismGoerliAssets                  | 0.086     | 24.49       |
| AaveV3OptimismGoerliEModes                  | 0.086     | 24.49       |
| AaveV3OptimismMockRatesUpdate               | 3.669     | 20.907      |
| AaveV3OptimismRatesUpdates070322            | 4.377     | 20.199      |
| AaveV3Polygon                               | 0.086     | 24.49       |
| AaveV3PolygonAssets                         | 0.086     | 24.49       |
| AaveV3PolygonBorrowUpdate                   | 3.428     | 21.148      |
| AaveV3PolygonEModeCategoryUpdate            | 3.377     | 21.199      |
| AaveV3PolygonEModes                         | 0.086     | 24.49       |
| AaveV3PolygonMockListing                    | 3.986     | 20.59       |
| AaveV3PolygonPriceFeedUpdate                | 3.276     | 21.3        |
| AaveV3PolygonRatesUpdates070322             | 5.73      | 18.846      |
| AaveV3ScrollAlpha                           | 0.086     | 24.49       |
| AaveV3ScrollAlphaAssets                     | 0.086     | 24.49       |
| AaveV3ScrollAlphaEModes                     | 0.086     | 24.49       |
| AaveV3ScrollSepolia                         | 0.086     | 24.49       |
| AaveV3ScrollSepoliaAssets                   | 0.086     | 24.49       |
| AaveV3ScrollSepoliaEModes                   | 0.086     | 24.49       |
| AaveV3Sepolia                               | 0.086     | 24.49       |
| AaveV3SepoliaAssets                         | 0.086     | 24.49       |
| AaveV3SepoliaEModes                         | 0.086     | 24.49       |
| Address                                     | 0.086     | 24.49       |
| AddressAliasHelper                          | 0.086     | 24.49       |
| BorrowEngine                                | 2.923     | 21.653      |
| CapsEngine                                  | 1.256     | 23.32       |
| CapsPlusRiskSteward                         | 2.607     | 21.969      |
| CapsPlusRiskStewardErrors                   | 0.556     | 24.02       |
| ChainHelpers                                | 0.086     | 24.49       |
| ChainIds                                    | 0.086     | 24.49       |
| CollateralEngine                            | 2.836     | 21.74       |
| ConfiguratorInputTypes                      | 0.086     | 24.49       |
| Create2Utils                                | 0.164     | 24.412      |
| CrosschainForwarderArbitrum                 | 2.246     | 22.33       |
| CrosschainForwarderMetis                    | 1.561     | 23.015      |
| CrosschainForwarderOptimism                 | 1.689     | 22.887      |
| CrosschainForwarderPolygon                  | 1.435     | 23.141      |
| DataTypes                                   | 0.086     | 24.49       |
| DefaultReserveInterestRateStrategy          | 3.485     | 21.091      |
| DeployEngineArbLib                          | 0.086     | 24.49       |
| DeployEngineAvaLib                          | 0.086     | 24.49       |
| DeployEngineBaseLib                         | 0.086     | 24.49       |
| DeployEngineEthLib                          | 0.086     | 24.49       |
| DeployEngineMetLib                          | 0.086     | 24.49       |
| DeployEngineOptLib                          | 0.086     | 24.49       |
| DeployEnginePolLib                          | 0.086     | 24.49       |
| DeployRatesFactoryArbLib                    | 0.086     | 24.49       |
| DeployRatesFactoryAvaLib                    | 0.086     | 24.49       |
| DeployRatesFactoryBasLib                    | 0.086     | 24.49       |
| DeployRatesFactoryEthLib                    | 0.086     | 24.49       |
| DeployRatesFactoryLib                       | 0.086     | 24.49       |
| DeployRatesFactoryMetLib                    | 0.086     | 24.49       |
| DeployRatesFactoryOptLib                    | 0.086     | 24.49       |
| DeployRatesFactoryPolLib                    | 0.086     | 24.49       |
| DeployV2EngineAvaLib                        | 0.086     | 24.49       |
| DeployV2EngineEthAMMLib                     | 0.086     | 24.49       |
| DeployV2EngineEthLib                        | 0.086     | 24.49       |
| DeployV2EnginePolLib                        | 0.086     | 24.49       |
| DeployV2RatesFactoryAvaLib                  | 0.086     | 24.49       |
| DeployV2RatesFactoryEthAMMLib               | 0.086     | 24.49       |
| DeployV2RatesFactoryEthLib                  | 0.086     | 24.49       |
| DeployV2RatesFactoryLib                     | 0.086     | 24.49       |
| DeployV2RatesFactoryPolLib                  | 0.086     | 24.49       |
| EModeEngine                                 | 4.404     | 20.172      |
| ERC1967Proxy                                | 0.699     | 23.877      |
| EngineFlags                                 | 0.086     | 24.49       |
| Errors                                      | 4.714     | 19.862      |
| FxChild                                     | 1.039     | 23.537      |
| FxRoot                                      | 0.811     | 23.765      |
| GovHelpers                                  | 0.086     | 24.49       |
| GovV3Helpers                                | 0.086     | 24.49       |
| GovV3StorageHelpers                         | 0.086     | 24.49       |
| GovernanceV3Arbitrum                        | 0.086     | 24.49       |
| GovernanceV3Avalanche                       | 0.086     | 24.49       |
| GovernanceV3BNB                             | 0.086     | 24.49       |
| GovernanceV3Base                            | 0.086     | 24.49       |
| GovernanceV3Ethereum                        | 0.086     | 24.49       |
| GovernanceV3Fuji                            | 0.086     | 24.49       |
| GovernanceV3Goerli                          | 0.086     | 24.49       |
| GovernanceV3Metis                           | 0.086     | 24.49       |
| GovernanceV3Mumbai                          | 0.086     | 24.49       |
| GovernanceV3Optimism                        | 0.086     | 24.49       |
| GovernanceV3Polygon                         | 0.086     | 24.49       |
| IpfsUtils                                   | 0.086     | 24.49       |
| ListingEngine                               | 8.792     | 15.784      |
| MiscArbitrum                                | 0.086     | 24.49       |
| MiscAvalanche                               | 0.086     | 24.49       |
| MiscBase                                    | 0.086     | 24.49       |
| MiscEthereum                                | 0.086     | 24.49       |
| MiscFantom                                  | 0.086     | 24.49       |
| MiscOptimism                                | 0.086     | 24.49       |
| MiscPolygon                                 | 0.086     | 24.49       |
| MockExecutor                                | 0.437     | 24.139      |
| MyPayload                                   | 1.53      | 23.046      |
| PayloadWithEmit                             | 0.15      | 24.426      |
| PayloadsControllerUtils                     | 0.086     | 24.49       |
| PercentageMath                              | 0.086     | 24.49       |
| PriceFeedEngine                             | 1.657     | 22.919      |
| ProxyAdmin                                  | 1.683     | 22.893      |
| ProxyHelpers                                | 0.086     | 24.49       |
| RateEngine                                  | 3.596     | 20.98       |
| ReserveConfiguration                        | 0.171     | 24.405      |
| SafeCast                                    | 0.086     | 24.49       |
| SafeERC20                                   | 0.086     | 24.49       |
| SafeMath                                    | 0.086     | 24.49       |
| StdStyle                                    | 0.086     | 24.49       |
| StorageHelpers                              | 0.086     | 24.49       |
| StorageSlot                                 | 0.086     | 24.49       |
| TransparentProxyFactory                     | 7.505     | 17.071      |
| TransparentUpgradeableProxy                 | 2.096     | 22.48       |
| V2RateStrategyFactory                       | 8.842     | 15.734      |
| V3RateStrategyFactory                       | 9.279     | 15.297      |
| WadRayMath                                  | 0.086     | 24.49       |
| console                                     | 0.086     | 24.49       |
| console2                                    | 0.086     | 24.49       |
| safeconsole                                 | 0.086     | 24.49       |
| stdError                                    | 0.591     | 23.985      |
| stdJson                                     | 0.086     | 24.49       |
| stdMath                                     | 0.086     | 24.49       |
| stdStorage                                  | 0.086     | 24.49       |
| stdStorageSafe                              | 0.086     | 24.49       |
Test success 🌈
No files changed, compilation skipped

Running 3 tests for src/bridges/AavePolEthERC20BridgeTest.t.sol:BridgeTest
[PASS] test_revertsIf_invalidChain() (gas: 8575)
[PASS] test_revertsIf_notOwner() (gas: 66660)
[PASS] test_successful() (gas: 59470)
Test result: ok. 3 passed; 0 failed; 0 skipped; finished in 2.44s

Running 9 tests for tests/riskstewards/CapsPlusRiskSteward.t.sol:CapsPlusRiskSteward_Test
[PASS] test_debounce() (gas: 129140)
[PASS] test_increaseCapsMax() (gas: 114995)
[PASS] test_invalidCaller() (gas: 7547)
[PASS] test_keepCurrent() (gas: 48188)
[PASS] test_unlisted() (gas: 32844)
[PASS] test_updateBorrowCapBiggerMax() (gas: 37190)
[PASS] test_updateBorrowCapNotStrictlyHigher() (gas: 45961)
[PASS] test_updateSupplyCapBiggerMax() (gas: 36946)
[PASS] test_updateSupplyCapNotStrictlyHigher() (gas: 45514)
Test result: ok. 9 passed; 0 failed; 0 skipped; finished in 3.27s

Running 2 tests for src/bridges/AavePolEthERC20BridgeTest.t.sol:EmergencyTokenTransfer
[PASS] test_revertsIf_invalidCaller() (gas: 13104)
[PASS] test_successful_governanceCaller() (gas: 69603)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 994.64ms

Running 2 tests for src/bridges/AavePolEthERC20BridgeTest.t.sol:ExitTest
[PASS] test_revertsIf_invalidChain() (gas: 11198)
[PASS] test_revertsIf_proofAlreadyProcessed() (gas: 39281)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 488.55ms

Running 2 tests for src/bridges/AavePolEthERC20BridgeTest.t.sol:TransferOwnership
[PASS] test_revertsIf_invalidCaller() (gas: 14615)
[PASS] test_successful() (gas: 13392)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 1.43ms

Running 2 tests for src/bridges/AavePolEthERC20BridgeTest.t.sol:WithdrawToCollectorTest
[PASS] test_revertsIf_invalidChain() (gas: 10872)
[PASS] test_successful() (gas: 76344)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 1.38s

Running 6 tests for src/swaps/AaveSwapperTest.t.sol:AaveSwapperSwap
[PASS] test_revertsIf_amountIsZero() (gas: 12452)
[PASS] test_revertsIf_fromTokenIsZeroAddress() (gas: 12435)
[PASS] test_revertsIf_invalidCaller() (gas: 11669)
[PASS] test_revertsIf_invalidRecipient() (gas: 12496)
[PASS] test_revertsIf_toTokenIsZeroAddress() (gas: 12373)
[PASS] test_successful() (gas: 476571)
Test result: ok. 6 passed; 0 failed; 0 skipped; finished in 2.11s

Running 3 tests for src/swaps/AaveSwapperTest.t.sol:CancelSwap
[PASS] test_revertsIf_invalidCaller() (gas: 15418)
[PASS] test_revertsIf_noMatchingTrade() (gas: 482928)
[PASS] test_successful() (gas: 588040)
Test result: ok. 3 passed; 0 failed; 0 skipped; finished in 1.03s

Running 2 tests for src/swaps/AaveSwapperTest.t.sol:EmergencyTokenTransfer
[PASS] test_revertsIf_invalidCaller() (gas: 10861)
[PASS] test_successful_governanceCaller() (gas: 304551)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 1.13s

Running 1 test for src/swaps/DepositV2SwapPayloadTest.t.sol:DepositV2SwapPayloadTest
[PASS] test_successful() (gas: 476089)
Test result: ok. 1 passed; 0 failed; 0 skipped; finished in 6.63s

Running 1 test for src/swaps/DepositV3SwapPayloadTest.t.sol:DepositV3SwapPayloadTest
[PASS] test_successful() (gas: 442317)
Test result: ok. 1 passed; 0 failed; 0 skipped; finished in 4.77s

Running 7 tests for src/swaps/AaveSwapperTest.t.sol:GetExpectedOut
[PASS] test_aaveToUsdc() (gas: 84122)
[PASS] test_aaveToUsdc_withEthBasedOracles() (gas: 84115)
[PASS] test_balTo80BAL20WETH() (gas: 83868)
[PASS] test_ethToBal() (gas: 69531)
[PASS] test_ethToDai() (gas: 67281)
[PASS] test_revertsIf_fromOracleIsAddressZero() (gas: 9238)
[PASS] test_revertsIf_toOracleIsAddressZero() (gas: 9242)
Test result: ok. 7 passed; 0 failed; 0 skipped; finished in 8.90s

Running 1 test for src/swaps/AaveSwapperTest.t.sol:Initialize
[PASS] test_revertsIf_alreadyInitialized() (gas: 10894)
Test result: ok. 1 passed; 0 failed; 0 skipped; finished in 888.81µs

Running 2 tests for src/swaps/AaveSwapperTest.t.sol:RemoveGuardian
[PASS] test_revertsIf_invalidCaller() (gas: 12924)
[PASS] test_successful() (gas: 16184)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 989.41µs

Running 2 tests for src/swaps/AaveSwapperTest.t.sol:TransferOwnership
[PASS] test_revertsIf_invalidCaller() (gas: 12352)
[PASS] test_successful() (gas: 18297)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 1.19ms

Running 2 tests for src/swaps/AaveSwapperTest.t.sol:UpdateGuardian
[PASS] test_revertsIf_invalidCaller() (gas: 14546)
[PASS] test_successful() (gas: 22582)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 1.25ms

Running 1 test for tests/GovTest.t.sol:GovernanceIpfsTest
[PASS] testIpfsHashCreation() (gas: 14571)
Logs:
  Info: This preview will only work when the file has been uploaded to ipfs
  Preview: https://app.aave.com/governance/ipfs-preview/?ipfsHash=0x12f2d9c91e4e23ae4009ab9ef5862ee0ae79498937b66252213221f04a5d5b32

Test result: ok. 1 passed; 0 failed; 0 skipped; finished in 12.52s

Running 1 test for tests/GovTest.t.sol:GovernanceL2ExecutorTest
[PASS] testCreateProposal() (gas: 116279)
Test result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.62s

Running 2 tests for tests/GovTest.t.sol:GovernanceMainnetExecutorTest
[PASS] testCreateProposalLong() (gas: 165827)
[PASS] testCreateProposalShort() (gas: 161431)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 4.91s

Running 2 tests for tests/GovTest.t.sol:GovernanceTest
[PASS] testCreateProposal() (gas: 533168)
[PASS] testCreateProposalDynamicIpfsHash() (gas: 544941)
Logs:
  Info: This preview will only work when the file has been uploaded to ipfs
  Preview: https://app.aave.com/governance/ipfs-preview/?ipfsHash=0x12f2d9c91e4e23ae4009ab9ef5862ee0ae79498937b66252213221f04a5d5b32

Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 7.17s

Running 6 tests for tests/GovV3Test.t.sol:GovernanceV3Test
[PASS] test_executePayloadViaAddress() (gas: 75863)
[PASS] test_executePayloadViaId() (gas: 283262)
[PASS] test_injectPayloadIntoPayloadsController() (gas: 64232)
[PASS] test_injectProposalIntoGovernance() (gas: 105258)
[PASS] test_payloadCreation() (gas: 644552)
Logs:
  0x3bec1bfc00000000000000000000000000000000000000000000000000000000000000600000000000000000000000009b24c168d6a76b5459b1d47071a54962a4df36c36861736800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000dabad81af85554e9ae636395611c58f7ec1aaec50000000000000000000000000000000000000000000000000000000000000000

[PASS] test_readyPayloadId() (gas: 176304)
Test result: ok. 6 passed; 0 failed; 0 skipped; finished in 48.44s

Running 1 test for tests/crosschainforwarders/MetisCrossChainForwarderTest.t.sol:MetisCrossChainForwarderTest
[PASS] testProposalE2E() (gas: 1213114)
Test result: ok. 1 passed; 0 failed; 0 skipped; finished in 9.74s

Running 1 test for tests/crosschainforwarders/OptimismCrossChainForwarderTest.t.sol:OptimismCrossChainForwarderTest
[PASS] testProposalE2E() (gas: 1196700)
Test result: ok. 1 passed; 0 failed; 0 skipped; finished in 10.92s

Running 1 test for tests/crosschainforwarders/PolygonCrossChainForwarderTest.t.sol:PolygonCrossChainForwarderTest
[PASS] testProposalE2E() (gas: 1049401)
Test result: ok. 1 passed; 0 failed; 0 skipped; finished in 9.63s

Running 1 test for tests/AaveV2ConfigEngineTest.t.sol:AaveV2ConfigEngineTest
[PASS] testV2RateStrategiesUpdates() (gas: 189313010)
Test result: ok. 1 passed; 0 failed; 0 skipped; finished in 128.24s

Running 1 test for tests/AaveV3ConfigEngineGauntletProposal.t.sol:AaveV3ArbitrumConfigEngineRatesTest
[PASS] testEngine() (gas: 17825705)
Test result: ok. 1 passed; 0 failed; 0 skipped; finished in 47.10s

Running 1 test for tests/ProtocolV2TestBase.t.sol:ProtocolV2TestBaseTest
[PASS] testE2E() (gas: 18720918)
Logs:
  E2E: Collateral AAVE, TestAsset USDT
  SUPPLY: AAVE, Amount: 2553597251196022693793
  SUPPLY: USDT, Amount: 1922278804
  WITHDRAW: USDT, Amount: 961139402
  WITHDRAW: USDT, Amount: 961139403
  BORROW: USDT, Amount 1922278804, Stable: false
  REPAY: USDT, Amount: 1922278804
  BORROW: USDT, Amount 1922278804, Stable: true
  REPAY: USDT, Amount: 1922278804
  E2E: Collateral AAVE, TestAsset WBTC
  SUPPLY: AAVE, Amount: 2553597251196022693793
  SUPPLY: WBTC, Amount: 6293388
  WITHDRAW: WBTC, Amount: 3146694
  WITHDRAW: WBTC, Amount: 3146693
  BORROW: WBTC, Amount 6293388, Stable: false
  REPAY: WBTC, Amount: 6293388
  BORROW: WBTC, Amount 6293388, Stable: true
  REPAY: WBTC, Amount: 6293388
  E2E: Collateral AAVE, TestAsset WETH
  SUPPLY: AAVE, Amount: 2553597251196022693793
  SUPPLY: WETH, Amount: 1000000000000000000
  WITHDRAW: WETH, Amount: 500000000000000000
  WITHDRAW: WETH, Amount: 500000000000000001
  BORROW: WETH, Amount 1000000000000000000, Stable: false
  REPAY: WETH, Amount: 1000000000000000000
  BORROW: WETH, Amount 1000000000000000000, Stable: true
  REPAY: WETH, Amount: 1000000000000000000
  E2E: Collateral AAVE, TestAsset AAVE
  SUPPLY: AAVE, Amount: 2553597251196022693793
  SUPPLY: AAVE, Amount: 25535972511960226937
  WITHDRAW: AAVE, Amount: 12767986255980113468
  WITHDRAW: AAVE, Amount: 12767986255980113469
  E2E: Collateral AAVE, TestAsset DAI
  SUPPLY: AAVE, Amount: 2553597251196022693793
  SUPPLY: DAI, Amount: 1914944850736299739803
  WITHDRAW: DAI, Amount: 957472425368149869901
  WITHDRAW: DAI, Amount: 957472425368149869902
  BORROW: DAI, Amount 1914944850736299739803, Stable: false
  REPAY: DAI, Amount: 1914944850736299739803
  BORROW: DAI, Amount 1914944850736299739803, Stable: true
  REPAY: DAI, Amount: 1914944850736299739803
  E2E: Collateral AAVE, TestAsset sUSD
  SUPPLY: AAVE, Amount: 2553597251196022693793
  SUPPLY: sUSD, Amount: 1919434649608077907661
  WITHDRAW: sUSD, Amount: 959717324804038953830
  WITHDRAW: sUSD, Amount: 959717324804038953830
  BORROW: sUSD, Amount 1919434649608077907661, Stable: false
  REPAY: sUSD, Amount: 1919434649608077907661
  E2E: Collateral AAVE, TestAsset USDC
  SUPPLY: AAVE, Amount: 2553597251196022693793
  SUPPLY: USDC, Amount: 1912585127
  WITHDRAW: USDC, Amount: 956292563
  WITHDRAW: USDC, Amount: 956292564
  BORROW: USDC, Amount 1912585127, Stable: false
  REPAY: USDC, Amount: 1912585127
  BORROW: USDC, Amount 1912585127, Stable: true
  REPAY: USDC, Amount: 1912585127
  E2E: Collateral AAVE, TestAsset CRV
  SUPPLY: AAVE, Amount: 2553597251196022693793
  SUPPLY: CRV, Amount: 2447532600357965341777
  WITHDRAW: CRV, Amount: 1223766300178982670888
  WITHDRAW: CRV, Amount: 1223766300178982670889
  E2E: Collateral AAVE, TestAsset GUSD
  SUPPLY: AAVE, Amount: 2553597251196022693793
  SUPPLY: GUSD, Amount: 191331
  WITHDRAW: GUSD, Amount: 95665
  WITHDRAW: GUSD, Amount: 95665
  BORROW: GUSD, Amount 191331, Stable: false
  REPAY: GUSD, Amount: 191331
  E2E: Collateral AAVE, TestAsset USDP
  SUPPLY: AAVE, Amount: 2553597251196022693793
  SUPPLY: USDP, Amount: 1939299150785117381031
  WITHDRAW: USDP, Amount: 969649575392558690515
  WITHDRAW: USDP, Amount: 969649575392558690516
  BORROW: USDP, Amount 1939299150785117381031, Stable: false
  REPAY: USDP, Amount: 1939299150785117381031
  E2E: Collateral AAVE, TestAsset FRAX
  SUPPLY: AAVE, Amount: 2553597251196022693793
  SUPPLY: FRAX, Amount: 1937630504372688546970
  WITHDRAW: FRAX, Amount: 968815252186344273485
  WITHDRAW: FRAX, Amount: 968815252186344273486
  BORROW: FRAX, Amount 1937630504372688546970, Stable: false
  REPAY: FRAX, Amount: 1937630504372688546970
  E2E: Collateral AAVE, TestAsset stETH
  SUPPLY: AAVE, Amount: 2553597251196022693793
  SUPPLY: stETH, Amount: 1000000000000000000
  WITHDRAW: stETH, Amount: 500000000000000000
  WITHDRAW: stETH, Amount: 499999999999999999
  E2E: Collateral AAVE, TestAsset LUSD
  SUPPLY: AAVE, Amount: 2553597251196022693793
  SUPPLY: LUSD, Amount: 1910246445122217347247
  WITHDRAW: LUSD, Amount: 955123222561108673623
  WITHDRAW: LUSD, Amount: 955123222561108673623
  BORROW: LUSD, Amount 1910246445122217347247, Stable: false
  REPAY: LUSD, Amount: 1910246445122217347247
  BORROW: LUSD, Amount 1910246445122217347247, Stable: true
  REPAY: LUSD, Amount: 1910246445122217347247

Test result: ok. 1 passed; 0 failed; 0 skipped; finished in 107.36s

Running 1 test for tests/ProtocolV2TestBase.t.sol:ProtocolV2TestE2ETestAsset
[PASS] test_e2eTestAssetUSDT() (gas: 3467234)
Logs:
  E2E: Collateral DAI, TestAsset USDT
  SUPPLY: DAI, Amount: 191494485073629973980349
  SUPPLY: USDT, Amount: 1922278804
  WITHDRAW: USDT, Amount: 961139402
  WITHDRAW: USDT, Amount: 961139403
  BORROW: USDT, Amount 1922278804, Stable: false
  REPAY: USDT, Amount: 1922278804
  BORROW: USDT, Amount 1922278804, Stable: true
  REPAY: USDT, Amount: 1922278804

Test result: ok. 1 passed; 0 failed; 0 skipped; finished in 283.73ms

Running 1 test for tests/AaveV3ConfigEngineGauntletProposal.t.sol:AaveV3AvalancheConfigEngineRatesTest
[PASS] testEngine() (gas: 27764406)
Test result: ok. 1 passed; 0 failed; 0 skipped; finished in 38.91s

Running 1 test for tests/ProtocolV3TestBase.t.sol:ProtocolV3TestBaseTest
[PASS] test_e2eTestDPI() (gas: 2127203)
Logs:
  E2E: Collateral WMATIC, TestAsset DPI
  SUPPLY: WMATIC, Amount: 18494019080464425505952
  SUPPLY: DPI, Amount: 1618633986381736259
  WITHDRAW: DPI, Amount: 809316993190868129
  WITHDRAW: DPI, Amount: 809316993190868130
  BORROW: DPI, Amount 1618633986381736259, Stable: false
  REPAY: DPI, Amount: 1618633986381736259

Test result: ok. 1 passed; 0 failed; 0 skipped; finished in 41.33s

Running 1 test for tests/AaveV3ConfigEngineGauntletProposal.t.sol:AaveV3OptimismConfigEngineRatesTest
[PASS] testEngine() (gas: 20657292)
Test result: ok. 1 passed; 0 failed; 0 skipped; finished in 46.76s

Running 1 test for tests/ProtocolV3TestBase.t.sol:ProtocolV3TestE2ETestAll
[PASS] test_e2e() (gas: 12051172)
Logs:
  E2E: Collateral LINK, TestAsset DAI
  SUPPLY: LINK, Amount: 1616553507921112188813
  SUPPLY: DAI, Amount: 100002834080317836207
  WITHDRAW: DAI, Amount: 50001417040158918103
  WITHDRAW: DAI, Amount: 50001417040158918104
  BORROW: DAI, Amount 100002834080317836207, Stable: false
  REPAY: DAI, Amount: 100002834080317836207
  BORROW: DAI, Amount 100002834080317836207, Stable: true
  REPAY: DAI, Amount: 100002834080317836207
  E2E: Collateral LINK, TestAsset LINK
  SUPPLY: LINK, Amount: 1616553507921112188813
  SUPPLY: LINK, Amount: 16165535079211121888
  WITHDRAW: LINK, Amount: 8082767539605560944
  WITHDRAW: LINK, Amount: 8082767539605560944
  BORROW: LINK, Amount 16165535079211121888, Stable: false
  REPAY: LINK, Amount: 16165535079211121888
  E2E: Collateral LINK, TestAsset USDC
  SUPPLY: LINK, Amount: 1616553507921112188813
  SUPPLY: USDC, Amount: 100000000
  WITHDRAW: USDC, Amount: 50000000
  WITHDRAW: USDC, Amount: 50000000
  BORROW: USDC, Amount 100000000, Stable: false
  REPAY: USDC, Amount: 100000000
  BORROW: USDC, Amount 100000000, Stable: true
  REPAY: USDC, Amount: 100000000
  E2E: Collateral LINK, TestAsset WBTC
  SUPPLY: LINK, Amount: 1616553507921112188813
  SUPPLY: WBTC, Amount: 385965
  WITHDRAW: WBTC, Amount: 192982
  WITHDRAW: WBTC, Amount: 192983
  BORROW: WBTC, Amount 385965, Stable: false
  REPAY: WBTC, Amount: 385965
  E2E: Collateral LINK, TestAsset WETH
  SUPPLY: LINK, Amount: 1616553507921112188813
  SUPPLY: WETH, Amount: 54558945484701671
  WITHDRAW: WETH, Amount: 27279472742350835
  WITHDRAW: WETH, Amount: 27279472742350836
  BORROW: WETH, Amount 54558945484701671, Stable: false
  REPAY: WETH, Amount: 54558945484701671
  E2E: Collateral LINK, TestAsset USDT
  SUPPLY: LINK, Amount: 1616553507921112188813
  SUPPLY: USDT, Amount: 99994515
  WITHDRAW: USDT, Amount: 49997257
  WITHDRAW: USDT, Amount: 49997258
  BORROW: USDT, Amount 99994515, Stable: false
  REPAY: USDT, Amount: 99994515
  BORROW: USDT, Amount 99994515, Stable: true
  REPAY: USDT, Amount: 99994515
  E2E: Collateral LINK, TestAsset AAVE
  Skip: AAVE, supply cap fully utilized
  E2E: Collateral LINK, TestAsset sUSD
  SUPPLY: LINK, Amount: 1616553507921112188813
  SUPPLY: sUSD, Amount: 100213932694959892580
  WITHDRAW: sUSD, Amount: 50106966347479946290
  WITHDRAW: sUSD, Amount: 50106966347479946291
  BORROW: sUSD, Amount 100213932694959892580, Stable: false
  REPAY: sUSD, Amount: 100213932694959892580
  E2E: Collateral LINK, TestAsset OP
  SUPPLY: LINK, Amount: 1616553507921112188813
  SUPPLY: OP, Amount: 65659881812212738017
  WITHDRAW: OP, Amount: 32829940906106369008
  WITHDRAW: OP, Amount: 32829940906106369009
  E2E: Collateral LINK, TestAsset wstETH
  SUPPLY: LINK, Amount: 1616553507921112188813
  SUPPLY: wstETH, Amount: 48438229171421992
  WITHDRAW: wstETH, Amount: 24219114585710996
  WITHDRAW: wstETH, Amount: 24219114585710996
  BORROW: wstETH, Amount 48438229171421992, Stable: false
  REPAY: wstETH, Amount: 48438229171421992
  E2E: Collateral LINK, TestAsset LUSD
  SUPPLY: LINK, Amount: 1616553507921112188813
  SUPPLY: LUSD, Amount: 99436925482654158084
  WITHDRAW: LUSD, Amount: 49718462741327079042
  WITHDRAW: LUSD, Amount: 49718462741327079042
  BORROW: LUSD, Amount 99436925482654158084, Stable: false
  REPAY: LUSD, Amount: 99436925482654158084
  E2E: TestAsset MAI SKIPPED

Test result: ok. 1 passed; 0 failed; 0 skipped; finished in 65.51s

Running 1 test for tests/AaveV3ConfigEngineGauntletProposal.t.sol:AaveV3PolygonConfigEngineRatesTest
[PASS] testEngine() (gas: 71025386)
Test result: ok. 1 passed; 0 failed; 0 skipped; finished in 82.46s

Running 1 test for tests/ProtocolV3TestBase.t.sol:ProtocolV3TestE2ETestAllMainnet
[PASS] test_e2e() (gas: 21835677)
Logs:
  E2E: Collateral WETH, TestAsset WETH
  SUPPLY: WETH, Amount: 6058639095884313146
  SUPPLY: WETH, Amount: 60586390958843131
  WITHDRAW: WETH, Amount: 30293195479421565
  WITHDRAW: WETH, Amount: 30293195479421566
  BORROW: WETH, Amount 60586390958843131, Stable: false
  REPAY: WETH, Amount: 60586390958843131
  E2E: Collateral WETH, TestAsset wstETH
  SUPPLY: WETH, Amount: 6058639095884313146
  SUPPLY: wstETH, Amount: 53280673161492371
  WITHDRAW: wstETH, Amount: 26640336580746185
  WITHDRAW: wstETH, Amount: 26640336580746186
  BORROW: wstETH, Amount 53280673161492371, Stable: false
  REPAY: wstETH, Amount: 53280673161492371
  E2E: Collateral WETH, TestAsset WBTC
  SUPPLY: WETH, Amount: 6058639095884313146
  SUPPLY: WBTC, Amount: 383041
  WITHDRAW: WBTC, Amount: 191520
  WITHDRAW: WBTC, Amount: 191521
  BORROW: WBTC, Amount 383041, Stable: false
  REPAY: WBTC, Amount: 383041
  E2E: Collateral WETH, TestAsset USDC
  SUPPLY: WETH, Amount: 6058639095884313146
  SUPPLY: USDC, Amount: 99997805
  WITHDRAW: USDC, Amount: 49998902
  WITHDRAW: USDC, Amount: 49998903
  BORROW: USDC, Amount 99997805, Stable: false
  REPAY: USDC, Amount: 99997805
  E2E: Collateral WETH, TestAsset DAI
  SUPPLY: WETH, Amount: 6058639095884313146
  SUPPLY: DAI, Amount: 100010001000100010001
  WITHDRAW: DAI, Amount: 50005000500050005000
  WITHDRAW: DAI, Amount: 50005000500050005000
  BORROW: DAI, Amount 100010001000100010001, Stable: false
  REPAY: DAI, Amount: 100010001000100010001
  E2E: Collateral WETH, TestAsset LINK
  SUPPLY: WETH, Amount: 6058639095884313146
  SUPPLY: LINK, Amount: 16762478423086336626
  WITHDRAW: LINK, Amount: 8381239211543168313
  WITHDRAW: LINK, Amount: 8381239211543168314
  BORROW: LINK, Amount 16762478423086336626, Stable: false
  REPAY: LINK, Amount: 16762478423086336626
  E2E: Collateral WETH, TestAsset AAVE
  SUPPLY: WETH, Amount: 6058639095884313146
  SUPPLY: AAVE, Amount: 1779312582127864301
  WITHDRAW: AAVE, Amount: 889656291063932150
  WITHDRAW: AAVE, Amount: 889656291063932151
  E2E: Collateral WETH, TestAsset cbETH
  SUPPLY: WETH, Amount: 6058639095884313146
  SUPPLY: cbETH, Amount: 57866658031368797
  WITHDRAW: cbETH, Amount: 28933329015684398
  WITHDRAW: cbETH, Amount: 28933329015684400
  BORROW: cbETH, Amount 57866658031368797, Stable: false
  REPAY: cbETH, Amount: 57866658031368797
  E2E: Collateral WETH, TestAsset USDT
  SUPPLY: WETH, Amount: 6058639095884313146
  SUPPLY: USDT, Amount: 100057032
  WITHDRAW: USDT, Amount: 50028516
  WITHDRAW: USDT, Amount: 50028516
  BORROW: USDT, Amount 100057032, Stable: false
  REPAY: USDT, Amount: 100057032
  E2E: Collateral WETH, TestAsset rETH
  SUPPLY: WETH, Amount: 6058639095884313146
  SUPPLY: rETH, Amount: 56019957636630099
  WITHDRAW: rETH, Amount: 28009978818315049
  WITHDRAW: rETH, Amount: 28009978818315049
  BORROW: rETH, Amount 56019957636630099, Stable: false
  REPAY: rETH, Amount: 56019957636630099
  E2E: Collateral WETH, TestAsset LUSD
  SUPPLY: WETH, Amount: 6058639095884313146
  SUPPLY: LUSD, Amount: 100115968330756248192
  WITHDRAW: LUSD, Amount: 50057984165378124096
  WITHDRAW: LUSD, Amount: 50057984165378124096
  BORROW: LUSD, Amount 100115968330756248192, Stable: false
  REPAY: LUSD, Amount: 100115968330756248192
  E2E: Collateral WETH, TestAsset CRV
  SUPPLY: WETH, Amount: 6058639095884313146
  SUPPLY: CRV, Amount: 223005138752013290392
  WITHDRAW: CRV, Amount: 111502569376006645196
  WITHDRAW: CRV, Amount: 111502569376006645196
  E2E: Collateral WETH, TestAsset MKR
  SUPPLY: WETH, Amount: 6058639095884313146
  SUPPLY: MKR, Amount: 98727441294737554
  WITHDRAW: MKR, Amount: 49363720647368777
  WITHDRAW: MKR, Amount: 49363720647368777
  BORROW: MKR, Amount 98727441294737554, Stable: false
  REPAY: MKR, Amount: 98727441294737554
  E2E: Collateral WETH, TestAsset SNX
  SUPPLY: WETH, Amount: 6058639095884313146
  SUPPLY: SNX, Amount: 48449612403100775193
  WITHDRAW: SNX, Amount: 24224806201550387596
  WITHDRAW: SNX, Amount: 24224806201550387597
  BORROW: SNX, Amount 48449612403100775193, Stable: false
  REPAY: SNX, Amount: 48449612403100775193
  E2E: Collateral WETH, TestAsset BAL
  SUPPLY: WETH, Amount: 6058639095884313146
  SUPPLY: BAL, Amount: 29102153909197170579
  WITHDRAW: BAL, Amount: 14551076954598585289
  WITHDRAW: BAL, Amount: 14551076954598585290
  BORROW: BAL, Amount 29102153909197170579, Stable: false
  REPAY: BAL, Amount: 29102153909197170579
  E2E: Collateral WETH, TestAsset UNI
  SUPPLY: WETH, Amount: 6058639095884313146
  SUPPLY: UNI, Amount: 21784934158663696976
  WITHDRAW: UNI, Amount: 10892467079331848488
  WITHDRAW: UNI, Amount: 10892467079331848487
  BORROW: UNI, Amount 21784934158663696976, Stable: false
  REPAY: UNI, Amount: 21784934158663696976
  E2E: Collateral WETH, TestAsset LDO
  SUPPLY: WETH, Amount: 6058639095884313146
  SUPPLY: LDO, Amount: 63030843796742294959
  WITHDRAW: LDO, Amount: 31515421898371147479
  WITHDRAW: LDO, Amount: 31515421898371147480
  BORROW: LDO, Amount 63030843796742294959, Stable: false
  REPAY: LDO, Amount: 63030843796742294959
  E2E: Collateral WETH, TestAsset ENS
  SUPPLY: WETH, Amount: 6058639095884313146
  SUPPLY: ENS, Amount: 12437764195368907456
  WITHDRAW: ENS, Amount: 6218882097684453728
  WITHDRAW: ENS, Amount: 6218882097684453729
  BORROW: ENS, Amount 12437764195368907456, Stable: false
  REPAY: ENS, Amount: 12437764195368907456
  E2E: Collateral WETH, TestAsset 1INCH
  SUPPLY: WETH, Amount: 6058639095884313146
  SUPPLY: 1INCH, Amount: 410278510592180821883
  WITHDRAW: 1INCH, Amount: 205139255296090410941
  WITHDRAW: 1INCH, Amount: 205139255296090410942
  BORROW: 1INCH, Amount 410278510592180821883, Stable: false
  REPAY: 1INCH, Amount: 410278510592180821883
  E2E: Collateral WETH, TestAsset FRAX
  SUPPLY: WETH, Amount: 6058639095884313146
  SUPPLY: FRAX, Amount: 100168997118418426095
  WITHDRAW: FRAX, Amount: 50084498559209213047
  WITHDRAW: FRAX, Amount: 50084498559209213049
  BORROW: FRAX, Amount 100168997118418426095, Stable: false
  REPAY: FRAX, Amount: 100168997118418426095
  E2E: TestAsset GHO SKIPPED
  E2E: Collateral WETH, TestAsset RPL
  SUPPLY: WETH, Amount: 6058639095884313146
  SUPPLY: RPL, Amount: 4169283941609818799
  WITHDRAW: RPL, Amount: 2084641970804909399
  WITHDRAW: RPL, Amount: 2084641970804909401
  BORROW: RPL, Amount 4169283941609818799, Stable: false
  REPAY: RPL, Amount: 4169283941609818799

Test result: ok. 1 passed; 0 failed; 0 skipped; finished in 117.35s

Running 2 tests for tests/ProtocolV3TestBase.t.sol:ProtocolV3TestE2ETestAsset
[PASS] test_e2eTestAssetMAI() (gas: 1668142)
Logs:
  E2E: Collateral DAI, TestAsset MAI
  SUPPLY: DAI, Amount: 10000000000000000000000
  SUPPLY: MAI, Amount: 100855007402202840780
  WITHDRAW: MAI, Amount: 50427503701101420390
  WITHDRAW: MAI, Amount: 50427503701101420389
  BORROW: MAI, Amount 100855007402202840780, Stable: false
  REPAY: MAI, Amount: 100855007402202840780

[PASS] test_e2eTestAssetUSDC() (gas: 2061202)
Logs:
  E2E: Collateral DAI, TestAsset USDC
  SUPPLY: DAI, Amount: 10000000000000000000000
  SUPPLY: USDC, Amount: 100000866
  WITHDRAW: USDC, Amount: 50000433
  WITHDRAW: USDC, Amount: 50000433
  BORROW: USDC, Amount 100000866, Stable: false
  REPAY: USDC, Amount: 100000866
  BORROW: USDC, Amount 100000866, Stable: true
  REPAY: USDC, Amount: 100000866

Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 33.19s

Running 1 test for tests/ProtocolV3TestBase.t.sol:ProtocolV3TestE2ETestSnapshot
[PASS] test_snapshot() (gas: 4686931)
Test result: ok. 1 passed; 0 failed; 0 skipped; finished in 12.71s

Running 2 tests for tests/ProxyHelpersTest.t.sol:ProxyHelpersTest
[PASS] testAdmin() (gas: 3274)
[PASS] testImplementation() (gas: 3219)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 542.61ms

Running 2 tests for tests/V2RateStrategyFactory.t.sol:V2RateStrategyFactoryTest
[PASS] testCreateStrategies() (gas: 850671)
[PASS] testMultipleCreateStrategies() (gas: 850436)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 2.67s

Running 2 tests for tests/V3RateStrategyFactory.t.sol:V3RateStrategyFactoryTest
[PASS] testCreateStrategies() (gas: 714518)
[PASS] testMultipleCreateStrategies() (gas: 714609)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 1.12s

Running 20 tests for tests/AaveV3ConfigEngineTest.t.sol:AaveV3ConfigEngineTest
[PASS] testArbitrumRateStrategiesUpdates() (gas: 29317045)
[PASS] testAssetEModeUpdates() (gas: 71654355)
[PASS] testAvaxRateStrategiesUpdates() (gas: 36419460)
[PASS] testBorrowsUpdates() (gas: 92464420)
[PASS] testCapsUpdates() (gas: 71668778)
[PASS] testCollateralUpdateCorrectBonus() (gas: 35881022)
[PASS] testCollateralUpdateWrongBonus() (gas: 8018847)
[PASS] testCollateralsUpdates() (gas: 35882483)
[PASS] testCollateralsUpdatesNoChange() (gas: 35858155)
[PASS] testEModeCategoryUpdates() (gas: 92525987)
[PASS] testEModeCategoryUpdatesNoChange() (gas: 35872964)
[PASS] testEModeCategoryUpdatesWrongBonus() (gas: 8032134)
[PASS] testFailCollateralsUpdatesNoChange() (gas: 8700101)
[PASS] testFailEModeCategoryUpdatesNoChange() (gas: 8047669)
[PASS] testListings() (gas: 98237546)
[PASS] testListingsCustom() (gas: 77162318)
[PASS] testOptimismRateStrategiesUpdates() (gas: 37590686)
[PASS] testPolygonRateStrategiesUpdates() (gas: 93178295)
[PASS] testPriceFeedsUpdates() (gas: 92387174)
[PASS] testRateStrategiesUpdates() (gas: 37398414)
Test result: ok. 20 passed; 0 failed; 0 skipped; finished in 315.32s

Running 3 tests for tests/crosschainforwarders/ArbitrumCrossChainForwarderTest.t.sol:ArbitrumCrossChainForwarderTest
[PASS] testHasSufficientGas() (gas: 24011)
[PASS] testProposalE2E() (gas: 1120295)
[PASS] testgetGetMaxSubmissionCost() (gas: 17182)
Test result: ok. 3 passed; 0 failed; 0 skipped; finished in 10.39s
 
Ran 41 test suites: 104 tests passed, 0 failed, 0 skipped (104 total tests)

Please sign in to comment.