Spark Spell 2026-09-10 Security Review

Development Stage Checklist

Preparation

LIST every commit since the last externally reviewed spell:

Spell Description & Comments

  • Spell PR has clear description.
  • Spell contract has a clear description.
  • Every significant action and parameter change are clearly commented in the code.
  • Every significant action has valid source url (forum post, poll, atlas).
  • Every parameter change is clearly commented with before/after values.
    • no such comments

Proposed changes

LIST every forum post proposing changes for this particular Prime Agent, particular target date:

  • September 10, 2026 — Proposed Changes to Spark for Upcoming Spell
    • Forum post follows the known template.

    • Verify spell content matches the combined scope of the forum posts listed above.

      From the forum post:

      1. [Ethereum] Spark Liquidity Layer — Offboard a set of unused integrations by zeroing their rate limits, removing standing relayer authority over venues Spark no longer uses
      2. [Ethereum] SparkLend — Deprecate LBTC as collateral by setting its maximum loan-to-value to 0%, leaving the liquidation threshold in place so no position is liquidated.
      3. [Gnosis] SparkLend — Complete the deprecation of the Gnosis market by reducing loan-to-value to 0% and liquidation thresholds to 0.01% across the five collateral reserves, dealing with the ETH e-mode category so that accounts inside it are covered too, and setting the liquidation protocol fee to 0% so Spark takes no share of the resulting liquidations. The effect is that every remaining borrow position becomes liquidatable on execution.
      4. [Ethereum] SparkLend — Reduce the slope 1 spread over the Sky Savings Rate on the USDT interest rate model, so the market settles at a higher utilisation and holds less idle liquidity.
      5. [Ethereum] Spark Liquidity Layer — Onboard the Sentora-curated RLUSD Morpho Vaults V2 instance, allowing the Spark Liquidity Layer to allocate RLUSD into it and withdraw again.
      6. [Ethereum] SparkLend — Claim accrued SparkLend reserves, and extend the reserve-claiming set to the two spTokens created by the August 27, 2026 spell (Exec, recurring).

      From SparkEthereum_20260910.sol

       * @notice SparkLend:
       *         - Deprecate LBTC as Collateral.
       *         - Update USDT Interest Rate Model.
       *         Spark Liquidity Layer:
       *         - Offboard Unused Integrations.
       *         - Onboard the Sentora RLUSD Morpho Vaults V2 Instance.

      From SparkGnosis_20260910.sol

       * @notice SparkLend:
       *         - Complete the Deprecation of the Gnosis Market.

      [Ethereum] SparkLend — Claim accrued SparkLend reserves is a part of the execution process

    • Verify forum posts contain all new addresses directly or indirectly used in the spell, their constructor arguments and rate limits.

    • IF the Prime Agent spell introduces a major change that can affect external parties, suggest Governance Facilitators to set Core Spell office hours to true.

Contract Structure & Code Quality

  • The only external non-view function in the spell contract is execute().
  • There are no methods that can modify contract state after deployment.
  • No unused imports, interfaces, methods, or variables.
  • All function visibility modifiers are explicitly declared.
  • No redundant code or commented-out functionality.
  • Addresses must be fetched from the relevant protocol’s address registry (e.g., spark-address-registry, bloom-address-registry) IF they are present there, OTHERWISE defined as constant and have trusted source (e.g., when onboarding new contracts).
  • LIST every address used in the spell (defined as constant or fetched from the registry repo):
    • [Ethereum] NEW_USDT_IRM = 0x4FA65B096681bD6FeecF78e5D83096bf4A5762A0, https://github.com/sparkdotfi/spark-address-registry/commit/e849cda2f3e4bd69ec09ee3083f7c8d35fbe173b
    • [Ethereum] SENTORA_RLUSD_VAULT = 0xFC8C624B6080a0a780583799f2A862DE936F6E22
    • [Ethereum] MORPHO_VAULT_DAI_1 = 0x73e65DBD630f90604062f6E02fAb9138e713edD9
      • Source: spark-address-registry/src/Ethereum.sol
    • [Ethereum] MORPHO_VAULT_USDS = 0xe41a0583334f0dc4E023Acd0bFef3667F6FE0597
      • Source: spark-address-registry/src/Ethereum.sol
    • [Ethereum] ATOKEN_CORE_USDE = 0x4F5923Fc5FD4a93352581b38B7cD26943012DECF, spark-address-registry/src/Ethereum.sol
    • [Ethereum] SUSDE = 0x9D39A5DE30e57443BfF2A8307A4256c8797A3497, spark-address-registry/src/Ethereum.sol
    • [Ethereum] SYRUP_USDT = 0x356B8d89c1e1239Cbbb9dE4815c39A1474d5BA7D, spark-address-registry/src/Ethereum.sol
    • [Ethereum] SYRUP_USDC = 0x80ac24aA929eaF5013f6436cdA2a7ba190f5Cc0b, spark-address-registry/src/Ethereum.sol
    • [Ethereum] CURVE_PYUSDUSDS = 0xA632D59b9B804a956BfaA9b48Af3A1b74808FC1f, spark-address-registry/src/Ethereum.sol
    • [Ethereum] CURVE_SUSDSUSDT = 0x00836Fe54625BE242BcFA286207795405ca4fD10, spark-address-registry/src/Ethereum.sol
    • [Ethereum] CURVE_USDCUSDT = 0x4f493B7dE8aAC7d55F71853688b1F7C8F0243C85, spark-address-registry/src/Ethereum.sol
    • [Ethereum] CURVE_WEETHWETHNG = 0xDB74dfDD3BB46bE8Ce6C33dC9D82777BCFc3dEd5, spark-address-registry/src/Ethereum.sol
    • [Ethereum] USTB = 0x43415eB6ff9DB7E26A15b704e7A3eDCe97d31C4e, spark-address-registry/src/Ethereum.sol
    • [Ethereum] USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48, spark-address-registry/src/Ethereum.sol
    • [Ethereum] USCC_DEPOSIT = 0xDB48AC0802F9A79145821A5430349cAff6d676f7, spark-address-registry/src/Ethereum.sol
    • [Ethereum] USCC = 0x14d60E7FDC0D71d8611742720E4C50E7a974020c, spark-address-registry/src/Ethereum.sol
    • [Ethereum] B2C2_DEPOSIT_ADDRESS = 0xa29E963992597B21bcDCaa969d571984869C4FF5, spark-address-registry/src/Ethereum.sol
    • [Ethereum] USDT = 0xdAC17F958D2ee523a2206206994597C13D831ec7, spark-address-registry/src/Ethereum.sol
    • [Ethereum] PYUSD = 0x6c3ea9036406852006290770BEdFcAbA0e23A0e8, spark-address-registry/src/Ethereum.sol
    • [Ethereum] ANCHORAGE_USAT_USDT_DEPOSIT = 0x49506C3Aa028693458d6eE816b2EC28522946872, spark-address-registry/src/Ethereum.sol
    • [Ethereum] USAT = 0x07041776f5007ACa2A54844F50503a18A72A8b68, spark-address-registry/src/Ethereum.sol
    • [Ethereum] ALM_CONTROLLER = 0x5c46Fc65855c0C7465a1EA85EEA0B24B601502D3, spark-address-registry/src/Ethereum.sol
    • [Gnosis] WXDAI = 0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d, spark-address-registry/src/Gnosis.sol
    • [Gnosis] WETH = 0x6A023CCd1ff6F2045C3309768eAd9E68F978f6e1, spark-address-registry/src/Gnosis.sol
    • [Gnosis] WSTETH = 0x6C76971f98945AE98dD7d4DFcA8711ebea946eA6, spark-address-registry/src/Gnosis.sol
    • [Gnosis] GNO = 0x9C58BAcC331c9aa871AFD802DB6379a98e80CEdb, spark-address-registry/src/Gnosis.sol
    • [Gnosis] SXDAI = 0xaf204776c7245bF4147c2612BF6e5972Ee483701, spark-address-registry/src/Gnosis.sol
    • Matches valid external source (previously approved forum post, external docs, etc).

StarGuard execution

  • IF a StarGuard module is onboarded for this Prime Agent, the following additional checks are done:
    • The spell exposes view-only interface function isExecutable() external view returns (bool result).

      https://github.com/sparkdotfi/spark-spells/commit/c24ddf511b7454676a87ff8cb84e1aa12ee6073b#diff-db6dcf36720db4c2aacd73187ce5b8ee042277228e49479c069c2dca27d05543

    • isExecutable either simply returns true or implements additional logic communicated via the relevant forum post (e.g., by describing “earliest launch date” or “office hours” logic, etc).

    • The test ensures the spell is executable before expiration (i.e. isExecutable outputs true before StarGuard.maxDelay() is passed).

    • Third-party actors can not take advantage of the fact that Spell will be executed in a later block than the Core spell, otherwise suggest direct execution.

    • IF Prime Agent spell can not be executed in a later block OR have to be executed sequentially to another Prime Agent spell, direct execution is clearly mentioned in the forum post together with elaborated explanation why it is needed.

    • The direct execution explanation makes sense on the technical level and can not be circumvented by the use of isExecutable() interface.

On-boarding New Contracts

  • LIST every new contract present in the spell:
    • [Ethereum] RateTargetKinkInterestRateStrategy
      • Source code is verified on Etherscan or other primary block explorer for this chain.

      • Source code matches corresponding audited GitHub source code:

      • Compilation optimizations match deployment settings defined in the source code repo.

      • Consistent license.

      • LIST every constructor argument:

        provider → Address(0x02c3ea4e34c0cbd694d2adfa2c690eecbc1793ee)
        rateSource → Address(0x57027b6262083e3ac3c8b2eb99f7e8005f669973)
        optimalUsageRatio → Uint(950000000000000000000000000, 256)
        baseVariableBorrowRate → Uint(0, 256)
        variableRateSlope1Spread → Int(1000000000000000000000000, 256)
        variableRateSlope1Spread → Uint(150000000000000000000000000, 256)
    • [Ethereum] VaultV2

Dependency checks

Interfaces

  • No unused static interfaces.
  • Declared static interface is not present in standard libraries, OTHERWISE should be imported from there.
  • Interface matches the deployed contract.
  • Each static interface declares only functions actually used in the spell code.

Variable Declarations

No variables declared on the contract level in both spell contracts.

  • Every contract variable is declared as either constant or immutable.
  • Every precision variable (WAD, RAY, RAD, etc) match their expected value.
  • LIST every variable using precision (e18, e6, e..., WAD, RAY, RAD, etc):
    • no such variables in the spell
  • Rates are expressed correctly (e.g. per / 1 days).
  • Rates match their source (e.g., governance poll).
  • Timestamps are commented with the full UTC date and convert correctly.
  • Timestamps match their source (e.g., governance poll).

Deployment & Execution Security

  • No selfdestruct() operations in the spell.
  • No delegatecall() to untrusted contracts.
  • No use of tx.origin for authorization.
  • No external calls that could revert and fail the entire spell execution.
  • No loops with unbounded gas consumption.
  • No timestamp-dependent logic that could cause issues across the GSM delay.
  • All math operations use safe math libraries or are checked for overflow/underflow.
  • No unchecked return values from external calls.

Access Control

  • Spell execution cannot be front-run by malicious actors.
  • No privileged functions accessible by unauthorized users.

Parameter Changes & Protocol Integration

  • Prime Agent protocol invariants are maintained after spell execution.
  • All parameter changes use the appropriate helper functions IF available.
  • Parameter changes match the Executive Sheet or the corresponding Atlas edit exactly.
  • Spell interacts correctly with existing protocol components.
  • Proper error handling for all external interactions.

Testing

  • LIST each spell action (each line of code which changes a storage):

    • “Offboard Unused Integrations” tested via test_ETHEREUM_sll_deactivateMorphoV1DaiVault(), test_ETHEREUM_sll_deactivateMorphoV1UsdsVault(), test_ETHEREUM_sll_deactivateAaveCoreUsde(), test_ETHEREUM_sll_deactivateEthena(), test_ETHEREUM_sll_deactivateMapleSyrupUsdt(), test_ETHEREUM_sll_deactivateMapleSyrupUsdc(), test_ETHEREUM_sll_deactivateCurvePyusdUsds(), test_ETHEREUM_sll_deactivateCurvePyusdUsdc(), test_ETHEREUM_sll_deactivateCurveSusdsUsdt(), test_ETHEREUM_sll_deactivateCurveUsdcUsdt(), test_ETHEREUM_sll_deactivateCurveWeethWethng(), test_ETHEREUM_sll_deactivateSuperstate(), test_ETHEREUM_sll_deactivateB2C2(), test_ETHEREUM_sll_deactivateAnchorageUsdtUsat()
      • The unit test ensures the new value was changed in the spell.
      • The end-to-end test is sufficient to ensure correctness the high-level goal behind this spell action.
    • “Deprecate LBTC as Collateral” tested via test_ETHEREUM_sparkLend_deprecateLbtcCollateral(), test_ETHEREUM_sparkLend_lbtcDeprecationDoesNotReduceHealthFactor()
      • The unit test ensures the new value was changed in the spell.
      • The end-to-end test is sufficient to ensure correctness the high-level goal behind this spell action.
    • “Update USDT Interest Rate Model” tested via test_ETHEREUM_sparkLend_usdtIrmUpdate()
      • The unit test ensures the new value was changed in the spell.
      • The end-to-end test is sufficient to ensure correctness the high-level goal behind this spell action.
    • “Onboard the Sentora RLUSD Morpho Vaults V2 Instance.” tested via test_ETHEREUM_sll_onboardSentoraRlusdVault(), test_ETHEREUM_morphoVaultV2Config(), test_ETHEREUM_morphoVaultV2AdapterConfig()
      • The unit test ensures the new value was changed in the spell.
      • The end-to-end test is sufficient to ensure correctness the high-level goal behind this spell action.
    • “Complete the Deprecation of the Gnosis Market.” tested via test_GNOSIS_sparkLend_completeDeprecation(), test_GNOSIS_sparkLend_existingBorrowerLiquidation(), test_GNOSIS_sparkLend_existingBorrowerWithdrawals(), test_GNOSIS_sparkLend_existingEModeBorrowerLiquidation(), test_GNOSIS_sparkLend_liquidateTop50BorrowersAndWindDown()
      • The unit test ensures the new value was changed in the spell.
      • The end-to-end test is sufficient to ensure correctness the high-level goal behind this spell action.
  • All actions are covered by tests.

  • Integration tests verify the end-to-end execution flow.

  • Gas tests ensure execution is possible within the existing block gas limit.

    • no such test
  • All tests are passing in CI at f3110e530756c6e742d473d366aa0bbea9a58f5c.

    • except test_ETHEREUM_PayloadsConfigured
  • All tests listed above are not skipped.

  • All tests are passing locally at f3110e530756c6e742d473d366aa0bbea9a58f5c:

    • except test_ETHEREUM_PayloadsConfigured
Ran 25 tests for src/proposals/20260910/Spell_20260910.t.sol:SparkEthereum_20260910_SLLTests
[PASS] test_ARBITRUM_E2E_sparkLiquidityLayer() (gas: 863409193)
[PASS] test_AVALANCHE_E2E_sparkLiquidityLayer() (gas: 367995149)
[PASS] test_BASE_E2E_sparkLiquidityLayer() (gas: 687700355)
[PASS] test_E2E_sparkLiquidityLayerCCTPCrossChainSetup() (gas: 4683596420)
[PASS] test_ETHEREUM_E2E_sparkLiquidityLayer() (gas: 2659698121)
[PASS] test_ETHEREUM_morphoVaultV2AdapterConfig() (gas: 45914)
[PASS] test_ETHEREUM_morphoVaultV2Config() (gas: 284716)
[PASS] test_ETHEREUM_sll_deactivateAaveCoreUsde() (gas: 86253992)
[PASS] test_ETHEREUM_sll_deactivateAnchorageUsdtUsat() (gas: 86325687)
[PASS] test_ETHEREUM_sll_deactivateB2C2() (gas: 86315594)
[PASS] test_ETHEREUM_sll_deactivateCurvePyusdUsdc() (gas: 86324022)
[PASS] test_ETHEREUM_sll_deactivateCurvePyusdUsds() (gas: 86316173)
[PASS] test_ETHEREUM_sll_deactivateCurveSusdsUsdt() (gas: 86316173)
[PASS] test_ETHEREUM_sll_deactivateCurveUsdcUsdt() (gas: 86324065)
[PASS] test_ETHEREUM_sll_deactivateCurveWeethWethng() (gas: 86324023)
[PASS] test_ETHEREUM_sll_deactivateEthena() (gas: 86429324)
[PASS] test_ETHEREUM_sll_deactivateMapleSyrupUsdc() (gas: 86308052)
[PASS] test_ETHEREUM_sll_deactivateMapleSyrupUsdt() (gas: 86308009)
[PASS] test_ETHEREUM_sll_deactivateMorphoV1DaiVault() (gas: 86253838)
[PASS] test_ETHEREUM_sll_deactivateMorphoV1UsdsVault() (gas: 86253837)
[PASS] test_ETHEREUM_sll_deactivateSuperstate() (gas: 86412109)
[PASS] test_ETHEREUM_sll_offboardedIntegrationsBalances() (gas: 92145)
[PASS] test_ETHEREUM_sll_onboardSentoraRlusdVault() (gas: 88459804)
[PASS] test_OPTIMISM_E2E_sparkLiquidityLayer() (gas: 461373539)
[PASS] test_UNICHAIN_E2E_sparkLiquidityLayer() (gas: 423728133)
Suite result: ok. 25 passed; 0 failed; 0 skipped; finished in 170.69s (37.86s CPU time)


Ran 22 tests for src/proposals/20260910/Spell_20260910.t.sol:SparkEthereum_20260910_SparklendTests
[PASS] test_ETHEREUM_AllReservesSeeded() (gas: 86355575)
[PASS] test_ETHEREUM_CapAutomator() (gas: 119518758)
[PASS] test_ETHEREUM_E2E_sparkLend() (gas: 4423906125)
[PASS] test_ETHEREUM_FreezerMom() (gas: 231669984)
[PASS] test_ETHEREUM_FreezerMom_Multisig() (gas: 189067105)
[PASS] test_ETHEREUM_Oracles() (gas: 88148534)
[PASS] test_ETHEREUM_RewardsConfiguration() (gas: 87199088)
[PASS] test_ETHEREUM_SpellExecutionDiff() (gas: 340770353)
[PASS] test_ETHEREUM_TokenImplementationsMatch() (gas: 86564892)
[PASS] test_ETHEREUM_sparkLend_deprecateLbtcCollateral() (gas: 340899750)
[PASS] test_ETHEREUM_sparkLend_lbtcDeprecationDoesNotReduceHealthFactor() (gas: 178377884)
[PASS] test_ETHEREUM_sparkLend_usdtIrmUpdate() (gas: 341568067)
[PASS] test_GNOSIS_AllReservesSeeded() (gas: 86469029)
[PASS] test_GNOSIS_E2E_sparkLend() (gas: 85723603)
[PASS] test_GNOSIS_Oracles() (gas: 86427694)
[PASS] test_GNOSIS_SpellExecutionDiff() (gas: 146533913)
[PASS] test_GNOSIS_TokenImplementationsMatch() (gas: 86522654)
[PASS] test_GNOSIS_sparkLend_completeDeprecation() (gas: 86241991)
[PASS] test_GNOSIS_sparkLend_existingBorrowerLiquidation() (gas: 87207069)
[PASS] test_GNOSIS_sparkLend_existingBorrowerWithdrawals() (gas: 87557413)
[PASS] test_GNOSIS_sparkLend_existingEModeBorrowerLiquidation() (gas: 86767551)
[PASS] test_GNOSIS_sparkLend_liquidateTop50BorrowersAndWindDown() (gas: 120726159)
Suite result: ok. 22 passed; 0 failed; 0 skipped; finished in 188.67s (30.79s CPU time)


Ran 13 tests for src/proposals/20260910/Spell_20260910.t.sol:SparkEthereum_20260910_SpellTests
[SKIP] test_ARBITRUM_ONE_PayloadBytecodeMatches() (gas: 0)
[SKIP] test_AVALANCHE_PayloadBytecodeMatches() (gas: 0)
[SKIP] test_BASE_PayloadBytecodeMatches() (gas: 0)
[PASS] test_ETHEREUM_PayloadBytecodeMatches() (gas: 3909005)
[FAIL: Mainnet payload not matching deployed payload: 0x0000000000000000000000000000000000000000 != 0xc7183455a4C133Ae270771860664b6B7ec320bB1] test_ETHEREUM_PayloadsConfigured() (gas: 32877)
[PASS] test_ETHEREUM_SparkProxyStorage() (gas: 86303687)
[PASS] test_ETHEREUM_sparkLend_withdrawAllReserves() (gas: 88208122)
[PASS] test_GNOSIS_PayloadBytecodeMatches() (gas: 1197379)
[SKIP] test_OPTIMISM_PayloadBytecodeMatches() (gas: 0)
[SKIP] test_ROBINHOOD_PayloadBytecodeMatches() (gas: 0)
[SKIP] test_UNICHAIN_PayloadBytecodeMatches() (gas: 0)
[SKIP] test_XLAYER_PayloadBytecodeMatches() (gas: 0)
[PASS] test_officeHours() (gas: 55336)
Suite result: FAILED. 5 passed; 1 failed; 7 skipped; finished in 165.32s (3.89s CPU time)

Deployment Stage Checklist

Deployed Contract

  • Both reviewers gave explicit “Good to deploy”.
    • No approvals before deployment
  • A new comment in the PR contains link to the deployed spell(s) and Tenderly vnet(s).
    • No tenderly simulation
  • The comment also contains codehash of the deployed mainnet spell.
    • No codehash comment
  • The codehash matches one produced locally from the reviewed source code.
❯ cast call --rpc-url $ETH_RPC --create $(forge inspect SparkEthereum_20260910 bytecode) | cast keccak
0xb3b1f22f29ef3d269404004599f13b840e45ec98909ac3de529e27c155bed088

❯ cast code 0x7602cc457786c06778258A0b004f2D66c54386fC --rpc-url $ETH_RPC | cast keccak
0xb3b1f22f29ef3d269404004599f13b840e45ec98909ac3de529e27c155bed088
❯ forge verify-bytecode 0x7602cc457786c06778258A0b004f2D66c54386fC SparkEthereum_20260910 --rpc-url $ETH_RPC
Verifying bytecode for contract SparkEthereum_20260910 at address 0x7602cc457786c06778258A0b004f2D66c54386fC
2026-09-04T16:40:09.129614Z ERROR foundry_compilers::cache: error="/Users/sizov/Blockchain/audits/spark/spark_07_16/spark-spells/cache/solidity-files-cache.json": No such file or directory (os error 2)
[⠊] Compiling...
[⠆] Compiling 228 files with Solc 0.8.25
[⠔] Solc 0.8.25 finished in 29.21s
Compiler run successful with warnings:
...
Creation code matched with status full
Runtime code matched with status full

❯ forge verify-bytecode 0x9A56C59453a2fBAe01Ba46045441490e5C7a664d SparkGnosis_20260910 --rpc-url $GNOSIS_RPC
Verifying bytecode for contract SparkGnosis_20260910 at address 0x9A56C59453a2fBAe01Ba46045441490e5C7a664d
Creation code matched with status full
Runtime code matched with status full
  • Etherscan settings (optimizer, EVM version, license) match local ones.
  • Every spell is deployed using standard CREATE (not CREATE2).
  • Tests are updated to execute against the deployed spell(s).
  • No test is skipped after deployment
  • All tests are passing in CI at 62418512a9fed0b7e6ca360914235711d713d3db
    • failed at The Spell Caster CI, which is not a problem with the spell
  • All tests are passing locally at 62418512a9fed0b7e6ca360914235711d713d3db
    • except test_ETHEREUM_E2E_sparkLiquidityLayer()
Ran 25 tests for src/proposals/20260910/Spell_20260910.t.sol:SparkEthereum_20260910_SLLTests
[PASS] test_ARBITRUM_E2E_sparkLiquidityLayer() (gas: 896858698)
[PASS] test_AVALANCHE_E2E_sparkLiquidityLayer() (gas: 389413517)
[PASS] test_BASE_E2E_sparkLiquidityLayer() (gas: 719660011)
[PASS] test_E2E_sparkLiquidityLayerCCTPCrossChainSetup() (gas: 4814666198)
[FAIL: panic: arithmetic underflow or overflow (0x11)] test_ETHEREUM_E2E_sparkLiquidityLayer() (gas: 406013808)
[PASS] test_ETHEREUM_morphoVaultV2AdapterConfig() (gas: 45914)
[PASS] test_ETHEREUM_morphoVaultV2Config() (gas: 284716)
[PASS] test_ETHEREUM_sll_deactivateAaveCoreUsde() (gas: 97279926)
[PASS] test_ETHEREUM_sll_deactivateAnchorageUsdtUsat() (gas: 97354871)
[PASS] test_ETHEREUM_sll_deactivateB2C2() (gas: 97344778)
[PASS] test_ETHEREUM_sll_deactivateCurvePyusdUsdc() (gas: 97352756)
[PASS] test_ETHEREUM_sll_deactivateCurvePyusdUsds() (gas: 97345307)
[PASS] test_ETHEREUM_sll_deactivateCurveSusdsUsdt() (gas: 97345307)
[PASS] test_ETHEREUM_sll_deactivateCurveUsdcUsdt() (gas: 97352799)
[PASS] test_ETHEREUM_sll_deactivateCurveWeethWethng() (gas: 97352757)
[PASS] test_ETHEREUM_sll_deactivateEthena() (gas: 97463609)
[PASS] test_ETHEREUM_sll_deactivateMapleSyrupUsdc() (gas: 97336786)
[PASS] test_ETHEREUM_sll_deactivateMapleSyrupUsdt() (gas: 97336743)
[PASS] test_ETHEREUM_sll_deactivateMorphoV1DaiVault() (gas: 97279772)
[PASS] test_ETHEREUM_sll_deactivateMorphoV1UsdsVault() (gas: 97279771)
[PASS] test_ETHEREUM_sll_deactivateSuperstate() (gas: 97446344)
[PASS] test_ETHEREUM_sll_offboardedIntegrationsBalances() (gas: 92145)
[PASS] test_ETHEREUM_sll_onboardSentoraRlusdVault() (gas: 99572858)
[PASS] test_OPTIMISM_E2E_sparkLiquidityLayer() (gas: 486151113)
[PASS] test_UNICHAIN_E2E_sparkLiquidityLayer() (gas: 447418797)
Suite result: FAILED. 24 passed; 1 failed; 0 skipped; finished in 107.11s (17.39s CPU time)


Ran 22 tests for src/proposals/20260910/Spell_20260910.t.sol:SparkEthereum_20260910_SparklendTests
[PASS] test_ETHEREUM_AllReservesSeeded() (gas: 97375761)
[PASS] test_ETHEREUM_CapAutomator() (gas: 132187340)
[PASS] test_ETHEREUM_E2E_sparkLend() (gas: 4443920087)
[PASS] test_ETHEREUM_FreezerMom() (gas: 249337674)
[PASS] test_ETHEREUM_FreezerMom_Multisig() (gas: 205101080)
[PASS] test_ETHEREUM_Oracles() (gas: 99168371)
[PASS] test_ETHEREUM_RewardsConfiguration() (gas: 98254432)
[PASS] test_ETHEREUM_SpellExecutionDiff() (gas: 362659347)
[PASS] test_ETHEREUM_TokenImplementationsMatch() (gas: 97585078)
[PASS] test_ETHEREUM_sparkLend_deprecateLbtcCollateral() (gas: 362792522)
[PASS] test_ETHEREUM_sparkLend_lbtcDeprecationDoesNotReduceHealthFactor() (gas: 194221211)
[PASS] test_ETHEREUM_sparkLend_usdtIrmUpdate() (gas: 363462031)
[PASS] test_GNOSIS_AllReservesSeeded() (gas: 97491866)
[PASS] test_GNOSIS_E2E_sparkLend() (gas: 96628275)
[PASS] test_GNOSIS_Oracles() (gas: 97452481)
[PASS] test_GNOSIS_SpellExecutionDiff() (gas: 160941052)
[PASS] test_GNOSIS_TokenImplementationsMatch() (gas: 97545491)
[PASS] test_GNOSIS_sparkLend_completeDeprecation() (gas: 97266928)
[PASS] test_GNOSIS_sparkLend_existingBorrowerLiquidation() (gas: 98229506)
[PASS] test_GNOSIS_sparkLend_existingBorrowerWithdrawals() (gas: 98579599)
[PASS] test_GNOSIS_sparkLend_existingEModeBorrowerLiquidation() (gas: 97790037)
[PASS] test_GNOSIS_sparkLend_liquidateTop50BorrowersAndWindDown() (gas: 132262225)
Suite result: ok. 22 passed; 0 failed; 0 skipped; finished in 124.57s (31.47s CPU time)


Ran 13 tests for src/proposals/20260910/Spell_20260910.t.sol:SparkEthereum_20260910_SpellTests
[SKIP] test_ARBITRUM_ONE_PayloadBytecodeMatches() (gas: 0)
[SKIP] test_AVALANCHE_PayloadBytecodeMatches() (gas: 0)
[SKIP] test_BASE_PayloadBytecodeMatches() (gas: 0)
[PASS] test_ETHEREUM_PayloadBytecodeMatches() (gas: 3909042)
[PASS] test_ETHEREUM_PayloadsConfigured() (gas: 74736)
[PASS] test_ETHEREUM_SparkProxyStorage() (gas: 97328088)
[PASS] test_ETHEREUM_sparkLend_withdrawAllReserves() (gas: 99253819)
[PASS] test_GNOSIS_PayloadBytecodeMatches() (gas: 1199879)
[SKIP] test_OPTIMISM_PayloadBytecodeMatches() (gas: 0)
[SKIP] test_ROBINHOOD_PayloadBytecodeMatches() (gas: 0)
[SKIP] test_UNICHAIN_PayloadBytecodeMatches() (gas: 0)
[SKIP] test_XLAYER_PayloadBytecodeMatches() (gas: 0)
[PASS] test_officeHours() (gas: 55368)
Suite result: ok. 6 passed; 0 failed; 7 skipped; finished in 103.52s (798.48ms CPU time)