Skip to content

Conversation

@sakulstra
Copy link
Contributor

@sakulstra sakulstra commented Jun 10, 2025

Aave v3.4 protocol

sakulstra and others added 20 commits April 23, 2025 15:14
## Aave v3.4 features

Aave v3.4 is an upgrade to be applied on top of Aave 3.3.
The focus on this release is on **UX improvements** and **code simplification** while at the same time preparing the protocol for an upcoming 3.5 that is already well in progress.

## Features

### GHO alignment

The Aave-GHO integration currently relies on various special cases, which make reasoning about the protocol harder than it should be.
This special cases range from inconsistencies in balance handling, different management of debt accrual, the inability to flashloan to the discount model applied on top.

With the introduction of [Umbrella](https://governance.aave.com/t/bgd-aave-safety-module-umbrella/18366) and the [GHODirectMinter](https://github.com/bgd-labs/GHODirectMinter) it is time to deprecate the current implementation and to align it with the rest of the protocol.

**aGHO**

`aGHO` on the current Aave Core instance is a special implementation that has very little in common with other aTokens. Its main purpose is to trigger various hooks on actions.
These inconsistencies materialize in a different utilization model, the inability to flashloan GHO and other minor quirks.

**vGHO**

`vGHO` while working similar to a usual `vToken` also has some special mechanics which lead to complications and have been the source of various bugs. In contrast to usual `vTokens` the debt does not accrue as interest on the aToken (as aToken totalSupply is always 0), but instead accrues only on the `vToken` and is collected on repayment. This is done in order to support the discount model, but when analyzing onchain data, it became apparent that only a very small userbase ever made use of the GHO discount. Therefore, we think it is rational to drop it.

If a discount model is still desired, it could still be achieved on top via rewards.
One option could be to use Merkle (e.g. via merit) if the goal is to only reward GHO borrowers.
Another option could be to simply distribute GHO rewards to all stkAAVE users.

---

Therefore, what we propose is to align GHO on core with GHO on prime.
In practice that means that GHO will work exactly as every other ERC20 listed on Aave, with the caveat that the supply is directly minted to the protocol.
Opposed to GHO on prime:

- The IR should be static (as it currently is)
- The supply cap should be set, so that no user can supply GHO

With this alignment, various complexities and special cases from the protocol are permanently removed:

- All reserves will have virtual accounting enabled
- Burning bad debt no longer relies on special logic that discounts protocol fee in some special cases
- GHO flashloans are enabled, eliminating the need for custom adapters, and in most cases making the flash-mint obsolete
- Debt now directly accrues to the treasury as aTokens, not only on repayment improving the treasury accounting
- `balanceOf(user) == scaledBalanceOf(user) / normalizedDebt` (like on every other reserve)
- Umbrella does no longer need special handling for GHO

This alignment comes with a huge reduction in code complexity, and gas consumption, paving the way for faster and less complicated iteration on the protocol & integrations.

### Multicall

Being able to batch multiple transactions has been a frequently requested feature on the aave protocol.
This functionality can greatly improve ux as it allows users to e.g. supply & enable an eMode & borrow in a single transaction.
In addition to that being able to permit a separate entity to execute transactions on my behalf opens new use-cases & the possibility of transaction subsidies.
Therefore Aave v3.4 ships with multicall support.

### Position manager

When talking to various integrators after the release of Aave v3.2 it became apparent that one important ux feature that is currently missing is the ability for contracts to:

- enable/disable a collateral
- enter/switch an eMode

on behalf of a user. Therefore Aave 3.4 introduces the concept of "positionManagers" - addresses that can perform `setUserUseReserveAsCollateralOnBehalfOf & setUserEModeOnBehalfOf` once given approval by a user.
The user can give & revoke an approval by calling `approvePositionManager(address manager, bool approve)`. A position manager can renounce the role by calling `renouncePositionManagerRole(address user)`. All methods are noops in case the current state is already the desired state.

### Removal of "unbacked"

Unbacked supply was part of a feature called `Portals` on the original aave-v3 release post.
Eventually the feature was never used, but occupies an important amount of contract size while also costing gas on most transactions.
Therefore, in this version of the protocol we decided to drop the feature to make room for other improvements.

The feature might be added back in a future iteration if a use-case emerges and/or code-size becomes less of a concern(e.g. via Fusaka/eof).

### Immutable Interest Strategy on Pool implementation

While all reserves **already** share the same `interestRateStrategy`, in Aave v3.3 the strategy was defined per reserve which led to one unnecessary sload per touched reserve(s).
Therefore, in Aave v3.4 one immutable variable `RESERVE_INTEREST_RATE_STRATEGY` was added to the `Pool` contract. It will be used as an IR address for each reserve in Aave v3.4.
This variable will be set in the constructor of the implementation contract.

### Immutable rewardsController on AToken / VariableDebtToken implementation

While all reserves **already** share the same `incentivesController`, in Aave v3.3 the incentivesController was defined in a state per token, which leads to unnecessary sloads per touched reserve(s).
Therefore, in Aave v3.4 one immutable variable `REWARDS_CONTROLLER` was introduced on the `IncentivizedERC20` base class.
This variable will be set in the constructor of the implementation contract.

### Immutable Pool on ProtocolDataProvider

A new immutable variable POOL was added at the AaveProtocolDataProvider contract. All external calls to ADDRESSES_PROVIDER.getPool() were replaced with an access to the immutable variable.
This results in meaningful gas savings across the board.

### Immutable Treasury on aToken

Currently, the treasury on each aToken is stored in storage, although it is the same for each aToken - even across pools.
This causes unnecessary storage reads on liquidations and mintToTreasury.
Therefore, in Aave 3.4 the treasury was moved to an immutable, which reduces gas cost on these methods.

### Changed implementation of aToken for UNI token in Mainnet Core pool

In the previous version the (implementation)[https://etherscan.io/address/0x21714092d90c7265f52fdfdae068ec11a23c6248] of (UNI aToken)[https://etherscan.io/address/0xF6D2224916DDFbbab6e6bd0D1B7034f4Ae0CaB18] has a function `delegateUnderlyingTo` for the Pool admin that allows to delegate voting power of aToken suppliers to some delegatee. In Aave 3.4 the implementation will be changed to a default one and the function will be removed.

### Errors

Aave has historically used `error codes` opposed to `Error` signatures, because there was a preference for `require(cond, error)` which did not support signatures.
As on Aave v3.4 the codebase was upgraded to solc 8.27, `require(cond, Error())` is now supported.
This greatly improves UX, as explorers and simulations now show helpful errors opposed to cryptic numeric Error codes.
At the same time, the change results in minor gas & codesize savings across the board.

While this change could be **breaking** for anyone relying on exact error codes, it is important to note that:

- Every single Aave release since v3.0 had breaking changes in regards to error emission (either due to new Errors or the order of Errors)
- We checked all the major integrations and did not find a single example of people relying on exact error codes

### Misc improvements

- Gas usage of `executeUseReserveAsCollateral` was greatly reduced by optimizing storage access
- Gas usage improved by shuffling `virtualUnderlyingBalance` into the position of pre 3.4 `unbacked`
- Minor codestyle improvements on `executeRepay`
- Usage of imported events from the interface contracts instead of redeclarations
- Skip unnecessary calculations on a subset of transfers
- Self-liquidation is now forbidden. While this is a breaking change, it's unlikely to affect anyone, as there are essentially no onchain traces of people relying on this functionality.
- SafeCast was upgraded from openzeppelin v4 to v5. The main difference is the usage of error signatures, reducing the codesize of various contracts.
- VersionedInitializable now bricks the initializer on the implementation, so implementations no longer have to be initialized in order to prevent malicious initialization.
- ScaledBalanceTokenBase changed the .balance storage from 128 to 120 bits. This was done in order to align storage across all tokens (currently on aAave on ethereum mainnet uses 120 bits storage)
- Now all fees from flash-loans are sent to the `RESERVE_TREASURY_ADDRESS` in the form of the underlying token. Also, the function `FLASHLOAN_PREMIUM_TO_PROTOCOL` in the `Pool` contract now always returns `100_00` value.
- Improved the accuracy and gas consumption of the `calculateCompoundedInterest` function without changing the formula. Inside calculations of the `second_term` and `third_term` variables now at first the function performs multiplications by `exp` and then divides by `SECONDS_PER_YEAR`. Previously it was the other way around, first there was division, then multiplication.

## Changelog

Solc was upgraded from `8.20` to `8.27`

- `Pool` contract:
  - Now has the second argument `IReserveInterestRateStrategy interestRateStrategy` in the constructor. It is a default IR contract that will be used for each reserve in the system.
  - Function `getReserveData` now doesn't read the `interestRateStrategyAddress` field from the `ReserveData` structure from the storage, now it reads the `RESERVE_INTEREST_RATE_STRATEGY` immutable variable.
  - Function `initReserve` that is called by the `PoolConfigurator` contract in the process of a new reserve token initialization:
    - Removed input argument `address interestRateStrategyAddress` because each reserve has the same IR contract
  - Removed the setter function `setReserveInterestRateStrategyAddress`. There is no need in this function from now on.
  - Removed `mintUnbacked`, `backUnbacked` and `getBridgeLogic`
  - Implements openzeppelin `Multicall, ERC2771Context`
  - The function `FLASHLOAN_PREMIUM_TO_PROTOCOL` now always returns `100_00` value.
  - The function `updateFlashloanPremiums` is renamed to the `updateFlashloanPremium` function and now accepts only one argument - only total flash-loan premium.
- `PoolInstance` contract:
  - Changed the `POOL_REVISION` public constant value from `6` to `7`.
- `AaveProtocolDataProvider` contract:
  - Made some minor gas optimizations in the `getInterestRateStrategyAddress` function.
  - `getIsVirtualAccActive is deprecated and always returns true.
  - Added a new immutable variable POOL into the contract and in the IPoolDataProvider interface too
- `ReserveLogic` library:
  - In the function `updateInterestRatesAndVirtualBalance` the variable `interestRateStrategyAddress` is now read from the `RESERVE_INTEREST_RATE_STRATEGY` immutable variable instead of the storage.
- `ConfiguratorLogic` library:
  - Function `executeInitReserve` that is called inside of the `PoolConfigurator` contract in the process of a new reserve token initialization:
    - The variable `interestRateStrategyAddress` now is taken from return values of the `initReserve` function in the `Pool` contract. Previously it was taken from the `InitReserveInput` structure that was passed by a caller, but now this structure doesn't have this field (this structure was changed too).
- `PoolConfigurator` contract:
  - Function `setReserveInterestRateStrategyAddress` was deleted because now every reserve in the system has the same IR contract.
  - Function `initReserves` that accepts an array of `InitReserveInput` structs, no longer has a `interestRateStrategyAddress` field.
  - Removed `setUnbackedMintCap` as unbacked is no longer a thing.
- `ReserveDataLegacy` and `ReserveData` structures:
  - Field `interestRateStrategyAddress` is new deprecated.
- `InitReserveInput` structure:
  - Removed the `interestRateStrategyAddress` field because each reserve in the system has the same IR contract.
- `AToken` & `VariableDebtToken`:
  - The `IncentivizedERC20` token base now exposes a new `REWARDS_CONTROLLER`, while also maintaining `getIncentivesController` for backwards compatibility.
  - `setIncentivesController` was removed as the incentives controller is no longer mutable,
  - The initialize no longer accepts a `incentivesController`, but the constructor now accepts a `rewardsController`
  - `handleRepayment` was removed as it was only required for GHO and is now a noop
  - The aToken receives a public `TREASURY` immutable
  - The initialize no longer accepts a `treasury`
- `LiquidationLogic` contract:
  - rename "user" was renamed to "borrower", to increase the precision on the wording.
  - [BREAKING]: self-liquidation is no longer allowed
- `PoolLogic` contract:
  - The `PoolLogic` contract was extended with two methods `executeSyncIndexesState` & `executeSyncRatesState`, which simply replicate what was previously on the Pool itself. This is done to free some code-space on the pool itself.
- `FlashLoanLogic` library:
  - Now all fees from flash-loans are sent to the `RESERVE_TREASURY_ADDRESS`.
- `MathUtils` library:
  - The `calculateCompoundedInterest` function was improved to be more accurate and gas efficient without changing the formula.

## Migration path

For users of the protocol, **no migration is needed**.
As the protocol upgrade path is slightly more complicated than in previous upgrades, this section describes the upgrade path for various of the introduced features.

### Protocol

#### GHO migration

As the current `aGHO` acts as both he aToken and the GHO facilitator, the migration can be perceived as two-step process: 1) the migration of the facilitator 2) the alignment of behavior.

In practice, the following steps will be performed on the proposal:

1. Calling `aToken.distributeFeesToTreasury()` to distribute pending fees to the treasury.
2. The GHO `aToken` instance is updated with a custom implementation that offers a `resolveFacilitator(uint256 amount)` function that allows burning `GHO`.
3. A new [GHODirectMinter](https://github.com/bgd-labs/GHODirectMinter) is registered as a facilitator(NF) with the same `capacity` as the existing `aToken facilitator`(AF).
4. The NF, does mint the current `aToken facilitator level` and supply it as aTokens on the Pool.
5. `resolveFacilitator` is called, burning `level` amount of `GHO`
6. With the GHO being burned, the `level` of AF is reduced to 0, so it can now be safely removed via `GHO.removeFacilitator`
7. The `pool`, `configurator`, `aToken` and `vToken` are now being updated to v3.4, which will result in `virtualAccounting` being enabled for GHO.
8. Now the `reserveFactor` is increased from 0 to 100% and the `supplyCap` is set to `1`
9. `vGHO` is upgraded to align with the default implementation + an `updateDiscountDistribution` noop.

_Note: The cap limitation is in place to prevent users from accidentally supplying GHO(as it is no collateral and there is a 100% reserve factor, it would never be intentional)._
_Note: The GHO vToken, while being 100% compatible with the default implementation, will contain an `updateDiscountDistribution` noop so that there are no issues with the stkAAVE transfer hook._
_Note: The pending discount for users will be lost on the upgrade. Therefore we recommend for a DAO related service (e.g. Dolce Vita) to iterate all discounted GHO borrowers and repay 1 wei of GHO on behalf to apply the discount one last time, slightly before proposal execution._
_Note: **Umbrella** can be simplified as there no longer is a special path for coverage with assets that don't have `virtualAccounting` enabled._

#### Emit deprecated events

The `PoolConfigurator` contract should emit the `FlashloanPremiumToProtocolUpdated` event in the migration. This event was deprecated, now the `FLASHLOAN_PREMIUM_TO_PROTOCOL` function always returns `100_00` value. The emit should contain these values:

- `oldFlashloanPremiumToProtocol`: the old value of the `FLASHLOAN_PREMIUM_TO_PROTOCOL` function.
- `newFlashloanPremiumToProtocol`: value `100_00`.

#### Virtual accounting

As virtual accounting is now always active, fetching `getIsVirtualAccActive` is becoming obsolete.
That said, upon investigating existing contracts we noticed that there are various instances of people hard-coding the `PoolDataProvider` or directly decoding `configuration.getIsVirtualAccActive`.
To maintain compatibility with these contracts, the boolean flag will be carried in the configuration for the upcoming version(s).

#### Storage optimization

As the storage slot of `virtualUnderlyingBalance` was moved, the Pool initializer will copy the value from the deprecated `__deprecatedVirtualUnderlyingBalance` slot to the new `virtualUnderlyingBalance` slot.

There are no user-facing changes related to this change.

#### Misc

In addition to the points mentioned above, the upgrade should upgrade

- all logic libraries as the InterestRate is now passed as a parameter instead of being fetched from storage.
- all tokens, due to changes from storage to immutables
- the pool configurator, to account for the changed signatures
- the config engine, as the signature of token initialization changed

### Integrators

#### GHO FlashMinter

The `GHO FlashMinter` is not affected by the upgrade.
That said, for contracts that rely on flashloans, GHO no longer needs to be handled as a special case - GHO can be flashloaned as any other asset. This makes contracts like the custom `GHO Debt Swap` obsolete.

#### PositionManager

When currently supplying(via transfer of supply) aToken to a user they **might** enable as collateral.
There are certain scenarios in which they don't. For a future version 3.5 we are considering changing this behavior, therefore we recommend migrating to the more explicit positionManager/multicall approach.

Instead of assuming that an asset will be enabled as collateral, for interactions on your own behalf, do `multiCall([supply, enableAsCollateral])` for interactions on behalf of another entity, use the position manager functionality (`approvePositionManager` + `supply, enableAsCollateralOnBehalf`).
this is not an issue as it's by definition an unreachable state - for a reserve to be not active is must not have any borrowers.
Still it makes sense to fix the code.
on the 3.4 stermi pointed out that the check for supply != 0 is especially unnecessary when disabeling an asset as collateral.
@github-actions
Copy link
Contributor

github-actions bot commented Jun 10, 2025

Forge Build Sizes

Contract Runtime Size (B) Initcode Size (B) Runtime Margin (B) Initcode Margin (B)
ACLManager 3,493 ↓3% (-137) 3,971 21,083 ↑0% (+137) 45,181
ATokenHandler ↓0% (-9) 9,960 ↓0% (-29) 10,680 ↑0% (+9) 14,616 ↑0% (+29) 38,472
ATokenInstance ↓1% (-148) 10,014 ↑0% (+48) 11,107 ↑1% (+148) 14,562 ↓0% (-48) 38,045
ATokenMock 803 ↓1% (-6) 961 23,773 ↑0% (+6) 48,191
AaveOracle ↓5% (-141) 2,466 ↓8% (-305) 3,462 ↑1% (+141) 22,110 ↑1% (+305) 45,690
AaveProtocolDataProvider ↓23% (-2193) 7,435 ↓20% (-2016) 7,893 ↑15% (+2193) 17,141 ↑5% (+2016) 41,259
AaveV3ConfigEngine ↑0% (+19) 7,897 ↓0% (-44) 9,426 ↓0% (-19) 16,679 ↑0% (+44) 39,726
AaveV3GettersBatchOne ↓17% (-40) 189 ↓31% (-10124) 22,551 ↑0% (+40) 24,387 ↑61% (+10124) 26,601
AaveV3GettersBatchTwo ↑38% (+52) 189 ↑73% (+7909) 18,744 ↓0% (-52) 24,387 ↓21% (-7909) 30,408
AaveV3HelpersBatchOne 353 ↓1% (-378) 35,476 24,223 ↑3% (+378) 13,676
AaveV3HelpersBatchTwo 229 ↓1% (-177) 30,885 24,347 ↑1% (+177) 18,267
AaveV3L2PoolBatch 137 ↓8% (-3606) 39,699 24,439 ↑62% (+3606) 9,453
AaveV3LibrariesBatch1 ↓9% (-32) 321 ↓32% (-10144) 21,169 ↑0% (+32) 24,255 ↑57% (+10144) 27,983
AaveV3LibrariesBatch2 ↓9% (-32) 321 ↓9% (-3853) 41,249 ↑0% (+32) 24,255 ↑95% (+3853) 7,903
AaveV3MiscBatch 137 ↓10% (-673) 6,160 24,439 ↑2% (+673) 42,992
AaveV3MockAssetEModeUpdate ↓0% (-11) 3,612 ↓0% (-11) 3,841 ↑0% (+11) 20,964 ↑0% (+11) 45,311
AaveV3MockBorrowUpdate ↓0% (-11) 3,507 ↓0% (-11) 3,699 ↑0% (+11) 21,069 ↑0% (+11) 45,453
AaveV3MockBorrowUpdateNoChange ↓0% (-11) 3,537 ↓0% (-11) 3,729 ↑0% (+11) 21,039 ↑0% (+11) 45,423
AaveV3MockCapUpdate ↓0% (-11) 3,451 ↓0% (-11) 3,643 ↑0% (+11) 21,125 ↑0% (+11) 45,509
AaveV3MockCollateralUpdate ↓0% (-11) 3,511 ↓0% (-11) 3,703 ↑0% (+11) 21,065 ↑0% (+11) 45,449
AaveV3MockCollateralUpdateCorrectBonus ↓0% (-11) 3,511 ↓0% (-11) 3,703 ↑0% (+11) 21,065 ↑0% (+11) 45,449
AaveV3MockCollateralUpdateNoChange ↓0% (-11) 3,538 ↓0% (-11) 3,730 ↑0% (+11) 21,038 ↑0% (+11) 45,422
AaveV3MockCollateralUpdateWrongBonus ↓0% (-11) 3,515 ↓0% (-11) 3,707 ↑0% (+11) 21,061 ↑0% (+11) 45,445
AaveV3MockEModeCategoryCreation ↓0% (-11) 3,903 ↓1% (-30) 4,182 ↑0% (+11) 20,673 ↑0% (+30) 44,970
AaveV3MockEModeCategoryUpdate ↓0% (-11) 3,368 ↓0% (-17) 3,500 ↑0% (+11) 21,208 ↑0% (+17) 45,652
AaveV3MockEModeCategoryUpdateEdgeBonus ↓0% (-11) 3,371 ↓0% (-17) 3,503 ↑0% (+11) 21,205 ↑0% (+17) 45,649
AaveV3MockEModeCategoryUpdateNoChange ↓0% (-11) 3,439 ↓0% (-17) 3,571 ↑0% (+11) 21,137 ↑0% (+17) 45,581
AaveV3MockListing ↓0% (-11) 3,791 ↓0% (-11) 4,020 ↑0% (+11) 20,785 ↑0% (+11) 45,132
AaveV3MockListingCustom ↓0% (-11) 4,084 ↓1% (-30) 4,393 ↑0% (+11) 20,492 ↑0% (+30) 44,759
AaveV3MockPriceFeedUpdate ↓0% (-11) 3,462 ↓0% (-11) 3,691 ↑0% (+11) 21,114 ↑0% (+11) 45,461
AaveV3MockRatesUpdate ↓0% (-11) 3,470 ↓0% (-11) 3,662 ↑0% (+11) 21,106 ↑0% (+11) 45,490
AaveV3ParaswapBatch 189 ↓1% (-191) 28,296 24,387 ↑1% (+191) 20,856
AaveV3PeripheryBatch 353 ↓2% (-680) 37,439 24,223 ↑6% (+680) 11,713
AaveV3PoolBatch 137 ↓9% (-3659) 38,399 24,439 ↑52% (+3659) 10,753
AaveV3SetupBatch ↓2% (-255) 11,437 ↑14% (+3448) 28,469 ↑2% (+255) 13,139 ↓14% (-3448) 20,683
AaveV3TestListing ↓29% (-2162) 5,170 ↓15% (-2273) 12,831 ↑13% (+2162) 19,406 ↑7% (+2273) 36,321
AaveV3TokensBatch 137 ↓3% (-564) 19,759 24,439 ↑2% (+564) 29,393
Actor ↑0% (+2) 945 ↑1% (+10) 1,757 ↓0% (-2) 23,631 ↓0% (-10) 47,395
AdminUpgradeabilityProxy ↑0% (+2) 1,546 ↓2% (-44) 2,458 ↓0% (-2) 23,030 ↑0% (+44) 46,694
AugustusRegistryMock 162 ↓1% (-2) 188 24,414 ↑0% (+2) 48,964
BaseAdminUpgradeabilityProxy ↑0% (+2) 1,538 ↑0% (+1) 1,566 ↓0% (-2) 23,038 ↓0% (-1) 47,586
BaseImmutableAdminUpgradeabilityProxy ↑0% (+2) 1,304 ↑0% (+2) 1,471 ↓0% (-2) 23,272 ↓0% (-2) 47,681
BaseUpgradeabilityProxy 108 ↓1% (-1) 134 24,468 ↑0% (+1) 49,018
BorrowEngine ↑1% (+13) 2,499 ↑0% (+12) 2,551 ↓0% (-13) 22,077 ↓0% (-12) 46,601
BorrowLogic ↓14% (-1807) 10,905 ↓14% (-1808) 10,957 ↑15% (+1807) 13,671 ↑5% (+1808) 38,195
BorrowingHandler ↑0% (+31) 13,616 ↑0% (+11) 14,336 ↓0% (-31) 10,960 ↓0% (-11) 34,816
CapsEngine ↑1% (+13) 1,149 ↑1% (+12) 1,201 ↓0% (-13) 23,427 ↓0% (-12) 47,951
CollateralEngine ↑0% (+13) 2,704 ↑0% (+12) 2,756 ↓0% (-13) 21,872 ↓0% (-12) 46,396
Collector 6,496 ↓0% (-6) 6,710 18,080 ↑0% (+6) 42,442
ConfiguratorLogic ↓9% (-527) 5,513 ↓9% (-528) 5,565 ↑3% (+527) 19,063 ↑1% (+528) 43,587
Create2Utils 121 ↓1% (-1) 171 24,455 ↑0% (+1) 48,981
DefaultReserveInterestRateStrategyV2 ↓11% (-423) 3,575 ↓12% (-534) 3,759 ↑2% (+423) 21,001 ↑1% (+534) 45,393
DeployUtils ↑0% (+3) 916 ↑0% (+2) 944 ↓0% (-3) 23,660 ↓0% (-2) 48,208
EIP712SigUtils ↑1% (+13) 1,576 ↑1% (+12) 1,628 ↓0% (-13) 23,000 ↓0% (-12) 47,524
EModeEngine ↑1% (+37) 6,397 ↑1% (+36) 6,449 ↓0% (-37) 18,179 ↓0% (-36) 42,703
EModeLogic ↓23% (-904) 3,048 ↓23% (-905) 3,100 ↑4% (+904) 21,528 ↑2% (+905) 46,052
ERC1967Proxy 122 ↑1% (+6) 973 24,454 ↓0% (-6) 48,179
ERC20 2,086 ↓2% (-51) 2,788 22,490 ↑0% (+51) 46,364
EmissionManager ↑1% (+46) 3,444 ↑1% (+46) 3,905 ↓0% (-46) 21,132 ↓0% (-46) 45,247
Errors (src/contracts/protocol/libraries/helpers/Errors.sol) ↓99% (-4616) 44 ↓98% (-4619) 94 ↑23% (+4616) 24,532 ↑10% (+4619) 49,058
FactoryDeployer 214 ↓0% (-1) 240 24,362 ↑0% (+1) 48,912
Faucet ↑0% (+5) 2,038 ↑0% (+5) 2,570 ↓0% (-5) 22,538 ↓0% (-5) 46,582
FlashLoanHandler ↓0% (-2) 8,940 ↓0% (-22) 9,660 ↑0% (+2) 15,636 ↑0% (+22) 39,492
FlashLoanLogic ↓13% (-1223) 8,281 ↓13% (-1224) 8,333 ↑8% (+1223) 16,295 ↑3% (+1224) 40,819
FlashloanAttacker ↑0% (+8) 1,610 ↑0% (+8) 2,034 ↓0% (-8) 22,966 ↓0% (-8) 47,118
InitializableAdminUpgradeabilityProxy ↑0% (+4) 2,392 ↑0% (+3) 2,420 ↓0% (-4) 22,184 ↓0% (-3) 46,732
InitializableImmutableAdminUpgradeabilityProxy ↑1% (+10) 1,863 ↑0% (+10) 2,030 ↓0% (-10) 22,713 ↓0% (-10) 47,122
InitializableUpgradeabilityProxy ↑1% (+8) 879 ↑1% (+7) 907 ↓0% (-8) 23,697 ↓0% (-7) 48,245
L2Encoder ↓4% (-146) 3,585 ↓4% (-146) 3,780 ↑1% (+146) 20,991 ↑0% (+146) 45,372
L2PoolInstance ↓3% (-681) 21,982 ↓2% (-490) 22,429 ↑36% (+681) 2,594 ↑2% (+490) 26,723
LendingHandler ↓0% (-5) 12,137 ↓0% (-25) 12,857 ↑0% (+5) 12,439 ↑0% (+25) 36,295
LiquidationDataProvider ↓0% (-18) 7,536 ↓0% (-31) 7,810 ↑0% (+18) 17,040 ↑0% (+31) 41,342
LiquidationHandler ↑0% (+28) 11,665 ↑0% (+8) 12,385 ↓0% (-28) 12,911 ↓0% (-8) 36,767
LiquidationLogic ↓13% (-1877) 13,009 ↓13% (-1878) 13,061 ↑19% (+1877) 11,567 ↑5% (+1878) 36,091
ListingEngine ↓3% (-236) 6,731 ↓3% (-237) 6,783 ↑1% (+236) 17,845 ↑1% (+237) 42,369
MetadataReporter ↓1% (-184) 12,326 ↓1% (-185) 12,354 ↑2% (+184) 12,250 ↑1% (+185) 36,798
MintableDelegationERC20 2,534 ↓2% (-52) 3,267 22,042 ↑0% (+52) 45,885
MintableERC20 ↑11% (+378) 3,729 ↑8% (+326) 4,626 ↓2% (-378) 20,847 ↓1% (-326) 44,526
Mock ↓1% (-1) 182 ↓1% (-3) 208 ↑0% (+1) 24,394 ↑0% (+3) 48,944
MockAggregator 134 ↓2% (-5) 273 24,442 ↑0% (+5) 48,879
MockAggregatorSetPrice 243 ↓1% (-5) 386 24,333 ↑0% (+5) 48,766
MockBadTransferStrategy ↓8% (-84) 914 ↓7% (-84) 1,103 ↑0% (+84) 23,662 ↑0% (+84) 48,049
MockERC20AaveLMUpgradeable ↑0% (+5) 7,937 ↑0% (+2) 8,152 ↓0% (-5) 16,639 ↓0% (-2) 41,000
MockERC4626StataTokenUpgradeable ↑0% (+17) 9,517 ↑0% (+3) 9,859 ↓0% (-17) 15,059 ↓0% (-3) 39,293
MockFlashLoanATokenReceiver ↓1% (-18) 2,378 ↓1% (-18) 2,756 ↑0% (+18) 22,198 ↑0% (+18) 46,396
MockFlashLoanReceiver (src/contracts/mocks/flashloan/MockFlashLoanReceiver.sol) ↑1% (+21) 2,237 ↑1% (+21) 2,522 ↓0% (-21) 22,339 ↓0% (-21) 46,630
MockFlashLoanReceiver (tests/invariants/helpers/FlashLoanReceiver.sol) ↑0% (+10) 2,034 ↑0% (+9) 2,062 ↓0% (-10) 22,542 ↓0% (-9) 47,090
MockFlashLoanReceiverWithoutMint ↑2% (+21) 1,234 ↑1% (+21) 1,518 ↓0% (-21) 23,342 ↓0% (-21) 47,634
MockFlashLoanSimpleReceiver ↑1% (+8) 1,484 ↑0% (+8) 1,769 ↓0% (-8) 23,092 ↓0% (-8) 47,383
MockIncentivesController 132 ↓1% (-1) 158 24,444 ↑0% (+1) 48,994
MockInitializableFromConstructorImple 349 ↑1% (+4) 643 24,227 ↓0% (-4) 48,509
MockInitializableImple ↑1% (+12) 1,556 ↑1% (+15) 1,591 ↓0% (-12) 23,020 ↓0% (-15) 47,561
MockInitializableImpleV2 ↑1% (+12) 1,558 ↑1% (+15) 1,593 ↓0% (-12) 23,018 ↓0% (-15) 47,559
MockInitializableV1 307 ↑1% (+3) 342 24,269 ↓0% (-3) 48,810
MockInitializableV2 309 ↑1% (+3) 344 24,267 ↓0% (-3) 48,808
MockL2Pool ↓3% (-681) 22,009 ↓2% (-425) 22,521 ↑36% (+681) 2,567 ↑2% (+425) 26,631
MockParaSwapAugustus 1,939 ↓0% (-1) 1,967 22,637 ↑0% (+1) 47,185
MockParaSwapAugustusRegistry 179 ↓2% (-6) 302 24,397 ↑0% (+6) 48,850
MockPeripheryContractV1 309 ↓0% (-1) 337 24,267 ↑0% (+1) 48,815
MockPeripheryContractV2 290 ↓0% (-1) 318 24,286 ↑0% (+1) 48,834
MockPoolInherited ↓4% (-759) 20,846 ↓2% (-520) 21,368 ↑26% (+759) 3,730 ↑2% (+520) 27,784
MockReentrantInitializableImple 413 ↑1% (+3) 448 24,163 ↓0% (-3) 48,704
MockReserveConfiguration ↓19% (-510) 2,142 ↓19% (-511) 2,170 ↑2% (+510) 22,434 ↑1% (+511) 46,982
MockReserveInterestRateStrategy ↓7% (-245) 3,070 ↓10% (-357) 3,257 ↑1% (+245) 21,506 ↑1% (+357) 45,895
MockScaledTestnetERC20 ↑9% (+378) 4,479 ↑6% (+316) 5,845 ↓2% (-378) 20,097 ↓1% (-316) 43,307
MockScaledToken ↓33% (-1320) 2,679 ↓26% (-1256) 3,505 ↑6% (+1320) 21,897 ↑3% (+1256) 45,647
MockSimpleFlashLoanReceiverWithoutMint ↑1% (+8) 754 ↑1% (+8) 1,037 ↓0% (-8) 23,822 ↓0% (-8) 48,115
MockVariableDebtToken (src/contracts/mocks/tokens/MockDebtTokens.sol) ↓2% (-168) 7,112 ↑0% (+13) 8,176 ↑1% (+168) 17,464 ↓0% (-13) 40,976
MockVariableDebtToken (src/contracts/mocks/upgradeability/MockVariableDebtToken.sol) ↓3% (-190) 7,090 ↓1% (-59) 8,104 ↑1% (+190) 17,486 ↑0% (+59) 41,048
Ownable (src/contracts/dependencies/openzeppelin/contracts/Ownable.sol) 629 ↓0% (-1) 721 23,947 ↑0% (+1) 48,431
ParaSwapLiquiditySwapAdapter ↑0% (+6) 8,151 ↓0% (-31) 9,238 ↓0% (-6) 16,425 ↑0% (+31) 39,914
ParaSwapRepayAdapter ↑0% (+1) 8,726 ↓0% (-37) 9,902 ↓0% (-1) 15,850 ↑0% (+37) 39,250
ParaSwapWithdrawSwapAdapter ↑0% (+18) 6,673 ↓0% (-19) 7,690 ↓0% (-18) 17,903 ↑0% (+19) 41,462
PercentageMathWrapper 297 ↓0% (-1) 325 24,279 ↑0% (+1) 48,827
PoolAddressesProvider ↑4% (+269) 6,965 ↑2% (+201) 8,251 ↓2% (-269) 17,611 ↓0% (-201) 40,901
PoolAddressesProviderRegistry ↓9% (-203) 1,946 ↓8% (-203) 2,407 ↑1% (+203) 22,630 ↑0% (+203) 46,745
PoolConfiguratorInstance ↓16% (-3143) 16,585 ↓16% (-3140) 16,620 ↑65% (+3143) 7,991 ↑11% (+3140) 32,532
PoolHandler ↓0% (-9) 12,234 ↓0% (-29) 12,954 ↑0% (+9) 12,342 ↑0% (+29) 36,198
PoolInstance ↓3% (-730) 20,686 ↓3% (-543) 21,129 ↑23% (+730) 3,890 ↑2% (+543) 28,023
PoolLogic ↑15% (+1028) 7,971 ↑15% (+1027) 8,023 ↓6% (-1028) 16,605 ↓2% (-1027) 41,129
PoolPermissionedHandler ↓2% (-250) 10,268 ↓2% (-270) 10,988 ↑2% (+250) 14,308 ↑1% (+270) 38,164
Pretty ↓0% (-1) 2,458 ↓0% (-2) 2,510 ↑0% (+1) 22,118 ↑0% (+2) 46,642
PriceFeedEngine ↑1% (+13) 1,544 ↑1% (+12) 1,596 ↓0% (-13) 23,032 ↓0% (-12) 47,556
PriceOracle 469 ↓0% (-1) 497 24,107 ↑0% (+1) 48,655
PriceOracleSentinel ↓8% (-139) 1,530 ↓7% (-139) 1,746 ↑1% (+139) 23,046 ↑0% (+139) 47,406
ProxyAdmin ↑1% (+8) 998 ↓0% (-1) 1,234 ↓0% (-8) 23,578 ↑0% (+1) 47,918
PullRewardsTransferStrategy ↓7% (-83) 1,172 ↓6% (-83) 1,398 ↑0% (+83) 23,404 ↑0% (+83) 47,754
RateEngine ↓3% (-70) 2,227 ↓3% (-71) 2,279 ↑0% (+70) 22,349 ↑0% (+71) 46,873
ReserveConfiguration 128 ↓1% (-1) 178 24,448 ↑0% (+1) 48,974
RevenueSplitter ↑1% (+11) 1,953 ↑0% (+11) 2,270 ↓0% (-11) 22,623 ↓0% (-11) 46,882
RewardsController ↓1% (-102) 13,965 ↓1% (-106) 14,155 ↑1% (+102) 10,611 ↑0% (+106) 34,997
SigUtils 492 ↓0% (-1) 544 24,084 ↑0% (+1) 48,608
SlotParser 330 ↓0% (-1) 382 24,246 ↑0% (+1) 48,770
StakeMock 355 ↓0% (-1) 383 24,221 ↑0% (+1) 48,769
StakedTokenTransferStrategy ↓4% (-88) 1,972 ↓3% (-88) 2,682 ↑0% (+88) 22,604 ↑0% (+88) 46,470
StataTokenFactory ↑0% (+8) 2,989 ↑0% (+8) 3,445 ↓0% (-8) 21,587 ↓0% (-8) 45,707
StataTokenV2 ↑0% (+4) 18,933 ↓0% (-20) 19,611 ↓0% (-4) 5,643 ↑0% (+20) 29,541
SupplyLogic ↓14% (-1724) 10,186 ↓14% (-1725) 10,238 ↑14% (+1724) 14,390 ↑5% (+1725) 38,914
TestERC20 ↑0% (+2) 3,948 ↓1% (-73) 5,125 ↓0% (-2) 20,628 ↑0% (+73) 44,027
TestnetERC20 ↑9% (+378) 4,359 ↑6% (+316) 5,717 ↓2% (-378) 20,217 ↓1% (-316) 43,435
TransparentProxyFactory ↓2% (-163) 6,667 ↓2% (-164) 6,695 ↑1% (+163) 17,909 ↑0% (+164) 42,457
TransparentUpgradeableProxy ↑1% (+8) 1,096 ↓2% (-54) 3,528 ↓0% (-8) 23,480 ↑0% (+54) 45,624
UiIncentiveDataProviderV3 ↑1% (+72) 9,118 ↑1% (+71) 9,146 ↓0% (-72) 15,458 ↓0% (-71) 40,006
UiPoolDataProviderV3 ↓0% (-25) 9,977 ↓0% (-38) 10,175 ↑0% (+25) 14,599 ↑0% (+38) 38,977
UpgradeabilityProxy 108 ↑1% (+6) 861 24,468 ↓0% (-6) 48,291
ValidationLogic 189 ↓1% (-2) 239 24,387 ↑0% (+2) 48,913
VariableDebtTokenHandler ↑1% (+8) 1,185 ↑0% (+8) 1,905 ↓0% (-8) 23,391 ↓0% (-8) 47,247
VariableDebtTokenHarness ↓3% (-188) 7,108 ↓1% (-57) 8,122 ↑1% (+188) 17,468 ↑0% (+57) 41,030
VariableDebtTokenInstance ↓3% (-188) 7,090 ↓1% (-97) 8,062 ↑1% (+188) 17,486 ↑0% (+97) 41,090
WETH9 1,886 ↓0% (-5) 2,352 22,690 ↑0% (+5) 46,800
WETH9Mock 2,641 ↓2% (-63) 3,812 21,935 ↑0% (+63) 45,340
WETH9Mocked 2,192 ↓0% (-5) 2,658 22,384 ↑0% (+5) 46,494
WadRayMathWrapper 816 ↓0% (-1) 844 23,760 ↑0% (+1) 48,308
WalletBalanceProvider ↓3% (-72) 2,485 ↓3% (-73) 2,513 ↑0% (+72) 22,091 ↑0% (+73) 46,639
WrappedTokenGatewayV3 5,387 ↓0% (-27) 6,252 19,189 ↑0% (+27) 42,900
BridgeLogic 6,747 6,800 17,829 42,352
Initializable (src/contracts/dependencies/openzeppelin/upgradeability/Initializable.sol) 21 47 24,555 49,105
MathUtilsWrapper 917 946 23,659 48,206
MockAToken 10,164 11,063 14,412 38,089
MockATokenRepayment 10,245 11,144 14,331 38,008
SafeCast (lib/solidity-utils/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol) 44 94 24,532 49,058
SafeCast (src/contracts/dependencies/openzeppelin/contracts/SafeCast.sol) 44 94 24,532 49,058
ATokenWithDelegationInstance 13,679 14,778 10,897 34,374
ATokenWithDelegationInstanceNext (tests/gas/ATokenWithDelegation.Transfer.gas.t.sol) 13,701 14,856 10,875 34,296
ATokenWithDelegationInstanceNext (tests/protocol/tokenization/ATokenDelegation.t.sol) 13,701 14,856 10,875 34,296
MockAToken (src/contracts/mocks/tokens/MockAToken.sol) 10,285 11,434 14,291 37,718
MockAToken (src/contracts/mocks/upgradeability/MockAToken.sol) 10,014 11,113 14,562 38,039
MockFlashLoanBorrowInsideFlashLoan 2,123 2,400 22,453 46,752
SafeCast 44 94 24,532 49,058
🔕 Unchanged
Contract Runtime Size (B) Initcode Size (B) Runtime Margin (B) Initcode Margin (B)
AaveV3BatchOrchestration 44 94 24,532 49,058
AaveV3DefaultRateStrategyProcedure 21 47 24,555 49,105
AaveV3GettersProcedureOne 21 47 24,555 49,105
AaveV3GettersProcedureTwo 21 47 24,555 49,105
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
AaveV3MiscProcedure 21 47 24,555 49,105
AaveV3OracleProcedure 21 47 24,555 49,105
AaveV3ParaswapProcedure 21 47 24,555 49,105
AaveV3PoolConfigProcedure 21 47 24,555 49,105
AaveV3PoolProcedure 21 47 24,555 49,105
AaveV3SetupProcedure 21 47 24,555 49,105
AaveV3TokensProcedure 21 47 24,555 49,105
AaveV3TreasuryProcedure 21 47 24,555 49,105
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
BaseHandler 147 866 24,429 48,286
BaseHooks 147 866 24,429 48,286
CalldataLogic 44 94 24,532 49,058
ConfiguratorInputTypes 44 94 24,532 49,058
Create2Factory 52 78 24,524 49,074
DataTypes 44 94 24,532 49,058
DefaultMarketInput 21 47 24,555 49,105
DeployPermit2 44 94 24,532 49,058
DonationAttackHandler 670 1,390 23,906 47,762
ECDSA 44 94 24,532 49,058
EModeConfiguration 44 94 24,532 49,058
ERC1967Utils 44 94 24,532 49,058
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
GPv2SafeERC20 44 94 24,532 49,058
GenericLogic 44 94 24,532 49,058
IsolationModeLogic 44 94 24,532 49,058
LiquidationHelper 44 94 24,532 49,058
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
Panic 44 94 24,532 49,058
PercentageMath 44 94 24,532 49,058
PoolStorage 21 47 24,555 49,105
PriceAggregatorHandler 485 1,205 24,091 47,947
PropertiesLibString 44 94 24,532 49,058
ProtocolAssertions 147 866 24,429 48,286
ProxyHelpers 44 94 24,532 49,058
ReserveLogic 44 94 24,532 49,058
RewardsDataTypes 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
SignedMath 44 94 24,532 49,058
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
UserConfiguration 44 94 24,532 49,058
WadRayMath 44 94 24,532 49,058
WalletMock 21 47 24,555 49,105

@github-actions
Copy link
Contributor

github-actions bot commented Jun 10, 2025

🌈 Test Results
No files changed, compilation skipped
2025-07-03T16:11:43.599470Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"

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 6.30ms (305.91µ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 3.13ms (306.49µs 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 3.34ms (503.91µs CPU time)

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 16.18ms (3.11ms CPU time)
2025-07-03T16:11:43.602800Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"

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 6.53ms (2.67ms 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: 610775)
[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 32.72ms (694.62µs CPU time)
2025-07-03T16:11:43.618736Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"
2025-07-03T16:11:43.631063Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"

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 31.83ms (961.65µs CPU time)
2025-07-03T16:11:43.663197Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"

Ran 18 tests for tests/gas/AToken.Transfer.gas.t.sol:ATokenTransfer_gas_Tests
[PASS] test_transferFrom_fullAmount() (gas: 642091)
[PASS] test_transferFrom_fullAmount_dirtyReceiver() (gas: 1072160)
[PASS] test_transferFrom_fullAmount_senderCollateralDisabled() (gas: 690912)
[PASS] test_transferFrom_fullAmount_senderCollateralDisabled_receiverNonZeroFunds() (gas: 1087204)
[PASS] test_transferFrom_fullAmount_senderCollateralDisabled_receiverNonZeroFunds2() (gas: 1038316)
[PASS] test_transferFrom_partialAmount() (gas: 691009)
[PASS] test_transferFrom_partialAmount_receiverNonZeroFunds() (gas: 1087271)
[PASS] test_transferFrom_partialAmount_senderCollateralEnabled() (gas: 646984)
[PASS] test_transferFrom_partialAmount_senderCollateralEnabled_receiverNonZeroFunds() (gas: 1043222)
[PASS] test_transfer_fullAmount() (gas: 591178)
[PASS] test_transfer_fullAmount_dirtyReceiver() (gas: 1021273)
[PASS] test_transfer_fullAmount_senderCollateralDisabled() (gas: 640024)
[PASS] test_transfer_fullAmount_senderCollateralDisabled_receiverNonZeroFunds() (gas: 1036355)
[PASS] test_transfer_fullAmount_senderCollateralDisabled_receiverNonZeroFunds2() (gas: 987533)
[PASS] test_transfer_partialAmount() (gas: 640159)
[PASS] test_transfer_partialAmount_receiverNonZeroFunds() (gas: 1036427)
[PASS] test_transfer_partialAmount_senderCollateralEnabled() (gas: 596091)
[PASS] test_transfer_partialAmount_senderCollateralEnabled_receiverNonZeroFunds() (gas: 992360)
Suite result: ok. 18 passed; 0 failed; 0 skipped; finished in 71.29ms (33.33ms CPU time)
2025-07-03T16:11:43.686651Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"

Ran 15 tests for tests/gas/ProtocolDataProvider.gas.t.sol:ProtocolDataProvider_gas_Tests
[PASS] test_getATokenTotalSupply() (gas: 40415)
[PASS] test_getDebtCeiling() (gas: 21703)
[PASS] test_getFlashLoanEnabled() (gas: 21803)
[PASS] test_getInterestRateStrategyAddress() (gas: 19259)
[PASS] test_getIsVirtualAccActive() (gas: 10877)
[PASS] test_getLiquidationProtocolFee() (gas: 21762)
[PASS] test_getPaused() (gas: 21854)
[PASS] test_getReserveCaps() (gas: 21788)
[PASS] test_getReserveConfigurationData() (gas: 22767)
[PASS] test_getReserveTokensAddresses() (gas: 25610)
[PASS] test_getSiloedBorrowing() (gas: 21858)
[PASS] test_getTotalDebt() (gas: 40437)
[PASS] test_getUnbackedMintCap() (gas: 10786)
[PASS] test_getUserReserveData() (gas: 525216)
[PASS] test_getVirtualUnderlyingBalance() (gas: 21488)
Suite result: ok. 15 passed; 0 failed; 0 skipped; finished in 40.37ms (2.25ms CPU time)
2025-07-03T16:11:43.702591Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"

Ran 10 tests for tests/protocol/tokenization/ATokenDelegation.t.sol:ATokenDelegationTest
[PASS] test_delegate() (gas: 397852)
[PASS] test_getDelegates() (gas: 131741)
[PASS] test_getPowersCurrent() (gas: 638817)
[PASS] test_getPowersCurrent_with_index_growth() (gas: 738770)
[PASS] test_initial_state_without_delegation() (gas: 47273)
[PASS] test_mint_and_burn() (gas: 2645224)
[PASS] test_precision() (gas: 1107197)
[PASS] test_transfer() (gas: 2347089)
[PASS] test_transferFrom() (gas: 2446688)
[PASS] test_transferOnLiquidation() (gas: 2165598)
Suite result: ok. 10 passed; 0 failed; 0 skipped; finished in 109.97ms (76.22ms CPU time)

Ran 17 tests for tests/invariants/CryticToFoundry.t.sol:CryticToFoundry
[PASS] test_replay_V33_supply() (gas: 2037193)
[PASS] test_replay_V33_transferFrom() (gas: 2483361)
[PASS] test_replay_v33_2repayWithAtokens() (gas: 2032493)
[PASS] test_replay_v33_2setUserEMode() (gas: 2533216)
[PASS] test_replay_v33_2transfer() (gas: 2044900)
[PASS] test_replay_v33_3liquidationCall() (gas: 2560583)
[PASS] test_replay_v33_assert_BORROWING_HSPOST_G() (gas: 2524430)
[PASS] test_replay_v33_borrow() (gas: 6259662)
[PASS] test_replay_v33_repayWithATokens() (gas: 2558152)
[PASS] test_replay_v33_setReserveActive() (gas: 2088536)
[PASS] test_replay_v33_supply() (gas: 2669153)
[PASS] test_v32_2_borrow() (gas: 2221307)
[PASS] test_v32_borrow() (gas: 2062297)
[PASS] test_v32_mintToTreasury() (gas: 2478397)
[PASS] test_v32_repay() (gas: 1931019)
[PASS] test_v32_setPoolPause() (gas: 4457653)
[PASS] test_v32_withdrawEchidna() (gas: 2049421)
Suite result: ok. 17 passed; 0 failed; 0 skipped; finished in 182.04ms (163.48ms CPU time)
2025-07-03T16:11:43.799472Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"

Ran 13 tests for tests/deployments/DeploymentsGasLimits.t.sol:DeploymentsGasLimits
[PASS] test0AaveV3SetupDeployment() (gas: 5310733)
[PASS] test10ConfigEngineDeployment() (gas: 7043465)
[PASS] test11StaticATokenDeployment() (gas: 6676133)
[PASS] test12PeripheralsTreasuryPartner() (gas: 7560610)
[PASS] test1AaveV3GettersBatch1Deployment() (gas: 4570271)
[PASS] test2AaveV3GettersBatch2Deployment() (gas: 3599146)
[PASS] test3AaveV3PoolDeployment() (gas: 7702516)
[PASS] test4AaveV3L2PoolDeployment() (gas: 7963025)
[PASS] test5PeripheralsRelease() (gas: 7071734)
[PASS] test6MiscDeployment() (gas: 1247701)
[PASS] test7ParaswapDeployment() (gas: 5160279)
[PASS] test8SetupMarket() (gas: 2670408)
[PASS] test9TokensMarket() (gas: 3760673)
Suite result: ok. 13 passed; 0 failed; 0 skipped; finished in 18.52ms (7.85ms CPU time)

Ran 15 tests for tests/protocol/tokenization/ATokenEdgeCases.t.sol:ATokenEdgeCasesTests
[PASS] testApprove() (gas: 45129)
[PASS] testApproveMax() (gas: 45188)
[PASS] testApproveWithZeroAddressSpender() (gas: 42171)
[PASS] testCheckGetters() (gas: 257896)
[PASS] testDecreaseAllowance() (gas: 53104)
[PASS] testIncreaseAllowance() (gas: 53214)
[PASS] testIncreaseAllowanceFromZero() (gas: 48456)
[PASS] testMintToTreasury_amount_zero() (gas: 15671)
[PASS] testTransferFromZeroAmount() (gas: 124591)
[PASS] test_burn_zeroAddress() (gas: 257292)
[PASS] test_mintToZeroAddress() (gas: 79992)
[PASS] test_reverts_burnAmountScaledZero() (gas: 19069)
[PASS] test_reverts_mintAmountScaledZero() (gas: 19163)
[PASS] test_transferFrom_zeroAddress_origin() (gas: 124402)
[PASS] test_transfer_amount_MAX_UINT_120() (gas: 16554)
Suite result: ok. 15 passed; 0 failed; 0 skipped; finished in 37.32ms (3.07ms CPU time)
2025-07-03T16:11:43.819545Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"
2025-07-03T16:11:43.832424Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"

Ran 8 tests for tests/protocol/tokenization/ATokenEvents.t.sol:ATokenEventsTests
[PASS] test_atoken_burnEvents_fullBalance() (gas: 525349)
[PASS] test_atoken_burnEvents_multipleWithdrawals_withInterests() (gas: 611281)
[PASS] test_atoken_burnEvents_singleWithdraw_WithInterests() (gas: 536016)
[PASS] test_atoken_burnEvents_singleWithdraw_noInterests() (gas: 248033)
[PASS] test_atoken_burnEvents_withdrawAmountLessThanInterests() (gas: 538862)
[PASS] test_atoken_mintEvents_firstSupply() (gas: 246742)
[PASS] test_atoken_mintEvents_supplyAfterBorrow() (gas: 590327)
[PASS] test_mintToTreasury_events() (gas: 85487)
Suite result: ok. 8 passed; 0 failed; 0 skipped; finished in 38.00ms (9.64ms CPU time)
2025-07-03T16:11:43.871106Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"

Ran 4 tests for tests/protocol/tokenization/ATokenModifiers.t.sol:ATokenModifiersTests
[PASS] test_revert_notAdmin_burn() (gas: 16863)
[PASS] test_revert_notAdmin_mint() (gas: 16911)
[PASS] test_revert_notAdmin_transferOnLiquidation() (gas: 16929)
[PASS] test_revert_notAdmin_transferUnderlyingTo() (gas: 16665)
Suite result: ok. 4 passed; 0 failed; 0 skipped; finished in 29.76ms (227.50µs CPU time)
2025-07-03T16:11:43.901404Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"

Ran 9 tests for tests/protocol/tokenization/ATokenPermit.t.sol:ATokenPermitTests
[PASS] testCheckDomainSeparator() (gas: 26125)
[PASS] test_cancelPermit() (gas: 101671)
[PASS] test_chain_fork_calculateDomainSeparator() (gas: 32866)
[PASS] test_revert_submitPermit_0_expiration() (gas: 46281)
[PASS] test_revert_submitPermit_InvalidExpiration_previosCurrentBlock() (gas: 47178)
[PASS] test_revert_submitPermit_InvalidSignature() (gas: 54727)
[PASS] test_revert_submitPermit_invalid_nonce() (gas: 55301)
[PASS] test_revert_submitPermit_invalid_owner() (gas: 46130)
[PASS] test_submitPermit() (gas: 94780)
Suite result: ok. 9 passed; 0 failed; 0 skipped; finished in 34.07ms (4.47ms CPU time)
2025-07-03T16:11:43.935921Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"

Ran 3 tests for tests/protocol/tokenization/ATokenRepay.t.sol:ATokenRepayTests
[PASS] test_repay_allDebt() (gas: 242202)
[PASS] test_repay_partialDebt() (gas: 241327)
[PASS] test_revert_repay_withoutFunds() (gas: 151154)
Suite result: ok. 3 passed; 0 failed; 0 skipped; finished in 29.55ms (1.69ms CPU time)
2025-07-03T16:11:43.966111Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"

Ran 3 tests for tests/protocol/tokenization/ATokenRescueTokens.sol:ATokenRescueTokensTests
[PASS] test_rescueTokens() (gas: 77699)
[PASS] test_reverts_rescueTokens_CALLER_NOT_POOL_ADMIN() (gas: 70403)
[PASS] test_reverts_rescueTokens_UnderlyingCannotBeRescued() (gas: 71062)
Suite result: ok. 3 passed; 0 failed; 0 skipped; finished in 29.86ms (564.88µs CPU time)
2025-07-03T16:11:43.996711Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"

Ran 12 tests for tests/protocol/tokenization/ATokenTransfers.t.sol:ATokenTransferTests
[PASS] test_atoken_alice_transfer_all_to_bob() (gas: 156904)
[PASS] test_atoken_alice_transfer_to_bob() (gas: 218569)
[PASS] test_atoken_alice_transfer_to_bob_zero() (gas: 148979)
[PASS] test_atoken_alice_transfer_to_carol_accrues_interests() (gas: 208484)
[PASS] test_atoken_alice_transfer_to_herself() (gas: 76658)
[PASS] test_atoken_alice_transfer_to_herself_zero() (gas: 76677)
[PASS] test_atoken_multiple_transfers() (gas: 194371)
[PASS] test_atoken_transfer_sets_enabled_as_collateral(uint56,uint256) (runs: 1000, μ: 371180, ~: 373904)
[PASS] test_atoken_transfer_some_collateral_from_bob_borrower_to_alice() (gas: 492958)
[PASS] test_atoken_transfer_to_bob_them_bob_borrows() (gas: 374968)
[PASS] test_reverts_atoken_transfer_all_collateral_from_bob_borrower_to_alice() (gas: 376329)
[PASS] test_scaled_balance_token_base_alice_transfer_to_bob_accrues_interests() (gas: 114134)
Suite result: ok. 12 passed; 0 failed; 0 skipped; finished in 1.04s (1.02s CPU time)
2025-07-03T16:11:45.044549Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"

Ran 6 tests for tests/gas/ATokenWithDelegation.Transfer.gas.t.sol:ATokenWithDelegation_gas_Tests
[PASS] test_transfer_fullAmountSenderWithAndReceiverWithoutDelegations() (gas: 270637)
[PASS] test_transfer_fullAmountSenderWithoutAndReceiverWithDelegations_notDelegatees() (gas: 262574)
[PASS] test_transfer_fullAmountWithDelegations_delegatees() (gas: 568830)
[PASS] test_transfer_fullAmountWithDelegations_notDelegatees() (gas: 374683)
[PASS] test_transfer_fullAmountWithoutDelegations_delegatees() (gas: 356759)
[PASS] test_transfer_fullAmountWithoutDelegations_notDelegatees() (gas: 158566)
Suite result: ok. 6 passed; 0 failed; 0 skipped; finished in 42.97ms (3.17ms CPU time)
2025-07-03T16:11:45.085410Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"

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.66ms (2.40ms CPU time)
2025-07-03T16:11:45.119471Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"
2025-07-03T16:11:45.135561Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"
2025-07-03T16:11:45.158348Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"
2025-07-03T16:11:45.174558Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"
2025-07-03T16:11:45.198470Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"

Ran 5 tests for tests/deployments/AaveV3BatchDeployment.t.sol:AaveV3BatchDeployment
[PASS] testAaveV3BatchDeploy() (gas: 54155952)
[PASS] testAaveV3BatchDeploymentCheck() (gas: 62326063)
[PASS] testAaveV3Batch_reuseIncentivesProxy() (gas: 53654523)
[PASS] testAaveV3L2BatchDeploymentCheck() (gas: 64117183)
[PASS] testAaveV3TreasuryPartnerBatchDeploymentCheck() (gas: 62835349)
Suite result: ok. 5 passed; 0 failed; 0 skipped; finished in 108.73ms (102.21ms CPU time)

Ran 12 tests for tests/deployments/AaveV3BatchTests.t.sol:AaveV3BatchTests
[PASS] test0AaveV3SetupDeployment() (gas: 5310820)
[PASS] test10StaticATokenDeployment() (gas: 6676156)
[PASS] test1AaveV3GettersDeployment() (gas: 7395953)
[PASS] test2AaveV3PoolDeployment() (gas: 7702550)
[PASS] test3AaveV3L2PoolDeployment() (gas: 7963102)
[PASS] test4PeripheralsRelease() (gas: 7071756)
[PASS] test5MiscDeployment() (gas: 844259)
[PASS] test6ParaswapRelease() (gas: 5160256)
[PASS] test7SetupMarket() (gas: 2645975)
[PASS] test8TokensMarket() (gas: 3760671)
[PASS] test9ConfigEngineDeployment() (gas: 7043528)
[PASS] testAaveV3FullBatchOrchestration() (gas: 54153220)
Suite result: ok. 12 passed; 0 failed; 0 skipped; finished in 23.85ms (13.38ms CPU time)
2025-07-03T16:11:45.255997Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"

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, μ: 123456, ~: 123674)
[PASS] test_calculate_rates_below_op_usage((uint16,uint32,uint32,uint32),uint256,uint256,uint256) (runs: 1000, μ: 117983, ~: 120332)
[PASS] test_calculate_rates_below_op_usage_when_no_debt((uint16,uint32,uint32,uint32),uint256,uint256) (runs: 1000, μ: 75004, ~: 75364)
[PASS] test_calculate_rates_empty_reserve((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 43485, ~: 43416)
[PASS] test_calculate_rates_when_not_using_virtual_valance((uint16,uint32,uint32,uint32),uint256,uint256) (runs: 1000, μ: 67480, ~: 68630)
[PASS] test_calculate_rates_when_total_debt_0((uint16,uint32,uint32,uint32),uint256,uint256) (runs: 1000, μ: 67989, ~: 68639)
[PASS] test_fuzz_calculate_rates_80_percent_usage_added_and_virtual_equal(uint256) (runs: 1000, μ: 32779, ~: 32453)
[PASS] test_zero_rates_strategy_calculate_rates() (gas: 18549)
Suite result: ok. 13 passed; 0 failed; 0 skipped; finished in 4.29s (4.26s CPU time)
2025-07-03T16:11:47.993364Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"

Ran 7 tests for tests/misc/rates/RateStrategy.setters.t.sol:RateStrategySettersTests
[PASS] test_new_SetReserveInterestRateParams((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 52102, ~: 52029)
[PASS] test_new_SetReserveInterestRateParams_when_not_configurator((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 25906, ~: 25843)
[PASS] test_reverts_SetReserveInterestRateParams_when_gt_maxRate((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 29086, ~: 29186)
[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, μ: 26774, ~: 26699)
[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.98s (1.95s CPU time)
2025-07-03T16:11:49.978357Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"

Ran 7 tests for tests/misc/rates/RateStrategy.setters.t.sol:RateStrategySettersTestsOverride
[PASS] test_new_SetReserveInterestRateParams((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 51479, ~: 51412)
[PASS] test_new_SetReserveInterestRateParams_when_not_configurator((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 25289, ~: 25210)
[PASS] test_reverts_SetReserveInterestRateParams_when_gt_maxRate((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 28467, ~: 28559)
[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, μ: 26124, ~: 26074)
[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.67s (1.63s CPU time)
2025-07-03T16:11:51.643891Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"

Ran 15 tests for tests/misc/rates/RateStrategy.t.sol:RateStrategyBaseTests
[PASS] test_getInterestRateDataBps((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 39963, ~: 39905)
[PASS] test_getInterestRateDataRay((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 40909, ~: 40852)
[PASS] test_getMaxVariableBorrowRate((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 38373, ~: 38324)
[PASS] test_initialization() (gas: 26143)
[PASS] test_new_DefaultReserveInterestRateStrategy_wrong_provider() (gas: 41972)
[PASS] test_new_SetReserveInterestRateParams((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 52052, ~: 51970)
[PASS] test_new_SetReserveInterestRateParams_override_method((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 49233, ~: 49178)
[PASS] test_new_SetReserveInterestRateParams_when_not_configurator((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 25895, ~: 25839)
[PASS] test_overflow_liquidity_rates() (gas: 55141)
[PASS] test_overflow_variable_rates() (gas: 664941)
[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 3.19s (3.16s 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, μ: 828627, ~: 828682)
[PASS] test_fuzz_hf_gt_095_supply_lt_threshold_closeFactorShouldBe100(uint256,uint256) (runs: 1000, μ: 793899, ~: 793955)
[PASS] test_fuzz_hf_lte_095_supply_gt_threshold_closeFactorShouldBe100(uint256,uint256) (runs: 1000, μ: 791500, ~: 793906)
[PASS] test_hf_gt_095_borrow_gt_threshold_collateral_lt_threshold_closeFactorShouldBe100() (gas: 1038965)
[PASS] test_hf_gt_095_supply_gt_threshold_closeFactorShouldBe50() (gas: 827293)
Logs:
  Bound result 100000000000000000000
  Bound result 970000000000000000

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

[PASS] test_hf_helper(uint256) (runs: 1000, μ: 526309, ~: 526339)
[PASS] test_hf_lte_095_supply_gt_threshold_closeFactorShouldBe100() (gas: 792609)
Logs:
  Bound result 100000000000000000000
  Bound result 940000000000000000

[PASS] test_liquidationdataprovider_edge_range() (gas: 947489)
[PASS] test_liquidationdataprovider_edge_range_reverse() (gas: 999730)
[PASS] test_shouldRevertIfCloseFactorIs100ButCollateralIsBelowThreshold() (gas: 795792)
Suite result: ok. 11 passed; 0 failed; 0 skipped; finished in 13.86s (13.82s CPU time)
2025-07-03T16:11:57.458562Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"

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, μ: 448246, ~: 449780)
[PASS] test_splitFunds_fuzz_realistic(uint256,uint256) (runs: 1000, μ: 446856, ~: 448249)
[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, μ: 100652, ~: 101899)
Suite result: ok. 15 passed; 0 failed; 0 skipped; finished in 3.66s (3.66s CPU time)
2025-07-03T16:11:58.494285Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"

Ran 18 tests for tests/rewards/RewardsController.t.sol:RewardsControllerTest
[PASS] test_accrueRewards() (gas: 909675)
[PASS] test_claimAllRewards() (gas: 865373)
[PASS] test_claimAllRewardsOnBehalf() (gas: 899066)
[PASS] test_claimAllRewardsToSelf() (gas: 865000)
[PASS] test_claimRewards() (gas: 862306)
[PASS] test_claimRewardsOnBehalf() (gas: 900786)
[PASS] test_claimRewardsToSelf() (gas: 861985)
[PASS] test_claimRewards_partial() (gas: 862621)
[PASS] test_claimRewards_zero() (gas: 619895)
[PASS] test_claimRewards_zero_with_rewards() (gas: 626387)
[PASS] test_configureAssets() (gas: 601005)
[PASS] test_initialize_no_op() (gas: 3614302)
[PASS] test_new_RewardsController() (gas: 3610338)
[PASS] test_setClaimer() (gas: 58207)
[PASS] test_setDistributionEnd() (gas: 616853)
[PASS] test_setEmissionPerSecond() (gas: 620836)
[PASS] test_setRewardOracle() (gas: 694599)
[PASS] test_setTransferStrategy_PullRewardsTransferStrategy() (gas: 880457)
Suite result: ok. 18 passed; 0 failed; 0 skipped; finished in 46.66ms (14.19ms CPU time)
2025-07-03T16:11:58.542399Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"

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 30.94ms (1.20ms CPU time)
2025-07-03T16:11:58.575956Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"

Ran 3 tests for tests/gas/StataToken.gas.t.sol:StataToken_gas_Tests
[PASS] test_claimRewards() (gas: 2734466)
[PASS] test_deposit() (gas: 703965)
[PASS] test_depositATokens() (gas: 884393)
Suite result: ok. 3 passed; 0 failed; 0 skipped; finished in 48.34ms (10.00ms CPU time)
2025-07-03T16:11:58.622092Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"

Ran 2 tests for tests/extensions/stata-token/StataTokenV2Getters.sol:StataTokenV2GettersTest
[PASS] test_getters() (gas: 69906)
[PASS] test_initializeShouldRevert() (gas: 21681)
Suite result: ok. 2 passed; 0 failed; 0 skipped; finished in 30.26ms (300.98µs CPU time)
2025-07-03T16:11:58.652013Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"

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: 538735)
[PASS] test_deposit_shouldRevert() (gas: 464367)
[PASS] test_mint_shouldRevert() (gas: 468433)
[PASS] test_redeem_shouldRevert() (gas: 558460)
[PASS] test_setPaused_shouldRevertForInvalidCaller(address) (runs: 1000, μ: 30340, ~: 30340)
[PASS] test_setPaused_shouldSucceedForOwner() (gas: 53839)
[PASS] test_transfer_shouldRevert() (gas: 536651)
[PASS] test_withdraw_shouldRevert() (gas: 554312)
Suite result: ok. 10 passed; 0 failed; 0 skipped; finished in 215.89ms (178.77ms CPU time)
2025-07-03T16:11:58.869446Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"

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 31.67ms (1.28ms CPU time)
2025-07-03T16:11:58.904562Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"

Ran 4 tests for tests/extensions/stata-token/StataTokenV2Rescuable.sol:StataTokenV2RescuableTest
[PASS] test_rescuable_shouldNotCauseInsolvency(uint256,uint256) (runs: 1000, μ: 754823, ~: 754828)
[PASS] test_rescuable_shouldRevertForInvalidCaller() (gas: 189988)
[PASS] test_rescuable_shouldTransferAssetsToCollector() (gas: 216923)
[PASS] test_rescuable_shouldWorkForAToken() (gas: 435744)
Suite result: ok. 4 passed; 0 failed; 0 skipped; finished in 2.64s (2.60s CPU time)
2025-07-03T16:12:01.545453Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"

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, μ: 834421, ~: 797985)
[PASS] test_claimRewardsOnBehalfOf_self(uint256,uint32,uint88,uint32) (runs: 1000, μ: 835240, ~: 798200)
[PASS] test_claimRewardsOnBehalfOf_shouldRevertForInvalidClaimer(uint256,uint32,uint88,uint32) (runs: 1000, μ: 772582, ~: 774264)
[PASS] test_claimRewardsOnBehalfOf_validClaimer(uint256,uint32,uint88,uint32) (runs: 1000, μ: 868539, ~: 830583)
[PASS] test_claimRewardsToSelf(uint256,uint32,uint88,uint32) (runs: 1000, μ: 835661, ~: 797899)
[PASS] test_claimableRewards(uint256,uint32,uint88,uint32) (runs: 1000, μ: 773129, ~: 775178)
[PASS] test_collectAndUpdateRewards(uint256,uint32,uint88,uint32) (runs: 1000, μ: 817237, ~: 794281)
[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, μ: 849912, ~: 864680)
[PASS] test_transfer_toSelf(uint256,uint32,uint88,uint32) (runs: 1000, μ: 806463, ~: 798822)
[PASS] test_zeroIncentivesController() (gas: 37689)
Suite result: ok. 17 passed; 0 failed; 0 skipped; finished in 20.09s (20.06s CPU time)
2025-07-03T16:12:03.913902Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"

Ran 17 tests for tests/protocol/tokenization/VariableDebtToken.t.sol:VariableDebtTokenEventsTests
[PASS] test_balanceOf() (gas: 228550)
[PASS] test_cancel_delegationWithSig() (gas: 102832)
[PASS] test_delegationWithSig() (gas: 95792)
[PASS] test_initialize_VariableDebtToken((uint8,string,string,string,string,address,address,address,bool)) (runs: 1000, μ: 3411557, ~: 3411638)
[PASS] test_mint_variableDebt_caller_alice((uint8,string,string,string,string,address,address,address,bool)) (runs: 1000, μ: 3484168, ~: 3484817)
[PASS] test_mint_variableDebt_caller_bob_onBehalf_alice((uint8,string,string,string,string,address,address,address,bool)) (runs: 1000, μ: 3498989, ~: 3499444)
[PASS] test_new_VariableDebtToken_implementation() (gas: 1557747)
[PASS] test_partial_burn_variableDebt((uint8,string,string,string,string,address,address,address,bool)) (runs: 1000, μ: 3500305, ~: 3499503)
[PASS] test_reverts_OperationNotSupported() (gas: 1574318)
[PASS] test_reverts_bad_expiration_delegationWithSig() (gas: 34153)
[PASS] test_reverts_bad_nonce_delegationWithSig() (gas: 111764)
[PASS] test_reverts_initialize_pool_do_not_match((uint8,string,string,string,string,address,address,address,bool)) (runs: 1000, μ: 2748089, ~: 2748033)
[PASS] test_reverts_zero_address_delegationWithSig() (gas: 33544)
[PASS] test_scaledBalanceOf() (gas: 285314)
[PASS] test_totalScaledSupply() (gas: 322863)
[PASS] test_totalSupply() (gas: 322836)
[PASS] test_total_burn_variableDebt((uint8,string,string,string,string,address,address,address,bool)) (runs: 1000, μ: 3500425, ~: 3499499)
Suite result: ok. 17 passed; 0 failed; 0 skipped; finished in 6.23s (6.19s CPU time)

Ran 12 tests for tests/protocol/libraries/math/WadRayMath.t.sol:WadRayMathTests
[PASS] test_constants() (gas: 13279)
[PASS] test_rayDiv() (gas: 12748)
[PASS] test_rayMul() (gas: 11372)
[PASS] test_rayToWad() (gas: 11057)
[PASS] test_rayToWad_fuzz(uint256) (runs: 1000, μ: 13326, ~: 13277)
[PASS] test_wadDiv() (gas: 12869)
[PASS] test_wadDiv_fuzzing(uint256,uint256) (runs: 1000, μ: 10495, ~: 10721)
[PASS] test_wadMul() (gas: 11142)
[PASS] test_wadMul_edge() (gas: 11184)
[PASS] test_wadMul_fuzzing(uint256,uint256) (runs: 1000, μ: 10787, ~: 11339)
[PASS] test_wadToRay() (gas: 10867)
[PASS] test_wadToRay_fuzz(uint256) (runs: 1000, μ: 12102, ~: 12348)
Suite result: ok. 12 passed; 0 failed; 0 skipped; finished in 214.35ms (213.32ms CPU time)
2025-07-03T16:12:07.984269Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"

Ran 18 tests for tests/extensions/v3-config-engine/AaveV3ConfigEngineTest.t.sol:AaveV3ConfigEngineTest
[PASS] testAssetEModeUpdates() (gas: 2738050)
[PASS] testBorrowUpdatesNoChange() (gas: 2452815)
[PASS] testBorrowsUpdates() (gas: 2521454)
[PASS] testCapsUpdate() (gas: 2462002)
[PASS] testCollateralUpdateCorrectBonus() (gas: 2476669)
[PASS] testCollateralUpdateWrongBonus() (gas: 796365)
[PASS] testCollateralsUpdates() (gas: 2476201)
[PASS] testCollateralsUpdatesNoChange() (gas: 2450860)
[PASS] testCollateralsUpdatesNoChangeShouldNotEmit() (gas: 801982)
[PASS] testEModeCategoryCreation() (gas: 1240208)
[PASS] testEModeCategoryUpdates() (gas: 2606189)
[PASS] testEModeCategoryUpdatesNoChange() (gas: 2607949)
[PASS] testEModeCategoryUpdatesNoChangeShouldNotEmit() (gas: 876157)
[PASS] testEModeCategoryUpdatesWrongBonus() (gas: 866416)
[PASS] testListings() (gas: 5580694)
[PASS] testListingsCustom() (gas: 9280158)
[PASS] testPriceFeedsUpdates() (gas: 2528570)
[PASS] testRateStrategiesUpdates() (gas: 2515986)
Suite result: ok. 18 passed; 0 failed; 0 skipped; finished in 22.76s (22.71s CPU time)

Ran 15 tests for tests/helpers/WrappedTokenGateway.t.sol:WrappedTokenGatewayTests
[PASS] test_borrowDelegateApprove_repay() (gas: 449266)
[PASS] test_borrowVariableDebtWeth_repayWithEth() (gas: 772356)
[PASS] test_borrowVariableDebtWeth_repayWithEth_mismatchedValues() (gas: 764020)
[PASS] test_depositNativeEthInPool() (gas: 248970)
[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: 374247)
[PASS] test_withdrawEth_partial() (gas: 391559)
[PASS] test_withdrawEth_permit() (gas: 426415)
[PASS] test_withdrawEth_permit_frontrunRegression() (gas: 427320)
[PASS] test_withdrawEth_permit_full() (gas: 405219)
Suite result: ok. 15 passed; 0 failed; 0 skipped; finished in 38.77ms (10.78ms CPU time)
2025-07-03T16:12:08.022040Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"
2025-07-03T16:12:08.025180Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"
2025-07-03T16:12:08.039505Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"

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

Ran 2 tests for tests/deployments/AaveV3PermissionsTest.t.sol:AaveV3PermissionsTest
[PASS] testCheckPermissions() (gas: 52530794)
[PASS] testCheckPermissionsTreasuryPartner() (gas: 53022360)
Suite result: ok. 2 passed; 0 failed; 0 skipped; finished in 43.43ms (36.03ms CPU time)
2025-07-03T16:12:08.062101Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"
2025-07-03T16:12:08.062184Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"

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 32.42ms (1.59ms 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: 6133438)
[PASS] test_setPoolConfiguratorImpl_upgrade() (gas: 10403089)
[PASS] test_setPoolDataProvider() (gas: 1516824)
[PASS] test_setPoolImpl() (gas: 6929986)
[PASS] test_setPoolImpl_upgrade() (gas: 11198864)
[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 39.61ms (8.46ms CPU time)
2025-07-03T16:12:08.095048Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"
2025-07-03T16:12:08.101026Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"

Ran 1 test for tests/template/BaseTest.t.sol:BaseTest
[PASS] test_default() (gas: 225906)
Suite result: ok. 1 passed; 0 failed; 0 skipped; finished in 30.44ms (350.51µs CPU time)
2025-07-03T16:12:08.126332Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"

Ran 22 tests for tests/protocol/pool/pool-configurator/PoolConfigurator.ACLModifiers.t.sol:PoolConfiguratorACLModifiersTest
[PASS] test_reverts_disableLiquidationGracePeriod_on_unauth(address,address) (runs: 1000, μ: 38099, ~: 38099)
[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, μ: 1126176, ~: 1126243)
[PASS] test_reverts_notAdmin_setReserveActive(address) (runs: 1000, μ: 35776, ~: 35776)
[PASS] test_reverts_notAdmin_updateAToken(address) (runs: 1000, μ: 34653, ~: 34653)
[PASS] test_reverts_notAdmin_updateFlashLoanPremiumTotal(address) (runs: 1000, μ: 33564, ~: 33564)
[PASS] test_reverts_notAdmin_updateVariableDebtToken(address) (runs: 1000, μ: 34607, ~: 34607)
[PASS] test_reverts_notRiskAdmin_configureReserveAsCollateral(address) (runs: 1000, μ: 38186, ~: 38186)
[PASS] test_reverts_notRiskAdmin_setAssetCollateralInEMode(address) (runs: 1000, μ: 38299, ~: 38299)
[PASS] test_reverts_notRiskAdmin_setBorrowCap(address) (runs: 1000, μ: 38088, ~: 38088)
[PASS] test_reverts_notRiskAdmin_setEModeCategory(address) (runs: 1000, μ: 38615, ~: 38615)
[PASS] test_reverts_notRiskAdmin_setReserveBorrowing(address) (runs: 1000, μ: 38150, ~: 38150)
[PASS] test_reverts_notRiskAdmin_setReserveFactor(address) (runs: 1000, μ: 38089, ~: 38089)
[PASS] test_reverts_notRiskAdmin_setReserveInterestRateData(address,address) (runs: 1000, μ: 38852, ~: 38852)
[PASS] test_reverts_notRiskAdmin_setSupplyCap(address) (runs: 1000, μ: 38200, ~: 38200)
[PASS] test_reverts_notRiskOrPoolOrEmergencyAdmin_setReserveFreeze(address) (runs: 1000, μ: 42606, ~: 42606)
[PASS] test_reverts_setDebtCeiling(address) (runs: 1000, μ: 38134, ~: 38134)
[PASS] test_reverts_setPoolPause_noGracePeriod_unauth(address,bool) (runs: 1000, μ: 38062, ~: 38062)
[PASS] test_reverts_setPoolPause_unauth(address,bool,uint40) (runs: 1000, μ: 55221, ~: 55221)
[PASS] test_reverts_setReservePause_noGracePeriod_off_unauth(address,address,bool) (runs: 1000, μ: 38333, ~: 38333)
[PASS] test_reverts_setReservePause_off_unauth(address,address,bool,uint40) (runs: 1000, μ: 38500, ~: 38500)
[PASS] test_reverts_setReservePause_on_unauth(address,address,bool,uint40) (runs: 1000, μ: 38477, ~: 38477)
Suite result: ok. 22 passed; 0 failed; 0 skipped; finished in 2.82s (2.79s CPU time)
2025-07-03T16:12:10.922750Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"

Ran 10 tests for tests/protocol/pool/pool-configurator/PoolConfigurator.borrowCaps.t.sol:PoolConfiguratorBorrowCapTests
[PASS] test_borrow_eq_cap() (gas: 294384)
[PASS] test_borrow_interests_reach_cap() (gas: 295873)
[PASS] test_borrow_lt_cap() (gas: 283148)
[PASS] test_default_borrowCap_zero() (gas: 22159)
[PASS] test_reverts_borrow_after_borrow_interests_reach_cap() (gas: 318985)
[PASS] test_reverts_borrow_gt_cap() (gas: 133795)
[PASS] test_reverts_setBorrowCap_gt_max_cap() (gas: 48160)
[PASS] test_reverts_unauthorized_setBorrowCap() (gas: 35037)
[PASS] test_setBorrowCap() (gas: 74460)
[PASS] test_setBorrowCap_them_setBorrowCap_zero() (gas: 301522)
Suite result: ok. 10 passed; 0 failed; 0 skipped; finished in 36.14ms (4.77ms CPU time)
2025-07-03T16:12:10.958717Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"

Ran 13 tests for tests/protocol/pool/pool-configurator/PoolConfigurator.eMode.sol:PoolConfiguratorEModeConfigTests
[PASS] test_addAnotherAssetBorrowableInEMode() (gas: 274265)
[PASS] test_addAnotherAssetCollateralInEMode() (gas: 254472)
[PASS] test_configureEmodeCategory() (gas: 118237)
[PASS] test_removeBorrowableFromEmode() (gas: 191124)
[PASS] test_removeCollateralFromEmode() (gas: 236163)
[PASS] test_reverts_setEmodeCategory_lb_lte_percentageFactor() (gas: 58244)
[PASS] test_reverts_setEmodeCategory_liquidation_threshold_doesnt_match_bonus() (gas: 35016)
[PASS] test_reverts_setEmodeCategory_ltv_gt_liqThreshold() (gas: 33736)
[PASS] test_reverts_setEmodeCategory_zero_liqThreshold() (gas: 33675)
[PASS] test_reverts_setEmodeCategory_zero_ltv() (gas: 33648)
[PASS] test_setAssetBorrowableInEMode() (gas: 211036)
[PASS] test_setAssetCollateralInEMode() (gas: 191179)
[PASS] test_updateEModeCategory() (gas: 200908)
Suite result: ok. 13 passed; 0 failed; 0 skipped; finished in 36.46ms (6.79ms CPU time)
2025-07-03T16:12:10.997807Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"

Ran 24 tests for tests/protocol/pool/Pool.Liquidations.t.sol:PoolLiquidationTests
[PASS] test_deficit_increased_after_liquidate_bad_debt() (gas: 754900)
[PASS] test_full_liquidate_atokens_multiple_variable_borrows() (gas: 913507)
[PASS] test_full_liquidate_multiple_supplies_and_variable_borrows() (gas: 1086373)
[PASS] test_full_liquidate_multiple_variable_borrows() (gas: 954890)
[PASS] test_liquidate_borrow_bad_debt() (gas: 764139)
[PASS] test_liquidate_borrow_burn_multiple_assets_bad_debt() (gas: 1098499)
[PASS] test_liquidate_emode_position_without_emode_oracle() (gas: 993997)
[PASS] test_liquidate_isolated_position() (gas: 851515)
[PASS] test_liquidate_variable_borrow_no_fee() (gas: 798536)
[PASS] test_liquidate_variable_borrow_repro() (gas: 978828)
[PASS] test_liquidate_variable_borrow_same_collateral_and_borrow() (gas: 643285)
[PASS] test_liquidation_when_grace_period_disabled(uint40) (runs: 1000, μ: 846454, ~: 846397)
[PASS] test_liquidation_with_liquidation_grace_period_collateral_active(uint40) (runs: 1000, μ: 1003791, ~: 1007125)
[PASS] test_liquidation_with_liquidation_grace_period_debt_active(uint40) (runs: 1000, μ: 1002867, ~: 1004909)
[PASS] test_liquidation_with_liquidation_grace_period_debt_collateral_active(uint40) (runs: 1000, μ: 1018803, ~: 1021654)
[PASS] test_partial_liquidate_atokens_variable_borrow() (gas: 836936)
[PASS] test_partial_liquidate_variable_borrow() (gas: 797167)
[PASS] test_reverts_liquidation_collateral_not_active() (gas: 607199)
[PASS] test_reverts_liquidation_hf_gt_liquidation_threshold() (gas: 440817)
[PASS] test_reverts_liquidation_invalid_borrow() (gas: 575878)
[PASS] test_reverts_liquidation_oracle_sentinel_on() (gas: 328174)
[PASS] test_reverts_liquidation_reserveInactive() (gas: 160956)
[PASS] test_reverts_liquidation_reservePaused() (gas: 131853)
[PASS] test_self_liquidate_position_shouldRevert() (gas: 660415)
Suite result: ok. 24 passed; 0 failed; 0 skipped; finished in 17.85s (17.82s CPU time)
2025-07-03T16:12:15.312573Z ERROR cheatcodes: non-empty stderr input=["bash", "-c", "response=\"$([ -e .env ] && grep -q \"FOUNDRY_LIBRARIES\" .env && echo true || echo false)\"; cast abi-encode \"response(bool)\" $response;"] stderr="Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment. \n\n"

Ran 22 tests for tests/gas/Pool.Operations.gas.t.sol:PoolOperations_gas_Tests
[PASS] test_borrow() (gas: 914206)
[PASS] test_borrow_onBehalfOf() (gas: 1000452)
[PASS] test_flashLoanSimple() (gas: 609318)
[PASS] test_flashLoan_with_one_asset() (gas: 738658)
[PASS] test_flashLoan_with_one_asset_with_borrowing() (gas: 1161488)
[PASS] test_flashLoan_with_two_assets() (gas: 1035365)
[PASS] test_flashLoan_with_two_assets_with_borrowing() (gas: 1866951)
[PASS] test_liquidationCall_deficit() (gas: 1335455)
[PASS] test_liquidationCall_deficitInAdditionalReserve() (gas: 1694805)
[PASS] test_liquidationCall_full() (gas: 1335522)
[PASS] test_liquidationCall_partial() (gas: 1321551)
[PASS] test_liquidationCall_receive_ATokens_full() (gas: 1311871)
[PASS] test_liquidationCall_receive_ATokens_partial() (gas: 1297664)
[PASS] test_mintToTreasury_one_asset() (gas: 954021)
[PASS] test_mintToTreasury_one_asset_zero_amount() (gas: 46521)
[PASS] test_mintToTreasury_two_assets() (gas: 1921...*[Comment body truncated]*

@github-actions
Copy link
Contributor

github-actions bot commented Jun 10, 2025

🔮 Coverage report
File Line Coverage Function Coverage Branch Coverage
src/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol ${\color{red}67.57\%}$
$25 / 37$
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}90.63\%}$
$29 / 32$
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 ${\color{orange}85.19\%}$
$23 / 27$
31, 32, 47, 48
${\color{red}71.43\%}$
$5 / 7$
WETH9.receive, WETH9.totalSupply
${\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}66.67\%}$
$10 / 15$
src/contracts/extensions/stata-token/ERC4626StataTokenUpgradeable.sol ${\color{lightgreen}98.04\%}$
$100 / 102$
146, 221
${\color{green}100\%}$
$21 / 21$
${\color{orange}83.33\%}$
$10 / 12$
src/contracts/extensions/stata-token/StataTokenFactory.sol ${\color{orange}88.46\%}$
$23 / 26$
77, 84, 85
${\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 ${\color{orange}92.73\%}$
$51 / 55$
124, 128, 133, 172
${\color{green}100\%}$
$6 / 6$
${\color{red}60\%}$
$12 / 20$
src/contracts/extensions/v3-config-engine/libraries/ListingEngine.sol ${\color{green}100\%}$
$33 / 33$
${\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{red}68\%}$
$51 / 75$
51, 52, 53, 54, 55 and 19 more
${\color{orange}80.95\%}$
$17 / 21$
AaveProtocolDataProvider.getAllReservesTokens, AaveProtocolDataProvider.getAllATokens, AaveProtocolDataProvider.getReserveData, AaveProtocolDataProvider.getReserveDeficit
${\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 ${\color{orange}90.71\%}$
$127 / 140$
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 ${\color{red}2.83\%}$
$3 / 106$
38, 41, 42, 45, 48 and 98 more
${\color{red}16.67\%}$
$1 / 6$
UiPoolDataProviderV3.getReservesList, UiPoolDataProviderV3.getReservesData, UiPoolDataProviderV3.getEModes, UiPoolDataProviderV3.getUserReservesData, UiPoolDataProviderV3.bytes32ToString
${\color{red}0\%}$
$0 / 10$
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\%}$
$54 / 54$
${\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/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/logic/BorrowLogic.sol ${\color{green}100\%}$
$39 / 39$
${\color{green}100\%}$
$2 / 2$
${\color{green}100\%}$
$8 / 8$
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/EModeLogic.sol ${\color{green}100\%}$
$6 / 6$
${\color{green}100\%}$
$1 / 1$
${\color{green}100\%}$
$0 / 0$
src/contracts/protocol/libraries/logic/FlashLoanLogic.sol ${\color{green}100\%}$
$36 / 36$
${\color{green}100\%}$
$3 / 3$
${\color{green}100\%}$
$6 / 6$
src/contracts/protocol/libraries/logic/GenericLogic.sol ${\color{lightgreen}96.08\%}$
$49 / 51$
127, 220
${\color{green}100\%}$
$4 / 4$
${\color{orange}90\%}$
$9 / 10$
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{lightgreen}99.28\%}$
$137 / 138$
367
${\color{green}100\%}$
$7 / 7$
${\color{orange}91.89\%}$
$34 / 37$
src/contracts/protocol/libraries/logic/PoolLogic.sol ${\color{green}100\%}$
$49 / 49$
${\color{green}100\%}$
$9 / 9$
${\color{red}72.73\%}$
$8 / 11$
src/contracts/protocol/libraries/logic/ReserveLogic.sol ${\color{green}100\%}$
$66 / 66$
${\color{green}100\%}$
$8 / 8$
${\color{green}100\%}$
$13 / 13$
src/contracts/protocol/libraries/logic/SupplyLogic.sol ${\color{green}100\%}$
$60 / 60$
${\color{green}100\%}$
$4 / 4$
${\color{green}100\%}$
$19 / 19$
src/contracts/protocol/libraries/logic/ValidationLogic.sol ${\color{green}100\%}$
$126 / 126$
${\color{green}100\%}$
$15 / 15$
${\color{lightgreen}95.2\%}$
$119 / 125$
src/contracts/protocol/libraries/math/PercentageMath.sol ${\color{green}100\%}$
$8 / 8$
${\color{green}100\%}$
$2 / 2$
${\color{green}100\%}$
$2 / 2$
src/contracts/protocol/libraries/math/WadRayMath.sol ${\color{orange}88\%}$
$22 / 25$
69, 87, 105
${\color{green}100\%}$
$6 / 6$
${\color{red}50\%}$
$3 / 6$
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 ${\color{lightgreen}98.97\%}$
$192 / 194$
536, 537
${\color{lightgreen}98.57\%}$
$69 / 70$
Pool.getReservesCount
${\color{red}74.19\%}$
$23 / 31$
src/contracts/protocol/pool/PoolConfigurator.sol ${\color{green}100\%}$
$211 / 211$
${\color{green}100\%}$
$40 / 40$
${\color{orange}94.83\%}$
$55 / 58$
src/contracts/protocol/tokenization/AToken.sol ${\color{green}100\%}$
$71 / 71$
${\color{green}100\%}$
$17 / 17$
${\color{orange}93.33\%}$
$14 / 15$
src/contracts/protocol/tokenization/ATokenWithDelegation.sol ${\color{orange}80.95\%}$
$17 / 21$
41, 42, 60, 63
${\color{red}75\%}$
$6 / 8$
ATokenWithDelegation._getDomainSeparator, ATokenWithDelegation._incrementNonces
${\color{green}100\%}$
$0 / 0$
src/contracts/protocol/tokenization/VariableDebtToken.sol ${\color{green}100\%}$
$30 / 30$
${\color{green}100\%}$
$12 / 12$
${\color{green}100\%}$
$2 / 2$
src/contracts/protocol/tokenization/base/DebtTokenBase.sol ${\color{green}100\%}$
$19 / 19$
${\color{green}100\%}$
$5 / 5$
${\color{green}100\%}$
$6 / 6$
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 ${\color{green}100\%}$
$63 / 63$
${\color{green}100\%}$
$20 / 20$
${\color{green}100\%}$
$6 / 6$
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 ${\color{orange}85.56\%}$
$77 / 90$
143, 152, 154, 156, 170 and 8 more
${\color{orange}86.67\%}$
$13 / 15$
BaseDelegation.metaDelegateByType, BaseDelegation.metaDelegate
${\color{red}55.56\%}$
$15 / 27$
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.77\%}$
$90 / 93$
152, 191, 206
${\color{orange}93.75\%}$
$15 / 16$
Collector.deltaOf
${\color{red}76.19\%}$
$16 / 21$
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 Jun 10, 2025

♻️ Forge Gas Snapshots

🔕 Unchanged
Path Value
snapshots/AToken.transfer.json
full amount; receiver: ->enableCollateral 139,898
full amount; receiver: ->enableCollateral; transferFrom 142,883
full amount; sender: ->disableCollateral; 98,303
full amount; sender: ->disableCollateral; receiver: ->enableCollateral 140,015
full amount; sender: ->disableCollateral; receiver: ->enableCollateral; transferFrom 143,000
full amount; sender: ->disableCollateral; receiver: dirty, ->enableCollateral 128,057
full amount; sender: ->disableCollateral; receiver: dirty, ->enableCollateral; transferFrom 131,042
full amount; sender: ->disableCollateral; transferFrom 101,288
full amount; sender: collateralDisabled 98,186
full amount; sender: collateralDisabled; transferFrom 101,171
partial amount; sender: collateralDisabled; 98,186
partial amount; sender: collateralDisabled; receiver: ->enableCollateral 139,898
partial amount; sender: collateralDisabled; receiver: ->enableCollateral; transferFrom 142,883
partial amount; sender: collateralDisabled; transferFrom 101,171
partial amount; sender: collateralEnabled; 98,394
partial amount; sender: collateralEnabled; receiver: ->enableCollateral 140,106
partial amount; sender: collateralEnabled; receiver: ->enableCollateral; transferFrom 143,091
partial amount; sender: collateralEnabled; transferFrom 101,379
snapshots/ATokenWithDelegation.transfer.json
full amount; sender: with delegations, ->disableCollateral; receiver: without delegations, ->enableCollateral 159,429
full amount; sender: with delegations, delegatee, ->disableCollateral; receiver: with delegations, delegatee, ->enableCollateral 155,367
full amount; sender: with delegations, not delegatee, ->disableCollateral; receiver: with delegations, not delegatee, ->enableCollateral 155,367
full amount; sender: without delegations, ->disableCollateral; receiver: with delegations, ->enableCollateral 142,329
full amount; sender: without delegations, delegatee, ->disableCollateral; receiver: without delegations, delegatee, ->enableCollateral 146,392
full amount; sender: without delegations, not delegatee, ->disableCollateral; receiver: without delegations, not delegatee, ->enableCollateral 146,392
snapshots/Pool.Getters.json
getEModeCategoryCollateralConfig 7,957
getEModeCategoryData 11,010
getLiquidationGracePeriod 7,804
getReserveData 29,775
getUserAccountData: supplies: 0, borrows: 0 20,349
getUserAccountData: supplies: 0, borrows: 0 with eMode enabled 20,349
getUserAccountData: supplies: 1, borrows: 0 55,014
getUserAccountData: supplies: 1, borrows: 0 with eMode enabled 57,762
getUserAccountData: supplies: 2, borrows: 0 84,020
getUserAccountData: supplies: 2, borrows: 0 with eMode enabled 86,874
getUserAccountData: supplies: 2, borrows: 1 114,906
getUserAccountData: supplies: 2, borrows: 1 with eMode enabled 117,760
snapshots/Pool.Operations.json
borrow: first borrow->borrowingEnabled 244,049
borrow: first borrow->borrowingEnabled; onBehalfOf 253,836
borrow: recurrent borrow 216,250
borrow: recurrent borrow; onBehalfOf 221,237
flashLoan: flash loan for one asset 162,275
flashLoan: flash loan for one asset and borrow 265,661
flashLoan: flash loan for two assets 257,324
flashLoan: flash loan for two assets and borrow 458,805
flashLoanSimple: simple flash loan 138,173
liquidationCall: deficit on liquidated asset 354,596
liquidationCall: deficit on liquidated asset + other asset 443,657
liquidationCall: full liquidation 354,596
liquidationCall: full liquidation and receive ATokens 330,922
liquidationCall: partial liquidation 345,510
liquidationCall: partial liquidation and receive ATokens 321,836
mintToTreasury: one asset with non zero amount 100,055
mintToTreasury: one asset with zero amount 35,733
mintToTreasury: two assets with non zero amount 160,103
mintToTreasury: two assets with zero amount 40,968
repay: full repay 153,298
repay: full repay with ATokens 159,907
repay: partial repay 149,650
repay: partial repay with ATokens 154,063
supply: collateralDisabled 138,786
supply: collateralEnabled 138,786
supply: first supply->collateralEnabled 168,298
withdraw: full withdraw 155,128
withdraw: partial withdraw 171,849
withdraw: partial withdraw with active borrows 220,298
snapshots/Pool.OperationsComposition.json
batchLiquidate: liquidate 2 users 489,594
repayAndWithdraw: borrow disabled, collateral disabled 287,920
supplyAndBorrow: first supply->collateralEnabled, first borrow 370,946
snapshots/Pool.Setters.json
setUserEMode: enter eMode, 1 borrow, 1 supply 135,030
setUserEMode: leave eMode, 1 borrow, 1 supply 107,668
setUserEModeOnBehalfOf: enter eMode, 1 borrow, 1 supply 137,852
setUserEModeOnBehalfOf: leave eMode, 1 borrow, 1 supply 110,490
setUserUseReserveAsCollateral: disableCollateral, 1 supply 46,377
setUserUseReserveAsCollateral: enableCollateral, 1 supply 80,671
setUserUseReserveAsCollateralOnBehalfOf: disableCollateral, 1 supply 49,167
setUserUseReserveAsCollateralOnBehalfOf: enableCollateral, 1 supply 83,461
snapshots/ProtocolDataProvider.json
getATokenTotalSupply 30,085
getFlashLoanEnabled 11,346
getInterestRateStrategyAddress 8,811
getIsVirtualAccActive 463
getLiquidationProtocolFee 11,373
getPaused 11,462
getReserveCaps 11,383
getReserveConfigurationData 11,819
getReserveTokensAddresses 14,934
getSiloedBorrowing 11,399
getTotalDebt 30,085
getUnbackedMintCap 413
getUserReserveData 66,386
getVirtualUnderlyingBalance 11,144
snapshots/StataTokenV2.json
claimRewards 359,537
deposit 274,530
depositATokens 214,183
redeem 196,716
redeemAToken 147,626
snapshots/WrappedTokenGatewayV3.json
borrowETH 235,177
depositETH 194,700
repayETH 170,622
withdrawETH 245,282

@sakulstra sakulstra marked this pull request as ready for review June 12, 2025 15:32
Co-authored-by: Ernesto Boado <[email protected]>
eboadom
eboadom previously approved these changes Jul 3, 2025
sendra
sendra previously approved these changes Jul 3, 2025
eboadom
eboadom previously approved these changes Jul 3, 2025
@sakulstra sakulstra dismissed stale reviews from eboadom and sendra via 2f25963 July 3, 2025 16:08
@sakulstra sakulstra merged commit 95d1cc3 into aave-dao:main Jul 3, 2025
5 checks passed
@sakulstra sakulstra deleted the v3.4.0 branch July 3, 2025 16:11
@github-actions
Copy link
Contributor

github-actions bot commented Jul 3, 2025

Certora Run Started (Certora Prover Run)

  • Group ID: 64d30925-6159-4d84-8ef1-74d336cefc81
Config Status Link Log File
AToken-problematic-rules.conf --rule totalSupplyEqualsSumAllBalance additiveBurn additiveTransfer Submitted link certora/atoken-with-delegation/conf/AToken-problematic-rules.conf-f21a723a0ad9.log
AToken.conf Submitted link certora/atoken-with-delegation/conf/AToken.conf-34a7e85f35d7.log
token-v3-delegate-HL-rules.conf --rule no_function_changes_both_balance_and_delegation_state Submitted link certora/atoken-with-delegation/conf/token-v3-delegate-HL-rules.conf-9aa8a01bcd31.log
token-v3-delegate-HL-rules.conf --rule pp_change_in_balance_affect_power_DELEGATEE Submitted link certora/atoken-with-delegation/conf/token-v3-delegate-HL-rules.conf-a07994bc417b.log
token-v3-delegate-HL-rules.conf --rule pp_change_of_balance_affect_power_NON_DELEGATEE Submitted link certora/atoken-with-delegation/conf/token-v3-delegate-HL-rules.conf-c4a257de271f.log
token-v3-delegate-HL-rules.conf --rule vp_change_in_balance_affect_power_DELEGATEE Submitted link certora/atoken-with-delegation/conf/token-v3-delegate-HL-rules.conf-222371414817.log
token-v3-delegate-HL-rules.conf --rule vp_change_of_balance_affect_power_NON_DELEGATEE Submitted link certora/atoken-with-delegation/conf/token-v3-delegate-HL-rules.conf-0a6faff1f932.log
token-v3-delegate-basic.conf Submitted link certora/atoken-with-delegation/conf/token-v3-delegate-basic.conf-c27c1bcef000.log
token-v3-delegate-invariants.conf --exclude_rule mirror_votingDelegatee_correct mirror_propositionDelegatee_correct mirror_delegationMode_correct mirror_balance_correct Submitted link certora/atoken-with-delegation/conf/token-v3-delegate-invariants.conf-93ac4a4acef9.log
token-v3-delegate-invariants.conf --rule mirror_votingDelegatee_correct mirror_propositionDelegatee_correct mirror_delegationMode_correct mirror_balance_correct --rule_sanity "none" Submitted link certora/atoken-with-delegation/conf/token-v3-delegate-invariants.conf-58af77ab7015.log
token-v3-erc20.conf Submitted link certora/atoken-with-delegation/conf/token-v3-erc20.conf-10ff5ee065d4.log
token-v3-general.conf Submitted link certora/atoken-with-delegation/conf/token-v3-general.conf-8eba0c4c0c05.log

Certora Run Summary

  • Started 12 jobs
  • 0 jobs failed

Download Logs

@github-actions
Copy link
Contributor

github-actions bot commented Jul 3, 2025

Certora Run Started (Certora Prover Run)

  • Group ID: 438e0430-909d-4bd2-8508-7742fe6fef45
Config Status Link Log File
AToken.conf Submitted link certora/basic/conf/AToken.conf-fee3f1c649df.log
EModeConfiguration.conf Submitted link certora/basic/conf/EModeConfiguration.conf-68686280edd7.log
NEW-pool-simple-properties.conf --rule cannotDepositInFrozenReserve Submitted link certora/basic/conf/NEW-pool-simple-properties.conf-a529bbfa1334.log
NEW-pool-simple-properties.conf --rule cannotDepositInInactiveReserve Submitted link certora/basic/conf/NEW-pool-simple-properties.conf-493561200e8f.log
NEW-pool-simple-properties.conf --rule cannotDepositZeroAmount Submitted link certora/basic/conf/NEW-pool-simple-properties.conf-af89c41b3711.log
NEW-pool-simple-properties.conf --rule cannotWithdrawFromInactiveReserve Submitted link certora/basic/conf/NEW-pool-simple-properties.conf-1acb2624d07a.log
NEW-pool-simple-properties.conf --rule cannotWithdrawZeroAmount Submitted link certora/basic/conf/NEW-pool-simple-properties.conf-31d4c79dc6a6.log
NEW-pool-simple-properties.conf --rule_sanity none --rule cannotBorrowOnFrozenReserve Submitted link certora/basic/conf/NEW-pool-simple-properties.conf-82a66c5f8a48.log
NEW-pool-simple-properties.conf --rule_sanity none --rule cannotBorrowOnInactiveReserve Submitted link certora/basic/conf/NEW-pool-simple-properties.conf-57108269ce3e.log
NEW-pool-simple-properties.conf --rule_sanity none --rule cannotBorrowOnReserveDisabledForBorrowing Submitted link certora/basic/conf/NEW-pool-simple-properties.conf-8055456b84ad.log
NEW-pool-simple-properties.conf --rule_sanity none --rule cannotBorrowZeroAmount Submitted link certora/basic/conf/NEW-pool-simple-properties.conf-63e95361c0fa.log
ReserveConfiguration.conf Submitted link certora/basic/conf/ReserveConfiguration.conf-b8be506cad37.log
UserConfiguration.conf Submitted link certora/basic/conf/UserConfiguration.conf-590a93910125.log
VariableDebtToken.conf Submitted link certora/basic/conf/VariableDebtToken.conf-18f937faed40.log
stableRemoved.conf Submitted link certora/basic/conf/stableRemoved.conf-33344c16f06b.log

Certora Run Summary

  • Started 15 jobs
  • 0 jobs failed

Download Logs

@github-actions
Copy link
Contributor

github-actions bot commented Jul 3, 2025

Certora Run Started (Certora Prover Run)

  • Group ID: dc5c0bac-8108-405c-8b68-cdc5d7b6abfc
Config Status Link Log File
verifyAToken.conf --rule aTokenBalanceIsFixed_for_claimSingleRewardOnBehalf aTokenBalanceIsFixed_for_claimRewardsToSelf Submitted link certora/stata/conf/verifyAToken.conf-2a7120b67b02.log
verifyAToken.conf --rule aTokenBalanceIsFixed_for_collectAndUpdateRewards aTokenBalanceIsFixed_for_claimRewards aTokenBalanceIsFixed_for_claimRewardsOnBehalf Submitted link certora/stata/conf/verifyAToken.conf-74078dc8ee6f.log
verifyDoubleClaim.conf --rule prevent_duplicate_reward_claiming_single_reward_insufficient Submitted link certora/stata/conf/verifyDoubleClaim.conf-d4aecf0605f8.log
verifyDoubleClaim.conf --rule prevent_duplicate_reward_claiming_single_reward_sufficient Submitted link certora/stata/conf/verifyDoubleClaim.conf-e51b6ecde75e.log
verifyERC4626.conf --rule maxMintMustntRevert maxDepositMustntRevert maxRedeemMustntRevert maxWithdrawMustntRevert totalAssetsMustntRevert Submitted link certora/stata/conf/verifyERC4626.conf-d77ef5f8752e.log
verifyERC4626.conf --rule previewRedeemIndependentOfBalance previewMintAmountCheck previewDepositIndependentOfAllowanceApprove previewWithdrawAmountCheck previewWithdrawIndependentOfBalance2 previewWithdrawIndependentOfBalance1 previewRedeemIndependentOfMaxRedeem1 previewRedeemAmountCheck previewRedeemIndependentOfMaxRedeem2 amountConversionRoundedDown withdrawCheck redeemCheck redeemATokensCheck convertToAssetsCheck convertToSharesCheck toAssetsDoesNotRevert sharesConversionRoundedDown toSharesDoesNotRevert previewDepositAmountCheck maxRedeemCompliance maxWithdrawConversionCompliance previewMintIndependentOfAllowance Submitted link certora/stata/conf/verifyERC4626.conf-7c0d379aa9e5.log
verifyERC4626DepositSummarization.conf --rule depositCheckIndexGRayAssert1 depositATokensCheckIndexGRayAssert1 depositWithPermitCheckIndexGRayAssert1 depositCheckIndexERayAssert1 depositATokensCheckIndexERayAssert1 depositWithPermitCheckIndexERayAssert1 Submitted link certora/stata/conf/verifyERC4626DepositSummarization.conf-e5c999cb5871.log
verifyERC4626Extended.conf --rule previewWithdrawRoundingRange previewRedeemRoundingRange amountConversionPreserved sharesConversionPreserved accountsJoiningSplittingIsLimited convertSumOfAssetsPreserved previewDepositSameAsDeposit previewMintSameAsMint maxDepositConstant Submitted link certora/stata/conf/verifyERC4626Extended.conf-2c2798be4002.log
verifyERC4626Extended.conf --rule redeemATokensSum Submitted link certora/stata/conf/verifyERC4626Extended.conf-69f31ad8e216.log
verifyERC4626Extended.conf --rule redeemSum Submitted link certora/stata/conf/verifyERC4626Extended.conf-847ce4073ebd.log
verifyERC4626MintDepositSummarization.conf --rule depositCheckIndexGRayAssert2 depositATokensCheckIndexGRayAssert2 depositWithPermitCheckIndexGRayAssert2 depositCheckIndexERayAssert2 depositATokensCheckIndexERayAssert2 depositWithPermitCheckIndexERayAssert2 mintCheckIndexGRayUpperBound mintCheckIndexGRayLowerBound mintCheckIndexEqualsRay Submitted link certora/stata/conf/verifyERC4626MintDepositSummarization.conf-3b607b4e574b.log
verifyStataToken.conf --rule getClaimableRewardsBefore_leq_claimed_claimRewardsOnBehalf Submitted link certora/stata/conf/verifyStataToken.conf-9735c41009fb.log
verifyStataToken.conf --rule getClaimableRewards_stable Submitted link certora/stata/conf/verifyStataToken.conf-d9af02b57511.log
verifyStataToken.conf --rule getClaimableRewards_stable_after_deposit Submitted link certora/stata/conf/verifyStataToken.conf-79f0a1952c19.log
verifyStataToken.conf --rule getClaimableRewards_stable_after_refreshRewardTokens Submitted link certora/stata/conf/verifyStataToken.conf-aac26652957f.log
verifyStataToken.conf --rule rewardsConsistencyWhenInsufficientRewards Submitted link certora/stata/conf/verifyStataToken.conf-f8c4c0242831.log
verifyStataToken.conf --rule rewardsConsistencyWhenSufficientRewardsExist Submitted link certora/stata/conf/verifyStataToken.conf-de1c37a64791.log
verifyStataToken.conf --rule rewardsTotalDeclinesOnlyByClaim Submitted link certora/stata/conf/verifyStataToken.conf-ab2d99697b9f.log
verifyStataToken.conf --rule singleAssetAccruedRewards Submitted link certora/stata/conf/verifyStataToken.conf-3fcb9d67995a.log
verifyStataToken.conf --rule solvency_positive_total_supply_only_if_positive_asset Submitted link certora/stata/conf/verifyStataToken.conf-9ad61a8cc471.log
verifyStataToken.conf --rule solvency_total_asset_geq_total_supply Submitted link certora/stata/conf/verifyStataToken.conf-d8092819be8f.log
verifyStataToken.conf --rule totalAssets_stable Submitted link certora/stata/conf/verifyStataToken.conf-deed9572ae4f.log
verifyStataToken.conf --rule totalClaimableRewards_stable Submitted link certora/stata/conf/verifyStataToken.conf-1fde88d92549.log

Certora Run Summary

  • Started 23 jobs
  • 0 jobs failed

Download Logs

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.

6 participants