Skip to content

Conversation

@Luigy-Lemon
Copy link
Contributor

sGHO - Savings GHO Vault

About

sGHO is an EIP-4626 vault that allows users to earn yield on their GHO tokens. The vault automatically distributes yield to depositors through internal accounting, with a soft requirement for a buffer of GHO tokens to be maintained for yield distribution during full withdrawals.

Features

  • Full EIP-4626 compatibility. sGHO implements all standard ERC4626 functions for deposits, withdrawals, and share calculations.

  • Automatic yield distribution. Yield is calculated and distributed internally during vault operations, eliminating the need for external yield claiming.

  • Role-based access control. The system uses Aave's ACLManager for managing permissions:

    • YIELD_MANAGER: Can set target rates and manage yield parameters
    • FUNDS_ADMIN: Can rescue tokens in case of emergencies
  • Permit support. Users can approve sGHO to spend their GHO tokens using EIP-2612 permits, enabling gasless approvals.

  • Donation handling. The vault can handle external GHO donations and automatically incorporate them into the yield distribution system.

Architecture

The system consists of a single main contract:

sGHO.sol: The main vault contract that:

  • Implements ERC4626 for standard vault operations
  • Handles deposits and withdrawals with automatic yield distribution
  • Manages internal asset accounting with yield accrual
  • Integrates with Aave's ACLManager for role management

Inheritance and Dependencies

sGHO.sol

  • Inherits from:
    • ERC4626 (OpenZeppelin) - For vault functionality
    • ERC20Permit (OpenZeppelin) - For permit functionality
    • Initializable (OpenZeppelin) - For initialization pattern
    • IsGHO (Custom interface) - Contract interface
  • Uses OpenZeppelin interfaces:
    • IERC20 - For token operations
    • IAccessControl - For role management
  • Uses Aave libraries:
    • WadRayMath - For precise mathematical calculations

Yield Calculation and Distribution

The yield is calculated and distributed automatically during vault operations. The yield compounds upon every vault state update, such as deposits or withdrawals.

function _updateVault(uint256 assets, bool assetIncrease) internal {
  uint256 ratePerSecond = internalTotalAssets.wadMul(targetRate).wadDiv(ONE_YEAR);
  uint256 timeSinceLastUpdate = block.timestamp - lastUpdate;

  if (assetIncrease) {
    internalTotalAssets = timeSinceLastUpdate.wadMul(ratePerSecond) + assets;
  } else {
    internalTotalAssets = timeSinceLastUpdate.wadMul(ratePerSecond) - assets;
  }
}

Key Components:

  • Target Rate: Annual percentage rate in basis points (e.g., 1000 = 10%)
  • Internal Total Assets: Tracks the vault's total assets including accrued yield
  • Yield Index: Tracks the cumulative yield multiplier
  • Last Update: Timestamp of the last vault update
  • GHO Buffer: Optional GHO balance for smooth yield distribution

Yield Distribution Process:

  1. When deposits or withdrawals occur, _updateVault() is called
  2. Yield is calculated based on elapsed time and current total assets
  3. The internal total assets are updated to include accrued yield
  4. A GHO buffer can be maintained to ensure smooth yield distribution during full withdrawals

Security Considerations

The system implements several security measures:

  • Role-based access control through Aave's ACLManager
  • Token rescue mechanism for handling stuck tokens
  • No ETH acceptance to prevent accidental ETH deposits
  • Optional GHO buffer can be maintained for optimal yield distribution
  • Initialization pattern prevents re-initialization attacks

Limitations

  • Target rates can only be modified by accounts with the YIELD_MANAGER role
  • The system requires GHO tokens to be properly configured and accessible
  • A GHO buffer is recommended but not required for optimal operation
  • Yield is distributed automatically during vault operations, not on-demand

Security Procedures

For this project, the security procedures applied/being finished are:

  • Comprehensive test suite covering all vault operations
  • Fuzzing tests for yield calculations and share conversions
  • Integration tests with Aave's ACLManager
  • Property-based testing for ERC4626 compliance
  • Buffer requirement validation tests

Usage Examples

Depositing GHO

// Deposit GHO into the vault
sgho.deposit(amount, receiver);

// Deposit with permit (gasless approval)
sgho.permit(owner, spender, value, deadline, signature);
sgho.deposit(amount, receiver);

// Mint shares for a specific amount of GHO
sgho.mint(shares, receiver);

Withdrawing GHO

// Withdraw GHO from the vault
sgho.withdraw(assets, receiver, owner);

// Redeem shares for GHO
sgho.redeem(shares, receiver, owner);

Managing Yield and Configuration

// Set target rate (YIELD_MANAGER only)
sgho.setTargetRate(1000); // 10% APR

// View current vault APR
uint256 apr = sgho.vaultAPR();

// Rescue tokens in emergency (FUNDS_ADMIN only)
sgho.rescueERC20(tokenAddress, recipient, amount);

Permit Usage (Gasless Approvals)

// Standard permit
sgho.permit(owner, spender, value, deadline, v, r, s);

// Custom permit with signature bytes
sgho.permit(owner, spender, value, deadline, signature);

Important Notes

  • GHO Buffer: A GHO buffer can be maintained to maintain full redeemability, but not mandatory for operations
  • Automatic Yield: Yield is distributed automatically during deposit/withdrawal operations
  • No External Yield Management: Unlike the previous version, there is no separate YieldMaestro contract
  • Simplified Architecture: The system is now self-contained within the sGHO contract
  • Backwards Compatibility: Previous IStakedToken compatibility has been removed for a cleaner implementation

@github-actions
Copy link
Contributor

github-actions bot commented Jun 26, 2025

Forge Build Sizes

🔕 Unchanged
Contract Runtime Size (B) Initcode Size (B) Runtime Margin (B) Initcode Margin (B)
ACLManager 3,493 3,971 21,083 45,181
ATokenHandler 9,960 10,680 14,616 38,472
ATokenInstance 10,014 11,107 14,562 38,045
ATokenMock 803 961 23,773 48,191
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
AaveOracle 2,466 3,462 22,110 45,690
AaveProtocolDataProvider 7,435 7,893 17,141 41,259
AaveV3BatchOrchestration 44 94 24,532 49,058
AaveV3ConfigEngine 7,897 9,426 16,679 39,726
AaveV3DefaultRateStrategyProcedure 21 47 24,555 49,105
AaveV3GettersBatchOne 189 22,551 24,387 26,601
AaveV3GettersBatchTwo 189 18,744 24,387 30,408
AaveV3GettersProcedureOne 21 47 24,555 49,105
AaveV3GettersProcedureTwo 21 47 24,555 49,105
AaveV3HelpersBatchOne 353 35,476 24,223 13,676
AaveV3HelpersBatchTwo 229 30,885 24,347 18,267
AaveV3HelpersProcedureOne 21 47 24,555 49,105
AaveV3HelpersProcedureTwo 21 47 24,555 49,105
AaveV3IncentiveProcedure 21 47 24,555 49,105
AaveV3L2PoolBatch 137 39,699 24,439 9,453
AaveV3L2PoolProcedure 21 47 24,555 49,105
AaveV3LibrariesBatch1 321 21,169 24,255 27,983
AaveV3LibrariesBatch2 321 41,249 24,255 7,903
AaveV3MiscBatch 137 6,160 24,439 42,992
AaveV3MiscProcedure 21 47 24,555 49,105
AaveV3MockAssetEModeUpdate 3,617 3,846 20,959 45,306
AaveV3MockBorrowUpdate 3,506 3,698 21,070 45,454
AaveV3MockBorrowUpdateNoChange 3,536 3,728 21,040 45,424
AaveV3MockCapUpdate 3,451 3,643 21,125 45,509
AaveV3MockCollateralUpdate 3,510 3,702 21,066 45,450
AaveV3MockCollateralUpdateCorrectBonus 3,510 3,702 21,066 45,450
AaveV3MockCollateralUpdateNoChange 3,537 3,729 21,039 45,423
AaveV3MockCollateralUpdateWrongBonus 3,514 3,706 21,062 45,446
AaveV3MockEModeCategoryCreation 3,900 4,179 20,676 44,973
AaveV3MockEModeCategoryUpdate 3,367 3,499 21,209 45,653
AaveV3MockEModeCategoryUpdateEdgeBonus 3,370 3,502 21,206 45,650
AaveV3MockEModeCategoryUpdateNoChange 3,438 3,570 21,138 45,582
AaveV3MockListing 3,792 4,021 20,784 45,131
AaveV3MockListingCustom 4,086 4,395 20,490 44,757
AaveV3MockListingCustomWithEModeCreation 4,565 4,888 20,011 44,264
AaveV3MockListingWithEModeCreation 4,270 4,513 20,306 44,639
AaveV3MockPriceFeedUpdate 3,461 3,690 21,115 45,462
AaveV3MockRatesUpdate 3,469 3,661 21,107 45,491
AaveV3OracleProcedure 21 47 24,555 49,105
AaveV3ParaswapBatch 189 28,296 24,387 20,856
AaveV3ParaswapProcedure 21 47 24,555 49,105
AaveV3PeripheryBatch 353 37,439 24,223 11,713
AaveV3PoolBatch 137 38,399 24,439 10,753
AaveV3PoolConfigProcedure 21 47 24,555 49,105
AaveV3PoolProcedure 21 47 24,555 49,105
AaveV3SetupBatch 11,437 28,469 13,139 20,683
AaveV3SetupProcedure 21 47 24,555 49,105
AaveV3TestListing 5,172 12,833 19,404 36,319
AaveV3TokensBatch 137 19,759 24,439 29,393
AaveV3TokensProcedure 21 47 24,555 49,105
AaveV3TreasuryProcedure 21 47 24,555 49,105
Actor 945 1,757 23,631 47,395
Address (lib/solidity-utils/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol) 44 94 24,532 49,058
Address (src/contracts/dependencies/openzeppelin/contracts/Address.sol) 44 94 24,532 49,058
AdminUpgradeabilityProxy 1,546 2,458 23,030 46,694
AugustusRegistryMock 162 188 24,414 48,964
BaseAdminUpgradeabilityProxy 1,538 1,566 23,038 47,586
BaseHandler 147 866 24,429 48,286
BaseHooks 147 866 24,429 48,286
BaseImmutableAdminUpgradeabilityProxy 1,304 1,471 23,272 47,681
BaseUpgradeabilityProxy 108 134 24,468 49,018
BorrowEngine 2,499 2,551 22,077 46,601
BorrowLogic 10,905 10,957 13,671 38,195
BorrowingHandler 13,616 14,336 10,960 34,816
CalldataLogic 44 94 24,532 49,058
CapsEngine 1,149 1,201 23,427 47,951
CollateralEngine 2,704 2,756 21,872 46,396
Collector 6,496 6,710 18,080 42,442
ConfiguratorInputTypes 44 94 24,532 49,058
ConfiguratorLogic 5,513 5,565 19,063 43,587
Create2Factory 52 78 24,524 49,074
Create2Utils 121 171 24,455 48,981
DataTypes 44 94 24,532 49,058
DefaultMarketInput 21 47 24,555 49,105
DefaultReserveInterestRateStrategyV2 3,575 3,759 21,001 45,393
DeployPermit2 44 94 24,532 49,058
DeployUtils 916 944 23,660 48,208
DonationAttackHandler 670 1,390 23,906 47,762
ECDSA 44 94 24,532 49,058
EIP712SigUtils 1,576 1,628 23,000 47,524
EModeConfiguration 44 94 24,532 49,058
EModeEngine 6,397 6,449 18,179 42,703
EModeLogic 3,048 3,100 21,528 46,052
ERC1967Proxy 122 973 24,454 48,179
ERC1967Utils 44 94 24,532 49,058
ERC20 (src/contracts/dependencies/openzeppelin/contracts/ERC20.sol) 2,086 2,788 22,490 46,364
EmissionManager 3,444 3,905 21,132 45,247
EmptyImplementation 21 47 24,555 49,105
EngineFlags 44 94 24,532 49,058
EnumerableSet 44 94 24,532 49,058
Errors (lib/solidity-utils/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Errors.sol) 44 94 24,532 49,058
Errors (src/contracts/protocol/libraries/helpers/Errors.sol) 44 94 24,532 49,058
FactoryDeployer 214 240 24,362 48,912
Faucet 2,038 2,570 22,538 46,582
FlashLoanHandler 8,940 9,660 15,636 39,492
FlashLoanLogic 8,281 8,333 16,295 40,819
FlashloanAttacker 1,610 2,034 22,966 47,118
GPv2SafeERC20 44 94 24,532 49,058
GenericLogic 44 94 24,532 49,058
InitializableAdminUpgradeabilityProxy 2,392 2,420 22,184 46,732
InitializableImmutableAdminUpgradeabilityProxy 1,863 2,030 22,713 47,122
InitializableUpgradeabilityProxy 879 907 23,697 48,245
IsolationModeLogic 44 94 24,532 49,058
L2Encoder 3,585 3,780 20,991 45,372
L2PoolInstance 21,982 22,429 2,594 26,723
LendingHandler 12,137 12,857 12,439 36,295
LiquidationDataProvider 7,536 7,810 17,040 41,342
LiquidationHandler 11,665 12,385 12,911 36,767
LiquidationHelper 44 94 24,532 49,058
LiquidationLogic 13,009 13,061 11,567 36,091
ListingEngine 6,731 6,783 17,845 42,369
MarketReportUtils 44 94 24,532 49,058
Math 44 94 24,532 49,058
MathUtils 44 94 24,532 49,058
MessageHashUtils 44 94 24,532 49,058
MetadataReporter 12,326 12,354 12,250 36,798
MintableDelegationERC20 2,534 3,267 22,042 45,885
MintableERC20 3,729 4,626 20,847 44,526
Mock 182 208 24,394 48,944
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
MockAggregator 134 273 24,442 48,879
MockAggregatorSetPrice 243 386 24,333 48,766
MockBadTransferStrategy 914 1,103 23,662 48,049
MockERC1271 450 478 24,126 48,674
MockERC20AaveLMUpgradeable 7,937 8,152 16,639 41,000
MockERC4626StataTokenUpgradeable 9,517 9,859 15,059 39,293
MockFlashLoanATokenReceiver 2,378 2,756 22,198 46,396
MockFlashLoanBorrowInsideFlashLoan 2,123 2,400 22,453 46,752
MockFlashLoanReceiver (src/contracts/mocks/flashloan/MockFlashLoanReceiver.sol) 2,237 2,522 22,339 46,630
MockFlashLoanReceiver (tests/invariants/helpers/FlashLoanReceiver.sol) 2,034 2,062 22,542 47,090
MockFlashLoanReceiverWithoutMint 1,234 1,518 23,342 47,634
MockFlashLoanSimpleReceiver 1,484 1,769 23,092 47,383
MockIncentivesController 132 158 24,444 48,994
MockInitializableFromConstructorImple 349 643 24,227 48,509
MockInitializableImple 1,556 1,591 23,020 47,561
MockInitializableImpleV2 1,558 1,593 23,018 47,559
MockInitializableV1 307 342 24,269 48,810
MockInitializableV2 309 344 24,267 48,808
MockL2Pool 22,009 22,521 2,567 26,631
MockParaSwapAugustus 1,939 1,967 22,637 47,185
MockParaSwapAugustusRegistry 179 302 24,397 48,850
MockPeripheryContractV1 309 337 24,267 48,815
MockPeripheryContractV2 290 318 24,286 48,834
MockPoolInherited 20,846 21,368 3,730 27,784
MockReentrantInitializableImple 413 448 24,163 48,704
MockReserveConfiguration 2,142 2,170 22,434 46,982
MockReserveInterestRateStrategy 3,070 3,257 21,506 45,895
MockScaledTestnetERC20 4,479 5,845 20,097 43,307
MockScaledToken 2,679 3,505 21,897 45,647
MockSimpleFlashLoanReceiverWithoutMint 754 1,037 23,822 48,115
MockVariableDebtToken (src/contracts/mocks/tokens/MockDebtTokens.sol) 7,112 8,176 17,464 40,976
MockVariableDebtToken (src/contracts/mocks/upgradeability/MockVariableDebtToken.sol) 7,090 8,104 17,486 41,048
Ownable (src/contracts/dependencies/openzeppelin/contracts/Ownable.sol) 629 721 23,947 48,431
Panic 44 94 24,532 49,058
ParaSwapLiquiditySwapAdapter 8,151 9,238 16,425 39,914
ParaSwapRepayAdapter 8,726 9,902 15,850 39,250
ParaSwapWithdrawSwapAdapter 6,673 7,690 17,903 41,462
PercentageMath 44 94 24,532 49,058
PercentageMathWrapper 297 325 24,279 48,827
PoolAddressesProvider 6,965 8,251 17,611 40,901
PoolAddressesProviderRegistry 1,946 2,407 22,630 46,745
PoolConfiguratorInstance 16,585 16,620 7,991 32,532
PoolHandler 12,234 12,954 12,342 36,198
PoolInstance 20,686 21,129 3,890 28,023
PoolLogic 7,971 8,023 16,605 41,129
PoolPermissionedHandler 10,268 10,988 14,308 38,164
PoolStorage 21 47 24,555 49,105
Pretty 2,458 2,510 22,118 46,642
PriceAggregatorHandler 485 1,205 24,091 47,947
PriceFeedEngine 1,544 1,596 23,032 47,556
PriceOracle 469 497 24,107 48,655
PriceOracleSentinel 1,530 1,746 23,046 47,406
PropertiesLibString 44 94 24,532 49,058
ProtocolAssertions 147 866 24,429 48,286
ProxyAdmin 998 1,234 23,578 47,918
ProxyHelpers 44 94 24,532 49,058
PullRewardsTransferStrategy 1,172 1,398 23,404 47,754
RateEngine 2,227 2,279 22,349 46,873
ReserveConfiguration 128 178 24,448 48,974
ReserveLogic 44 94 24,532 49,058
RevenueSplitter 1,953 2,270 22,623 46,882
RewardsController 13,965 14,155 10,611 34,997
RewardsDataTypes 44 94 24,532 49,058
SafeCast 44 94 24,532 49,058
SafeERC20 (lib/solidity-utils/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol) 44 94 24,532 49,058
SafeERC20 (src/contracts/dependencies/openzeppelin/contracts/SafeERC20.sol) 44 94 24,532 49,058
SafeMath 44 94 24,532 49,058
SequencerOracle 865 1,326 23,711 47,826
Setup 147 866 24,429 48,286
ShortStrings 44 94 24,532 49,058
SigUtils 492 544 24,084 48,608
SignedMath 44 94 24,532 49,058
SlotParser 330 382 24,246 48,770
StakeMock 355 383 24,221 48,769
StakedTokenTransferStrategy 1,972 2,682 22,604 46,470
StataTokenFactory 2,989 3,445 21,587 45,707
StataTokenV2 18,933 19,611 5,643 29,541
StorageSlot 44 94 24,532 49,058
Strings (lib/solidity-utils/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Strings.sol) 44 94 24,532 49,058
Strings (src/contracts/dependencies/openzeppelin/contracts/Strings.sol) 44 94 24,532 49,058
Strings (tests/invariants/utils/Pretty.sol) 44 94 24,532 49,058
SupplyLogic 10,186 10,238 14,390 38,914
TestERC20 3,948 5,125 20,628 44,027
TestnetERC20 4,359 5,717 20,217 43,435
TransparentProxyFactory 6,667 6,695 17,909 42,457
TransparentUpgradeableProxy 1,096 3,528 23,480 45,624
UiIncentiveDataProviderV3 9,118 9,146 15,458 40,006
UiPoolDataProviderV3 9,977 10,175 14,599 38,977
UpgradeabilityProxy 108 861 24,468 48,291
UserConfiguration 44 94 24,532 49,058
ValidationLogic 189 239 24,387 48,913
VariableDebtTokenHandler 1,185 1,905 23,391 47,247
VariableDebtTokenHarness 7,108 8,122 17,468 41,030
VariableDebtTokenInstance 7,090 8,062 17,486 41,090
WETH9 1,886 2,352 22,690 46,800
WETH9Mock 2,641 3,812 21,935 45,340
WETH9Mocked 2,192 2,658 22,384 46,494
WadRayMath 44 94 24,532 49,058
WadRayMathWrapper 816 844 23,760 48,308
WalletBalanceProvider 2,485 2,513 22,091 46,639
WalletMock 21 47 24,555 49,105
WrappedTokenGatewayV3 5,387 6,252 19,189 42,900
sGHO 10,111 10,325 14,465 38,827

@github-actions
Copy link
Contributor

github-actions bot commented Jun 26, 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

@github-actions
Copy link
Contributor

github-actions bot commented Jun 26, 2025

🌈 Test Results
No files changed, compilation skipped
2025-07-15T17:28:03.859923Z 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 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 20.44ms (4.41ms CPU time)
2025-07-15T17:28:03.868778Z 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-15T17:28:03.868991Z 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-15T17:28:03.878989Z 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 45.20ms (980.33µs CPU time)

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 51.29ms (8.37ms CPU time)
2025-07-15T17:28:03.903058Z 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-15T17:28:03.921157Z 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 36.17ms (2.11ms CPU time)
2025-07-15T17:28:03.937584Z 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 80.37ms (32.41ms CPU time)

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 50.81ms (267.05µs CPU time)
2025-07-15T17:28:03.964534Z 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-15T17:28:03.965470Z 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 114.25ms (75.19ms CPU time)
2025-07-15T17:28:04.084121Z 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/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 58.61ms (5.14ms CPU time)
2025-07-15T17:28:04.148062Z 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 55.63ms (9.70ms CPU time)

Ran 10 tests for tests/extensions/stata-token/StataTokenV2Pausable.t.sol:StataTokenV2PausableTest
[PASS] test_canPause() (gas: 26789)
[PASS] test_canPause_shouldReturnFalse(address) (runs: 1000, μ: 27282, ~: 27282)
[PASS] test_claimingRewards_shouldRevert() (gas: 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 232.35ms (189.01ms CPU time)
2025-07-15T17:28:04.200748Z 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-15T17:28:04.201094Z 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 35.35ms (1.71ms CPU time)

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 56.01ms (229.83µs CPU time)
2025-07-15T17:28:04.231628Z 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-15T17:28:04.263102Z 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 65.45ms (9.98ms CPU time)
2025-07-15T17:28:04.329920Z 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 57.52ms (1.62ms CPU time)
2025-07-15T17:28:04.389903Z 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 59.94ms (560.19µs CPU time)
2025-07-15T17:28:04.449009Z 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, μ: 370675, ~: 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.37s (1.31s CPU time)
2025-07-15T17:28:05.814140Z 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 73.14ms (6.05ms CPU time)
2025-07-15T17:28:05.890149Z 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 62.97ms (5.39ms CPU time)
2025-07-15T17:28:05.955966Z 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-15T17:28:05.987305Z 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-15T17:28:06.031403Z 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-15T17:28:06.068063Z 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-15T17:28:06.111406Z 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: 62326474)
[PASS] testAaveV3Batch_reuseIncentivesProxy() (gas: 53654523)
[PASS] testAaveV3L2BatchDeploymentCheck() (gas: 64117594)
[PASS] testAaveV3TreasuryPartnerBatchDeploymentCheck() (gas: 62835760)
Suite result: ok. 5 passed; 0 failed; 0 skipped; finished in 211.49ms (200.70ms 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 43.13ms (24.66ms CPU time)
2025-07-15T17:28:06.211045Z 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, μ: 754822, ~: 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 3.02s (2.99s CPU time)
2025-07-15T17:28:07.257113Z 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, μ: 123393, ~: 123674)
[PASS] test_calculate_rates_below_op_usage((uint16,uint32,uint32,uint32),uint256,uint256,uint256) (runs: 1000, μ: 117662, ~: 120332)
[PASS] test_calculate_rates_below_op_usage_when_no_debt((uint16,uint32,uint32,uint32),uint256,uint256) (runs: 1000, μ: 74706, ~: 75364)
[PASS] test_calculate_rates_empty_reserve((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 43498, ~: 43416)
[PASS] test_calculate_rates_when_not_using_virtual_valance((uint16,uint32,uint32,uint32),uint256,uint256) (runs: 1000, μ: 67577, ~: 68630)
[PASS] test_calculate_rates_when_total_debt_0((uint16,uint32,uint32,uint32),uint256,uint256) (runs: 1000, μ: 67780, ~: 68639)
[PASS] test_fuzz_calculate_rates_80_percent_usage_added_and_virtual_equal(uint256) (runs: 1000, μ: 32764, ~: 32453)
[PASS] test_zero_rates_strategy_calculate_rates() (gas: 18549)
Suite result: ok. 13 passed; 0 failed; 0 skipped; finished in 4.37s (4.34s CPU time)
2025-07-15T17:28:08.312115Z 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, μ: 52112, ~: 52029)
[PASS] test_new_SetReserveInterestRateParams_when_not_configurator((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 25910, ~: 25843)
[PASS] test_reverts_SetReserveInterestRateParams_when_gt_maxRate((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 29074, ~: 29184)
[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, μ: 26769, ~: 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.57s (1.54s CPU time)
2025-07-15T17:28:09.884314Z 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, μ: 51477, ~: 51412)
[PASS] test_new_SetReserveInterestRateParams_when_not_configurator((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 25271, ~: 25210)
[PASS] test_reverts_SetReserveInterestRateParams_when_gt_maxRate((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 28468, ~: 28561)
[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, μ: 26140, ~: 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.53s (1.50s CPU time)
2025-07-15T17:28:11.415009Z 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, μ: 3412400, ~: 3411638)
[PASS] test_mint_variableDebt_caller_alice((uint8,string,string,string,string,address,address,address,bool)) (runs: 1000, μ: 3485970, ~: 3484817)
[PASS] test_mint_variableDebt_caller_bob_onBehalf_alice((uint8,string,string,string,string,address,address,address,bool)) (runs: 1000, μ: 3497795, ~: 3499438)
[PASS] test_new_VariableDebtToken_implementation() (gas: 1557747)
[PASS] test_partial_burn_variableDebt((uint8,string,string,string,string,address,address,address,bool)) (runs: 1000, μ: 3500881, ~: 3499497)
[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, μ: 2748106, ~: 2748040)
[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, μ: 3499538, ~: 3499505)
Suite result: ok. 17 passed; 0 failed; 0 skipped; finished in 6.02s (5.99s 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, μ: 13327, ~: 13277)
[PASS] test_wadDiv() (gas: 12869)
[PASS] test_wadDiv_fuzzing(uint256,uint256) (runs: 1000, μ: 10515, ~: 10721)
[PASS] test_wadMul() (gas: 11142)
[PASS] test_wadMul_edge() (gas: 11184)
[PASS] test_wadMul_fuzzing(uint256,uint256) (runs: 1000, μ: 10761, ~: 11339)
[PASS] test_wadToRay() (gas: 10867)
[PASS] test_wadToRay_fuzz(uint256) (runs: 1000, μ: 12118, ~: 12348)
Suite result: ok. 12 passed; 0 failed; 0 skipped; finished in 209.92ms (208.96ms CPU time)
2025-07-15T17:28:13.488634Z 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/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 40.29ms (10.76ms CPU time)
2025-07-15T17:28:13.528256Z 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.07ms (2.07ms CPU time)
2025-07-15T17:28:13.564897Z 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, μ: 40925, ~: 40852)
[PASS] test_getMaxVariableBorrowRate((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 38374, ~: 38324)
[PASS] test_initialization() (gas: 26143)
[PASS] test_new_DefaultReserveInterestRateStrategy_wrong_provider() (gas: 41972)
[PASS] test_new_SetReserveInterestRateParams((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 52054, ~: 51970)
[PASS] test_new_SetReserveInterestRateParams_override_method((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 49239, ~: 49178)
[PASS] test_new_SetReserveInterestRateParams_when_not_configurator((uint16,uint32,uint32,uint32)) (runs: 1000, μ: 25892, ~: 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.25s (3.22s CPU time)

Ran 15 tests for tests/extensions/RevenueSplitter.t.sol:RevenueSplitterTest
[PASS] test_constructor() (gas: 15303)
[PASS] test_constructor_fuzzing(uint16) (runs: 1000, μ: 457649, ~: 457649)
[PASS] test_constructor_revert_invalid_split_percentage() (gas: 174509)
[PASS] test_splitFund_oneToken() (gas: 410660)
[PASS] test_splitFund_reverts_randomAddress() (gas: 51282)
[PASS] test_splitFund_zeroAmount_noOp() (gas: 371538)
[PASS] test_splitFund_zeroFunds_noOp() (gas: 50848)
[PASS] test_splitFund_zeroTokens_noOp() (gas: 370457)
[PASS] test_splitFunds_fixed() (gas: 447612)
[PASS] test_splitFunds_fuzz_max(uint256,uint256) (runs: 1000, μ: 448060, ~: 449781)
[PASS] test_splitFunds_fuzz_realistic(uint256,uint256) (runs: 1000, μ: 446837, ~: 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, μ: 100053, ~: 101899)
Suite result: ok. 15 passed; 0 failed; 0 skipped; finished in 3.63s (3.62s CPU time)
2025-07-15T17:28:18.289745Z 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 44.82ms (14.26ms CPU time)
2025-07-15T17:28:18.343405Z 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 36.52ms (1.01ms CPU time)
2025-07-15T17:28:18.380669Z 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, μ: 1126183, ~: 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 3.03s (3.01s CPU time)
2025-07-15T17:28:21.416800Z 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 37.07ms (4.55ms CPU time)
2025-07-15T17:28:21.459328Z 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 48.31ms (6.67ms CPU time)
2025-07-15T17:28:21.503291Z 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, μ: 846497, ~: 846801)
[PASS] test_liquidation_with_liquidation_grace_period_collateral_active(uint40) (runs: 1000, μ: 1004230, ~: 1007125)
[PASS] test_liquidation_with_liquidation_grace_period_debt_active(uint40) (runs: 1000, μ: 1002622, ~: 1005593)
[PASS] test_liquidation_with_liquidation_grace_period_debt_collateral_active(uint40) (runs: 1000, μ: 1017681, ~: 1020970)
[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 18.21s (18.16s CPU time)
2025-07-15T17:28:22.067466Z 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: 1921978)
[PASS] test_mintToTreasury_two_assets_zero_amount() (gas: 54085)
[PASS] test_repay() (gas: 1258413)
[PASS] test_repay_with_ATokens() (gas: 1097185)
[PASS] test_supply() (gas: 1751013)
[PASS] test_withdraw() (gas: 779053)
[PASS] test_withdraw_with_active_borrows() (gas: 921594)
Suite result: ok. 22 passed; 0 failed; 0 skipped; finished in 99.57ms (58.63ms CPU time)
2025-07-15T17:28:22.169482Z 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/Pool.OperationsComposition.gas.t.sol:PoolOperationsComposition_gas_Tests
[PASS] test_batchLiquidation() (gas: 2149550)
[PASS] test_repayAndWithdraw() (gas: 1254410)
[PASS] test_supplyAndBorrow() (gas: 646871)
Suite result: ok. 3 passed; 0 failed; 0 skipped; finished in 51.06ms (10.72ms CPU time)
2025-07-15T17:28:22.217620Z 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/protocol/pool/Pool.Repay.t.sol:PoolRepayTests
[PASS] test_full_repay_borrow_variable_in_isolation() (gas: 545498)
[PASS] test_partial_repay_borrow_variable_in_isolation() (gas: 615151)
[PASS] test_repayWithATokens_full_collateral_variable_borrow() (gas: 574093)
[PASS] test_repayWithATokens_full_variable_borrow() (gas: 376336)
[PASS] test_repayWithATokens_fuzz_collateral_variable_borrow(uint256,uint32) (runs: 1000, μ: 561992, ~: 562240)
[PASS] test_repayWithPermit(uint128,uint128,uint128,uint128,uint128) (runs: 1000, μ: 548385, ~: 550836)
[PASS] test_repayWithPermit_not_failing_if_permit_was_used(uint128,uint128,uint128,uint128,uint128) (runs: 1000, μ: 554045, ~: 556583)
[PASS] test_repayWithPermit_should_revert_if_permit_is_less_then_repay_amount(uint128,uint128,uint128,uint128,uint128) (runs: 1000, μ: 504754, ~: 504875)
[PASS] test_repay_full_variable_borrow() (gas: 361630)
[PASS] test_revert_repay_full_stable_borrow() (gas: 314208)
[PASS] test_reverts_borrow_invalidAmount() (gas: 51713)
[PASS] test_reverts_borrow_reserveInactive() (gas: 123594)
[PASS] test_reverts_borrow_reservePaused() (gas: 91818)
[PASS] test_reverts_no_explicit_repay_on_behalf() (gas: 308613)
[PASS] test_reverts_repay_no_debt() (gas: 51974)
Suite result: ok. 15 passed; 0 failed; 0 skipped; finished in 9.93s (9.90s CPU time)
2025-07-15T17:28:32.153105Z 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/gas/Pool.Setters.gas.t.sol:PoolSetters_gas_Tests
[PASS] test_setUserEMode() (gas: 1707226)
[PASS] test_setUserEModeOnBehalfOf() (gas: 1353385)
[PASS] test_setUserUseReserveAsCollateral() (gas: 570676)
[PASS] test_setUserUseReserveAsCollateralonBehalfOf() (gas: 632988)
Suite result: ok. 4 passed; 0 failed; 0 skipped; finished in 49.13ms (8.80ms CPU time)
2025-07-15T17:28:32.202930Z 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 20 tests for tests/extensions/v3-config-engine/AaveV3ConfigEngineTest.t.sol:AaveV3ConfigEngineTest
[PASS] testAssetEModeUpdates() (gas: 2739139)
[PASS] testBorrowUpdatesNoChange() (gas: 2452590)
[PASS] testBorrowsUpdates() (gas: 2521318)
[PASS] testCapsUpdate() (gas: 2462068)
[PASS] testCollateralUpdateCorrectBonus() (gas: 2476444)
[PASS] testCollateralUpdateWrongBonus() (gas: 796163)
[PASS] testCollateralsUpdates() (gas: 2475976)
[PASS] testCollateralsUpdatesNoChange() (gas: 2450745)
[PASS] testCollateralsUpdatesNoChangeShouldNotEmit() (gas: 801779)
[PASS] testEModeCategoryCreation() (gas: 1239619)
[PASS] testEModeCategoryUpdates() (gas: 2605964)
[PASS] testEModeCategoryUpdatesNoChange() (gas: 2607724)
[PASS] testEModeCategoryUpdatesNoChangeShouldNotEmit() (gas: 875932)
[PASS] testEModeCategoryUpdatesWrongBonus() (gas: 866325)
[PASS] testListingWithEModeCategoryCreation() (gas: 5870626)
[PASS] testListings() (gas: 5580857)
[PASS] testListingsCustom() (gas: 9280566)
[PASS] testListingsCustomWithEModeCategoryCreation() (gas: 9571101)
[PASS] testPriceFeedsUpdates() (gas: 2528345)
[PASS] testRateStrategiesUpdates() (gas: 2515761)
Suite result: ok. 20 passed; 0 failed; 0 skipped; finished in 26.61s (26.55s CPU time)
2025-07-15T17:28:32.805572Z 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-15T17:28:32.825000Z 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/deployments/AaveV3PermissionsTest.t.sol:AaveV3PermissionsTest
[PASS] testCheckPermissions() (gas: 52530794)
[PASS] testCheckPermissionsTreasuryPartner() (gas: 53022360)
Suite result: ok. 2 passed; 0 failed; 0 skipped; finished in 40.81ms (35.97ms CPU time)
2025-07-15T17:28:32.846499Z 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 30.37ms (1.63ms CPU time)
2025-07-15T17:28:32.888920Z 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 32.58ms (337.62µs CPU time)

Ran 5 tests for tests/treasury/Collector.t.sol:CollectorTest
[PASS] testApprove() (gas: 49702)
[PASS] testApproveWhenNotFundsAdmin() (gas: 18183)
[PASS] testTransfer() (gas: 54858)
[PASS] testTransferWhenNotFundsAdmin() (gas: 18207)
[PASS] test_receiveEth() (gas: 20265)
Suite result: ok. 5 passed; 0 failed; 0 skipped; finished in 3.14ms (269.83µ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.08ms (295.58µ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.25ms (497.11µs CPU time)

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

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 17.00ms (7.13ms CPU time)
2025-07-15T17:28:33.132651Z 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.Supply.t.sol:PoolSupplyTests
[PASS] test_deprecated_deposit() (gas: 233738)
[PASS] test_first_supply() (gas: 233804)
[PASS] test_first_supply_on_behalf() (gas: 235829)
[PASS] test_reverts_SupplyToAToken() (gas: 50067)
[PASS] test_reverts_supply_cap() (gas: 104499)
[PASS] test_reverts_supply_invalidAmount() (gas: 47731)
[PASS] test_reverts_supply_reserveFrozen() (gas: 116747)
[PASS] test_reverts_supply_reserveInactive() (gas: 119532)
[PASS] test_reverts_supply_reservePaused() (gas: 87799)
[PASS] test_supplyWithPermit(uint128,uint120,uint128) (runs: 1000, μ: 407291, ~: 407298)
[PASS] test_supplyWithPermit_not_failing_if_permit_was_used(uint128,uint120,uint128) (runs: 1000, μ: 407851, ~: 407855)
[PASS] test_supplyWithPermit_should_revert_if_permit_is_less_then_supply_amount(uint128,uint128) (runs: 1000, μ: 277683, ~: 277684)
[PASS] test_supply_after_collateral_enabled() (gas: 279391)
Suite result: ok. 13 passed; 0 failed; 0 skipped; finished in 4.44s (4.41s CPU time)
2025-07-15T17:28:36.645426Z 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/protocol/pool/Pool.Withdraw.t.sol:PoolWithdrawTests
[PASS] test_Reverts_withdraw_transferred_funds() (gas: 526689)
[PASS] test_full_withdraw() (gas: 226899)
[PASS] test_full_withdraw_to() (gas: 232409)
[PASS] test_partial_withdraw() (gas: 223419)
[PASS] test_reverts_WithdrawToAToken() (gas: 237901)
[PASS] test_reverts_withdraw_hf_lt_lqt() (gas: 650057)
[PASS] test_reverts_withdraw_invalidAmount() (gas: 237825)
[PASS] test_reverts_withdraw_invalidBalance() (gas: 239894)
[PASS] test_reverts_withdraw_reserveInactive() (gas: 194731)
[PASS] test_reverts_withdraw_reservePaused() (gas: 276751)
[PASS] test_withdraw_not_enabled_as_collateral() (gas: 231409)
Suite result: ok. 11 passed; 0 fa...*[Comment body truncated]*

@github-actions
Copy link
Contributor

github-actions bot commented Jun 26, 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/sgho/sGHO.sol ${\color{green}100\%}$
$115 / 115$
${\color{green}100\%}$
$26 / 26$
${\color{green}100\%}$
$11 / 11$
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$

@codecov
Copy link

codecov bot commented Jun 26, 2025

Codecov Report

All modified and coverable lines are covered by tests ✅

📢 Thoughts on this report? Let us know!

@eboadom
Copy link
Contributor

eboadom commented Jun 30, 2025

Different feedback:

  • Not using OZ upgradeable contracts, hence not respecting 7201 for namespacing.
  • The contracts are missing events.
  • All the logic related to permit() is not needed, everything is included via inheritance on ERC20Permit OZ.
  • Concerning the previous, variables declared (e.g. _DOMAIN_SEPARATOR), initialised, and never used.
  • Not disabling initialisers on implementation.
  • Why mix ray math and OZ math?
  • Why not pack storage (rate, index, update)?
  • Unclear how precision behaves on all index/rate logic, seems pretty arbitrary at the moment.
  • Duplicated logic between _getCurrentYieldIndex and _updateYieldIndex, probably a lack of caching on things like targetRate.
  • Hardcoding 50% on a function rarely (by permissioned entity) used looks dubious, instead of a variable on initialisation. Maybe acceptable depending on the rationale.
  • Should the system have a supply cap, considering the "fixed" rate?

@Luigy-Lemon
Copy link
Contributor Author

aave-dao/gho-origin#5

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.

3 participants