Skip to content

test: run tier 1 protocol sweeps on base and arbitrum forks#1745

Merged
suisuss merged 3 commits into
stagingfrom
feat/KEEP-942-multichain-tier1-base-arbitrum
Jul 9, 2026
Merged

test: run tier 1 protocol sweeps on base and arbitrum forks#1745
suisuss merged 3 commits into
stagingfrom
feat/KEEP-942-multichain-tier1-base-arbitrum

Conversation

@suisuss

@suisuss suisuss commented Jul 9, 2026

Copy link
Copy Markdown

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.ts now iterates Base and Arbitrum in addition to Ethereum
    and Sepolia, gating each on PROTOCOL_SIM_RPC_<chainId> so a chain whose
    RPC is absent self-skips rather than failing.
  • New tier1-simulations-l2 CI job runs one matrix leg per chain, in
    parallel with the existing chain-1 tier1-simulations job, each with its
    own executed-test floor. Two separate runners mean the L2 legs add no time
    to the chain-1 budget.
  • scripts/protocol-local.sh gains start_base_fork / start_arbitrum_fork
    and wires sim base / sim arbitrum (and bare sim) to start them.
  • coverage:report now emits per-chain rows for 8453 and 42161, derived
    automatically 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

  • chainlink: price-feed reads bound on both chains. Base runs all named
    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.
  • ajna: its existing Base reads now also execute against a Base fork in
    Tier 1, not only against live Base in Tier 2.

Per-chain executed-test floors: Base 15, Arbitrum 12.

Notes

  • Both legs default to public upstreams (base-rpc.publicnode.com,
    arbitrum-one-rpc.publicnode.com); a per-chain ANVIL_FORK_*_URL secret
    overrides for a private endpoint. Neither chain is gated off - both feeds
    were verified live (decimals 8, latestRoundData responding).
  • Read-only L2 coverage needs no whales or faucets. Write-bearing L2
    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.

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.
@suisuss suisuss merged commit d8de3ea into staging Jul 9, 2026
63 of 64 checks passed
@suisuss suisuss deleted the feat/KEEP-942-multichain-tier1-base-arbitrum branch July 9, 2026 08:56
@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown

🧹 PR Environment Cleaned Up

The PR environment has been successfully deleted.

Deleted Resources:

  • Namespace: pr-1745
  • All Helm releases (Keeperhub, Scheduler, Event services)
  • PostgreSQL Database (including data)
  • LocalStack, Redis
  • All associated secrets and configs

All resources have been cleaned up and will no longer incur costs.

@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown

ℹ️ No PR Environment to Clean Up

No PR environment was found for this PR. This is expected if:

  • The PR never had the deploy-pr-environment label
  • The environment was already cleaned up
  • The deployment never completed successfully

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant