test: run tier 1 protocol sweeps on base and arbitrum forks#1745
Merged
Conversation
Add Base (8453) and Arbitrum One (42161) to the Tier 1 fork-simulation sweep. chains.test.ts iterates the new chains and self-skips when their PROTOCOL_SIM_RPC_<id> is unset. - chainlink: bind price-feed reads on both chains (all named USD/ETH feeds; BTC/ETH only on Arbitrum). CCIP and historical-round actions self-skip. ajna's existing Base reads now also run on a Base fork. - protocol-local.sh: start_base_fork / start_arbitrum_fork public-upstream forks; sim [base|arbitrum] and bare sim wire them up. - e2e-tests-ephemeral.yml: new tier1-simulations-l2 matrix job, one leg per chain in parallel with the chain-1 job, per-chain executed-test floors (Base 15, Arbitrum 12), public upstream with per-chain secret override. - Regenerate chainlink golden with 8453/42161 bound calldata. - Document the multi-chain sweep in the coverage methodology.
…ilder pickEventContractAddress requires every testData chain to have a TOKEN_REGISTRY entry; adding chainlink testData for 42161 without one broke build-workflow.test.ts. Base (8453) already had an entry.
The Arbitrum ETH/USD proxy's description() reverts on the anvil fork (dynamic-string cold-fetch the public upstream will not serve at the pinned block; works live, and the fixed-size reads on the same proxy pass). Skip it on 42161 and update the golden.
🧹 PR Environment Cleaned UpThe PR environment has been successfully deleted. Deleted Resources:
All resources have been cleaned up and will no longer incur costs. |
ℹ️ No PR Environment to Clean UpNo PR environment was found for this PR. This is expected if:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Extends the Tier 1 fork-simulation sweep from Ethereum-only to two L2s:
Base (8453) and Arbitrum One (42161). Every registry action for a covered
(protocol, chain) is executed directly against an anvil fork of that chain.
chains.test.tsnow iterates Base and Arbitrum in addition to Ethereumand Sepolia, gating each on
PROTOCOL_SIM_RPC_<chainId>so a chain whoseRPC is absent self-skips rather than failing.
tier1-simulations-l2CI job runs one matrix leg per chain, inparallel with the existing chain-1
tier1-simulationsjob, each with itsown executed-test floor. Two separate runners mean the L2 legs add no time
to the chain-1 budget.
scripts/protocol-local.shgainsstart_base_fork/start_arbitrum_forkand wires
sim base/sim arbitrum(and baresim) to start them.coverage:reportnow emits per-chain rows for 8453 and 42161, derivedautomatically from each protocol's testData.
Why
Every protocol was previously simulated on a single mainnet fork; L2
deployments were unvalidated. The harness was already parameterized per
chain, so this is fork plumbing plus L2 testData. Simulations read forked
state and never mine against the upstream, so public Base/Arbitrum RPC
endpoints are sufficient here (no archive node), unlike the mainnet pinned
fork.
Coverage gained
USD/ETH feeds except BTC/ETH (no Base deployment) plus the custom-feed
read set (19 reads); Arbitrum adds the BTC/ETH feed (21 reads). CCIP and
historical-round actions self-skip on both.
Tier 1, not only against live Base in Tier 2.
Per-chain executed-test floors: Base 15, Arbitrum 12.
Notes
base-rpc.publicnode.com,arbitrum-one-rpc.publicnode.com); a per-chainANVIL_FORK_*_URLsecretoverrides for a private endpoint. Neither chain is gated off - both feeds
were verified live (decimals 8, latestRoundData responding).
protocols (aave-v3, uniswap-v3, sky, etc.) that declare L2 contract
addresses still need per-chain FORK_WHALES/FAUCETS before their write
testData can run on these chains; that is deliberately left as follow-up.