Skip to content

Conversation

@sakulstra
Copy link
Contributor

@sakulstra sakulstra commented Dec 9, 2025

The feature changelog can be found HERE
The properties of the changes are described HERE

TepNik and others added 13 commits October 23, 2025 19:09
- [eMode Improvements](#emode-improvements)
- [Automatic Collateral Behavior](#automatic-collateral-behavior)
  - [Liquidate aTokens](#liquidate-atokens)
  - [Isolated Collaterals](#isolated-collaterals)
  - [aToken Transfers](#atoken-transfers)
- [Renounce Allowance](#renounce-allowance)
- [OpenZeppelin Alignment](#openzeppelin-alignment)
  - [`BorrowAllowanceDelegated` event removal in `_decreaseBorrowAllowance`](#borrowallowancedelegated-event-removal-in-_decreaseborrowallowance)
  - [`Approval` event removal in `transferFrom`](#approval-event-removal-in-transferfrom)
- [eMode Category Label (Soft Deprecation)](#emode-category-label-soft-deprecation) - [Deprecation](#deprecation)
- [Upgrade Considerations](#upgrade-considerations)

**Change**: In Aave v3.6, `lt`, `ltv`, and `borrowingEnabled` are now fully decoupled — the configuration for `eMode = 0` no longer affects any non-default efficiency modes (`eMode ≠ 0`).
To achieve this, the eMode configuration has been extended with an `ltvZeroBitmap` that allows enabling `ltv0 rules` for a specific asset in a specific eMode.

**Background**:
In prior versions of the Aave Protocol, the default `reserve configuration` always superseded the `eMode configuration`. In practice, this meant:

- For an asset to be collateral inside an eMode, it must be collateral outside as well.
- For an asset to be borrowable inside an eMode, it must be borrowable outside as well.
- If an asset is set to `ltv = 0` in the `reserve configuration`, it is considered as `ltv = 0` inside the eMode as well, and **ltv0 rules** apply.

**ltv0 rules**: In Aave v3, `ltv0` assets have `ltv = 0`, but in addition, some `ltv0 rules` apply:

- `ltv0` assets cannot be enabled as collateral.
- `ltv0` collateral has to be withdrawn **first**. This means that if a position consists of `ltv0` and non-`ltv0` collateral, trying to withdraw or transfer the non-`ltv0` collateral will revert.

While this approach evolved naturally from v3.0, it made certain scenarios impossible to configure:

- Making an asset exclusively borrowable in some eMode.
- Making an asset exclusively collateral in some eMode.
- Capping exposure via `ltv0 rules` exclusively for usage outside an eMode, or exclusively inside a specific eMode.

This limitation was artificial and existed only because upgrades had historically been applied gradually, with minimal but impactful changes.
Therefore, in Aave v3.6, this limitation has been removed.

**Motivation**:

This feature enables more granular risk control and resolves issues that risk teams currently face:

- **Collateral-only in eMode**: Previously, to make an asset collateral only inside an eMode, teams had to enable it outside with a very low LT as a workaround. Now assets can be collateral exclusively within specific eModes.
- **Borrowable-only in eMode**: Previously, to make an asset borrowable only inside an eMode, teams had to enable it as borrowable outside of eMode as well. This meant assets were borrowable globally even when there was only a specific use case within an eMode. Now assets can be borrowable exclusively within specific eModes.
- **eMode-specific ltv0 rules**: Previously, there was no way to flag an asset as `ltv0` only in a specific eMode or, more importantly, only outside of it. v3.6 introduces this capability, which greatly improves risk control and enables better asset offboarding strategies.

In v3.6, automatic collateral enablement has been removed in three scenarios. These changes reduce gas costs and code complexity while having minimal impact on integrations.

**Important**: `supply` and `deposit` still automatically enable collateral as before.

| Scenario             | Change                                                             | Gas Savings               | Impact                            |
| -------------------- | ------------------------------------------------------------------ | ------------------------- | --------------------------------- |
| Liquidating aTokens  | Received aTokens no longer automatically enabled as collateral     | ~25k gas                  | None - no one relied on this      |
| Isolated collaterals | Isolated collaterals no longer automatically enabled as collateral | Savings on every transfer | None - role was never used        |
| aToken transfers     | Received aTokens no longer automatically enabled as collateral     | ~18% (~25k gas)           | Minimal - one DeFi Saver contract |

**Change**: Liquidating aTokens will no longer automatically enable the received assets as collateral for the liquidator.

**Background**: In previous versions, when a liquidator received aTokens from a liquidation (including the liquidation bonus), these aTokens were automatically enabled as collateral for the liquidator.

**Motivation**:

- The current behavior was flagged by various auditors across multiple releases of the Aave protocol.
- In self-liquidation scenarios, the behavior creates accounting inconsistencies where excess debt appears as a deficit while the liquidation bonus remains as collateral.
- On-chain data showed no one ever relied on this automatic behavior.
- Removing it reduces liquidation gas costs by approximately 25k.

Given the gas-sensitive nature of liquidations and the lack of reliance on this feature, the automatic collateral enablement has been removed.

**Impact**: None. No liquidator relied on this behavior.

**Alternative**: Liquidators who want to enable the received aTokens as collateral can still do so in a single transaction via multicall.

**Change**: In v3.6, isolated collaterals are no longer automatically enabled as collateral upon deposit.

**Background**: In Aave v3.2, an "Isolated collateral supplier" role was introduced. The goal was to allow certain permissioned entities to deposit isolated collateral assets and automatically enable them as collateral. The feature was never actively used but increased gas costs and code complexity.

**Motivation**:

- Code analysis revealed that the feature never worked as intended on transfers.
- The role was only ever granted twice: to the [MigrationHelperMainnet](https://etherscan.io/address/0xB748952c7BC638F31775245964707Bcc5DDFabFC) and [Legacy ParaSwapLiquiditySwapAdapter](https://etherscan.io/address/0x872fBcb1B582e8Cd0D0DD4327fBFa0B4C2730995).
- While the first contract still has some transactions, migrating only isolated assets is not a common use case.
- The second contract has not been used for over two years.
- The feature increased gas costs for every transfer.

Given the lack of usage and the gas overhead, the feature has been removed.

**Impact**: None. The role was never actively used, and the feature was never relied upon.

**Change**: When receiving an aToken via transfer, the receiver is no longer automatically enabled as collateral.

**Background**: In previous versions of the Aave protocol, a transfer would enable the received asset as collateral automatically if possible. On-chain analysis shows that for the vast majority of transfers, enabling as collateral is **unintentional** - the vast majority of users never borrow against assets received via transfer.

**Note**: While v3.6 changes the behavior on **transfer**, `supply`/`deposit` still automatically enable collateral as before.

**Motivation**:

- The feature is rarely relied upon. Most integrations work with the underlying asset rather than relying on aToken transfers. Since `deposit` still automatically enables collateral, these integrations are unaffected.
- Testing with major integrations confirmed no significant impact. The only affected integration was a [DeFi Saver](https://defisaver.com/) contract, which can be adapted to the new behavior.
- Transfers become significantly more gas efficient (~18% or ~25k gas per transfer). Since transfers are the backbone of some contracts (stata and weth gateway), the gas savings will be noticeable there as well.
- Code complexity is reduced.

All robust integrations that rely on `aToken` transfers already handle the case of an asset not being enabled as collateral, as there are edge cases where the automation does not work (isolation and ltv0).

**Impact**: Minimal. Testing confirmed no significant impact on major integrations. One DeFi Saver contract requires adaptation.

**Alternatives**:

- Integrations that want this functionality can use position manager or deposit on behalf.
- Users can manually enable collateral after transfer via multicall in a single transaction.

**Safety**: If any integration relies on this feature (e.g., non-verified contracts or small integrations), there is essentially zero chance of funds being stuck or lost. As long as a contract that manages aTokens has the ability to pull or transfer aTokens elsewhere (which should always be the case), the funds will be safe.

**Background**: In the current Aave ecosystem, it is common to have pending approvals for aTokens and credit delegation. This occurs because the tokens are rebasing, and the exact amount needed at execution time is often unknown. To mitigate this, integrations over-approve, leaving unused approvals.

**Change**: v3.6 introduces new functions to revoke excess approvals:

- `renounceDelegation(address delegator)` on the `VariableDebtToken`
- `renounceAllowance(address owner)` on the `AToken`

These functions allow integrations to "burn" excess allowances by setting `borrowAllowance` and `allowance` back to zero.

**Motivation**: This addresses a long-standing issue in the ecosystem by providing a clean way for integrations to revoke unused approvals.

v3.6 aligns event emission behavior with OpenZeppelin's ERC20 standard implementation to reduce gas costs and improve ecosystem consistency.

**Change**: The `_decreaseBorrowAllowance` function on the `DebtTokenBase` no longer emits a `BorrowAllowanceDelegated` event.

**Motivation**: This change aligns with OpenZeppelin's ERC20 implementation regarding allowance updates. The `BorrowAllowanceDelegated` event is now only emitted on explicit approval via `approveDelegation` or `delegationWithSig`, analogous to how the `Approval` event is handled in OpenZeppelin's ERC20 contract. This reduces gas costs for operations that decrease borrow allowance, such as borrowing on behalf of another user.

**Change**: The `transferFrom` function on `AToken` no longer emits an `Approval` event. The allowance is still correctly updated. Also when infinite allowance(`uint256.max`) is given, allowance is not longer consumed.

**Motivation**: This is a gas optimization that aligns with OpenZeppelin's ERC20 standard implementation, where `transferFrom` is not required to emit an `Approval` event. This behavior was flagged by multiple auditors in past releases. While there was no issue with the previous behavior, it was not aligned with most other contracts (notably modern OpenZeppelin). Removing the event emission saves (2k) gas for integrations that heavily rely on `transferFrom` (e.g., all ParaSwap adapters).

**Change**: v3.6 does **not** modify the eMode category label configuration but adds a soft deprecation notice. On-chain labels remain available and will continue to function for the foreseeable future.

**Background and Motivation**: eMode categories have evolved significantly since their introduction in Aave v3. With liquid eModes (v3.2) and further improvements (v3.6), eMode categories are now much more dynamic than they originally were. As a result, the fixed label that is set on creation is starting to fall out of date. Additionally, multiple eMode categories can now exist for the same asset subset, making naming via a fixed label more complex, as seen in the existing, often clashing, labels with differentiation suffixes.

**Recommendation**: We highly recommend updating the UI code to handle the eMode selection based on a different logic rather than relying on the on-chain label. While on-chain labels will remain for backward compatibility, they should not be used in new implementations.

- The `increaseAllowance` and `decreaseAllowance` functions are flagged as deprecated. Modern OpenZeppelin no longer includes these functions, and adoption is minimal.
- The `getEModeCategoryLabel` function is flagged as deprecated.
- Removal of `getEModeLogic` as the single function from `eModeLogic` was moved to `supplyLogic`.

- In the upgrade payload, reserves must be iterated, and each eMode containing an `ltv0` asset as collateral must be updated to include the asset in the `ltvZeroBitmap`.
- All aToken and variable debt token implementations must be updated to account for the change in event emission.

commands done): # squash ed950a38 # fix: patches # squash a0e088b7 # refactor: use helper function for ltv getter # No commands remaining. # You are currently rebasing branch 'v3.6.0' on '7fd19d51'. # # Changes to be committed: # new file:
docs/3.6/Aave-v3.6-features.md # new file:  docs/3.6/Aave-v3.6-properties.md # modified:  scripts/misc/LibraryPreCompileOne.sol # modified:  snapshots/AToken.transfer.json # modified:  snapshots/ATokenWithDelegation.transfer.json # modified:
snapshots/Pool.Getters.json # modified:  snapshots/Pool.Operations.json # modified:  snapshots/Pool.OperationsComposition.json # modified:  snapshots/Pool.Setters.json # modified:  snapshots/ProtocolDataProvider.json # modified:
snapshots/StataTokenV2.json # modified:  snapshots/WrappedTokenGatewayV3.json # modified:  src/contracts/helpers/UiPoolDataProviderV3.sol # modified:  src/contracts/instances/ATokenInstance.sol # modified:
src/contracts/instances/ATokenWithDelegationInstance.sol # modified:  src/contracts/instances/PoolConfiguratorInstance.sol # modified:  src/contracts/instances/PoolInstance.sol # modified:
src/contracts/instances/VariableDebtTokenInstance.sol # modified:  src/contracts/instances/VariableDebtTokenMainnetInstanceGHO.sol # modified:  src/contracts/interfaces/ICreditDelegationToken.sol # modified:
src/contracts/interfaces/IPool.sol # modified:  src/contracts/interfaces/IPoolConfigurator.sol # modified:  src/contracts/protocol/libraries/configuration/UserConfiguration.sol # modified:  src/contracts/protocol/libraries/helpers/Errors.sol
src/contracts/protocol/libraries/logic/SupplyLogic.sol # modified:  src/contracts/protocol/libraries/logic/ValidationLogic.sol # modified:  src/contracts/protocol/libraries/types/DataTypes.sol # modified:
src/contracts/protocol/pool/Pool.sol # modified:  src/contracts/protocol/pool/PoolConfigurator.sol # modified:  src/contracts/protocol/tokenization/AToken.sol # modified:  src/contracts/protocol/tokenization/VariableDebtToken.sol # modified:
src/contracts/protocol/tokenization/base/DebtTokenBase.sol # modified:  src/contracts/protocol/tokenization/base/IncentivizedERC20.sol # modified:  src/deployments/contracts/utilities/MetadataReporter.sol # modified:
src/deployments/interfaces/IMarketReportTypes.sol # modified:  src/deployments/projects/aave-v3-libraries/AaveV3LibrariesBatch1.sol # modified:  tests/gas/AToken.Transfer.gas.t.sol # modified:
tests/gas/ATokenWithDelegation.Transfer.gas.t.sol # modified:  tests/gas/Pool.Getters.gas.t.sol # modified:  tests/gas/Pool.Setters.gas.t.sol # modified:  tests/gas/ProtocolDataProvider.gas.t.sol # modified:  tests/gas/StataToken.gas.t.sol #
new file:  tests/protocol/pool/Pool.EMode.Borrowable.sol # new file:  tests/protocol/pool/Pool.EMode.Collaterals.sol # new file:  tests/protocol/pool/Pool.EMode.Ltvzero.sol # modified:  tests/protocol/pool/Pool.EMode.sol # modified:
tests/protocol/pool/Pool.FlashLoans.t.sol # modified:  tests/protocol/pool/Pool.Liquidations.t.sol # modified:  tests/protocol/pool/Pool.t.sol # modified:  tests/protocol/pool/pool-configurator/PoolConfigurator.eMode.sol # modified:
tests/protocol/tokenization/ATokenDelegation.t.sol # modified:  tests/protocol/tokenization/ATokenEvents.t.sol # modified:  tests/protocol/tokenization/ATokenTransfers.t.sol # modified:  tests/protocol/tokenization/AToken_TransferFrom.t.sol #
modified:  tests/protocol/tokenization/VariableDebtToken.t.sol # modified:  tests/utils/EIP712SigUtils.sol # modified:  tests/utils/TestnetProcedures.sol # # Changes not staged for commit: # modified:  lib/solidity-utils (untracked content) #

* test: add test
When liquidating a collateral, the liquidationThreshold of the collateral is no longer validated.
As long as an asset is flagged as collateralEnabled on a user position it can be liquidated.
This already was the implicit behavior on previous versions of Aave as for an asset to be enabled as collateral, it must have a liquidationThreshold != 0 for the current user configuration.
Removing the redundant validation, allows to maintain that same behavior on Aave v3.6, as on v3.6 it is possible for an asset to be collateral inside an eMode, while outside the liquidationThreshold is 0.

For a more extensive overview over the collateral enablement rules & the rules for switching an eMode, please check the v3.6-properties.
Update docs/3.6/Aave-v3.6-properties.md

Co-authored-by: Ernesto Boado <[email protected]>
Removing the no longer needed parameter reduces gas usage slightly and improves code hygiene.
In the current implementation, the amount of allowance burned in `_decreaseBorrowAllowance` is based on the delegatees balance. It would be more correct to do the estimation based on the `delegators` balance to ensure the `burned allowance` is exactly equal to the `minted debt`.
The docs on validateHFAndLtvzero describe the code, but not the reasoning.
Refactored the comment to better explain the reasoning.
Currently the error messages are vague; adding the categoryId gives slightly more transparency.
Co-authored-by: nisnislevi <[email protected]>
Event emission in the case of setting ltv while no longer being frozen was missing.
@codecov
Copy link

codecov bot commented Dec 9, 2025

Codecov Report

❌ Patch coverage is 99.34641% with 1 line in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
...s/protocol/tokenization/base/IncentivizedERC20.sol 92.30% 1 Missing ⚠️

📢 Thoughts on this report? Let us know!

@github-actions
Copy link
Contributor

github-actions bot commented Dec 9, 2025

Forge Build Sizes

Contract Runtime Size (B) Initcode Size (B) Runtime Margin (B) Initcode Margin (B)
ATokenHandler ↑76% (+7558) 17,491 ↑71% (+7558) 18,211 ↓52% (-7558) 7,085 ↓20% (-7558) 30,941
ATokenInstance ↑1% (+66) 10,498 ↑1% (+66) 11,598 ↓0% (-66) 14,078 ↓0% (-66) 37,554
ATokenWithDelegationInstance ↑0% (+66) 14,142 ↑0% (+66) 15,248 ↓1% (-66) 10,434 ↓0% (-66) 33,904
ATokenWithDelegationInstanceNext (tests/gas/ATokenWithDelegation.Transfer.gas.t.sol) ↑0% (+66) 14,164 ↑0% (+66) 15,326 ↓1% (-66) 10,412 ↓0% (-66) 33,826
ATokenWithDelegationInstanceNext (tests/protocol/tokenization/ATokenDelegation.t.sol) ↑0% (+66) 14,164 ↑0% (+66) 15,326 ↓1% (-66) 10,412 ↓0% (-66) 33,826
ATokenWithDelegationInstanceNext (tests/protocol/tokenization/ATokenWithDelegationRounding.t.sol) ↑0% (+66) 14,164 ↑0% (+66) 15,326 ↓1% (-66) 10,412 ↓0% (-66) 33,826
AaveV3ConfigEngine ↓1% (-66) 7,831 ↓1% (-66) 9,360 ↑0% (+66) 16,745 ↑0% (+66) 39,792
AaveV3GettersBatchOne 189 ↑1% (+169) 22,720 24,387 ↓1% (-169) 26,432
AaveV3HelpersBatchOne 353 ↑3% (+1041) 36,517 24,223 ↓8% (-1041) 12,635
AaveV3L2PoolBatch 137 ↑6% (+2584) 42,934 24,439 ↓29% (-2584) 6,218
AaveV3LibrariesBatch1 ↓9% (-29) 292 ↓15% (-3179) 18,375 ↑0% (+29) 24,284 ↑12% (+3179) 30,777
AaveV3LibrariesBatch2 ↓9% (-29) 292 ↓2% (-792) 41,496 ↑0% (+29) 24,284 ↑12% (+792) 7,656
AaveV3MockAssetEModeUpdate ↑1% (+49) 3,666 ↑1% (+49) 3,895 ↓0% (-49) 20,910 ↓0% (-49) 45,257
AaveV3MockBorrowUpdate ↑0% (+10) 3,516 ↑0% (+10) 3,708 ↓0% (-10) 21,060 ↓0% (-10) 45,444
AaveV3MockBorrowUpdateNoChange ↑0% (+10) 3,546 ↑0% (+10) 3,738 ↓0% (-10) 21,030 ↓0% (-10) 45,414
AaveV3MockCapUpdate ↑0% (+10) 3,461 ↑0% (+10) 3,653 ↓0% (-10) 21,115 ↓0% (-10) 45,499
AaveV3MockCollateralUpdate ↑0% (+10) 3,520 ↑0% (+10) 3,712 ↓0% (-10) 21,056 ↓0% (-10) 45,440
AaveV3MockCollateralUpdateCorrectBonus ↑0% (+10) 3,520 ↑0% (+10) 3,712 ↓0% (-10) 21,056 ↓0% (-10) 45,440
AaveV3MockCollateralUpdateNoChange ↑0% (+10) 3,547 ↑0% (+10) 3,739 ↓0% (-10) 21,029 ↓0% (-10) 45,413
AaveV3MockCollateralUpdateWrongBonus ↑0% (+10) 3,524 ↑0% (+10) 3,716 ↓0% (-10) 21,052 ↓0% (-10) 45,436
AaveV3MockEModeCategoryCreation ↑0% (+10) 3,910 ↑0% (+10) 4,189 ↓0% (-10) 20,666 ↓0% (-10) 44,963
AaveV3MockEModeCategoryUpdate ↑0% (+10) 3,377 ↑0% (+10) 3,509 ↓0% (-10) 21,199 ↓0% (-10) 45,643
AaveV3MockEModeCategoryUpdateEdgeBonus ↑0% (+10) 3,380 ↑0% (+10) 3,512 ↓0% (-10) 21,196 ↓0% (-10) 45,640
AaveV3MockEModeCategoryUpdateNoChange ↑0% (+10) 3,448 ↑0% (+10) 3,580 ↓0% (-10) 21,128 ↓0% (-10) 45,572
AaveV3MockListing ↑0% (+10) 3,802 ↑0% (+10) 4,031 ↓0% (-10) 20,774 ↓0% (-10) 45,121
AaveV3MockListingCustom ↑0% (+10) 4,096 ↑0% (+10) 4,405 ↓0% (-10) 20,480 ↓0% (-10) 44,747
AaveV3MockListingCustomWithEModeCreation ↑0% (+10) 4,575 ↑0% (+10) 4,898 ↓0% (-10) 20,001 ↓0% (-10) 44,254
AaveV3MockListingWithEModeCreation ↑0% (+10) 4,280 ↑0% (+10) 4,523 ↓0% (-10) 20,296 ↓0% (-10) 44,629
AaveV3MockPriceFeedUpdate ↑0% (+10) 3,471 ↑0% (+10) 3,700 ↓0% (-10) 21,105 ↓0% (-10) 45,452
AaveV3MockRatesUpdate ↑0% (+10) 3,479 ↑0% (+10) 3,671 ↓0% (-10) 21,097 ↓0% (-10) 45,481
AaveV3PoolBatch 137 ↑7% (+2584) 41,634 24,439 ↓26% (-2584) 7,518
AaveV3TestListing ↑0% (+10) 5,182 ↑0% (+10) 12,843 ↓0% (-10) 19,394 ↓0% (-10) 36,309
AaveV3TokensBatch 137 ↑0% (+98) 20,379 24,439 ↓0% (-98) 28,773
BorrowLogic ↑1% (+144) 11,319 ↑1% (+144) 11,371 ↓1% (-144) 13,257 ↓0% (-144) 37,781
BorrowingHandler ↑37% (+5538) 20,347 ↑36% (+5538) 21,067 ↓57% (-5538) 4,229 ↓16% (-5538) 28,085
DonationAttackHandler ↑28% (+189) 859 ↑14% (+189) 1,579 ↓1% (-189) 23,717 ↓0% (-189) 47,573
EIP712SigUtils ↓51% (-806) 770 ↓50% (-806) 822 ↑4% (+806) 23,806 ↑2% (+806) 48,330
EModeEngine ↑17% (+1107) 7,504 ↑17% (+1107) 7,556 ↓6% (-1107) 17,072 ↓3% (-1107) 41,596
FlashLoanHandler ↑65% (+5790) 14,703 ↑60% (+5790) 15,423 ↓37% (-5790) 9,873 ↓15% (-5790) 33,729
L2PoolInstance ↑1% (+175) 22,787 ↑1% (+175) 23,255 ↓9% (-175) 1,789 ↓1% (-175) 25,897
LendingHandler ↑47% (+5753) 18,075 ↑44% (+5753) 18,795 ↓47% (-5753) 6,501 ↓16% (-5753) 30,357
LiquidationDataProvider ↓0% (-38) 7,565 ↓0% (-38) 7,839 ↑0% (+38) 17,011 ↑0% (+38) 41,313
LiquidationHandler ↑42% (+4921) 16,559 ↑40% (+4921) 17,279 ↓38% (-4921) 8,017 ↓13% (-4921) 31,873
LiquidationLogic ↓8% (-1112) 12,362 ↓8% (-1112) 12,414 ↑10% (+1112) 12,214 ↑3% (+1112) 36,738
MetadataReporter ↓2% (-215) 12,111 ↓2% (-215) 12,139 ↑2% (+215) 12,465 ↑1% (+215) 37,013
MockAToken (src/contracts/mocks/tokens/MockAToken.sol) ↑1% (+66) 10,716 ↑1% (+66) 11,872 ↓0% (-66) 13,860 ↓0% (-66) 37,280
MockAToken (src/contracts/mocks/upgradeability/MockAToken.sol) ↑1% (+66) 10,498 ↑1% (+66) 11,604 ↓0% (-66) 14,078 ↓0% (-66) 37,548
MockL2Pool ↑1% (+175) 22,814 ↑1% (+175) 23,347 ↓9% (-175) 1,762 ↓1% (-175) 25,805
MockPoolInherited ↑1% (+175) 21,651 ↑1% (+175) 22,194 ↓6% (-175) 2,925 ↓1% (-175) 26,958
MockScaledToken ↑7% (+195) 2,874 ↑6% (+195) 3,700 ↓1% (-195) 21,702 ↓0% (-195) 45,452
MockVariableDebtToken (src/contracts/mocks/tokens/MockDebtTokens.sol) ↑0% (+32) 7,241 ↑0% (+32) 8,305 ↓0% (-32) 17,335 ↓0% (-32) 40,847
MockVariableDebtToken (src/contracts/mocks/upgradeability/MockVariableDebtToken.sol) ↑0% (+32) 7,219 ↑0% (+32) 8,233 ↓0% (-32) 17,357 ↓0% (-32) 40,919
PoolConfiguratorInstance ↑15% (+2409) 18,994 ↑14% (+2409) 19,029 ↓30% (-2409) 5,582 ↓7% (-2409) 30,123
PoolHandler ↑48% (+5899) 18,126 ↑46% (+5899) 18,846 ↓48% (-5899) 6,450 ↓16% (-5899) 30,306
PoolInstance ↑1% (+175) 21,491 ↑1% (+175) 21,955 ↓5% (-175) 3,085 ↓1% (-175) 27,197
PoolLogic ↑2% (+134) 8,275 ↑2% (+134) 8,327 ↓1% (-134) 16,301 ↓0% (-134) 40,825
PoolPermissionedHandler ↑67% (+6866) 17,107 ↑63% (+6866) 17,827 ↓48% (-6866) 7,469 ↓18% (-6866) 31,325
PriceAggregatorHandler ↑2506% (+12152) 12,637 ↑1008% (+12152) 13,357 ↓50% (-12152) 11,939 ↓25% (-12152) 35,795
SupplyLogic ↑2% (+240) 10,717 ↑2% (+240) 10,769 ↓2% (-240) 13,859 ↓1% (-240) 38,383
UiPoolDataProviderV3 ↑2% (+169) 10,146 ↑2% (+169) 10,344 ↓1% (-169) 14,430 ↓0% (-169) 38,808
ValidationLogic ↓25% (-48) 141 ↓20% (-48) 191 ↑0% (+48) 24,435 ↑0% (+48) 48,961
VariableDebtTokenHarness ↑0% (+32) 7,237 ↑0% (+32) 8,251 ↓0% (-32) 17,339 ↓0% (-32) 40,901
VariableDebtTokenInstance ↑0% (+32) 7,219 ↑0% (+32) 8,191 ↓0% (-32) 17,357 ↓0% (-32) 40,961
VariableDebtTokenMainnetInstanceGHO ↑0% (+32) 7,248 ↑0% (+32) 8,220 ↓0% (-32) 17,328 ↓0% (-32) 40,932
EModeLogic 3,163 3,215 21,413 45,937
MockFlashLoanReceiver (tests/invariants/helpers/FlashLoanReceiver.sol) 2,034 2,062 22,542 47,090
MockFlashLoanReceiver (tests/invariants/helpers/MockFlashLoanReceiver.sol) 1,403 1,431 23,173 47,721
🔕 Unchanged
Contract Runtime Size (B) Initcode Size (B) Runtime Margin (B) Initcode Margin (B)
ACLManager 3,493 3,971 21,083 45,181
ATokenMock 803 961 23,773 48,191
AaveOracle 2,466 3,462 22,110 45,690
AaveProtocolDataProvider 7,435 7,893 17,141 41,259
AaveSetters 44 94 24,532 49,058
AaveV3BatchOrchestration 44 94 24,532 49,058
AaveV3DefaultRateStrategyProcedure 21 47 24,555 49,105
AaveV3GettersBatchTwo 189 18,744 24,387 30,408
AaveV3GettersProcedureOne 21 47 24,555 49,105
AaveV3GettersProcedureTwo 21 47 24,555 49,105
AaveV3HelpersBatchTwo 229 30,885 24,347 18,267
AaveV3HelpersProcedureOne 21 47 24,555 49,105
AaveV3HelpersProcedureTwo 21 47 24,555 49,105
AaveV3IncentiveProcedure 21 47 24,555 49,105
AaveV3L2PoolProcedure 21 47 24,555 49,105
AaveV3MiscBatch 137 6,160 24,439 42,992
AaveV3MiscProcedure 21 47 24,555 49,105
AaveV3OracleProcedure 21 47 24,555 49,105
AaveV3ParaswapBatch 189 28,296 24,387 20,856
AaveV3ParaswapProcedure 21 47 24,555 49,105
AaveV3PeripheryBatch 353 37,439 24,223 11,713
AaveV3PoolConfigProcedure 21 47 24,555 49,105
AaveV3PoolProcedure 21 47 24,555 49,105
AaveV3SetupBatch 11,437 28,469 13,139 20,683
AaveV3SetupProcedure 21 47 24,555 49,105
AaveV3TokensProcedure 21 47 24,555 49,105
AaveV3TreasuryProcedure 21 47 24,555 49,105
Actor 945 1,757 23,631 47,395
Address (lib/solidity-utils/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol) 44 94 24,532 49,058
Address (src/contracts/dependencies/openzeppelin/contracts/Address.sol) 44 94 24,532 49,058
AdminUpgradeabilityProxy 1,546 2,458 23,030 46,694
AugustusRegistryMock 162 188 24,414 48,964
BaseAdminUpgradeabilityProxy 1,538 1,566 23,038 47,586
BaseHandler 147 866 24,429 48,286
BaseHooks 147 866 24,429 48,286
BaseImmutableAdminUpgradeabilityProxy 1,304 1,471 23,272 47,681
BaseUpgradeabilityProxy 108 134 24,468 49,018
BorrowEngine 2,499 2,551 22,077 46,601
CalldataLogic 44 94 24,532 49,058
CapsEngine 1,149 1,201 23,427 47,951
CollateralEngine 2,704 2,756 21,872 46,396
Collector 6,496 6,710 18,080 42,442
ConfiguratorInputTypes 44 94 24,532 49,058
ConfiguratorLogic 5,513 5,565 19,063 43,587
Create2Factory 52 78 24,524 49,074
Create2Utils 121 171 24,455 48,981
DataTypes 44 94 24,532 49,058
DefaultMarketInput 21 47 24,555 49,105
DefaultReserveInterestRateStrategyV2 3,575 3,759 21,001 45,393
DeployPermit2 44 94 24,532 49,058
DeployUtils 916 944 23,660 48,208
ECDSA 44 94 24,532 49,058
EModeConfiguration 44 94 24,532 49,058
ERC1967Proxy 122 973 24,454 48,179
ERC1967Utils 44 94 24,532 49,058
ERC20 2,086 2,788 22,490 46,364
EmissionManager 3,444 3,905 21,132 45,247
EmptyImplementation 21 47 24,555 49,105
EngineFlags 44 94 24,532 49,058
EnumerableSet 44 94 24,532 49,058
Errors (lib/solidity-utils/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Errors.sol) 44 94 24,532 49,058
Errors (src/contracts/protocol/libraries/helpers/Errors.sol) 44 94 24,532 49,058
FactoryDeployer 214 240 24,362 48,912
Faucet 2,038 2,570 22,538 46,582
FlashLoanLogic 8,394 8,446 16,182 40,706
FlashloanAttacker 1,610 2,034 22,966 47,118
GPv2SafeERC20 44 94 24,532 49,058
GenericLogic 44 94 24,532 49,058
InitializableAdminUpgradeabilityProxy 2,392 2,420 22,184 46,732
InitializableImmutableAdminUpgradeabilityProxy 1,863 2,030 22,713 47,122
InitializableUpgradeabilityProxy 879 907 23,697 48,245
IsolationModeLogic 44 94 24,532 49,058
L2Encoder 3,585 3,780 20,991 45,372
LiquidationHelper 44 94 24,532 49,058
ListingEngine 6,731 6,783 17,845 42,369
MarketReportUtils 44 94 24,532 49,058
Math 44 94 24,532 49,058
MathUtils 44 94 24,532 49,058
MessageHashUtils 44 94 24,532 49,058
MintableDelegationERC20 2,534 3,267 22,042 45,885
MintableERC20 3,729 4,626 20,847 44,526
Mock 182 208 24,394 48,944
MockAggregator 134 273 24,442 48,879
MockAggregatorSetPrice 243 386 24,333 48,766
MockBadTransferStrategy 914 1,103 23,662 48,049
MockERC20AaveLMUpgradeable 7,937 8,152 16,639 41,000
MockERC4626StataTokenUpgradeable 9,517 9,859 15,059 39,293
MockFlashLoanATokenReceiver 2,378 2,756 22,198 46,396
MockFlashLoanBorrowInsideFlashLoan 2,123 2,400 22,453 46,752
MockFlashLoanReceiver (src/contracts/mocks/flashloan/MockFlashLoanReceiver.sol) 2,237 2,522 22,339 46,630
MockFlashLoanReceiverWithoutMint 1,234 1,518 23,342 47,634
MockFlashLoanSimpleReceiver 1,484 1,769 23,092 47,383
MockIncentivesController 132 158 24,444 48,994
MockInitializableFromConstructorImple 349 643 24,227 48,509
MockInitializableImple 1,556 1,591 23,020 47,561
MockInitializableImpleV2 1,558 1,593 23,018 47,559
MockInitializableV1 307 342 24,269 48,810
MockInitializableV2 309 344 24,267 48,808
MockParaSwapAugustus 1,939 1,967 22,637 47,185
MockParaSwapAugustusRegistry 179 302 24,397 48,850
MockPeripheryContractV1 309 337 24,267 48,815
MockPeripheryContractV2 290 318 24,286 48,834
MockReentrantInitializableImple 413 448 24,163 48,704
MockReserveConfiguration 2,142 2,170 22,434 46,982
MockReserveInterestRateStrategy 3,070 3,257 21,506 45,895
MockScaledTestnetERC20 4,479 5,845 20,097 43,307
MockSimpleFlashLoanReceiverWithoutMint 754 1,037 23,822 48,115
Ownable (src/contracts/dependencies/openzeppelin/contracts/Ownable.sol) 629 721 23,947 48,431
Panic 44 94 24,532 49,058
ParaSwapLiquiditySwapAdapter 8,151 9,238 16,425 39,914
ParaSwapRepayAdapter 8,726 9,902 15,850 39,250
ParaSwapWithdrawSwapAdapter 6,673 7,690 17,903 41,462
PercentageMath 44 94 24,532 49,058
PoolAddressesProvider 6,965 8,251 17,611 40,901
PoolAddressesProviderRegistry 1,946 2,407 22,630 46,745
PoolStorage 21 47 24,555 49,105
Pretty 2,458 2,510 22,118 46,642
PriceFeedEngine 1,544 1,596 23,032 47,556
PriceOracle 469 497 24,107 48,655
PriceOracleSentinel 1,530 1,746 23,046 47,406
PropertiesLibString 44 94 24,532 49,058
ProtocolAssertions 147 866 24,429 48,286
ProxyAdmin 998 1,234 23,578 47,918
ProxyHelpers 44 94 24,532 49,058
PullRewardsTransferStrategy 1,172 1,398 23,404 47,754
RateEngine 2,227 2,279 22,349 46,873
ReserveConfiguration 128 178 24,448 48,974
ReserveLogic 44 94 24,532 49,058
RevenueSplitter 1,953 2,270 22,623 46,882
RewardsController 13,965 14,155 10,611 34,997
RewardsDataTypes 44 94 24,532 49,058
SafeCast 44 94 24,532 49,058
SafeERC20 (lib/solidity-utils/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol) 44 94 24,532 49,058
SafeERC20 (src/contracts/dependencies/openzeppelin/contracts/SafeERC20.sol) 44 94 24,532 49,058
SafeMath 44 94 24,532 49,058
SequencerOracle 865 1,326 23,711 47,826
Setup 147 866 24,429 48,286
SigUtils 492 544 24,084 48,608
SignedMath 44 94 24,532 49,058
SlotParser 330 382 24,246 48,770
StakeMock 355 383 24,221 48,769
StakedTokenTransferStrategy 1,972 2,682 22,604 46,470
StataTokenFactory 2,989 3,445 21,587 45,707
StataTokenV2 18,933 19,611 5,643 29,541
StorageSlot 44 94 24,532 49,058
Strings (lib/solidity-utils/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Strings.sol) 44 94 24,532 49,058
Strings (src/contracts/dependencies/openzeppelin/contracts/Strings.sol) 44 94 24,532 49,058
Strings (tests/invariants/utils/Pretty.sol) 44 94 24,532 49,058
TestERC20 3,948 5,125 20,628 44,027
TestnetERC20 4,359 5,717 20,217 43,435
TokenMath 44 94 24,532 49,058
TransparentProxyFactory 6,667 6,695 17,909 42,457
TransparentUpgradeableProxy 1,096 3,528 23,480 45,624
UiIncentiveDataProviderV3 9,118 9,146 15,458 40,006
UpgradeabilityProxy 108 861 24,468 48,291
UserConfiguration 44 94 24,532 49,058
VariableDebtTokenHandler 1,185 1,905 23,391 47,247
WETH9 1,886 2,352 22,690 46,800
WETH9Mock 2,641 3,812 21,935 45,340
WETH9Mocked 2,192 2,658 22,384 46,494
WadRayMath 44 94 24,532 49,058
WalletBalanceProvider 2,485 2,513 22,091 46,639
WalletMock 21 47 24,555 49,105
WrappedTokenGatewayV3 5,387 6,252 19,189 42,900

@github-actions
Copy link
Contributor

github-actions bot commented Dec 9, 2025

🔮 Coverage report
File Line Coverage Function Coverage Branch Coverage
src/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol ${\color{red}68.42\%}$
$26 / 38$
23, 24, 78, 79, 80 and 7 more
${\color{green}100\%}$
$4 / 4$
${\color{red}42.86\%}$
$3 / 7$
src/contracts/dependencies/openzeppelin/ReentrancyGuard.sol ${\color{red}75\%}$
$6 / 8$
67, 68
${\color{red}66.67\%}$
$2 / 3$
ReentrancyGuard._initGuard
${\color{red}50\%}$
$1 / 2$
src/contracts/dependencies/openzeppelin/contracts/AccessControl.sol ${\color{orange}91.18\%}$
$31 / 34$
76, 77, 115
${\color{orange}83.33\%}$
$10 / 12$
AccessControl.supportsInterface, AccessControl.getRoleAdmin
${\color{red}80\%}$
$4 / 5$
src/contracts/dependencies/openzeppelin/contracts/ERC165.sol ${\color{red}0\%}$
$0 / 2$
25, 26
${\color{red}0\%}$
$0 / 1$
ERC165.supportsInterface
${\color{green}100\%}$
$0 / 0$
src/contracts/dependencies/openzeppelin/contracts/ERC20.sol ${\color{red}79.66\%}$
$47 / 59$
182, 183, 184, 201, 205 and 7 more
${\color{orange}83.33\%}$
$15 / 18$
ERC20.increaseAllowance, ERC20.decreaseAllowance, ERC20._burn
${\color{red}41.67\%}$
$5 / 12$
src/contracts/dependencies/openzeppelin/contracts/Ownable.sol ${\color{red}80\%}$
$12 / 15$
55, 56, 57
${\color{red}80\%}$
$4 / 5$
Ownable.renounceOwnership
${\color{red}75\%}$
$3 / 4$
src/contracts/dependencies/openzeppelin/contracts/SafeERC20.sol ${\color{red}47.37\%}$
$9 / 19$
25, 26, 50, 51, 52 and 5 more
${\color{red}50\%}$
$3 / 6$
SafeERC20.safeTransferFrom, SafeERC20.safeIncreaseAllowance, SafeERC20.safeDecreaseAllowance
${\color{red}42.86\%}$
$3 / 7$
src/contracts/dependencies/openzeppelin/contracts/SafeMath.sol ${\color{green}100\%}$
$10 / 10$
${\color{green}100\%}$
$5 / 5$
${\color{red}62.5\%}$
$5 / 8$
src/contracts/dependencies/openzeppelin/upgradeability/AdminUpgradeabilityProxy.sol ${\color{red}0\%}$
$0 / 5$
21, 26, 27, 33, 34
${\color{red}0\%}$
$0 / 2$
AdminUpgradeabilityProxy.constructor, AdminUpgradeabilityProxy._willFallback
${\color{green}100\%}$
$0 / 0$
src/contracts/dependencies/openzeppelin/upgradeability/BaseAdminUpgradeabilityProxy.sol ${\color{red}0\%}$
$0 / 26$
35, 36, 39, 46, 47 and 21 more
${\color{red}0\%}$
$0 / 9$
BaseAdminUpgradeabilityProxy.ifAdmin, BaseAdminUpgradeabilityProxy.admin, BaseAdminUpgradeabilityProxy.implementation, BaseAdminUpgradeabilityProxy.changeAdmin, BaseAdminUpgradeabilityProxy.upgradeTo and 4 more
${\color{red}0\%}$
$0 / 8$
src/contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol ${\color{green}100\%}$
$10 / 10$
${\color{green}100\%}$
$3 / 3$
${\color{red}50\%}$
$1 / 2$
src/contracts/dependencies/openzeppelin/upgradeability/InitializableAdminUpgradeabilityProxy.sol ${\color{red}0\%}$
$0 / 7$
25, 26, 27, 28, 29 and 2 more
${\color{red}0\%}$
$0 / 2$
InitializableAdminUpgradeabilityProxy.initialize, InitializableAdminUpgradeabilityProxy._willFallback
${\color{red}0\%}$
$0 / 2$
src/contracts/dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol ${\color{green}100\%}$
$7 / 7$
${\color{green}100\%}$
$1 / 1$
${\color{red}60\%}$
$3 / 5$
src/contracts/dependencies/openzeppelin/upgradeability/Proxy.sol ${\color{orange}87.5\%}$
$14 / 16$
25, 26
${\color{red}80\%}$
$4 / 5$
Proxy.receive
${\color{green}100\%}$
$0 / 0$
src/contracts/dependencies/openzeppelin/upgradeability/UpgradeabilityProxy.sol ${\color{red}0\%}$
$0 / 6$
20, 21, 22, 23, 24 and 1 more
${\color{red}0\%}$
$0 / 1$
UpgradeabilityProxy.constructor
${\color{red}0\%}$
$0 / 3$
src/contracts/dependencies/weth/WETH9.sol $^{↑8.7\%}{\color{orange}92.59\%}$
$25 / 27$
31, 32
$^{↑20\%}{\color{orange}85.71\%}$
$6 / 7$
WETH9.receive
${\color{red}57.14\%}$
$4 / 7$
src/contracts/extensions/paraswap-adapters/BaseParaSwapAdapter.sol ${\color{green}100\%}$
$18 / 18$
${\color{green}100\%}$
$6 / 6$
${\color{red}60\%}$
$3 / 5$
src/contracts/extensions/paraswap-adapters/BaseParaSwapBuyAdapter.sol ${\color{orange}90\%}$
$27 / 30$
87, 94, 95
${\color{green}100\%}$
$2 / 2$
${\color{red}50\%}$
$8 / 16$
src/contracts/extensions/paraswap-adapters/BaseParaSwapSellAdapter.sol ${\color{orange}88.89\%}$
$24 / 27$
87, 94, 95
${\color{green}100\%}$
$2 / 2$
${\color{red}50\%}$
$8 / 16$
src/contracts/extensions/paraswap-adapters/ParaSwapLiquiditySwapAdapter.sol ${\color{green}100\%}$
$39 / 39$
${\color{green}100\%}$
$4 / 4$
${\color{red}63.64\%}$
$7 / 11$
src/contracts/extensions/paraswap-adapters/ParaSwapRepayAdapter.sol ${\color{lightgreen}95.83\%}$
$46 / 48$
143, 208
${\color{green}100\%}$
$5 / 5$
${\color{red}53.85\%}$
$7 / 13$
src/contracts/extensions/paraswap-adapters/ParaSwapWithdrawSwapAdapter.sol ${\color{green}100\%}$
$13 / 13$
${\color{green}100\%}$
$3 / 3$
${\color{red}66.67\%}$
$2 / 3$
src/contracts/extensions/stata-token/ERC20AaveLMUpgradeable.sol ${\color{orange}94.02\%}$
$110 / 117$
97, 114, 116, 126, 213 and 2 more
${\color{lightgreen}95.45\%}$
$21 / 22$
ERC20AaveLMUpgradeable.getCurrentRewardsIndex
${\color{red}68.75\%}$
$11 / 16$
src/contracts/extensions/stata-token/ERC4626StataTokenUpgradeable.sol $^{↓-0.99\%}{\color{lightgreen}97.09\%}$
$100 / 103$
116, 146, 221
${\color{green}100\%}$
$21 / 21$
$^{↓-8.3\%}{\color{red}78.57\%}$
$11 / 14$
src/contracts/extensions/stata-token/StataTokenFactory.sol ${\color{orange}88.46\%}$
$23 / 26$
75, 82, 83
${\color{red}80\%}$
$4 / 5$
StataTokenFactory.getStataTokens
${\color{red}33.33\%}$
$1 / 3$
src/contracts/extensions/stata-token/StataTokenV2.sol ${\color{orange}90.63\%}$
$29 / 32$
59, 63, 68
${\color{orange}81.82\%}$
$9 / 11$
StataTokenV2.whoCanRescue, StataTokenV2.maxRescue
${\color{red}75\%}$
$3 / 4$
src/contracts/extensions/v3-config-engine/AaveV3ConfigEngine.sol ${\color{green}100\%}$
$47 / 47$
${\color{green}100\%}$
$13 / 13$
${\color{red}50\%}$
$4 / 8$
src/contracts/extensions/v3-config-engine/AaveV3Payload.sol ${\color{red}75.51\%}$
$37 / 49$
126, 127, 131, 134, 142 and 7 more
${\color{red}26.67\%}$
$4 / 15$
AaveV3Payload._bpsToRay, AaveV3Payload.newListings, AaveV3Payload.newListingsCustom, AaveV3Payload.capsUpdates, AaveV3Payload.collateralsUpdates and 6 more
${\color{green}100\%}$
$10 / 10$
src/contracts/extensions/v3-config-engine/libraries/BorrowEngine.sol ${\color{green}100\%}$
$18 / 18$
${\color{green}100\%}$
$2 / 2$
${\color{red}80\%}$
$8 / 10$
src/contracts/extensions/v3-config-engine/libraries/CapsEngine.sol ${\color{green}100\%}$
$9 / 9$
${\color{green}100\%}$
$2 / 2$
${\color{red}75\%}$
$3 / 4$
src/contracts/extensions/v3-config-engine/libraries/CollateralEngine.sol ${\color{red}70\%}$
$21 / 30$
39, 42, 48, 50, 51 and 4 more
${\color{green}100\%}$
$2 / 2$
${\color{red}57.14\%}$
$8 / 14$
src/contracts/extensions/v3-config-engine/libraries/EModeEngine.sol $^{↑0.89\%}{\color{orange}93.55\%}$
$58 / 62$
143, 147, 152, 191
${\color{green}100\%}$
$6 / 6$
$^{↑7.7\%}{\color{red}66.67\%}$
$16 / 24$
src/contracts/extensions/v3-config-engine/libraries/ListingEngine.sol ${\color{green}100\%}$
$34 / 34$
${\color{green}100\%}$
$3 / 3$
${\color{red}50\%}$
$2 / 4$
src/contracts/extensions/v3-config-engine/libraries/PriceFeedEngine.sol ${\color{green}100\%}$
$12 / 12$
${\color{green}100\%}$
$2 / 2$
${\color{red}50\%}$
$3 / 6$
src/contracts/extensions/v3-config-engine/libraries/RateEngine.sol ${\color{red}64.52\%}$
$20 / 31$
45, 46, 47, 50, 51 and 6 more
${\color{green}100\%}$
$3 / 3$
${\color{red}14.29\%}$
$1 / 7$
src/contracts/helpers/AaveProtocolDataProvider.sol ${\color{orange}90.67\%}$
$68 / 75$
56, 57, 60, 61, 156 and 2 more
${\color{lightgreen}95.24\%}$
$20 / 21$
AaveProtocolDataProvider.getReserveData
${\color{red}25\%}$
$1 / 4$
src/contracts/helpers/L2Encoder.sol ${\color{green}100\%}$
$68 / 68$
${\color{green}100\%}$
$10 / 10$
${\color{green}100\%}$
$0 / 0$
src/contracts/helpers/LiquidationDataProvider.sol $^{↓-0.21\%}{\color{orange}90.78\%}$
$128 / 141$
49, 66, 70, 74, 78 and 8 more
${\color{red}80\%}$
$12 / 15$
LiquidationDataProvider.getUserPositionFullInfo, LiquidationDataProvider.getCollateralFullInfo, LiquidationDataProvider.getDebtFullInfo
${\color{red}75\%}$
$15 / 20$
src/contracts/helpers/UiIncentiveDataProviderV3.sol ${\color{red}0\%}$
$0 / 90$
17, 26, 29, 32, 35 and 85 more
${\color{red}0\%}$
$0 / 5$
UiIncentiveDataProviderV3.getFullReservesIncentiveData, UiIncentiveDataProviderV3.getReservesIncentivesData, UiIncentiveDataProviderV3._getReservesIncentivesData, UiIncentiveDataProviderV3.getUserReservesIncentivesData, UiIncentiveDataProviderV3._getUserReservesIncentivesData
${\color{red}0\%}$
$0 / 4$
src/contracts/helpers/UiPoolDataProviderV3.sol $^{↓-3.6\%}{\color{red}2.7\%}$
$3 / 111$
38, 41, 42, 45, 48 and 103 more
${\color{red}16.67\%}$
$1 / 6$
UiPoolDataProviderV3.getReservesList, UiPoolDataProviderV3.getReservesData, UiPoolDataProviderV3.getEModes, UiPoolDataProviderV3.getUserReservesData, UiPoolDataProviderV3.bytes32ToString
${\color{red}0\%}$
$0 / 12$
src/contracts/helpers/WalletBalanceProvider.sol ${\color{red}0\%}$
$0 / 29$
34, 35, 36, 38, 39 and 24 more
${\color{red}0\%}$
$0 / 3$
WalletBalanceProvider.balanceOf, WalletBalanceProvider.batchBalanceOf, WalletBalanceProvider.getUserWalletBalances
${\color{red}0\%}$
$0 / 4$
src/contracts/helpers/WrappedTokenGatewayV3.sol ${\color{green}100\%}$
$55 / 55$
${\color{green}100\%}$
$12 / 12$
${\color{orange}81.82\%}$
$9 / 11$
src/contracts/instances/ATokenInstance.sol ${\color{green}100\%}$
$10 / 10$
${\color{green}100\%}$
$2 / 2$
${\color{red}50\%}$
$1 / 2$
src/contracts/instances/ATokenWithDelegationInstance.sol ${\color{red}80\%}$
$8 / 10$
28, 29
${\color{red}50\%}$
$1 / 2$
ATokenWithDelegationInstance.getRevision
${\color{red}50\%}$
$1 / 2$
src/contracts/instances/PoolConfiguratorInstance.sol ${\color{green}100\%}$
$5 / 5$
${\color{green}100\%}$
$2 / 2$
${\color{green}100\%}$
$0 / 0$
src/contracts/instances/PoolInstance.sol ${\color{green}100\%}$
$4 / 4$
${\color{green}100\%}$
$2 / 2$
${\color{green}100\%}$
$2 / 2$
src/contracts/instances/VariableDebtTokenInstance.sol ${\color{green}100\%}$
$10 / 10$
${\color{green}100\%}$
$2 / 2$
${\color{green}100\%}$
$2 / 2$
src/contracts/instances/VariableDebtTokenMainnetInstanceGHO.sol ${\color{red}0\%}$
$0 / 11$
18, 19, 23, 31, 32 and 6 more
${\color{red}0\%}$
$0 / 3$
VariableDebtTokenMainnetInstanceGHO.getRevision, VariableDebtTokenMainnetInstanceGHO.initialize, VariableDebtTokenMainnetInstanceGHO.updateDiscountDistribution
${\color{red}0\%}$
$0 / 2$
src/contracts/misc/AaveOracle.sol ${\color{green}100\%}$
$43 / 43$
${\color{green}100\%}$
$11 / 11$
${\color{green}100\%}$
$10 / 10$
src/contracts/misc/DefaultReserveInterestRateStrategyV2.sol ${\color{green}100\%}$
$52 / 52$
${\color{green}100\%}$
$15 / 15$
${\color{green}100\%}$
$16 / 16$
src/contracts/misc/PriceOracleSentinel.sol ${\color{green}100\%}$
$27 / 27$
${\color{green}100\%}$
$10 / 10$
${\color{green}100\%}$
$4 / 4$
src/contracts/misc/aave-upgradeability/BaseImmutableAdminUpgradeabilityProxy.sol ${\color{green}100\%}$
$18 / 18$
${\color{green}100\%}$
$7 / 7$
${\color{red}33.33\%}$
$2 / 6$
src/contracts/misc/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol ${\color{green}100\%}$
$2 / 2$
${\color{green}100\%}$
$1 / 1$
${\color{green}100\%}$
$0 / 0$
src/contracts/misc/aave-upgradeability/VersionedInitializable.sol ${\color{green}100\%}$
$15 / 15$
${\color{green}100\%}$
$3 / 3$
${\color{green}100\%}$
$4 / 4$
src/contracts/misc/flashloan/base/FlashLoanReceiverBase.sol ${\color{green}100\%}$
$3 / 3$
${\color{green}100\%}$
$1 / 1$
${\color{green}100\%}$
$0 / 0$
src/contracts/misc/flashloan/base/FlashLoanSimpleReceiverBase.sol ${\color{green}100\%}$
$3 / 3$
${\color{green}100\%}$
$1 / 1$
${\color{green}100\%}$
$0 / 0$
src/contracts/protocol/configuration/ACLManager.sol ${\color{lightgreen}95.35\%}$
$41 / 43$
115, 116
${\color{orange}95\%}$
$19 / 20$
ACLManager.isBridge
${\color{green}100\%}$
$2 / 2$
src/contracts/protocol/configuration/PoolAddressesProvider.sol ${\color{green}100\%}$
$81 / 81$
${\color{green}100\%}$
$23 / 23$
${\color{green}100\%}$
$4 / 4$
src/contracts/protocol/configuration/PoolAddressesProviderRegistry.sol ${\color{green}100\%}$
$34 / 34$
${\color{green}100\%}$
$8 / 8$
${\color{orange}85.71\%}$
$6 / 7$
src/contracts/protocol/libraries/configuration/EModeConfiguration.sol ${\color{green}100\%}$
$9 / 9$
${\color{green}100\%}$
$2 / 2$
${\color{red}66.67\%}$
$4 / 6$
src/contracts/protocol/libraries/configuration/ReserveConfiguration.sol ${\color{green}100\%}$
$85 / 85$
${\color{green}100\%}$
$36 / 36$
${\color{red}61.11\%}$
$11 / 18$
src/contracts/protocol/libraries/configuration/UserConfiguration.sol ${\color{lightgreen}95.08\%}$
$58 / 61$
78, 83, 84
${\color{orange}92.86\%}$
$13 / 14$
UserConfiguration.isUsingAsCollateralOrBorrowing
${\color{red}66.67\%}$
$12 / 18$
src/contracts/protocol/libraries/helpers/TokenMath.sol ${\color{green}100\%}$
$14 / 14$
${\color{green}100\%}$
$7 / 7$
${\color{green}100\%}$
$0 / 0$
src/contracts/protocol/libraries/logic/BorrowLogic.sol ${\color{green}100\%}$
$44 / 44$
${\color{green}100\%}$
$2 / 2$
${\color{green}100\%}$
$10 / 10$
src/contracts/protocol/libraries/logic/CalldataLogic.sol ${\color{green}100\%}$
$70 / 70$
${\color{green}100\%}$
$8 / 8$
${\color{green}100\%}$
$3 / 3$
src/contracts/protocol/libraries/logic/ConfiguratorLogic.sol ${\color{green}100\%}$
$35 / 35$
${\color{green}100\%}$
$5 / 5$
${\color{green}100\%}$
$2 / 2$
src/contracts/protocol/libraries/logic/FlashLoanLogic.sol ${\color{green}100\%}$
$37 / 37$
${\color{green}100\%}$
$3 / 3$
${\color{green}100\%}$
$6 / 6$
src/contracts/protocol/libraries/logic/GenericLogic.sol $^{↑2.2\%}{\color{green}100\%}$
$52 / 52$
${\color{green}100\%}$
$4 / 4$
${\color{green}100\%}$
$11 / 11$
src/contracts/protocol/libraries/logic/IsolationModeLogic.sol ${\color{green}100\%}$
$24 / 24$
${\color{green}100\%}$
$5 / 5$
${\color{green}100\%}$
$6 / 6$
src/contracts/protocol/libraries/logic/LiquidationLogic.sol ${\color{green}100\%}$
$134 / 134$
${\color{green}100\%}$
$6 / 6$
$^{↓-0.31\%}{\color{orange}94.44\%}$
$34 / 36$
src/contracts/protocol/libraries/logic/PoolLogic.sol ${\color{green}100\%}$
$48 / 48$
${\color{green}100\%}$
$9 / 9$
${\color{red}72.73\%}$
$8 / 11$
src/contracts/protocol/libraries/logic/ReserveLogic.sol ${\color{green}100\%}$
$64 / 64$
${\color{green}100\%}$
$8 / 8$
${\color{green}100\%}$
$13 / 13$
src/contracts/protocol/libraries/logic/SupplyLogic.sol ${\color{green}100\%}$
$65 / 65$
${\color{green}100\%}$
$5 / 5$
${\color{green}100\%}$
$21 / 21$
src/contracts/protocol/libraries/logic/ValidationLogic.sol ${\color{green}100\%}$
$135 / 135$
${\color{green}100\%}$
$17 / 17$
$^{↑1\%}{\color{lightgreen}96.92\%}$
$126 / 130$
src/contracts/protocol/libraries/math/PercentageMath.sol ${\color{orange}90.91\%}$
$20 / 22$
34, 87
${\color{green}100\%}$
$5 / 5$
${\color{red}60\%}$
$3 / 5$
src/contracts/protocol/libraries/math/WadRayMath.sol ${\color{orange}86.05\%}$
$37 / 43$
39, 57, 68, 108, 146 and 1 more
${\color{green}100\%}$
$10 / 10$
${\color{red}40\%}$
$4 / 10$
src/contracts/protocol/pool/L2Pool.sol ${\color{green}100\%}$
$29 / 29$
${\color{green}100\%}$
$9 / 9$
${\color{green}100\%}$
$0 / 0$
src/contracts/protocol/pool/Pool.sol $^{↑0.015\%}{\color{lightgreen}99.01\%}$
$200 / 202$
554, 555
$^{↑0.02\%}{\color{lightgreen}98.59\%}$
$70 / 71$
Pool.getReservesCount
$^{↓-1.9\%}{\color{red}74.29\%}$
$26 / 35$
src/contracts/protocol/pool/PoolConfigurator.sol ${\color{green}100\%}$
$262 / 262$
${\color{green}100\%}$
$45 / 45$
$^{↑0.31\%}{\color{lightgreen}95.12\%}$
$78 / 82$
src/contracts/protocol/tokenization/AToken.sol ${\color{green}100\%}$
$76 / 76$
${\color{green}100\%}$
$18 / 18$
${\color{orange}92.86\%}$
$13 / 14$
src/contracts/protocol/tokenization/ATokenWithDelegation.sol $^{↑24\%}{\color{green}100\%}$
$21 / 21$
$^{↑33\%}{\color{green}100\%}$
$8 / 8$
${\color{green}100\%}$
$0 / 0$
src/contracts/protocol/tokenization/VariableDebtToken.sol ${\color{green}100\%}$
$32 / 32$
${\color{green}100\%}$
$13 / 13$
${\color{green}100\%}$
$1 / 1$
src/contracts/protocol/tokenization/base/DebtTokenBase.sol ${\color{green}100\%}$
$24 / 24$
${\color{green}100\%}$
$6 / 6$
${\color{green}100\%}$
$7 / 7$
src/contracts/protocol/tokenization/base/EIP712Base.sol ${\color{green}100\%}$
$11 / 11$
${\color{green}100\%}$
$4 / 4$
${\color{green}100\%}$
$1 / 1$
src/contracts/protocol/tokenization/base/IncentivizedERC20.sol $^{↑0.63\%}{\color{orange}93.33\%}$
$70 / 75$
158, 163, 164, 170, 171
$^{↑0.23\%}{\color{lightgreen}95.45\%}$
$21 / 22$
IncentivizedERC20.transferFrom
${\color{green}100\%}$
$9 / 9$
src/contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol ${\color{green}100\%}$
$14 / 14$
${\color{green}100\%}$
$2 / 2$
${\color{green}100\%}$
$2 / 2$
src/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol ${\color{green}100\%}$
$36 / 36$
${\color{green}100\%}$
$6 / 6$
${\color{green}100\%}$
$6 / 6$
src/contracts/protocol/tokenization/delegation/BaseDelegation.sol $^{↑17\%}{\color{green}100\%}$
$90 / 90$
$^{↑15\%}{\color{green}100\%}$
$15 / 15$
$^{↑33\%}{\color{red}80\%}$
$24 / 30$
src/contracts/rewards/EmissionManager.sol ${\color{green}100\%}$
$30 / 30$
${\color{green}100\%}$
$12 / 12$
${\color{red}50\%}$
$3 / 6$
src/contracts/rewards/RewardsController.sol ${\color{lightgreen}99.04\%}$
$103 / 104$
201
${\color{green}100\%}$
$24 / 24$
${\color{red}60.71\%}$
$17 / 28$
src/contracts/rewards/RewardsDistributor.sol ${\color{lightgreen}99.32\%}$
$145 / 146$
429
${\color{green}100\%}$
$24 / 24$
${\color{orange}80.95\%}$
$17 / 21$
src/contracts/rewards/transfer-strategies/PullRewardsTransferStrategy.sol ${\color{green}100\%}$
$7 / 7$
${\color{green}100\%}$
$3 / 3$
${\color{green}100\%}$
$0 / 0$
src/contracts/rewards/transfer-strategies/StakedTokenTransferStrategy.sol ${\color{green}100\%}$
$18 / 18$
${\color{green}100\%}$
$6 / 6$
${\color{red}50\%}$
$1 / 2$
src/contracts/rewards/transfer-strategies/TransferStrategyBase.sol ${\color{green}100\%}$
$14 / 14$
${\color{green}100\%}$
$6 / 6$
${\color{red}50\%}$
$2 / 4$
src/contracts/treasury/Collector.sol ${\color{lightgreen}96.74\%}$
$89 / 92$
152, 191, 206
${\color{orange}93.75\%}$
$15 / 16$
Collector.deltaOf
${\color{red}79.17\%}$
$19 / 24$
src/contracts/treasury/RevenueSplitter.sol ${\color{green}100\%}$
$25 / 25$
${\color{green}100\%}$
$3 / 3$
${\color{green}100\%}$
$3 / 3$

@github-actions
Copy link
Contributor

github-actions bot commented Dec 9, 2025

🌈 Test Results
No files changed, compilation skipped

Ran 20 tests for tests/protocol/configuration/ACLManager.t.sol:ACLManagerTest
[PASS] testDefaultAdminRoleAfterDeploy() (gas: 20677)
[PASS] test_defaultAdmin_grantAdminRole_FlashBorrowAdmin() (gas: 65496)
[PASS] test_defaultAdmin_grants_AssetsListingRole() (gas: 37587)
[PASS] test_defaultAdmin_grants_BridgeRole() (gas: 37653)
[PASS] test_defaultAdmin_grants_EmergencyAdminRole() (gas: 37600)
[PASS] test_defaultAdmin_grants_PoolAdminRole() (gas: 37720)
[PASS] test_defaultAdmin_grants_RiskRole() (gas: 37717)
[PASS] test_defaultAdmin_remove_AssetsListingRole() (gas: 29432)
[PASS] test_defaultAdmin_remove_BridgeRole() (gas: 29521)
[PASS] test_defaultAdmin_remove_EmergencyAdminRole() (gas: 29416)
[PASS] test_defaultAdmin_remove_PoolAdminRole() (gas: 29538)
[PASS] test_defaultAdmin_remove_RiskRole() (gas: 29423)
[PASS] test_flashBorrowAdmin_grantRole_FlashBorrowRole() (gas: 91896)
[PASS] test_flashBorrowAdmin_removeRole_FlashBorrowRole() (gas: 76412)
[PASS] test_remove_riskAdmin() (gas: 29432)
[PASS] test_revert_anyUser_grantAdminRole_FlashBorrowAdmin() (gas: 72834)
[PASS] test_revert_deploy_ACLADMIN_zeroAddress() (gas: 1523412)
[PASS] test_reverts_defaultAdmin_notRoleAdmin_addRole_FlashBorrowRole() (gas: 98813)
[PASS] test_reverts_defaultAdmin_notRoleAdmin_revokeRole_FlashBorrowRole() (gas: 125190)
[PASS] test_reverts_notAdmin_grantRole_FlashBorrow() (gas: 113970)
Suite result: ok. 20 passed; 0 failed; 0 skipped; finished in 7.84ms (2.03ms CPU time)

Ran 4 tests for tests/protocol/pool/pool-configurator/PoolConfigurator.upgradeabilty.t.sol:PoolConfiguratorUpgradeabilityTests
[PASS] test_getConfiguratorLogic() (gas: 13601)
[PASS] test_setReserveInterestRateData() (gas: 142573)
[PASS] test_updateAToken() (gas: 2384516)
[PASS] test_updateVariableDebtToken() (gas: 1683120)
Suite result: ok. 4 passed; 0 failed; 0 skipped; finished in 40.03ms (3.83ms CPU time)

Ran 7 tests for tests/protocol/configuration/AddressesProviderRegistry.t.sol:PoolAddressesProviderRegistryTest
[PASS] testAddAddressesProvider() (gas: 120369)
[PASS] testRemoveAddressesProvider() (gas: 96895)
[PASS] testRemoveMultipleAddressesProvider() (gas: 242308)
[PASS] test_addressesProviderAddedToRegistry() (gas: 16383)
[PASS] test_removesLastProvider() (gas: 32576)
[PASS] test_revert_registry_0() (gas: 15287)
[PASS] test_revert_removeNonExistingAddressesProvider() (gas: 27258)
Suite result: ok. 7 passed; 0 failed; 0 skipped; finished in 43.92ms (1.52ms CPU time)

Ran 3 tests for tests/protocol/libraries/logic/PoolLogic.initReserves.edge.t.sol:PoolLogicInitReservesTests
[PASS] test_initReserves_return_false_after_dropped_reserve() (gas: 618079)
[PASS] test_reverts_initReserves_max() (gas: 174166)
[PASS] test_reverts_initReserves_reserveAlreadyAdded() (gas: 197304)
Suite result: ok. 3 passed; 0 failed; 0 skipped; finished in 26.09ms (566.52µs CPU time)

Ran 1 test for tests/template/BaseTest.t.sol:BaseTest
[PASS] test_default() (gas: 229246)
Suite result: ok. 1 passed; 0 failed; 0 skipped; finished in 28.13ms (299.44µs CPU time)

Ran 5 tests for tests/treasury/Collector.t.sol:CollectorTest
[PASS] testApprove() (gas: 49702)
[PASS] testApproveWhenNotFundsAdmin() (gas: 18183)
[PASS] testTransfer() (gas: 54858)
[PASS] testTransferWhenNotFundsAdmin() (gas: 18207)
[PASS] test_receiveEth() (gas: 20265)
Suite result: ok. 5 passed; 0 failed; 0 skipped; finished in 2.86ms (273.80µs CPU time)

Ran 6 tests for tests/treasury/Collector.t.sol:FundsAdminRoleBytesTest
[PASS] testApprove() (gas: 49658)
[PASS] testApproveWhenNotFundsAdmin() (gas: 18161)
[PASS] testTransfer() (gas: 54903)
[PASS] testTransferWhenNotFundsAdmin() (gas: 18185)
[PASS] test_receiveEth() (gas: 20288)
[PASS] test_successful() (gas: 13383)
Suite result: ok. 6 passed; 0 failed; 0 skipped; finished in 2.84ms (281.81µs CPU time)

Ran 19 tests for tests/gas/AToken.Transfer.gas.t.sol:ATokenTransfer_gas_Tests
[PASS] test_transferFrom_fullAmount() (gas: 664098)
[PASS] test_transferFrom_fullAmount_dirtyReceiver() (gas: 1114483)
[PASS] test_transferFrom_fullAmount_senderCollateralDisabled() (gas: 712885)
[PASS] test_transferFrom_fullAmount_senderCollateralDisabled_receiverNonZeroFunds() (gas: 1142186)
[PASS] test_transferFrom_fullAmount_senderCollateralDisabled_receiverNonZeroFunds2() (gas: 1093331)
[PASS] test_transferFrom_partialAmount() (gas: 674692)
[PASS] test_transferFrom_partialAmount_receiverNonZeroFunds() (gas: 1103962)
[PASS] test_transferFrom_partialAmount_senderCollateralEnabled() (gas: 630700)
[PASS] test_transferFrom_partialAmount_senderCollateralEnabled_receiverNonZeroFunds() (gas: 1059946)
[PASS] test_transfer_fullAmount() (gas: 602101)
[PASS] test_transfer_fullAmount_dirtyReceiver() (gas: 1052514)
[PASS] test_transfer_fullAmount_senderCollateralDisabled() (gas: 651003)
[PASS] test_transfer_fullAmount_senderCollateralDisabled_receiverDirty() (gas: 1051217)
[PASS] test_transfer_fullAmount_senderCollateralDisabled_receiverNonZeroFunds() (gas: 1080254)
[PASS] test_transfer_fullAmount_senderCollateralDisabled_receiverNonZeroFunds2() (gas: 1031465)
[PASS] test_transfer_partialAmount() (gas: 622244)
[PASS] test_transfer_partialAmount_receiverNonZeroFunds() (gas: 1051520)
[PASS] test_transfer_partialAmount_senderCollateralEnabled() (gas: 578209)
[PASS] test_transfer_partialAmount_senderCollateralEnabled_receiverNonZeroFunds() (gas: 1007486)
Suite result: ok. 19 passed; 0 failed; 0 skipped; finished in 75.63ms (30.66ms CPU time)

Ran 7 tests for tests/treasury/Collector.t.sol:IsFundsAdminTest
[PASS] testApprove() (gas: 49658)
[PASS] testApproveWhenNotFundsAdmin() (gas: 18183)
[PASS] testTransfer() (gas: 54858)
[PASS] testTransferWhenNotFundsAdmin() (gas: 18207)
[PASS] test_isFundsAdmin() (gas: 24249)
[PASS] test_isNotFundsAdmin() (gas: 17579)
[PASS] test_receiveEth() (gas: 20288)
Suite result: ok. 7 passed; 0 failed; 0 skipped; finished in 2.96ms (293.95µs CPU time)

Ran 26 tests for tests/treasury/Collector.t.sol:StreamsTest
[PASS] testApprove() (gas: 49636)
[PASS] testApproveWhenNotFundsAdmin() (gas: 18335)
[PASS] testCancelStreamByFundsAdmin() (gas: 206160)
[PASS] testCancelStreamByRecipient() (gas: 231265)
[PASS] testCancelStreamWhenNotAdminOrRecipient() (gas: 242221)
[PASS] testCancelStreamWhenStreamNotExists() (gas: 22839)
[PASS] testCreateStream() (gas: 244288)
[PASS] testCreateStreamWhenDepositIsZero() (gas: 27252)
[PASS] testCreateStreamWhenNotFundsAdmin() (gas: 24600)
[PASS] testCreateStreamWhenRecipientIsCollector() (gas: 25041)
[PASS] testCreateStreamWhenRecipientIsTheCaller() (gas: 25296)
[PASS] testCreateStreamWhenRecipientIsZero() (gas: 25064)
[PASS] testCreateStreamWhenStartTimeInThePast() (gas: 25761)
[PASS] testCreateStreamWhenStopTimeBeforeStart() (gas: 23210)
[PASS] testGetNextStreamId() (gas: 17592)
[PASS] testGetNotExistingStream() (gas: 18416)
[PASS] testGetStream() (gas: 234347)
[PASS] testTransfer() (gas: 54947)
[PASS] testTransferWhenNotFundsAdmin() (gas: 18337)
[PASS] testWithdrawFromStream() (gas: 307164)
[PASS] testWithdrawFromStreamFinishesSuccessfully() (gas: 230192)
[PASS] testWithdrawFromStreamWhenAmountExceedsBalance() (gas: 243607)
[PASS] testWithdrawFromStreamWhenAmountIsZero() (gas: 238105)
[PASS] testWithdrawFromStreamWhenNotAdminOrRecipient() (gas: 240264)
[PASS] testWithdrawFromStreamWhenStreamNotExists() (gas: 23004)
[PASS] test_receiveEth() (gas: 20310)
Suite result: ok. 26 passed; 0 failed; 0 skipped; finished in 7.69ms (5.03ms CPU time)

Ran 11 tests for tests/misc/PriceOracleSentinel.t.sol:PriceOracleSentinelTest
[PASS] test_isBorrowAllowed_network_down() (gas: 27215)
[PASS] test_isBorrowAllowed_network_up_not_grace_period() (gas: 47299)
[PASS] test_isBorrowAllowed_true_network_up_grace_period_pass() (gas: 47353)
[PASS] test_isLiquidationAllowed_network_down() (gas: 27126)
[PASS] test_isLiquidationAllowed_network_up_not_grace_period() (gas: 47276)
[PASS] test_isLiquidationAllowed_true_network_up_grace_period_pass() (gas: 47374)
[PASS] test_new_PriceOracleSentinel() (gas: 395850)
[PASS] test_reverts_setGracePeriod_not_poolAdmin() (gas: 25429)
[PASS] test_reverts_setSequencerOracle_not_poolAdmin() (gas: 22340)
[PASS] test_setGracePeriod() (gas: 32317)
[PASS] test_setSequencerOracle() (gas: 24455)
Suite result: ok. 11 passed; 0 failed; 0 skipped; finished in 34.10ms (912.09µs CPU time)

Ran 18 tests for tests/gas/ProtocolDataProvider.gas.t.sol:ProtocolDataProvider_gas_Tests
[PASS] test_getATokenTotalSupply() (gas: 40320)
[PASS] test_getAllATokens() (gas: 75395)
[PASS] test_getAllReservesTokens() (gas: 54783)
[PASS] test_getDebtCeiling() (gas: 21638)
[PASS] test_getFlashLoanEnabled() (gas: 21738)
[PASS] test_getInterestRateStrategyAddress() (gas: 19303)
[PASS] test_getIsVirtualAccActive() (gas: 10855)
[PASS] test_getLiquidationProtocolFee() (gas: 21719)
[PASS] test_getPaused() (gas: 21789)
[PASS] test_getReserveCaps() (gas: 21723)
[PASS] test_getReserveConfigurationData() (gas: 22702)
[PASS] test_getReserveDeficit() (gas: 21346)
[PASS] test_getReserveTokensAddresses() (gas: 25609)
[PASS] test_getSiloedBorrowing() (gas: 21793)
[PASS] test_getTotalDebt() (gas: 40320)
[PASS] test_getUnbackedMintCap() (gas: 10808)
[PASS] test_getUserReserveData() (gas: 537694)
[PASS] test_getVirtualUnderlyingBalance() (gas: 21532)
Suite result: ok. 18 passed; 0 failed; 0 skipped; finished in 38.93ms (2.27ms CPU time)

Ran 10 tests for tests/protocol/tokenization/ATokenDelegation.t.sol:ATokenDelegationTest
[PASS] test_delegate() (gas: 401010)
[PASS] test_getDelegates() (gas: 133834)
[PASS] test_getPowersCurrent() (gas: 643688)
[PASS] test_getPowersCurrent_with_index_growth() (gas: 745616)
[PASS] test_initial_state_without_delegation() (gas: 47449)
[PASS] test_mint_and_burn() (gas: 2662394)
[PASS] test_precision() (gas: 1111373)
[PASS] test_transfer() (gas: 2317760)
[PASS] test_transferFrom() (gas: 2428856)
[PASS] test_transferOnLiquidation() (gas: 2178174)
Suite result: ok. 10 passed; 0 failed; 0 skipped; finished in 95.61ms (61.61ms CPU time)

Ran 10 tests for tests/protocol/tokenization/ATokenDelegation.t.sol:ATokenDelegationTestWithPermits
[PASS] test_delegate() (gas: 488081)
[PASS] test_getDelegates() (gas: 195817)
[PASS] test_getPowersCurrent() (gas: 751928)
[PASS] test_getPowersCurrent_with_index_growth() (gas: 821100)
[PASS] test_initial_state_without_delegation() (gas: 47449)
[PASS] test_mint_and_burn() (gas: 2742014)
[PASS] test_precision() (gas: 1111373)
[PASS] test_transfer() (gas: 2477129)
[PASS] test_transferFrom() (gas: 2564616)
[PASS] test_transferOnLiquidation() (gas: 2337538)
Suite result: ok. 10 passed; 0 failed; 0 skipped; finished in 107.83ms (79.44ms CPU time)

Ran 15 tests for tests/protocol/tokenization/ATokenEdgeCases.t.sol:ATokenEdgeCasesTests
[PASS] testApprove() (gas: 45201)
[PASS] testApproveMax() (gas: 45260)
[PASS] testApproveWithZeroAddressSpender() (gas: 42243)
[PASS] testCheckGetters() (gas: 261170)
[PASS] testDecreaseAllowance() (gas: 53198)
[PASS] testIncreaseAllowance() (gas: 53224)
[PASS] testIncreaseAllowanceFromZero() (gas: 48461)
[PASS] testMintToTreasury_amount_zero() (gas: 15692)
[PASS] testTransferFromZeroAmount() (gas: 124605)
[PASS] test_burn_zeroAddress() (gas: 257704)
[PASS] test_mintToZeroAddress() (gas: 80228)
[PASS] test_reverts_burnAmountScaledZero() (gas: 18964)
[PASS] test_reverts_mintAmountScaledZero() (gas: 19075)
[PASS] test_transferFrom_zeroAddress_origin() (gas: 124416)
[PASS] test_transfer_amount_MAX_UINT_120() (gas: 16576)
Suite result: ok. 15 passed; 0 failed; 0 skipped; finished in 32.45ms (3.23ms CPU time)

Ran 13 tests for tests/protocol/tokenization/ATokenEvents.t.sol:ATokenEventsTests
[PASS] test_allowance_events_in_approve_function() (gas: 58868)
[PASS] test_allowance_events_in_decreaseAllowance_function() (gas: 56974)
[PASS] test_allowance_events_in_increaseAllowance_function() (gas: 52385)
[PASS] test_allowance_events_in_renounceAllowance_function() (gas: 35045)
[PASS] test_allowance_events_in_transferFrom_function() (gas: 224498)
[PASS] test_atoken_burnEvents_fullBalance() (gas: 530844)
[PASS] test_atoken_burnEvents_multipleWithdrawals_withInterests() (gas: 617542)
[PASS] test_atoken_burnEvents_singleWithdraw_WithInterests() (gas: 541480)
[PASS] test_atoken_burnEvents_singleWithdraw_noInterests() (gas: 249884)
[PASS] test_atoken_burnEvents_withdrawAmountLessThanInterests() (gas: 544215)
[PASS] test_atoken_mintEvents_firstSupply() (gas: 250276)
[PASS] test_atoken_mintEvents_supplyAfterBorrow() (gas: 599314)
[PASS] test_mintToTreasury_events() (gas: 85780)
Suite result: ok. 13 passed; 0 failed; 0 skipped; finished in 43.50ms (14.76ms CPU time)

Ran 4 tests for tests/protocol/tokenization/ATokenModifiers.t.sol:ATokenModifiersTests
[PASS] test_revert_notAdmin_burn() (gas: 16880)
[PASS] test_revert_notAdmin_mint() (gas: 16883)
[PASS] test_revert_notAdmin_transferOnLiquidation() (gas: 16910)
[PASS] test_revert_notAdmin_transferUnderlyingTo() (gas: 16687)
Suite result: ok. 4 passed; 0 failed; 0 skipped; finished in 27.84ms (215.64µs CPU time)

Ran 9 tests for tests/protocol/tokenization/ATokenPermit.t.sol:ATokenPermitTests
[PASS] testCheckDomainSeparator() (gas: 26105)
[PASS] test_cancelPermit() (gas: 94221)
[PASS] test_chain_fork_calculateDomainSeparator() (gas: 32890)
[PASS] test_revert_submitPermit_0_expiration() (gas: 41222)
[PASS] test_revert_submitPermit_InvalidExpiration_previosCurrentBlock() (gas: 42120)
[PASS] test_revert_submitPermit_InvalidSignature() (gas: 49668)
[PASS] test_revert_submitPermit_invalid_nonce() (gas: 50252)
[PASS] test_revert_submitPermit_invalid_owner() (gas: 41071)
[PASS] test_submitPermit() (gas: 89802)
Suite result: ok. 9 passed; 0 failed; 0 skipped; finished in 30.76ms (3.50ms CPU time)

Ran 3 tests for tests/protocol/tokenization/ATokenRepay.t.sol:ATokenRepayTests
[PASS] test_repay_allDebt() (gas: 240834)
[PASS] test_repay_partialDebt() (gas: 237786)
[PASS] test_revert_repay_withoutFunds() (gas: 133408)
Suite result: ok. 3 passed; 0 failed; 0 skipped; finished in 29.11ms (3.24ms CPU time)

Ran 3 tests for tests/protocol/tokenization/ATokenRescueTokens.sol:ATokenRescueTokensTests
[PASS] test_rescueTokens() (gas: 77721)
[PASS] test_reverts_rescueTokens_CALLER_NOT_POOL_ADMIN() (gas: 70425)
[PASS] test_reverts_rescueTokens_UnderlyingCannotBeRescued() (gas: 71084)
Suite result: ok. 3 passed; 0 failed; 0 skipped; finished in 28.12ms (541.18µs CPU time)

Ran 23 tests for tests/protocol/pool/Pool.FlashLoans.t.sol:PoolFlashLoansTests
[PASS] test_flashloan() (gas: 185185)
[PASS] test_flashloan_borrow() (gas: 509124)
[PASS] test_flashloan_borrow_inside_flashloan_and_check_rate_after() (gas: 1710624)
[PASS] test_flashloan_multiple() (gas: 290763)
[PASS] test_flashloan_rounding_accruedToTreasury() (gas: 474735)
[PASS] test_flashloan_rounding_premium() (gas: 176417)
[PASS] test_flashloan_simple() (gas: 152197)
[PASS] test_flashloan_simple_2() (gas: 154281)
[PASS] test_flashloan_simple_borrow_inside_flashloan_and_check_rate_after() (gas: 1137085)
[PASS] test_flashloan_simple_rounding_accruedToTreasury() (gas: 452687)
[PASS] test_flashloan_simple_rounding_premium() (gas: 149865)
[PASS] test_revert_flashloan_borrow_stable() (gas: 207183)
[PASS] test_reverts_flashLoan_invalid_return() (gas: 180452)
[PASS] test_reverts_flashLoan_reserve_inactive() (gas: 143348)
[PASS] test_reverts_flashLoan_reserve_not_flash_loan_enabled() (gas: 102690)
[PASS] test_reverts_flashLoan_reserve_paused() (gas: 99545)
[PASS] test_reverts_flashLoan_same_asset_more_then_once(uint8) (runs: 1000, μ: 143805, ~: 104543)
[PASS] test_reverts_flashLoan_simple_invalid_return() (gas: 144316)
[PASS] test_reverts_flashloan_simple_transferred_funds() (gas: 154049)
[PASS] test_reverts_flashloan_transferred_funds() (gas: 184035)
[PASS] test_reverts_flashloans_eoa() (gas: 108029)
[PASS] test_reverts_supply_flashloan_simple_transfer_withdraw() (gas: 820485)
[PASS] test_reverts_supply_flashloan_transfer_withdraw() (gas: 852319)
Suite result: ok. 23 passed; 0 failed; 0 skipped; finished in 801.70ms (756.97ms CPU time)

Ran 12 tests for tests/gas/Pool.Getters.gas.t.sol:PoolGetters_gas_Tests
[PASS] test_getEModeCategoryCollateralConfig() (gas: 16653)
[PASS] test_getEModeCategoryData() (gas: 20422)
[PASS] test_getLiquidationGracePeriod() (gas: 18151)
[PASS] test_getReserveData() (gas: 41837)
[PASS] test_getUserAccountData() (gas: 30897)
[PASS] test_getUserAccountData_oneSupplies() (gas: 535404)
[PASS] test_getUserAccountData_oneSupplies_with_eMode_enabled() (gas: 835819)
[PASS] test_getUserAccountData_twoSupplies() (gas: 1022724)
[PASS] test_getUserAccountData_twoSupplies_oneBorrows() (gas: 1798894)
[PASS] test_getUserAccountData_twoSupplies_oneBorrows_with_eMode_enabled() (gas: 2297559)
[PASS] test_getUserAccountData_twoSupplies_with_eMode_enabled() (gas: 1422984)
[PASS] test_getUserAccountData_with_eMode_enabled() (gas: 213914)
Suite result: ok. 12 passed; 0 failed; 0 skipped; finished in 48.34ms (15.48ms CPU time)

Ran 7 tests for tests/protocol/tokenization/ATokenRounding.t.sol:ATokenRoundingTest
[PASS] test_balanceShouldRoundDown() (gas: 48321)
[PASS] test_fuzzEdge(uint256,uint256,uint256) (runs: 1000, μ: 324973, ~: 325078)
Logs:
  Bound result 99000000000000000000000015110
  Bound result 500000000000000000
  Bound result 4798

[PASS] test_supplyShouldRoundDown() (gas: 282794)
[PASS] test_supplyShouldRoundDown_revertIfZero() (gas: 144624)
[PASS] test_totalSupplyShouldRoundDown() (gas: 44087)
[PASS] test_transferAmountShouldBeRoundedUp() (gas: 387188)
[PASS] test_withdrawShouldRoundUp() (gas: 353876)
Suite result: ok. 7 passed; 0 failed; 0 skipped; finished in 757.44ms (720.86ms CPU time)

Ran 13 tests for tests/protocol/tokenization/ATokenTransfers.t.sol:ATokenTransferTests
[PASS] test_approve_and_renounceAllowance() (gas: 41204)
[PASS] test_atoken_alice_transfer_all_to_bob() (gas: 128984)
[PASS] test_atoken_alice_transfer_to_bob() (gas: 196754)
[PASS] test_atoken_alice_transfer_to_bob_zero() (gas: 152047)
[PASS] test_atoken_alice_transfer_to_carol_accrues_interests() (gas: 215541)
[PASS] test_atoken_alice_transfer_to_herself() (gas: 75663)
[PASS] test_atoken_alice_transfer_to_herself_zero() (gas: 75617)
[PASS] test_atoken_multiple_transfers() (gas: 168040)
[PASS] test_atoken_transfer_sets_enabled_as_collateral(uint256,uint256) (runs: 1000, μ: 360815, ~: 360732)
Logs:
  Bound result 1
  Bound result 1318730383

[PASS] test_atoken_transfer_some_collateral_from_bob_borrower_to_alice() (gas: 510849)
[PASS] test_atoken_transfer_to_bob_them_bob_borrows() (gas: 391754)
[PASS] test_reverts_atoken_transfer_all_collateral_from_bob_borrower_to_alice() (gas: 384182)
[PASS] test_scaled_balance_token_base_alice_transfer_to_bob_accrues_interests() (gas: 109535)
Suite result: ok. 13 passed; 0 failed; 0 skipped; finished in 856.53ms (829.30ms CPU time)

Ran 6 tests for tests/gas/ATokenWithDelegation.Transfer.gas.t.sol:ATokenWithDelegation_gas_Tests
[PASS] test_transfer_fullAmountSenderWithAndReceiverWithoutDelegations() (gas: 271073)
[PASS] test_transfer_fullAmountSenderWithoutAndReceiverWithDelegations_notDelegatees() (gas: 263010)
[PASS] test_transfer_fullAmountWithDelegations_delegatees() (gas: 569266)
[PASS] test_transfer_fullAmountWithDelegations_notDelegatees() (gas: 375119)
[PASS] test_transfer_fullAmountWithoutDelegations_delegatees() (gas: 357195)
[PASS] test_transfer_fullAmountWithoutDelegations_notDelegatees() (gas: 159002)
Suite result: ok. 6 passed; 0 failed; 0 skipped; finished in 41.12ms (3.05ms CPU time)

Ran 1 test for tests/protocol/tokenization/ATokenWithDelegationRounding.t.sol:ATokenWithDelegationRoundingTest
[PASS] test_getPowerCurrent_and_delegate_shouldRoundDown() (gas: 227432)
Suite result: ok. 1 passed; 0 failed; 0 skipped; finished in 31.32ms (851.20µs CPU time)

Ran 4 tests for tests/protocol/tokenization/AToken_TransferFrom.t.sol:ATokenTransferFromTests
[PASS] test_transferFrom(uint128,uint256) (runs: 1000, μ: 149538, ~: 151453)
Logs:
  Bound result 99999000010523961081893193817765
  Bound result 2728208869018153081415

[PASS] test_transferFrom_max_allowance() (gas: 190565)
[PASS] test_transferFrom_shouldRevertIfSenderInsufficientAllowance() (gas: 58447)
[PASS] test_transferFrom_shouldRevertIfSenderIsNotApproved() (gas: 31502)
Suite result: ok. 4 passed; 0 failed; 0 skipped; finished in 380.29ms (353.46ms CPU time)

Ran 12 tests for tests/misc/AaveOracle.t.sol:AaveOracleTest
[PASS] testAddSingleSource() (gas: 1012313)
[PASS] testAssetZeroPriceAndZeroFallbackPrice() (gas: 1151410)
[PASS] testAssetZeroPriceNonZeroFallback() (gas: 1171353)
[PASS] testAssetZeroPriceWithoutFallback() (gas: 994026)
[PASS] testEmptySource() (gas: 897261)
[PASS] testGetBaseCurrencyPrice() (gas: 12312)
[PASS] testGetPriceViaFallbackOracle() (gas: 1075832)
[PASS] testUpdateFallbackOracle() (gas: 178435)
[PASS] testUpdateSingleSource() (gas: 126689)
[PASS] testUpdateSourceBaseCurrency() (gas: 138281)
[PASS] test_revert_setAssetSources_inconsistentParams() (gas: 898200)
[PASS] test_revert_setAssetSources_wrongCaller() (gas: 24207)
Suite result: ok. 12 passed; 0 failed; 0 skipped; finished in 31.12ms (2.18ms CPU time)

Ran 7 tests for tests/utils/AaveSetters.t.sol:AaveSettersTest
[PASS] test_setATokenBalance() (gas: 41767)
[PASS] test_setATokenTotalSupply() (gas: 38191)
[PASS] test_setLastUpdateTimestamp() (gas: 61267)
[PASS] test_setLiquidityIndex() (gas: 59946)
[PASS] test_setVTokenBalance() (gas: 41901)
[PASS] test_setVTokenTotalSupply() (gas: 38200)
[PASS] test_setVariableBorrowIndex() (gas: 59989)
Suite result: ok. 7 passed; 0 failed; 0 skipped; finished in 30.05ms (1.11ms CPU time)

Ran 5 tests for tests/deployments/AaveV3BatchDeployment.t.sol:AaveV3BatchDeployment
[PASS] testAaveV3BatchDeploy() (gas: 55176994)
[PASS] testAaveV3BatchDeploymentCheck() (gas: 63384304)
[PASS] testAaveV3Batch_reuseIncentivesProxy() (gas: 54675565)
[PASS] testAaveV3L2BatchDeploymentCheck() (gas: 65175783)
[PASS] testAaveV3TreasuryPartnerBatchDeploymentCheck() (gas: 63893582)
Suite result: ok. 5 passed; 0 failed; 0 skipped; finished in 103.53ms (98.28ms CPU time)

Ran 12 tests for tests/deployments/AaveV3BatchTests.t.sol:AaveV3BatchTests
[PASS] test0AaveV3SetupDeployment() (gas: 5310820)
[PASS] test10StaticATokenDeployment() (gas: 6676156)
[PASS] test1AaveV3GettersDeployment() (gas: 7429906)
[PASS] test2AaveV3PoolDeployment() (gas: 8348193)
[PASS] test3AaveV3L2PoolDeployment() (gas: 8608764)
[PASS] test4PeripheralsRelease() (gas: 7071756)
[PASS] test5MiscDeployment() (gas: 844259)
[PASS] test6ParaswapRelease() (gas: 5160256)
[PASS] test7SetupMarket() (gas: 2645909)
[PASS] test8TokensMarket() (gas: 3883791)
[PASS] test9ConfigEngineDeployment() (gas: 7262210)
[PASS] testAaveV3FullBatchOrchestration() (gas: 55174233)
Suite result: ok. 12 passed; 0 failed; 0 skipped; finished in 22.05ms (12.28ms CPU time)

Ran 5 tests for tests/invariants/CryticToFoundry.t.sol:CryticToFoundry
[PASS] test_replay_V33_supply() (gas: 114887129)
[PASS] test_replay_v33_2transfer() (gas: 144990118)
[PASS] test_replay_v33_supply() (gas: 236015227)
[PASS] test_v32_borrow() (gas: 114945182)
[PASS] test_v32_withdrawEchidna() (gas: 114927137)
Suite result: ok. 5 passed; 0 failed; 0 skipped; finished in 2.68s (2.67s CPU time)

Ran 13 tests for tests/deployments/DeploymentsGasLimits.t.sol:DeploymentsGasLimits
[PASS] test0AaveV3SetupDeployment() (gas: 5310733)
[PASS] test10ConfigEngineDeployment() (gas: 7262147)
[PASS] test11StaticATokenDeployment() (gas: 6676133)
[PASS] test12PeripheralsTreasuryPartner() (gas: 7560610)
[PASS] test1AaveV3GettersBatch1Deployment() (gas: 4604224)
[PASS] test2AaveV3GettersBatch2Deployment() (gas: 3599146)
[PASS] test3AaveV3PoolDeployment() (gas: 8348159)
[PASS] test4AaveV3L2PoolDeployment() (gas: 8608687)
[PASS] test5PeripheralsRelease() (gas: 7071734)
[PASS] test6MiscDeployment() (gas: 1247701)
[PASS] test7ParaswapDeployment() (gas: 5160279)
[PASS] test8SetupMarket() (gas: 2670496)
[PASS] test9TokensMarket() (gas: 3883793)
Suite result: ok. 13 passed; 0 failed; 0 skipped; finished in 16.46ms (6.83ms CPU time)

Ran 20 tests for tests/extensions/v3-config-engine/AaveV3ConfigEngineTest.t.sol:AaveV3ConfigEngineTest
[PASS] testAssetEModeUpdates() (gas: 2780809)
[PASS] testBorrowUpdatesNoChange() (gas: 2446507)
[PASS] testBorrowsUpdates() (gas: 2515285)
[PASS] testCapsUpdate() (gas: 2456259)
[PASS] testCollateralUpdateCorrectBonus() (gas: 2472399)
[PASS] testCollateralUpdateWrongBonus() (gas: 798178)
[PASS] testCollateralsUpdates() (gas: 2472210)
[PASS] testCollateralsUpdatesNoChange() (gas: 2444680)
[PASS] testCollateralsUpdatesNoChangeShouldNotEmit() (gas: 803779)
[PASS] testEModeCategoryCreation() (gas: 1241726)
[PASS] testEModeCategoryUpdates() (gas: 2601575)
[PASS] testEModeCategoryUpdatesNoChange() (gas: 2603194)
[PASS] testEModeCategoryUpdatesNoChangeShouldNotEmit() (gas: 878130)
[PASS] testEModeCategoryUpdatesWrongBonus() (gas: 868479)
[PASS] testListingWithEModeCategoryCreation() (gas: 5875426)
[PASS] testListings() (gas: 5586135)
[PASS] testListingsCustom() (gas: 9408663)
[PASS] testListingsCustomWithEModeCategoryCreation() (gas: 9698655)
[PASS] testPriceFeedsUpdates() (gas: 2523779)
[PASS] testRateStrategiesUpdates() (gas: 2511185)
Suite result: ok. 20 passed; 0 failed; 0 skipped; finished in 243.54ms (239.75ms CPU time)

Ran 2 tests for tests/deployments/AaveV3PermissionsTest.t.sol:AaveV3PermissionsTest
[PASS] testCheckPermissions() (gas: 53517935)
[PASS] testCheckPermissionsTreasuryPartner() (gas: 54009494)
Suite result: ok. 2 passed; 0 failed; 0 skipped; finished in 63.17ms (59.34ms CPU time)

Ran 6 tests for tests/misc/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.t.sol:InitializableImmutableAdminUpgradeabilityProxyTests
[PASS] test_proxy_fallback() (gas: 600016)
[PASS] test_proxy_upgradeTo() (gas: 622088)
[PASS] test_proxy_upgradeToAndCall() (gas: 627937)
[PASS] test_proxy_upgradeToAndCall_initialize() (gas: 597095)
[PASS] test_reverts_upgradeToAndCall_notAdmin() (gas: 602961)
[PASS] test_reverts_upgradeTo_notAdmin() (gas: 600781)
Suite result: ok. 6 passed; 0 failed; 0 skipped; finished in 2.56ms (1.46ms CPU time)

Ran 13 tests for tests/misc/rates/RateStrategy.calculateRates.t.sol:RateStrategyCalculateRatesTests
[PASS] test_calculate_rates_100_percent_usage() (gas: 47885)
Logs:
  Bound result 8000
  Bound result 400

[PASS] test_calculate_rates_80_bps_usage() (gas: 48004)
Logs:
  Bound result 8000
  Bound result 400

[PASS] test_calculate_rates_80_percent_usage() (gas: 90655)
Logs:
  Bound result 8000
  Bound result 400

[PASS] test_calculate_rates_80_percent_usage_and_50_percent_supply_usage_due_minted_tokens() (gas: 46210)
Logs:
  Bound result 8000
  Bound result 400

[PASS] test_calculate_rates_80_percent_usage_and_80_bps_supply_usage_due_minted_tokens() (gas: 46232)
Logs:
  Bound result 8000
  Bound result 400

[PASS] test_calculate_rates_above_op_usage((uint16,uint32,uint32,uint32),uint256,uint256,uint256) (runs: 1000, μ: 123341, ~: 124078)
Logs:
  Bound result 211
  Bound result 1
  Bound result 3990110829394253716732080989
  Bound result 1073503021008998829358447640
  Bound result 2648276921816975220907511868

[PASS] test_calculate_rates_below_op_usage((uint16,uint32,uint32,uint32),uint256,uint256,uint256) (runs: 1000, μ: 117569, ~: 120332)
Logs:
  Bound result 9900
  Bound result 22
  Bound result 7572963858048334021745512609
  Bound result 10854
  Bound result 50000

[PASS] test_calculate_rates_below_op_usage_when_no_debt((uint16,uint32,uint32,uint32),uint256,uint256) (runs: 1000, μ: 74752, ~: 75364)
Logs:
  Bound result 9808
  Bound result 0

[PASS] test_calculate_rates_empty_reserve((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 43529, ~: 43416)
Logs:
  Bound result 3239
  Bound result 5335

[PASS] test_calculate_rates_when_not_using_virtual_valance((uint16,uint32,uint32,uint32),uint256,uint256) (runs: 1000, μ: 67203, ~: 68630)
Logs:
  Bound result 6167
  Bound result 803

[PASS] test_calculate_rates_when_total_debt_0((uint16,uint32,uint32,uint32),uint256,uint256) (runs: 1000, μ: 67534, ~: 68639)
Logs:
  Bound result 8850
  Bound result 14

[PASS] test_fuzz_calculate_rates_80_percent_usage_added_and_virtual_equal(uint256) (runs: 1000, μ: 32801, ~: 33021)
Logs:
  Bound result 2

[PASS] test_zero_rates_strategy_calculate_rates() (gas: 18549)
Suite result: ok. 13 passed; 0 failed; 0 skipped; finished in 3.51s (3.48s CPU time)

Ran 7 tests for tests/misc/rates/RateStrategy.setters.t.sol:RateStrategySettersTests
[PASS] test_new_SetReserveInterestRateParams((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 52164, ~: 52029)
Logs:
  Bound result 3295
  Bound result 5881

[PASS] test_new_SetReserveInterestRateParams_when_not_configurator((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 25962, ~: 25843)
Logs:
  Bound result 9863
  Bound result 12

[PASS] test_reverts_SetReserveInterestRateParams_when_gt_maxRate((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 29084, ~: 29184)
Logs:
  Bound result 9805
  Bound result 17

[PASS] test_reverts_SetReserveInterestRateParams_when_gt_max_op((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 22028, ~: 22028)
[PASS] test_reverts_SetReserveInterestRateParams_when_lt_min_op((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 22076, ~: 22076)
[PASS] test_reverts_SetReserveInterestRateParams_when_reserve_0((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 26795, ~: 26699)
Logs:
  Bound result 100
  Bound result 1011

[PASS] test_reverts_SetReserveInterestRateParams_when_slope1_gt_slope2((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 23308, ~: 23308)
Suite result: ok. 7 passed; 0 failed; 0 skipped; finished in 1.76s (1.71s CPU time)

Ran 7 tests for tests/misc/rates/RateStrategy.setters.t.sol:RateStrategySettersTestsOverride
[PASS] test_new_SetReserveInterestRateParams((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 51485, ~: 51412)
Logs:
  Bound result 100
  Bound result 240

[PASS] test_new_SetReserveInterestRateParams_when_not_configurator((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 25324, ~: 25210)
Logs:
  Bound result 5421
  Bound result 1519

[PASS] test_reverts_SetReserveInterestRateParams_when_gt_maxRate((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 28480, ~: 28559)
Logs:
  Bound result 7412
  Bound result 5

[PASS] test_reverts_SetReserveInterestRateParams_when_gt_max_op((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 21403, ~: 21403)
[PASS] test_reverts_SetReserveInterestRateParams_when_lt_min_op((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 21451, ~: 21451)
[PASS] test_reverts_SetReserveInterestRateParams_when_reserve_0((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 26161, ~: 26074)
Logs:
  Bound result 9853
  Bound result 19219

[PASS] test_reverts_SetReserveInterestRateParams_when_slope1_gt_slope2((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 22683, ~: 22683)
Suite result: ok. 7 passed; 0 failed; 0 skipped; finished in 1.66s (1.61s CPU time)

Ran 15 tests for tests/misc/rates/RateStrategy.t.sol:RateStrategyBaseTests
[PASS] test_getInterestRateDataBps((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 40016, ~: 39905)
Logs:
  Bound result 3702
  Bound result 58

[PASS] test_getInterestRateDataRay((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 40931, ~: 40852)
Logs:
  Bound result 5819
  Bound result 6

[PASS] test_getMaxVariableBorrowRate((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 38429, ~: 38324)
Logs:
  Bound result 745
  Bound result 50

[PASS] test_initialization() (gas: 26143)
[PASS] test_new_DefaultReserveInterestRateStrategy_wrong_provider() (gas: 41972)
[PASS] test_new_SetReserveInterestRateParams((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 52064, ~: 51970)
Logs:
  Bound result 9844
  Bound result 1262

[PASS] test_new_SetReserveInterestRateParams_override_method((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 49266, ~: 49178)
Logs:
  Bound result 2013
  Bound result 23

[PASS] test_new_SetReserveInterestRateParams_when_not_configurator((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 25924, ~: 25839)
Logs:
  Bound result 255
  Bound result 1200

[PASS] test_overflow_liquidity_rates() (gas: 57891)
[PASS] test_overflow_variable_rates() (gas: 645446)
[PASS] test_reverts_SetReserveInterestRateParams_when_gt_maxRate((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 33629, ~: 33629)
[PASS] test_reverts_SetReserveInterestRateParams_when_gt_max_op((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 30448, ~: 30448)
[PASS] test_reverts_SetReserveInterestRateParams_when_lt_min_op((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 30524, ~: 30524)
[PASS] test_reverts_SetReserveInterestRateParams_when_reserve_0((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 27023, ~: 27023)
[PASS] test_reverts_SetReserveInterestRateParams_when_slope1_gt_slope2(uint16,uint32,uint32,uint32) (runs: 1000, μ: 32463, ~: 32463)
Suite result: ok. 15 passed; 0 failed; 0 skipped; finished in 2.93s (2.89s CPU time)

Ran 53 tests for tests/protocol/pool/L2Pool.t.sol:L2PoolTests
[PASS] test_approvePositionManager_false() (gas: 42552)
[PASS] test_approvePositionManager_true() (gas: 48988)
[PASS] test_dropReserve() (gas: 96087)
[PASS] test_getBorrowLogic() (gas: 13674)
[PASS] test_getFlashLoanLogic() (gas: 13719)
[PASS] test_getLiquidationLogic() (gas: 13783)
[PASS] test_getPoolLogic() (gas: 13693)
[PASS] test_getSupplyLogic() (gas: 13715)
[PASS] test_getVirtualUnderlyingBalance() (gas: 358976)
[PASS] test_getters_getUserAccountData() (gas: 715099)
[PASS] test_l2_borrow() (gas: 413021)
[PASS] test_l2_liquidationCall() (gas: 1023508)
[PASS] test_l2_partial_withdraw() (gas: 300127)
[PASS] test_l2_repay() (gas: 436867)
[PASS] test_l2_repay_atokens() (gas: 443132)
[PASS] test_l2_repay_permit(uint128,uint128,uint128,uint128,uint128) (runs: 1000, μ: 607511, ~: 608223)
Logs:
  Bound result 61
  Bound result 34
  Bound result 3
  Bound result 2

[PASS] test_l2_set_user_collateral() (gas: 247432)
[PASS] test_l2_supply() (gas: 248693)
[PASS] test_l2_supply_permit(uint128,uint120) (runs: 1000, μ: 413935, ~: 413937)
[PASS] test_l2_withdraw() (gas: 237422)
[PASS] test_mintToTreasury() (gas: 796749)
[PASS] test_mintToTreasury_skip_invalid_addresses() (gas: 801337)
[PASS] test_noop_approvePositionManager_true_when_already_is_activated() (gas: 54177)
[PASS] test_noop_setUserUseReserveAsCollateralOnBehalfOf_true_when_already_is_activated() (gas: 426839)
[PASS] test_noop_setUserUseReserveAsCollateral_true_when_already_is_activated() (gas: 257979)
[PASS] test_pool_defaultValues() (gas: 4964064)
[PASS] test_renouncePositionManager() (gas: 38418)
[PASS] test_rescueTokens(uint256) (runs: 1000, μ: 81761, ~: 82014)
Logs:
  Bound result 13685678

[PASS] test_resetIsolationModeTotalDebt() (gas: 840231)
[PASS] test_revert_setUserEModeOnBehalfOf_not_position_manager(address) (runs: 1000, μ: 212826, ~: 212826)
[PASS] test_reverts_impl_initialize() (gas: 4377678)
[PASS] test_reverts_initReserve_not_poolConfigurator(address) (runs: 1000, μ: 24928, ~: 24928)
[PASS] test_reverts_modifiers_not_poolConfigurator(address) (runs: 1000, μ: 98872, ~: 98872)
[PASS] test_reverts_new_Pool_invalidAddressesProvider() (gas: 4477931)
[PASS] test_reverts_setUserEmode_0_bad_hf() (gas: 955233)
[PASS] test_reverts_setUserUseReserveAsCollateralOnBehalfOf_caller_not_position_manager(address) (runs: 1000, μ: 405731, ~: 405731)
[PASS] test_reverts_setUserUseReserveAsCollateral_false_hf_lower_lqt() (gas: 705733)
[PASS] test_reverts_setUserUseReserveAsCollateral_true_ltv_zero() (gas: 274285)
[PASS] test_reverts_setUserUseReserveAsCollateral_true_reserve_inactive() (gas: 186409)
[PASS] test_reverts_setUserUseReserveAsCollateral_true_reserve_paused() (gas: 265364)
[PASS] test_reverts_setUserUseReserveAsCollateral_true_user_balance_zero() (gas: 50123)
[PASS] test_reverts_setUserUseReserveAsCollateral_true_user_isolation_mode() (gas: 894962)
[PASS] test_setLiquidationGracePeriod(uint40) (runs: 1000, μ: 36598, ~: 36713)
[PASS] test_setLiquidationGracePeriod_assetNotListed(uint40) (runs: 1000, μ: 26634, ~: 26634)
[PASS] test_setUserEModeOnBehalfOf() (gas: 244720)
[PASS] test_setUserEmode() (gas: 218251)
[PASS] test_setUserEmode_twice() (gas: 356590)
[PASS] test_setUserEmode_twice_inconsistent_category() (gas: 961592)
[PASS] test_setUserUseReserveAsCollateralOnBehalfOf_false() (gas: 393837)
[PASS] test_setUserUseReserveAsCollateralOnBehalfOf_true() (gas: 420945)
[PASS] test_setUserUseReserveAsCollateral_false() (gas: 219597)
[PASS] test_setUserUseReserveAsCollateral_true() (gas: 252094)
[PASS] test_updateBridgeProtocolFee() (gas: 231)
Suite result: ok. 53 passed; 0 failed; 0 skipped; finished in 7.50s (7.45s CPU time)

Ran 11 tests for tests/protocol/libraries/math/MathUtils.t.sol:MathUtilsTests
[PASS] testMulDivCeil_NoRemainder() (gas: 3231)
[PASS] testMulDivCeil_RevertOnDivByZero() (gas: 3150)
[PASS] testMulDivCeil_RevertOnOverflow() (gas: 3166)
[PASS] testMulDivCeil_WithRemainder() (gas: 3230)
[PASS] testMulDivCeil_ZeroAOrB() (gas: 3779)
[PASS] test_calculateCompoundInterest_1() (gas: 4825)
[PASS] test_calculateCompoundInterest_2() (gas: 5264)
[PASS] test_calculateCompoundInterest_edge() (gas: 4972)
[PASS] test_calculateCompoundInterest_shouldNotOverflow() (gas: 4038)
[PASS] test_calculateLinearInterest() (gas: 4652)
[PASS] test_constants() (gas: 3159)
Suite result: ok. 11 passed; 0 failed; 0 skipped; finished in 1.64ms (250.32µs CPU time)

Ran 17 tests for tests/extensions/paraswap-adapters/ParaswapAdapters.t.sol:ParaswapAdaptersTest
[PASS] test_rescueTokens() (gas: 196269)
[PASS] test_reverts_offset_out_of_range_swap_liquidity_permit_flashloan() (gas: 727877)
[PASS] test_reverts_swapAndDeposit_offset() (gas: 792777)
[PASS] test_reverts_swapAndRepay_offset_out_of_range() (gas: 888494)
[PASS] test_reverts_withdrawAndSwap_offset_out_of_range() (gas: 773205)
[PASS] test_swapAndDeposit() (gas: 873905)
[PASS] test_swapAndDeposit_permit() (gas: 916397)
[PASS] test_swapAndRepay() (gas: 960726)
[PASS] test_swapAndRepay_flashloan() (gas: 1024450)
[PASS] test_swapAndRepay_flashloan_permit() (gas: 1062484)
[PASS] test_swapAndRepay_no_collateral_leftovers() (gas: 1010111)
[PASS] test_swapAndRepay_permit() (gas: 1003067)
[PASS] test_swap_liquidity_flashloan() (gas: 954376)
[PASS] test_swap_liquidity_permit_flashloan() (gas: 992302)
[PASS] test_withdrawAndSwap() (gas: 790696)
[PASS] test_withdrawAndSwap_permit() (gas: 829195)
[PASS] test_withdrawSwapAdapter_reverts_flashloan() (gas: 525777)
Suite result: ok. 17 passed; 0 failed; 0 skipped; finished in 74.19ms (38.61ms CPU time)

Ran 17 tests for tests/protocol/libraries/math/PercentageMath.t.sol:PercentageMathTests
[PASS] testPercentDivCeil_Exact() (gas: 3267)
[PASS] testPercentDivCeil_RevertOnDivByZero() (gas: 3145)
[PASS] testPercentDivCeil_RevertOnOverflow() (gas: 3178)
[PASS] testPercentDivCeil_WithCeilNeeded() (gas: 3244)
[PASS] testPercentMulCeil_Exact() (gas: 3250)
[PASS] testPercentMulCeil_RevertOnOverflow() (gas: 3212)
[PASS] testPercentMulCeil_WithRoundingUp() (gas: 3292)
[PASS] testPercentMulCeil_ZeroValueOrPercent() (gas: 3770)
[PASS] testPercentMulFloor_Exact() (gas: 3200)
[PASS] testPercentMulFloor_RevertOnOverflow() (gas: 3147)
[PASS] testPercentMulFloor_WithTruncation() (gas: 3243)
[PASS] testPercentMulFloor_ZeroInputs() (gas: 3673)
[PASS] test_constants() (gas: 4281)
[PASS] test_percentDiv() (gas: 4274)
[PASS] test_percentDiv_fuzz(uint256,uint256) (runs: 1000, μ: 3865, ~: 3893)
[PASS] test_percentMul() (gas: 4193)
[PASS] test_percentMul_fuzz(uint256,uint256) (runs: 1000, μ: 3641, ~: 3726)
Suite result: ok. 17 passed; 0 failed; 0 skipped; finished in 36.51ms (35.08ms CPU time)

Ran 18 tests for tests/protocol/pool/Pool.Borrow.t.sol:PoolBorrowTests
[PASS] test_borrow_variable_in_isolation() (gas: 584467)
[PASS] test_reverts_borrow_DebtCeilingExceeded() (gas: 433517)
[PASS] test_reverts_borrow_InconsistentEModeCategory() (gas: 403346)
[PASS] test_reverts_borrow_cap() (gas: 291017)
[PASS] test_reverts_borrow_collateral_balance_zero() (gas: 219233)
[PASS] test_reverts_borrow_collateral_can_not_cover() (gas: 404785)
[PASS] test_reverts_borrow_debt_ceiling() (gas: 679287)
[PASS] test_reverts_borrow_hf_lt_1() (gas: 573868)
[PASS] test_reverts_borrow_invalidAmount() (gas: 61923)
[PASS] test_reverts_borrow_not_borrowable_isolation() (gas: 416080)
[PASS] test_reverts_borrow_reserveFrozen() (gas: 1168184)
[PASS] test_reverts_borrow_reserveInactive() (gas: 135807)
[PASS] test_reverts_borrow_reservePaused() (gas: 99971)
[PASS] test_reverts_borrow_sentinel_oracle_down() (gas: 303844)
[PASS] test_reverts_borrow_sioled_borrowing_violation() (gas: 673117)
[PASS] test_reverts_deprecated_stable_borrow() (gas: 391187)
[PASS] test_reverts_variable_borrow_transferred_funds() (gas: 366565)
[PASS] test_variable_borrow() (gas: 360307)
Suite result: ok. 18 passed; 0 failed; 0 skipped; finished in 46.05ms (17.51ms CPU time)

Ran 11 tests for tests/protocol/pool/Pool.Liquidations.CloseFactor.t.sol:PoolLiquidationCloseFactorTests
[PASS] test_fuzz_hf_gt_095_supply_gt_threshold_closeFactorShouldBe50(uint256,uint256) (runs: 1000, μ: 835227, ~: 835298)
Logs:
  Bound result 4107748880077261291162
  Bound result 960053635730078505

[PASS] test_fuzz_hf_gt_095_supply_lt_threshold_closeFactorShouldBe100(uint256,uint256) (runs: 1000, μ: 800535, ~: 800587)
Logs:
  Bound result 966183233946760751
  Bound result 989253807696683290

[PASS] test_fuzz_hf_lte_095_supply_gt_threshold_closeFactorShouldBe100(uint256,uint256) (runs: 1000, μ: 797834, ~: 795464)
Logs:
  Bound result 998888888888888899718
  Bound result 108171179094039257

[PASS] test_hf_gt_095_borrow_gt_threshold_collateral_lt_threshold_closeFactorShouldBe100() (gas: 1047682)
[PASS] test_hf_gt_095_supply_gt_threshold_closeFactorShouldBe50() (gas: 833907)
Logs:
  Bound result 100000000000000000000
  Bound result 970000000000000000

[PASS] test_hf_gt_095_supply_lt_threshold_closeFactorShouldBe100() (gas: 799108)
Logs:
  Bound result 500000000000000000
  Bound result 970000000000000000

[PASS] test_hf_helper(uint256) (runs: 1000, μ: 534219, ~: 534249)
Logs:
  Bound result 893344353112051926

[PASS] test_hf_lte_095_supply_gt_threshold_closeFactorShouldBe100() (gas: 799239)
Logs:
  Bound result 100000000000000000000
  Bound result 940000000000000000

[PASS] test_liquidationdataprovider_edge_range() (gas: 955020)
[PASS] test_liquidationdataprovider_edge_range_reverse() (gas: 1008725)
[PASS] test_shouldRevertIfCloseFactorIs100ButCollateralIsBelowThreshold() (gas: 803532)
Suite result: ok. 11 passed; 0 failed; 0 skipped; finished in 11.38s (11.35s CPU time)

Ran 15 tests for tests/extensions/RevenueSplitter.t.sol:RevenueSplitterTest
[PASS] test_constructor() (gas: 15303)
[PASS] test_constructor_fuzzing(uint16) (runs: 1000, μ: 457649, ~: 457649)
[PASS] test_constructor_revert_invalid_split_percentage() (gas: 174509)
[PASS] test_splitFund_oneToken() (gas: 410660)
[PASS] test_splitFund_reverts_randomAddress() (gas: 51282)
[PASS] test_splitFund_zeroAmount_noOp() (gas: 371538)
[PASS] test_splitFund_zeroFunds_noOp() (gas: 50848)
[PASS] test_splitFund_zeroTokens_noOp() (gas: 370457)
[PASS] test_splitFunds_fixed() (gas: 447612)
[PASS] test_splitFunds_fuzz_max(uint256,uint256) (runs: 1000, μ: 448415, ~: 449792)
[PASS] test_splitFunds_fuzz_realistic(uint256,uint256) (runs: 1000, μ: 446910, ~: 448244)
[PASS] test_splitNativeFund_fixedAmount() (gas: 100484)
[PASS] test_splitNativeFund_walletNotAcceptingFunds() (gas: 537581)
[PASS] test_splitNativeFund_zeroAmount_noOp() (gas: 29728)
[PASS] test_splitNativeFunds_fuzz_max(uint256) (runs: 1000, μ: 100889, ~: 101899)
Suite result: ok. 15 passed; 0 failed; 0 skipped; finished in 2.82s (2.82s CPU time)

Ran 18 tests for tests/rewards/RewardsController.t.sol:RewardsControllerTest
[PASS] test_accrueRewards() (gas: 914023)
[PASS] test_claimAllRewards() (gas: 868802)
[PASS] test_claimAllRewardsOnBehalf() (gas: 902495)
[PASS] test_claimAllRewardsToSelf() (gas: 868429)
[PASS] test_claimRewards() (gas: 865735)
[PASS] test_claimRewardsOnBehalf() (gas: 904215)
[PASS] test_claimRewardsToSelf() (gas: 865414)
[PASS] test_claimRewards_partial() (gas: 866050)
[PASS] test_claimRewards_zero() (gas: 619939)
[PASS] test_claimRewards_zero_with_rewards() (gas: 626431)
[PASS] test_configureAssets() (gas: 601049)
[PASS] test_initialize_no_op() (gas: 3614302)
[PASS] test_new_RewardsController() (gas: 3610338)
[PASS] test_setClaimer() (gas: 58207)
[PASS] test_setDistributionEnd() (gas: 616897)
[PASS] test_setEmissionPerSecond() (gas: 620924)
[PASS] test_setRewardOracle() (gas: 694643)
[PASS] test_setTransferStrategy_PullRewardsTransferStrategy() (gas: 880501)
Suite result: ok. 18 passed; 0 failed; 0 skipped; finished in 53.02ms (22.80ms CPU time)

Ran 5 tests for tests/rewards/StakedTokenTransferStrategy.t.sol:StakedTokenTransferStrategyTest
[PASS] test_dropApproval() (gas: 18975)
[PASS] test_emergencyTransfer() (gas: 211756)
[PASS] test_getters() (gas: 18719)
[PASS] test_performTransfer() (gas: 22017)
[PASS] test_renewApproval() (gas: 23091)
Suite result: ok. 5 passed; 0 failed; 0 skipped; finished in 28.11ms (1.76ms CPU time)

Ran 3 tests for tests/gas/StataToken.gas.t.sol:StataToken_gas_Tests
[PASS] test_claimRewards() (gas: 2747958)
[PASS] test_deposit() (gas: 707612)
[PASS] test_depositATokens() (gas: 851655)
Suite result: ok. 3 passed; 0 failed; 0 skipped; finished in 41.77ms (7.08ms CPU time)

Ran 2 tests for tests/extensions/stata-token/StataTokenV2Getters.sol:StataTokenV2GettersTest
[PASS] test_getters() (gas: 69883)
[PASS] test_initializeShouldRevert() (gas: 21681)
Suite result: ok. 2 passed; 0 failed; 0 skipped; finished in 27.50ms (239.82µs CPU time)

Ran 10 tests for tests/extensions/stata-token/StataTokenV2Pausable.t.sol:StataTokenV2PausableTest
[PASS] test_canPause() (gas: 26789)
[PASS] test_canPause_shouldReturnFalse(address) (runs: 1000, μ: 27282, ~: 27282)
[PASS] test_claimingRewards_shouldRevert() (gas: 520120)
[PASS] test_deposit_shouldRevert() (gas: 467618)
[PASS] test_mint_shouldRevert() (gas: 471639)
[PASS] test_redeem_shouldRevert() (gas: 539652)
[PASS] test_setPaused_shouldRevertForInvalidCaller(address) (runs: 1000, μ: 30340, ~: 30340)
[PASS] test_setPaused_shouldSucceedForOwner() (gas: 53839)
[PASS] test_transfer_shouldRevert() (gas: 518036)
[PASS] test_withdraw_shouldRevert() (gas: 535484)
Suite result: ok. 10 passed; 0 failed; 0 skipped; finished in 142.47ms (114.08ms CPU time)

Ran 3 tests for tests/extensions/stata-token/StataTokenV2Permit.sol:StataTokenV2PermitTest
[PASS] test_permit() (gas: 89789)
[PASS] test_permit_expired() (gas: 37844)
[PASS] test_permit_invalidSigner() (gas: 66419)
Suite result: ok. 3 passed; 0 failed; 0 skipped; finished in 29.09ms (1.20ms CPU time)

Ran 4 tests for tests/extensions/stata-token/StataTokenV2Rescuable.sol:StataTokenV2RescuableTest
[PASS] test_rescuable_shouldNotCauseInsolvency(uint256,uint256) (runs: 1000, μ: 735971, ~: 735973)
[PASS] test_rescuable_shouldRevertForInvalidCaller() (gas: 189988)
[PASS] test_rescuable_shouldTransferAssetsToCollector() (gas: 216923)
[PASS] test_rescuable_shouldWorkForAToken() (gas: 414228)
Suite result: ok. 4 passed; 0 failed; 0 skipped; finished in 2.72s (2.70s CPU time)

Ran 17 tests for tests/extensions/stata-token/ERC20AaveLMUpgradable.t.sol:ERC20AaveLMUpgradableTest
[PASS] test_7201() (gas: 3355)
[PASS] test_claimRewards(uint256,uint32,uint88,uint32) (runs: 1000, μ: 836177, ~: 797985)
Logs:
  Bound result 79228162513264337593543950385
  Bound result 17372
  Bound result 1661992959
  Bound result 16491

[PASS] test_claimRewardsOnBehalfOf_self(uint256,uint32,uint88,uint32) (runs: 1000, μ: 836362, ~: 798200)
Logs:
  Bound result 79228162513264337596163120897
  Bound result 12541
  Bound result 1728000000
  Bound result 9655

[PASS] test_claimRewardsOnBehalfOf_shouldRevertForInvalidClaimer(uint256,uint32,uint88,uint32) (runs: 1000, μ: 772629, ~: 774264)
Logs:
  Bound result 52987180427581926386722388699
  Bound result 34242019
  Bound result 62061
  Bound result 352

[PASS] test_claimRewardsOnBehalfOf_validClaimer(uint256,uint32,uint88,uint32) (runs: 1000, μ: 871873, ~: 831261)
Logs:
  Bound result 79228162513264337593649950336
  Bound result 8500
  Bound result 100000
  Bound result 6423

[PASS] test_claimRewardsToSelf(uint256,uint32,uint88,uint32) (runs: 1000, μ: 838022, ~: 797899)
Logs:
  Bound result 1000000000000000000000000000
  Bound result 5000
  Bound result 10500
  Bound result 15760

[PASS] test_claimableRewards(uint256,uint32,uint88,uint32) (runs: 1000, μ: 773490, ~: 775178)
Logs:
  Bound result 79228162513264337662263427071
  Bound result 3000000
  Bound result 6431
  Bound result 10979

[PASS] test_collectAndUpdateRewards(uint256,uint32,uint88,uint32) (runs: 1000, μ: 816026, ~: 794281)
Logs:
  Bound result 79228162513264337593543950400
  Bound result 8109
  Bound result 10000
  Bound result 3008982790

[PASS] test_correctAccountingForDelayedRegistration() (gas: 823792)
[PASS] test_getReferenceAsset() (gas: 12902)
[PASS] test_isRegisteredRewardToken() (gas: 633916)
[PASS] test_noRewardsInitialized() (gas: 39220)
[PASS] test_noopWhenNotInitialized() (gas: 52782)
[PASS] test_rewardTokens() (gas: 632057)
[PASS] test_transfer(uint256,uint32,uint88,uint32,address,uint256) (runs: 1000, μ: 849340, ~: 864680)
Logs:
  Bound result 79228162513264337593543950636
  Bound result 30
  Bound result 2578
  Bound result 779248617

[PASS] test_transfer_toSelf(uint256,uint32,uint88,uint32) (runs: 1000, μ: 806249, ~: 798822)
Logs:
  Bound result 79228162513264337593543959836
  Bound result 17315
  Bound result 2291
  Bound result 9110

[PASS] test_zeroIncentivesController() (gas: 37689)
Suite result: ok. 17 passed; 0 failed; 0 skipped; finished in 15.52s (15.49s CPU time)

Ran 18 tests for tests/protocol/tokenization/VariableDebtToken.t.sol:VariableDebtTokenEventsTests
[PASS] test_balanceOf() (gas: 230803)
[PASS] test_cancel_delegationWithSig() (gas: 95528)
[PASS] test_delegationWithSig() (gas: 90870)
[PASS] test_initialize_VariableDebtToken((uint8,string,string,string,string,address,address,address,bool)) (runs: 1000, μ: 3439149, ~: 3437661)
Logs:
  Bound result 6

[PASS] test_mint_variableDebt_caller_alice((uint8,string,string,string,string,address,address,address,bool)) (runs: 1000, μ: 3512382, ~: 3511107)
Logs:
  Bound result 8

[PASS] test_mint_variableDebt_caller_bob_onBehalf_alice((uint8,string,string,string,string,address,address,address,bool)) (runs: 1000, μ: 3525146, ~: 3524326)
Logs:
  Bound result 7

[PASS] test_new_VariableDebtToken_implementation() (gas: 1583698)
[PASS] test_partial_burn_variableDebt((uint8,string,string,string,string,address,address,address,bool)) (runs: 1000, μ: 3527277, ~: 3526815)
Logs:
  Bound result 15

[PASS] test_renounceDelegation() (gas: 46560)
[PASS] test_reverts_OperationNotSupported() (gas: 1601746)
[PASS] test_reverts_bad_expiration_delegationWithSig() (gas: 29246)
[PASS] test_reverts_bad_nonce_delegationWithSig() (gas: 104437)
[PASS] test_reverts_initialize_pool_do_not_match((uint8,string,string,string,string,address,address,address,bool)) (runs: 1000, μ: 2774019, ~: 2773963)
Logs:
  Bound result 13

[PASS] test_reverts_zero_address_delegationWithSig() (gas: 28637)
[PASS] test_scaledBalanceOf() (gas: 286064)
[PASS] test_totalScaledSupply() (gas: 326478)
[PASS] test_totalSupply() (gas: 326429)
[PASS] test_total_burn_variableDebt((uint8,string,string,string,string,address,address,address,bool)) (runs: 1000, μ: 3527471, ~: 3526701)
Logs:
  Bound result 8

Suite result: ok. 18 passed; 0 failed; 0 skipped; finished in 8.59s (8.56s CPU time)

Ran 5 tests for tests/protocol/tokenization/VariableDebtTokenRounding.t.sol:VariableDebtTokenRoundingTest
[PASS] test_balanceShouldRoundUp() (gas: 48617)
[PASS] test_borrowShouldRoundUp() (gas: 236272)
[PASS] test_creditDelegationAllowance(uint256) (runs: 1000, μ: 93985, ~: 93683)
Logs:
  Bound result 1030329662501029003381111

[PASS] test_repayShouldRoundDown() (gas: 346262)
[PASS] test_totalSupplyShouldRoundUp() (gas: 44456)
Suite result: ok. 5 passed; 0 failed; 0 skipped; finished in 286.05ms (255.71ms CPU time)

Ran 3 tests for tests/protocol/tokenization/VariableDebtToken_MintOnBehalf.t.sol:VariableDebtToken_MintOnBehalfTests
[PASS] test_mint(uint128,uint256) (runs: 1000, μ: 83973, ~: 83694)
Logs:
  Bound result 99999000000000000000000816707617
  Bound result 1000000000000011915

[PASS] test_mint_shouldRevertIfSenderInsufficientAllowance() (gas: 49042)
[PASS] test_mint_shouldRevertIfSenderIsNotApproved() (gas: 22365)
Suite result: ok. 3 passed; 0 failed; 0 skipped; finished in 239.51ms (210.12ms CPU time)

Ran 30 tests for tests/protocol/libraries/math/WadRayMath.t.sol:WadRayMathTests
[PASS] testRayDivCeil_Exact() (gas: 3273)
[PASS] testRayDivCeil_RevertOnDivByZero() (gas: 3122)
[PASS] testRayDivCeil_RevertOnOverflow() (gas: 3179)
[PASS] testRayDivCeil_WithCeil() (gas: 3283)
[PASS] testRayDivCeil_ZeroNumerator() (gas: 3236)
[PASS] testRayDivFloor_Exact() (gas: 3289)
[PASS] testRayDivFloor_RevertOnDivByZero() (gas: 3188)
[PASS] testRayDivFloor_RevertOnOverflow() (gas: 3135)
[PASS] testRayDivFloor_Truncation() (gas: 3279)
[PASS] testRayDivFloor_ZeroNumerator() (gas: 3254)
[PASS] testRayMulCeil_Exact() (gas: 3225)
[PASS] testRayMulCeil_RevertOnOverflow() (gas: 3213)
[PASS] testRayMulCeil_WithCeil() (gas: 3220)
[PASS] testRayMulCeil_Zero() (gas: 3781)
[PASS] testRayMulFloor_Exact() (gas: 3290)
[PASS] testRayMulFloor_RevertOnOverflow() (gas: 3147)
[PASS] testRayMulFloor_Truncation() (gas: 3216)
[PASS] testRayMulFloor_Zero() (gas: 3708)
[PASS] test_constants() (gas: 5771)
[PASS] test_rayDiv() (gas: 4844)
[PASS] test_rayMul() (gas: 4283)
[PASS] test_rayToWad() (gas: 4217)
[PASS] test_rayToWad_fuzz(uint256) (runs: 1000, μ: 3937, ~: 3885)
[PASS] test_wadDiv() (gas: 4835)
[PASS] test_wadDiv_fuzzing(uint256,uint256) (runs: 1000, μ: 3780, ~: 3850)
[PASS] test_wadMul() (gas: 4195)
[PASS] test_wadMul_edge() (gas: 4230)
[PASS] test_wadMul_fuzzing(uint256,uint256) (runs: 1000, μ: 3726, ~: 3814)
[PASS] test_wadToRay() (gas: 4160)
[PASS] test_wadToRay_fuzz(uint256) (runs: 1000, μ: 3880, ~: 3947)
Suite result: ok. 30 passed; 0 failed; 0 skipped; finished in 72.50ms (70.99ms CPU time)

Ran 15 tests for tests/helpers/WrappedTokenGateway.t.sol:WrappedTokenGatewayTests
[PASS] test_borrowDelegateApprove_repay() (gas: 455557)
[PASS] test_borrowVariableDebtWeth_repayWithEth() (gas: 787268)
[PASS] test_borrowVariableDebtWeth_repayWithEth_mismatchedValues() (gas: 780112)
[PASS] test_depositNativeEthInPool() (gas: 252322)
[PASS] test_fallback_revert() (gas: 10080)
[PASS] test_getWETHAddress() (gas: 10589)
[PASS] test_ownerCanRescueEth() (gas: 25215)
[PASS] test_ownerCanRescueTokens() (gas: 96942)
[PASS] test_sendEthFallback_revert() (gas: 16724)
[PASS] test_sendEth_revert() (gas: 16601)
[PASS] test_withdrawEth_full() (gas: 355772)
[PASS] test_withdrawEth_partial() (gas: 388365)
[PASS] test_withdrawEth_permit() (gas: 418135)
[PASS] test_withdrawEth_permit_frontrunRegression() (gas: 419062)
[PASS] test_withdrawEth_permit_full() (gas: 382337)
Suite result: ok. 15 passed; 0 failed; 0 skipped; finished in 45.40ms (17.53ms CPU time)

Ran 1 test for tests/gas/WrappedTokenGatewayV3.gas.t.sol:WrappedTokenGatewayV3_gas_Tests
[PASS] test_flow() (gas: 933111)
Suite result: ok. 1 passed; 0 failed; 0 skipped; finished in 35.86ms (1.85ms CPU time)

Ran 11 tests for tests/protocol/pool/Pool.Withdraw.t.sol:PoolWithdrawTests
[PASS] test_Reverts_withdraw_transferred_funds() (gas: 531544)
[PASS] test_full_withdraw() (gas: 251093)
[PASS] test_full_withdraw_to() (gas: 256576)
[PASS] test_partial_withdraw() (gas: 247576)
[PASS] test_reverts_WithdrawToAToken() (gas: 239171)
[PASS] test_reverts_withdraw_hf_lt_lqt() (gas: 661444)
[PASS] test_reverts_withdraw_invalidAmount() (gas: 239198)
[PASS] test_reverts_withdraw_invalidBalance() (gas: 241267)
[PASS] test_reverts_withdraw_reserveInactive() (gas: 198917)
[PASS] test_reverts_withdraw_reservePaused() (gas: 278154)
[PASS] test_withdraw_not_enabled_as_collateral() (gas: 255536)
Suite result: ok. 11 passed; 0 failed; 0 skipped; finished in 38.05ms (10.11ms CPU time)

Ran 26 tests for tests/protocol/pool/Pool.Liquidations.t.sol:PoolLiquidationTests
[PASS] test_deficit_increased_after_liquidate_bad_debt() (gas: 803222)
[PASS] test_full_liquidate_atokens_edgecase_collateral_not_enough_to_cover_fee() (gas: 436776)
[PASS] test_full_liquidate_atokens_multiple_variable_borrows() (gas: 966616)
[PASS] test_full_liquidate_multiple_supplies_and_variable_borrows() (gas: 1116243)
[PASS] test_full_liquidate_multiple_variable_borrows() (gas: 986129)
[PASS] test_liquidate_borrow_bad_debt() (gas: 812382)
[PASS] test_liquidate_borrow_burn_multiple_assets_bad_debt() (gas: 1146906)
[PASS] test_liquidate_emode_position_ltzero_outside_emode() (gas: 1082072)
[PASS] test_liquidate_emode_position_without_emode_oracle() (gas: 1045846)
[PASS] test_liquidate_isolated_position() (gas: 903884)
[PASS] test_liquidate_variable_borrow_no_fee() (gas: 849608)
[PASS] test_liquidate_variable_borrow_repro() (gas: 1030992)
[PASS] test_liquidate_variable_borrow_same_collateral_and_borrow() (gas: 671285)
[PASS] test_liquidation_when_grace_period_disabled(uint40) (runs: 1000, μ: 852283, ~: 852601)
Logs:
  Bound result 89

[PASS] test_liquidation_with_liquidation_grace_period_collateral_active(uint40) (runs: 1000, μ: 1009146, ~: 1012329)
Logs:
  Bound result 9888

[PASS] test_liquidation_with_liquidation_grace_period_debt_active(uint40) (runs: 1000, μ: 1009535, ~: 1012913)
Logs:
  Bound result 667

[PASS] test_liquidation_with_liquidation_grace_period_debt_collateral_active(uint40) (runs: 1000, μ: 1022421, ~: 1026153)
Logs:
  Bound result 6406

[PASS] test_partial_liquidate_atokens_variable_borrow() (gas: 863802)
[PASS] test_partial_liquidate_variable_borrow() (gas: 848142)
[PASS] test_reverts_liquidation_collateral_not_active() (gas: 622824)
[PASS] test_reverts_liquidation_hf_gt_liquidation_threshold() (gas: 446121)
[PASS] test_reverts_liquidation_invalid_borrow() (gas: 580979)
[PASS] test_reverts_liquidation_oracle_sentinel_on() (gas: 341431)
[PASS] test_reverts_liquidation_reserveInactive() (gas: 174783)
[PASS] test_reverts_liquidation_reservePaused() (gas: 141748)
[PASS] test_self_liquidate_position_shouldRevert() (gas: 667191)
Suite result: ok. 26 passed; 0 failed; 0 skipped; finished in 13.83s (13.80s CPU time)

Ran 22 tests for tests/gas/Pool.Operations.gas.t.sol:PoolOperations_gas_Tests
[PASS] test_borrow() (gas: 947385)
[PASS] test_borrow_onBehalfOf() (gas: 1029255)
[PASS] test_flashLoanSimple() (gas: 611844)
[PASS] test_flashLoan_with_one_asset() (gas: 741184)
[PASS] test_flashLoan_with_one_asset_with_borrowing() (gas: 1191556)
[PASS] test_flashLoan_with_two_assets() (gas: 1042853)
[PASS] test_flashLoan_with_two_assets_with_borrowing() (gas: 1929661)
[PASS] test_liquidationCall_deficit() (gas: 1372545)
[PASS] test_liquidationCall_deficitInAdditionalReserve() (gas: 1734233)
[PASS] test_liquidationCall_full() (gas: 1372612)
[PASS] test_liquidationCall_partial() (gas: 1358632)
[PASS] test_liquidationCall_receive_ATokens_full() (gas: 1343673)
[PASS] test_liquidationCall_receive_ATokens_partial() (gas: 1329457)
[PASS] test_mintToTreasury_one_asset() (gas: 992832)
[PASS] test_mintToTreasury_one_asset_zero_amount() (gas: 46569)
[PASS] test_mintToTreasury_two_assets() (gas: 1999676)
[PASS] test_mintToTreasury_two_assets_zero_amount() (gas: 54137)
[PASS] test_repay() (gas: 1314772)
[PASS] test_repay_with_ATokens() (gas: 1157453)
[PASS] test_supply() (gas: 1784493)
[PASS] test_withdraw() (gas: 807683)
[PASS] test_withdraw_with_active_borrows() (gas: 956317)
Suite result: ok. 22 passed; 0 failed; 0 skipped; finished in 86.84ms (47.28ms CPU time)

Ran 3 tests for tests/gas/Pool.OperationsComposition.gas.t.sol:PoolOperationsComposition_gas_Tests
[PASS] test_batchLiquidation() (gas: 2219869)
[PASS] test_repayAndWithdraw() (gas: 1295941)
[PASS] test_supplyAndBorrow() (gas: 659374)
Suite result: ok. 3 passed; 0 failed; 0 skipped; finished in 44.46ms (8.94ms CPU time)

Ran 43 tests for tests/protocol/pool/Pool.t.sol:PoolTests
[PASS] test_approvePositionManager_false() (gas: 42622)
[PASS] test_approvePositionManager_true() (gas: 49054)
[PASS] test_dropReserve() (gas: 96050)
[PASS] test_getBorrowLogic() (gas: 13740)
[PASS] test_getFlashLoanLogic() (gas: 13629)
[PASS] test_getLiquidationLogic() (gas: 13674)
[PASS] test_getPoolLogic() (gas: 13759)
[PASS] test_getSupplyLogic() (gas: 13692)
[PASS] test_getVirtualUnderlyingBalance() (gas: 359003)
[PASS] test_getters_getUserAccountData() (gas: 714988)
[PASS] test_mintToTreasury() (gas: 796039)
[PASS] test_mintToTreasury_skip_invalid_addresses() (gas: 800628)
[PASS] test_noop_approvePositionManager_true_when_already_is_activated() (gas: 54353)
[PASS] test_noop_setUserUseReserveAsCollateralOnBehalfOf_true_when_already_is_activated() (gas: 426838)
[PASS] test_noop_setUserUseReserveAsCollateral_true_when_already_is_activated() (gas: 257711)
[PASS] test_pool_defaultValues() (gas: 4964120)
[PASS] test_renouncePositionManager() (gas: 38488)
[PASS] test_rescueTokens(uint256) (runs: 1000, μ: 81816, ~: 82058)
Logs:
  Bound result 59616407

[PASS] test_resetIsolationModeTotalDebt() (gas: 839096)
[PASS] test_revert_setUserEModeOnBehalfOf_not_position_manager(address) (runs: 1000, μ: 212580, ~: 212580)
[PASS] test_reverts_impl_initialize() (gas: 4377700)
[PASS] test_reverts_initReserve_not_poolConfigurator(address) (runs: 1000, μ: 24972, ~: 24972)
[PASS] test_reverts_modifiers_not_poolConfigurator(address) (runs: 1000, μ: 98915, ~: 98915)
[PASS] test_reverts_new_Pool_invalidAddressesProvider() (gas: 4477865)
[PASS] test_reverts_setUserEmode_0_bad_hf() (gas: 955029)
[PASS] test_reverts_setUserUseReserveAsCollateralOnBehalfOf_caller_not_position_manager(address) (runs: 1000, μ: 405666, ~: 405666)
[PASS] test_reverts_setUserUseReserveAsCollateral_false_hf_lower_lqt() (gas: 705533)
[PASS] test_reverts_setUserUseReserveAsCollateral_true_ltv_zero() (gas: 274077)
[PASS] test_reverts_setUserUseReserveAsCollateral_true_reserve_inactive() (gas: 186044)
[PASS] test_reverts_setUserUseReserveAsCollateral_true_reserve_paused() (gas: 265111)
[PASS] test_reverts_setUserUseReserveAsCollateral_true_user_balance_zero() (gas: 50034)
[PASS] test_reverts_setUserUseReserveAsCollateral_true_user_isolation_mode() (gas: 894300)
[PASS] test_setLiquidationGracePeriod(uint40) (runs: 1000, μ: 36586, ~: 36668)
[PASS] test_setLiquidationGracePeriod_assetNotListed(uint40) (runs: 1000, μ: 26544, ~: 26544)
[PASS] test_setUserEModeOnBehalfOf() (gas: 244519)
[PASS] test_setUserEmode() (gas: 218115)
[PASS] test_setUserEmode_twice() (gas: 356229)
[PASS] test_setUserEmode_twice_inconsistent_category() (gas: 961163)
[PASS] test_setUserUseReserveAsCollateralOnBehalfOf_false() (gas: 393819)
[PASS] test_setUserUseReserveAsCollateralOnBehalfOf_true() (gas: 420988)
[PASS] test_setUserUseReserveAsCollateral_false() (gas: 219552)
[PASS] test_setUserUseReserveAsCollateral_true() (gas: 251960)
[PASS] test_updateBridgeProtocolFee() (gas: 253)
Suite result: ok. 43 passed; 0 failed; 0 skipped; finished in 1.92s (1.89s CPU time)

Ran 22 tests for tests/protocol/configuration/PoolAddressesProvider.t.sol:PoolAddressesProviderTests
[PASS] test_PoolDataProvider_changeContract() (gas: 1526240)
[PASS] test_getter_getMarketId() (gas: 1488924)
[PASS] test_new_PoolAddressesProvider() (gas: 1498177)
[PASS] test_reverts_setAddressAsProxy_notAuth() (gas: 1502343)
[PASS] test_reverts_setAddress_noAuth() (gas: 1507539)
[PASS] test_reverts_setters_notOwner() (gas: 1505033)
[PASS] test_setACLManager_changeContract() (gas: 3067366)
[PASS] test_setACLManager_setACLAdmin() (gas: 2301622)
[PASS] test_setAddress() (gas: 1516437)
[PASS] test_setAddressAsProxy_new_proxy() (gas: 2096171)
[PASS] test_setAddressAsProxy_upgrade_proxy() (gas: 2228513)
[PASS] test_setAddress_updateAddress() (gas: 1525575)
[PASS] test_setPoolConfiguratorImpl() (gas: 6616637)
[PASS] test_setPoolConfiguratorImpl_upgrade() (gas: 11047460)
[PASS] test_setPoolDataProvider() (gas: 1516824)
[PASS] test_setPoolImpl() (gas: 7091458)
[PASS] test_setPoolImpl_upgrade() (gas: 11521750)
[PASS] test_setPriceOracle() (gas: 1516981)
[PASS] test_setPriceOracleSentinel() (gas: 1516852)
[PASS] test_setPriceOracleSentinel_changeContract() (gas: 1526317)
[PASS] test_setPriceOracle_changeContract() (gas: 1526578)
[PASS] test_setter_setMarketId() (gas: 1500043)
Suite result: ok. 22 passed; 0 failed; 0 skipped; finished in 41.58ms (11.87ms CPU time)

Ran 22 tests for tests/protocol/pool/pool-configurator/PoolConfigurator.ACLModifiers.t.sol:PoolConfiguratorACLModifiersTest
[PASS] test_reverts_disableLiquidationGracePeriod_on_unauth(address,address) (runs: 1000, μ: 38166, ~: 38166)
[PASS] test_reverts_notAdmin_dropReserve(address) (runs: 1000, μ: 35649, ~: 35649)
[PASS] test_reverts_notAdmin_initReserves((uint8,string,string,string,string,address,address,address,bool),address) (runs: 1000, μ: 1126171, ~: 1126243)
Logs:
  Bound result 19

[PASS] test_reverts_notAdmin_setReserveActive(address) (runs: 1000, μ: 35798, ~: 35798)
[PASS] test_reverts_notAdmin_updateAToken(address) (runs: 1000, μ: 34653, ~: 34653)
[PASS] test_reverts_notAdmin_updateFlashLoanPremiumTotal(address) (runs: 1000, μ: 33586, ~: 33586)
[PASS] test_reverts_notAdmin_updateVariableDebtToken(address) (runs: 1000, μ: 34540, ~: 34540)
[PASS] test_reverts_notRiskAdmin_configureReserveAsCollateral(address) (runs: 1000, μ: 38186, ~: 381...*[Comment body truncated]*

@github-actions
Copy link
Contributor

github-actions bot commented Dec 9, 2025

♻️ Forge Gas Snapshots

Path Value
snapshots/AToken.transfer.json
full amount; receiver: ->enableCollateral ↓18% (-25228) 113,749
full amount; receiver: ->enableCollateral; transferFrom ↓18% (-27034) 123,060
full amount; sender: ->disableCollateral; ↓1% (-616) 96,766
full amount; sender: ->disableCollateral; receiver: ->enableCollateral ↓18% (-25228) 113,866
full amount; sender: ->disableCollateral; receiver: ->enableCollateral; transferFrom ↓18% (-27034) 123,177
full amount; sender: ->disableCollateral; receiver: dirty, ->enableCollateral ↓10% (-13276) 113,866
full amount; sender: ->disableCollateral; receiver: dirty, ->enableCollateral; transferFrom ↓11% (-15082) 123,177
full amount; sender: ->disableCollateral; transferFrom ↓2% (-2422) 106,077
full amount; sender: collateralDisabled ↓1% (-616) 96,649
full amount; sender: collateralDisabled; transferFrom ↓2% (-2422) 105,960
partial amount; sender: collateralDisabled; ↓1% (-616) 96,625
partial amount; sender: collateralDisabled; receiver: ->enableCollateral ↓18% (-25228) 113,725
partial amount; sender: collateralDisabled; receiver: ->enableCollateral; transferFrom ↓19% (-27034) 118,236
partial amount; sender: collateralDisabled; transferFrom ↓2% (-2422) 101,136
partial amount; sender: collateralEnabled; ↓1% (-616) 96,833
partial amount; sender: collateralEnabled; receiver: ->enableCollateral ↓18% (-25228) 113,933
partial amount; sender: collateralEnabled; receiver: ->enableCollateral; transferFrom ↓19% (-27034) 118,444
partial amount; sender: collateralEnabled; transferFrom ↓2% (-2422) 101,344
snapshots/ATokenWithDelegation.transfer.json
full amount; sender: with delegations, ->disableCollateral; receiver: without delegations, ->enableCollateral ↓16% (-25250) 133,137
full amount; sender: with delegations, delegatee, ->disableCollateral; receiver: with delegations, delegatee, ->enableCollateral ↓16% (-25250) 129,075
full amount; sender: with delegations, not delegatee, ->disableCollateral; receiver: with delegations, not delegatee, ->enableCollateral ↓16% (-25250) 129,075
full amount; sender: without delegations, ->disableCollateral; receiver: with delegations, ->enableCollateral ↓18% (-25250) 116,037
full amount; sender: without delegations, delegatee, ->disableCollateral; receiver: without delegations, delegatee, ->enableCollateral ↓17% (-25250) 120,100
full amount; sender: without delegations, not delegatee, ->disableCollateral; receiver: without delegations, not delegatee, ->enableCollateral ↓17% (-25250) 120,100
snapshots/Pool.Getters.json
getEModeCategoryCollateralConfig ↑1% (+44) 8,001
getEModeCategoryData ↑0% (+44) 11,054
getLiquidationGracePeriod ↓1% (-45) 7,759
getReserveData ↓0% (-45) 29,730
getUserAccountData: supplies: 0, borrows: 0 ↑0% (+44) 20,383
getUserAccountData: supplies: 0, borrows: 0 with eMode enabled ↑0% (+44) 20,383
getUserAccountData: supplies: 1, borrows: 0 ↑1% (+278) 55,292
getUserAccountData: supplies: 1, borrows: 0 with eMode enabled ↑5% (+2833) 60,593
getUserAccountData: supplies: 2, borrows: 0 ↑1% (+485) 84,512
getUserAccountData: supplies: 2, borrows: 0 with eMode enabled ↑4% (+3790) 90,667
getUserAccountData: supplies: 2, borrows: 1 ↑0% (+294) 115,201
getUserAccountData: supplies: 2, borrows: 1 with eMode enabled ↑3% (+3600) 121,357
snapshots/Pool.Operations.json
borrow: first borrow->borrowingEnabled ↓0% (-166) 250,206
borrow: first borrow->borrowingEnabled; onBehalfOf ↓2% (-6231) 256,476
borrow: recurrent borrow ↓0% (-167) 215,123
borrow: recurrent borrow; onBehalfOf ↓3% (-6242) 216,605
flashLoan: flash loan for one asset ↓0% (-1) 162,244
flashLoan: flash loan for one asset and borrow ↑0% (+45) 267,567
flashLoan: flash loan for two assets ↓0% (-46) 257,198
flashLoan: flash loan for two assets and borrow ↑0% (+304) 462,702
flashLoanSimple: simple flash loan ↓0% (-1) 138,142
liquidationCall: deficit on liquidated asset ↓0% (-152) 352,245
liquidationCall: deficit on liquidated asset + other asset ↓0% (-364) 437,870
liquidationCall: full liquidation ↓0% (-152) 352,245
liquidationCall: full liquidation and receive ATokens ↓8% (-26417) 323,283
liquidationCall: partial liquidation ↓0% (-152) 343,150
liquidationCall: partial liquidation and receive ATokens ↓8% (-26417) 314,188
mintToTreasury: one asset with non zero amount ↑0% (+44) 100,355
mintToTreasury: one asset with zero amount ↑0% (+44) 35,781
mintToTreasury: two assets with non zero amount ↑0% (+44) 160,659
mintToTreasury: two assets with zero amount ↑0% (+44) 41,020
repay: full repay ↑0% (+22) 161,792
repay: full repay with ATokens ↑0% (+22) 163,619
repay: partial repay ↑0% (+22) 158,144
repay: partial repay with ATokens ↑0% (+229) 178,178
supply: collateralDisabled ↑2% (+2568) 141,657
supply: collateralEnabled ↑2% (+2568) 141,657
supply: first supply->collateralEnabled ↑2% (+2967) 171,574
withdraw: full withdraw ↓0% (-43) 155,362
withdraw: partial withdraw ↓0% (-43) 172,118
withdraw: partial withdraw with active borrows ↑0% (+38) 220,715
snapshots/Pool.OperationsComposition.json
batchLiquidate: liquidate 2 users ↓0% (-260) 486,045
repayAndWithdraw: borrow disabled, collateral disabled ↑0% (+23) 290,193
supplyAndBorrow: first supply->collateralEnabled, first borrow ↑0% (+855) 378,449
snapshots/Pool.Setters.json
setUserEMode: enter eMode, 1 borrow, 1 supply ↑2% (+2522) 137,560
setUserEMode: leave eMode, 1 borrow, 1 supply ↑2% (+2004) 109,680
setUserEModeOnBehalfOf: enter eMode, 1 borrow, 1 supply ↑2% (+2501) 140,361
setUserEModeOnBehalfOf: leave eMode, 1 borrow, 1 supply ↑2% (+1983) 112,481
setUserUseReserveAsCollateral: disableCollateral, 1 supply ↓0% (-17) 46,344
setUserUseReserveAsCollateral: enableCollateral, 1 supply ↑1% (+408) 81,062
setUserUseReserveAsCollateralOnBehalfOf: disableCollateral, 1 supply ↑0% (+72) 49,223
setUserUseReserveAsCollateralOnBehalfOf: enableCollateral, 1 supply ↑1% (+497) 83,941
snapshots/ProtocolDataProvider.json
getATokenTotalSupply ↓0% (-90) 29,990
getAllATokens ↓0% (-91) 63,750
getAllReservesTokens ↑0% (+44) 43,116
getFlashLoanEnabled ↓1% (-65) 11,281
getInterestRateStrategyAddress ↑0% (+44) 8,855
getLiquidationProtocolFee ↓1% (-65) 11,308
getPaused ↓1% (-65) 11,397
getReserveCaps ↓1% (-65) 11,318
getReserveConfigurationData ↓1% (-65) 11,754
getReserveDeficit ↑0% (+44) 11,017
getReserveTokensAddresses ↓0% (-1) 14,933
getSiloedBorrowing ↓1% (-65) 11,334
getTotalDebt ↓0% (-90) 29,990
getUserReserveData ↓0% (-66) 70,439
getVirtualUnderlyingBalance ↑0% (+44) 11,188
snapshots/StataTokenV2.json
deposit ↑1% (+2843) 277,676
depositATokens ↓12% (-27124) 194,310
redeem ↓0% (-154) 197,017
redeemAToken ↓17% (-25481) 121,660
snapshots/WrappedTokenGatewayV3.json
borrowETH ↓3% (-6063) 233,444
depositETH ↑2% (+2933) 197,958
repayETH ↑0% (+177) 179,306
withdrawETH ↓4% (-10725) 237,334
🔕 Unchanged
Path Value
snapshots/ProtocolDataProvider.json
getIsVirtualAccActive 463
getUnbackedMintCap 413
snapshots/StataTokenV2.json
claimRewards 359,625

sakulstra and others added 4 commits December 10, 2025 15:56
foundry improved a lot in regards to verification, so catapulta-verify is no longer strictly necessary.
People can still install it and use it for verification, but there is no need to install by default.
The default usage on makefile was removed some releases ago and dependency was a leftover.
avara asked to make the ui-pdp backwards compatible with 3.5 to support horizon
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants