Spell: feat/sc-1573-spell-20260716 Reviewed at commit:
32d0504c18115873369eaf1028abc0ce90a9df3fStage: Review Stage
- LIST every commit since the last externally reviewed spell:
Author: Tabish Shaikh <bonjour.tabish@gmail.com>
Date: Fri Jul 10 19:19:28 2026 +0530
add deploy
commit 8f599b459490e458338efe2061e7c30865691535
Author: Tabish Shaikh <bonjour.tabish@gmail.com>
Date: Fri Jul 10 11:15:49 2026 +0530
fix: review
commit 32d0504c18115873369eaf1028abc0ce90a9df3f
Author: Tabish Shaikh <bonjour.tabish@gmail.com>
Date: Thu Jul 9 23:11:39 2026 +0530
fix: review
commit 332c4f7d57b90010261755e0ef37cd5dc293ffa5
Author: Tabish Shaikh <bonjour.tabish@gmail.com>
Date: Thu Jul 9 19:43:25 2026 +0530
add: fix approx
commit 48037f154c4e9e2656eac55330b9aa84eff2653c
Author: Tabish Shaikh <bonjour.tabish@gmail.com>
Date: Thu Jul 9 19:38:47 2026 +0530
fix: partial review
commit 312c5be8426ee098242e2da71411d5a4da687df9
Author: Tabish Shaikh <bonjour.tabish@gmail.com>
Date: Thu Jul 9 14:51:03 2026 +0530
fix
commit a5d01a845d7d5e496c7a4c30012d51547415e94c
Author: Tabish Shaikh <bonjour.tabish@gmail.com>
Date: Thu Jul 9 14:25:51 2026 +0530
add: roles to rh alm proxy freezable and tests
commit e913ee863644cb3ef06b7f97f68f144135ffdfa7
Author: Tabish Shaikh <bonjour.tabish@gmail.com>
Date: Wed Jul 8 23:40:58 2026 +0530
fix: review
commit 239401cc93ed1fc5d0cb6b18d1de2fa527d291d3
Author: Tabish Shaikh <bonjour.tabish@gmail.com>
Date: Wed Jul 8 18:18:10 2026 +0530
fix: review
commit af2a486a1c9e0c773d0858c0a553361b8a524d74
Author: Tabish Shaikh <bonjour.tabish@gmail.com>
Date: Wed Jul 8 16:40:12 2026 +0530
add: rh tests
commit 25756963adbf6589c98eeb880178074368b6a918
Author: Tabish Shaikh <bonjour.tabish@gmail.com>
Date: Wed Jul 8 14:32:41 2026 +0530
:
- No security-related changes are present beyond the spell's intended scope.
- Verify solc version matches the Prime Agent protocol standard:
foundry.tomlusessolc = "0.8.25"andevm_version = "cancun", consistent with prior Spark spell contracts.
- Spell PR has clear description via the linked forum post and Snapshot votes.
- Spell contracts have clear descriptions:
SparkEthereum_20260716includes@title,@notice,@author, forum link, and vote links.SparkRobinhood_20260716includes@title,@notice,@author, forum link, and vote link.SparkXLayer_20260716includes@title,@notice,@author, forum link, and vote link.
- Every significant action and parameter change is clearly commented in the code:
Enable USDG Bridging to Robinhood ChainEnable USDT Bridging to X LayerDeactivate Old USDT Morpho V2 VaultUSDS Transfer to Spark Foundation for IncentivesUSDS Transfer to Spark Assets Foundation for Anchorage FeesGrants for Spark Foundation and Spark Assets FoundationTransfer USDS for BuybacksTransfer USDS to GroveActivate SLL and Spark Savings Infrastructureon Robinhood.Grant ALLOCATOR_ROLEfor X Layer relayers andFREEZER_ROLEfor the X Layer freezer multisig onXLayer.ALM_PROXY_FREEZABLE.Grant ALLOCATOR_ROLEfor Robinhood relayers andFREEZER_ROLEfor the Robinhood freezer multisig onRobinhood.ALM_PROXY_FREEZABLE.- Migrate Robinhood
spUSDGSETTER_ROLEfrom the old freezer/relayer/setter toRobinhood.ALM_PROXY_FREEZABLE.
- Every significant action has valid source URL:
- Forum: https://forum.skyeco.com/t/july-16-2026-proposed-changes-to-spark-for-upcoming-spell/28029
- Snapshot votes:
- https://snapshot.org/#/s:sparkfi.eth/proposal/0xd177bc28b65afb23dc39a5e7cfdded7084b3b722b230e08d7067b68fa0f4486a
- https://snapshot.org/#/s:sparkfi.eth/proposal/0xdde478db4ba5882a5d48d19fdbae057fd703688e4f1e16fb673407fc08476a9f
- https://snapshot.org/#/s:sparkfi.eth/proposal/0xf99372ccca4b99dd04dc0ddb038e949b62f4d25810b0203572dc90bce025e805
- https://snapshot.org/#/s:sparkfi.eth/proposal/0x2df281a276e0c17eff9a05e65bfc05937c2f600edec1a82386a6efb6dbe9d63d
- https://snapshot.org/#/s:sparkfi.eth/proposal/0x3cb4165f1357d553445b0de790e4e8b4a71358f42f39d35f7de51b308ade558c
- https://snapshot.org/#/s:sparkfi.eth/proposal/0x451bb53f80ad2906ff06cc3d03c88a6b09f350db371c4782e0621e26a1d55a43
- Every parameter change is clearly covered by test assertions with before/after values where applicable.
- LIST every forum post proposing changes for this particular Prime Agent:
- July 16, 2026 — Proposed Changes to Spark for Upcoming Spell
- Forum post follows the expected technical-scope format for Spark spell changes.
- Verify spell content matches the combined scope of the forum posts listed above:
- [ETH] SLL — Enable USDG transfer to Paxos deposit for Robinhood settlement →
SparkEthereum_20260716._postExecute() - [RH] SLL — Enable USDG transfer to Paxos deposit on Robinhood Chain →
SparkRobinhood_20260716.execute() - [ETH] SLL — Enable USDT LayerZero bridging to X Layer →
SparkEthereum_20260716._postExecute() - [ETH] SLL — Deactivate old Morpho V2 USDT vault rate limits →
SparkEthereum_20260716._postExecute() - [ETH] Treasury — Transfer USDS to Spark Foundation for incentives →
SparkEthereum_20260716._postExecute() - [ETH] Treasury — Transfer USDS to Spark Assets Foundation for Anchorage fees →
SparkEthereum_20260716._postExecute() - [ETH] Treasury — Grants for Spark Foundation and Spark Assets Foundation →
SparkEthereum_20260716._postExecute() - [ETH] Treasury — Transfer USDS for buybacks →
SparkEthereum_20260716._postExecute() - [ETH] SLL — Transfer USDS to Grove →
SparkEthereum_20260716._postExecute() - [ETH] SparkLend/SLL — Recurring reserve-claiming logic remains inherited from
SparkPayloadEthereum.
- [ETH] SLL — Enable USDG transfer to Paxos deposit for Robinhood settlement →
- Verify forum posts contain all new addresses directly or indirectly used in the spell:
GROVE_ALM_PROXY = 0x491EDFB0B8b608044e227225C715981a30F3A44EPAXOS_USDG_DEPOSIT (Ethereum) = 0xf752cF318dfF2C01575c98741AA52e7a34d873FdPAXOS_USDG_DEPOSIT (Robinhood) = 0x17C0F5345d1144fdF670D14719077be3842E5087XLAYER_ALM_PROXY = 0x83A914C361bB729EB6BEBC8C7bA993667A0E6Df8- Robinhood and X Layer protocol addresses are sourced from
spark-address-registry.
- 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. - Not required; inheritedisExecutable()already applies Spark office hours.
-
The only external non-view function in the Robinhood spell contract is
execute(). -
The only external non-view function in the X Layer spell contract is
execute(). -
The Ethereum spell execution entrypoint is inherited from
SparkPayloadEthereum.execute(); the proposal-specific logic is contained in_postExecute(). -
There are no methods that can modify contract state after deployment.
-
No unused imports, interfaces, methods, or variables were observed in reviewed spell files.
-
All function visibility modifiers are explicitly declared.
-
No redundant code or commented-out functionality relevant to execution.
-
Addresses are fetched from
spark-address-registrywhere present; new or chain-specific operational addresses are defined asinternal constant. -
LIST every address used in the spell defined as
constantor fetched from registry:- [ETH]
0x491EDFB0B8b608044e227225C715981a30F3A44EGROVE_ALM_PROXY- Grove ALM proxy recipient. - [ETH]
0xf752cF318dfF2C01575c98741AA52e7a34d873FdPAXOS_USDG_DEPOSIT- Paxos USDG deposit address for Robinhood settlement. - [ETH]
0x6C96dE32CEa08842dcc4058c14d3aaAD7Fa41deeUSDT_OFT- Ethereum USDT OFT. - [XLayer]
0x83A914C361bB729EB6BEBC8C7bA993667A0E6Df8XLAYER_ALM_PROXY- X Layer ALM proxy. - [RH]
0x59C85fe4385403e93877e48e5521f2F02B150359OLD_FREEZER_RELAYER- previous freezer/relayer role holder. - [RH]
0x17C0F5345d1144fdF670D14719077be3842E5087PAXOS_USDG_DEPOSIT- Robinhood-chain Paxos USDG deposit address. - Registry addresses:
Ethereum.*,Robinhood.*, andXLayer.*usages are fetched fromspark-address-registry.
- [ETH]
- The spell exposes view-only interface
function isExecutable() external view returns (bool result)throughSparkPayloadEthereum. -
isExecutable()implements Spark office-hours logic viaofficeHours(block.timestamp). - The test harness uses standard Spark spell execution flow.
- Third-party actors cannot take advantage of the delayed Star execution model for the reviewed state changes.
- Direct execution is not required for this spell.
- LIST every new contract present in the spell:
- No new implementation contracts are deployed by this spell. The spell configures existing Spark SLL, X Layer, Robinhood, and treasury components.
- New proposal payload contract:
SparkXLayer_20260716, which grants existing X LayerALM_PROXY_FREEZABLEroles.
- Source code is verified on Etherscan/Robinhood/XLayer
- Source code matches corresponding audited GitHub source code
- Compilation optimizations match deployment settings
- Consistent license: SPDX-License-Identifier: AGPL-3.0 across all new contracts.
- LIST every constructor argument (known): no newly deployed contracts via the spell
- No new contracts that require access control.
- LIST every submodule or imported code used in this spell:
openzeppelin-contractsatc64a1edb67b6e3f4a15cca8909c9482ad33a02b0spark-address-registryat4a25913fc1f48e80ee7c5987aaa98d0e7812e611spark-alm-controllerat3dbc7cb01739e91dad61a75cda8d7c84b4474e0b
- The dependency commits match the version of deployed contracts
- No unused static interfaces in the reviewed spell contracts.
- Declared static interface
ISyrupLikeis used forconvertToAssets. - Standard interfaces are imported from dependency packages where available (
IERC20,IALMProxy,IRateLimits,MainnetController,ForeignController,RateLimitHelpers). - Interfaces match the functions used by the spell.
- Each static interface declares only functions actually used in the spell code.
- Every contract variable is declared as either
constantor immutable/inherited immutable. - Every precision variable matches expected value:
- USDS amounts use
e18. - USDG/USDT amounts use
e6. - Syrup USDC amount uses
e6and is converted to USDS precision by* 1e12. - Per-second VSR test constants use RAY precision (
e27) and includebccalculation comments.
- USDS amounts use
- LIST every variable using precision:
ANCHORAGE_FEES_AMOUNT = 500_000e18- USDS precision.ASSET_FOUNDATION_GRANT_AMOUNT = 155_000e18- USDS precision.FOUNDATION_GRANT_AMOUNT = 1_100_000e18- USDS precision.INCENTIVES_AMOUNT = 2_000_000e18- USDS precision.SPK_BUYBACKS_AMOUNT = 64_231e18- USDS precision.GROVE_SYRUP_USDC_AMOUNT = 85_943_747.637271e6- USDC precision; converted to USDS viaconvertToAssets(...) * 1e12.- Ethereum USDG Paxos transfer limit:
50_000_000e6max,250_000_000e6 / 1 daysslope. - Robinhood USDG Paxos transfer limit:
50_000_000e6max,250_000_000e6 / 1 daysslope. - Ethereum→X Layer USDT LayerZero limit:
5_000_000e6max,100_000_000e6 / 1 daysslope. - Morpho V2 USDT deposit/withdraw limits:
0, 0.
- Rates are expressed correctly using
/ 1 days. - Rates match the tested source values.
- No
selfdestruct()operations in the spell. - No
delegatecall()to untrusted contracts. - No use of
tx.originfor authorization. - External calls are to known Spark/SLL/token contracts and are covered by tests.
- No loops with unbounded gas consumption in new proposal logic.
- No timestamp-dependent logic in proposal-specific execution; inherited
isExecutable()office-hours logic is intentional. - All math operations use Solidity 0.8.25 checked arithmetic.
- No unchecked external call patterns affecting spell correctness were observed.
- Spell execution cannot be front-run by malicious actors.
- No privileged functions are accessible by unauthorized users.
- Temporary Ethereum ALM controller
RELAYERrole granted toaddress(this)is revoked aftermintUSDS. - Temporary Ethereum ALM proxy
CONTROLLERrole granted toaddress(this)is revoked after the Grove transfer. - Robinhood role migration keeps expected role counts and removes the old freezer/relayer address.
- X Layer
ALM_PROXY_FREEZABLEgrants allocator permissions to both ALM relayer multisigs and freezer permission to the X Layer freezer multisig. - Robinhood
ALM_PROXY_FREEZABLEgrants allocator permissions to both ALM relayer multisigs and freezer permission to the Robinhood freezer multisig. - Robinhood
spUSDGsetter permission is migrated from the old freezer/relayer/setter address toRobinhood.ALM_PROXY_FREEZABLE.
- Prime Agent protocol invariants are maintained after spell execution.
- All parameter changes use appropriate helper functions where available:
SLLHelpers.setRateLimitDataRateLimitHelpers.makeAddressAddressKeyRateLimitHelpers.makeAddressKeyMainnetController.setLayerZeroRecipientIRateLimits.setRateLimitData
- Parameter changes match the forum post and test expectations.
- Spell interacts correctly with existing protocol components.
- Proper error handling for all external interactions is provided through normal revert semantics.
Specification-to-Code Parameter Mapping:
| Spec Item | Contract | Code Location | Value | Status |
|---|---|---|---|---|
| [ETH] Enable USDG transfer to Paxos deposit for Robinhood settlement | SparkEthereum_20260716 |
_postExecute() |
Ethereum.USDG -> 0xf752cF318dfF2C01575c98741AA52e7a34d873Fd |
✅ |
| [ETH] USDG Paxos max amount | SparkEthereum_20260716 |
_postExecute() |
50_000_000e6 |
✅ |
| [ETH] USDG Paxos slope | SparkEthereum_20260716 |
_postExecute() |
250_000_000e6 / 1 days |
✅ |
| [ETH] Enable USDT LayerZero transfer to X Layer | SparkEthereum_20260716 |
_postExecute() |
USDT_OFT, endpoint 30274 |
✅ |
| [ETH] X Layer LayerZero recipient | SparkEthereum_20260716 |
_postExecute() |
bytes32(uint256(uint160(XLAYER_ALM_PROXY))) |
✅ |
| [ETH] USDT→X Layer max amount | SparkEthereum_20260716 |
_postExecute() |
5_000_000e6 |
✅ |
| [ETH] USDT→X Layer slope | SparkEthereum_20260716 |
_postExecute() |
100_000_000e6 / 1 days |
✅ |
| [ETH] Deactivate old Morpho V2 USDT deposit limit | SparkEthereum_20260716 |
_postExecute() |
0, 0 |
✅ |
| [ETH] Deactivate old Morpho V2 USDT withdraw limit | SparkEthereum_20260716 |
_postExecute() |
0, 0 |
✅ |
| [ETH] Transfer USDS to incentives recipient | SparkEthereum_20260716 |
_postExecute() |
2_000_000e18 |
✅ |
| [ETH] Transfer USDS for Anchorage fees | SparkEthereum_20260716 |
_postExecute() |
500_000e18 |
✅ |
| [ETH] Spark Foundation grant | SparkEthereum_20260716 |
_postExecute() |
1_100_000e18 |
✅ |
| [ETH] Spark Assets Foundation grant | SparkEthereum_20260716 |
_postExecute() |
155_000e18 |
✅ |
| [ETH] Transfer USDS for buybacks | SparkEthereum_20260716 |
_postExecute() |
64_231e18 |
✅ |
| [ETH] Transfer USDS to Grove | SparkEthereum_20260716 |
_postExecute() |
SYRUP_USDC.convertToAssets(85_943_747.637271e6) * 1e12 |
✅ |
| [RH] Grant freezer role | SparkRobinhood_20260716 |
execute() |
Robinhood.ALM_FREEZER_MULTISIG |
✅ |
| [RH] Revoke old freezer role | SparkRobinhood_20260716 |
execute() |
OLD_FREEZER_RELAYER |
✅ |
| [RH] Grant relayer role | SparkRobinhood_20260716 |
execute() |
Robinhood.ALM_BACKSTOP_RELAYER_MULTISIG |
✅ |
| [RH] Revoke old relayer role | SparkRobinhood_20260716 |
execute() |
OLD_FREEZER_RELAYER |
✅ |
| [RH] Grant ALM proxy allocator role to primary relayer | SparkRobinhood_20260716 |
execute() |
Robinhood.ALM_RELAYER_MULTISIG |
✅ |
| [RH] Grant ALM proxy allocator role to backstop relayer | SparkRobinhood_20260716 |
execute() |
Robinhood.ALM_BACKSTOP_RELAYER_MULTISIG |
✅ |
| [RH] Grant ALM proxy freezer role | SparkRobinhood_20260716 |
execute() |
Robinhood.ALM_FREEZER_MULTISIG |
✅ |
| [RH] Revoke old spUSDG setter | SparkRobinhood_20260716 |
execute() |
OLD_FREEZER_RELAYER_SETTER |
✅ |
| [RH] Grant spUSDG setter to ALM proxy freezable | SparkRobinhood_20260716 |
execute() |
Robinhood.ALM_PROXY_FREEZABLE |
✅ |
| [RH] Enable USDG transfer to Paxos deposit | SparkRobinhood_20260716 |
execute() |
Robinhood.USDG -> 0x17C0F5345d1144fdF670D14719077be3842E5087 |
✅ |
| [RH] USDG Paxos max amount | SparkRobinhood_20260716 |
execute() |
50_000_000e6 |
✅ |
| [RH] USDG Paxos slope | SparkRobinhood_20260716 |
execute() |
250_000_000e6 / 1 days |
✅ |
| [XLAYER] Grant ALM proxy allocator role to primary relayer | SparkXLayer_20260716 |
execute() |
XLayer.ALM_RELAYER_MULTISIG |
✅ |
| [XLAYER] Grant ALM proxy allocator role to backstop relayer | SparkXLayer_20260716 |
execute() |
XLayer.ALM_BACKSTOP_RELAYER_MULTISIG |
✅ |
| [XLAYER] Grant ALM proxy freezer role | SparkXLayer_20260716 |
execute() |
XLayer.ALM_FREEZER_MULTISIG |
✅ |
- LIST each spell action and corresponding test:
- [ETH] Set Ethereum USDG Paxos rate limit →
test_ETHEREUM_sll_enableUsdgTransferToPaxosDeposit - [RH] Set Robinhood USDG Paxos rate limit →
test_ROBINHOOD_sll_enableUsdgTransferToPaxosDeposit - [RH] Update controller freezer/relayer roles and migrate spUSDG setter role →
test_ROBINHOOD_roleChanges - [RH] Grant Robinhood
ALM_PROXY_FREEZABLEallocator/freezer roles →test_Robinhood_ALMProxyFreezableConfiguration - [XLayer] Grant X Layer
ALM_PROXY_FREEZABLEallocator/freezer roles →test_XLAYER_ALMProxyFreezableConfiguration - [ETH] Set X Layer LayerZero recipient and USDT LZ transfer rate limit →
test_ETHEREUM_sll_bridgeUSDTToXLayer - [ETH] Deactivate old Morpho V2 USDT vault limits →
test_ETHEREUM_sll_deactivateOldMorphoUsdtVault - [XLayer] Full spUSDT / USDT0 round trip →
test_XLAYER_sll_spUSDT_usdt0RoundTrip - [RH] Full spUSDG / Paxos round trip →
test_ROBINHOOD_sll_spUSDGPaxosRoundTrip - [ETH] Transfer USDS to Grove →
test_ETHEREUM_sll_transferUsdsToGrove - [ETH] Treasury USDS transfers →
test_ETHEREUM_sparkTreasury_transfers
- [ETH] Set Ethereum USDG Paxos rate limit →
- Unit tests ensure new values are changed by the spell.
- End-to-end tests are sufficient to ensure correctness of the high-level goals:
- Ethereum→X Layer LayerZero USDT path is tested through send, relay, and rate-limit refill.
- X Layer spUSDT round trip is tested through deposit, take, bridge to Ethereum, return bridge, transfer back to vault, and redeem.
- Robinhood spUSDG Paxos round trip is tested through deposit, ALM take, Paxos-side transfer simulation, return settlement simulation, transfer back to vault, and redeem.
- 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.
- All tests are passing in CI at
32d0504c18115873369eaf1028abc0ce90a9df3f. - All tests listed above are not
skipped. - All tests are passing locally:
EXECUTED_TESTS_LOGS
forge test --match-path src/proposals/20260716/Spell_20260716.t.sol
Ran 16 tests for src/proposals/20260716/Spell_20260716.t.sol:SparkEthereum_20260716_SLLTests
[PASS] test_ARBITRUM_E2E_sparkLiquidityLayer() (gas: 775675351)
[PASS] test_AVALANCHE_E2E_sparkLiquidityLayer() (gas: 313997622)
[PASS] test_BASE_E2E_sparkLiquidityLayer() (gas: 607596479)
[PASS] test_E2E_sparkLiquidityLayerCCTPCrossChainSetup() (gas: 4393908931)
[PASS] test_ETHEREUM_E2E_sparkLiquidityLayer() (gas: 2304567378)
[PASS] test_ETHEREUM_sll_deactivateOldMorphoUsdtVault() (gas: 62730599)
[PASS] test_ETHEREUM_sll_enableUSDTBridgingToXLayer() (gas: 62677265)
[PASS] test_ETHEREUM_sll_enableUsdgTransferToPaxosDeposit() (gas: 62894586)
[PASS] test_OPTIMISM_E2E_sparkLiquidityLayer() (gas: 400657698)
[PASS] test_ROBINHOOD_roleChanges() (gas: 62451235)
[PASS] test_ROBINHOOD_sll_enableUsdgTransferToPaxosDeposit() (gas: 62586624)
[PASS] test_ROBINHOOD_sll_spUSDGPaxosRoundTrip() (gas: 62934156)
[PASS] test_Robinhood_ALMProxyFreezableConfiguration() (gas: 62398569)
[PASS] test_UNICHAIN_E2E_sparkLiquidityLayer() (gas: 361653961)
[PASS] test_XLAYER_ALMProxyFreezableConfiguration() (gas: 62392270)
[PASS] test_XLAYER_sll_spUSDT_usdt0RoundTrip() (gas: 83576119)
Suite result: ok. 16 passed; 0 failed; 0 skipped; finished in 36.97s (28.37s CPU time)
Ran 15 tests for src/proposals/20260716/Spell_20260716.t.sol:SparkEthereum_20260716_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: 2942272)
[FAIL: Mainnet payload not matching deployed payload: 0x0000000000000000000000000000000000000000 != 0xc7183455a4C133Ae270771860664b6B7ec320bB1] test_ETHEREUM_PayloadsConfigured() (gas: 67436)
[PASS] test_ETHEREUM_SparkProxyStorage() (gas: 62783733)
[PASS] test_ETHEREUM_sll_transferUsdsToGrove() (gas: 62671527)
[PASS] test_ETHEREUM_sparkLend_withdrawAllReserves() (gas: 64373895)
[PASS] test_ETHEREUM_sparkTreasury_transfers() (gas: 62635130)
[SKIP] test_GNOSIS_PayloadBytecodeMatches() (gas: 0)
[SKIP] test_OPTIMISM_PayloadBytecodeMatches() (gas: 0)
[PASS] test_ROBINHOOD_PayloadBytecodeMatches() (gas: 716594)
[SKIP] test_UNICHAIN_PayloadBytecodeMatches() (gas: 0)
[PASS] test_XLAYER_PayloadBytecodeMatches() (gas: 220077)
[PASS] test_officeHours() (gas: 55292)
Suite result: FAILED. 8 passed; 1 failed; 6 skipped; finished in 38.72s (14.94s CPU time)
Warning: the following cheatcode(s) are deprecated and will be removed in future versions:
snapshot(): replaced by `snapshotState`
revertTo(uint256): replaced by `revertToState`
Ran 14 tests for src/proposals/20260716/Spell_20260716.t.sol:SparkEthereum_20260716_SparklendTests
[PASS] test_ETHEREUM_AllReservesSeeded() (gas: 62828859)
[PASS] test_ETHEREUM_CapAutomator() (gas: 89192901)
[PASS] test_ETHEREUM_E2E_sparkLend() (gas: 4146963550)
[PASS] test_ETHEREUM_FreezerMom() (gas: 180156116)
[PASS] test_ETHEREUM_FreezerMom_Multisig() (gas: 142834758)
[PASS] test_ETHEREUM_Oracles() (gas: 65545446)
[PASS] test_ETHEREUM_RewardsConfiguration() (gas: 63510269)
[PASS] test_ETHEREUM_SpellExecutionDiff() (gas: 253175063)
[PASS] test_ETHEREUM_TokenImplementationsMatch() (gas: 63017455)
[SKIP] test_GNOSIS_AllReservesSeeded() (gas: 0)
[SKIP] test_GNOSIS_E2E_sparkLend() (gas: 0)
[SKIP] test_GNOSIS_Oracles() (gas: 0)
[SKIP] test_GNOSIS_SpellExecutionDiff() (gas: 0)
[SKIP] test_GNOSIS_TokenImplementationsMatch() (gas: 0)
Suite result: ok. 9 passed; 0 failed; 5 skipped; finished in 38.72s (26.66s CPU time)
Ran 3 test suites in 38.75s (114.41s CPU time): 33 tests passed, 1 failed, 11 skipped (45 total tests)
Failing tests:
Encountered 1 failing test in src/proposals/20260716/Spell_20260716.t.sol:SparkEthereum_20260716_SpellTests
[FAIL: Mainnet payload not matching deployed payload: 0x0000000000000000000000000000000000000000 != 0xc7183455a4C133Ae270771860664b6B7ec320bB1] test_ETHEREUM_PayloadsConfigured() (gas: 67436)
Encountered a total of 1 failing tests, 33 tests succeeded
- Actions listed in the Executive Sheet / governance materials for this Star match the spell scope.
- Every instruction text from the governance materials is represented in the spell code or tests.
- All actions present in the spell code are present in the forum post specification.
- All actions in the forum post specification are present in the spell code.
- Relevant checklist items have been re-verified after latest commits.
- Post the completed "Development Stage" checklist stage with the explicit "Good to deploy" note on top.
(To be completed after both reviewers provide explicit "Good to deploy")
- Both reviewers gave explicit "Good to deploy".
- A new comment in the PR contains link to the deployed spell(s) and Tenderly vnet(s).
- The comment also contains codehash of the deployed mainnet spell.
- The codehash matches one produced locally from the reviewed source code.
- Every spell is verified on Etherscan or other primary block explorer for this chain.
- Every spell code matches local source code at the "good to deploy" commit.
- Etherscan settings (optimizer, EVM version, license) match local ones.
- Every spell is deployed using standard
CREATE(notCREATE2). - Tests are updated to execute against the deployed spell(s).
- No test is skipped after deployment.
- All tests are passing in CI at COMMIT_HASH.
- All tests are passing locally at COMMIT_HASH:
EXECUTED_TESTS_LOGS
- The Tenderly simulation shows all actions are executed successfully.
- The Tenderly simulation shows no extra actions not present in the spell are executed.
- The Tenderly simulation shows no reverts or out-of-gas errors.
- Post the completed "Deployment Stage" checklist stage with the explicit "Good to handover" note on top.
(To be completed after both reviewers provide explicit "Good to handover")
- Both reviewers gave explicit "Good to handover".
- All review comments have been addressed or resolved.
- The spell address, the codehash and the direct execution are posted by the crafter in the
#govopsin theXXX spell YYYY-MM-DD deployed to 0x… with hash 0x…, direct execution: yes / noformat. - Posted spell address matches spell address approved for handover.
- Posted spell codehash matches codehash that you verified locally.
- Posted direct execution value matches the forum post.
- Confirm the address (via a separate "reply to" message, restating the address to avoid edits).
- Ensure that no changes were made to the code since the spell was deployed and archived.
- Post the completed "Handover Stage" checklist stage with the explicit pull request approval via 'Approve' review option.