Skip to content

feat(c2): parameterize mid-chain Jovian activation with boundary assertions - #4

Merged
ywy2090 merged 1 commit into
mainfrom
sync/c2-late-fork
Sep 18, 2026
Merged

ywy2090 merged 1 commit into
mainfrom
sync/c2-late-fork

Conversation

@ywy2090

@ywy2090 ywy2090 commented Sep 17, 2026

Copy link
Copy Markdown
Collaborator

What

L2_JOVIAN_OFFSET (seconds, relative to rollup genesis.l2_time) activates Jovian mid-chain:

  • offset → intent [globalDeployOverrides] (l2GenesisJovianTimeOffset, hexutil hex string)
  • absolute time read back from rollup.json as the single source of truth
  • FISCO config.genesis schedule aligns to it — three-site consistency by construction (the A1-class drift is re-checked on a real stack)
  • Isthmus stays the lane baseline (engine −38005 gate admits Isthmus+ payloads only) → only Jovian (and later Karst) can be late; empty offset keeps today's config verbatim

Plus: fork-era-aware extraData mode probe (pre-activation head = 9B Holocene form), and check_late_fork.py boundary assertions wired after the withdraw leg.

Validation (live, full stack)

L2_JOVIAN_OFFSET=150, anvil + op-deployer/op-node/op-batcher @ da197e45 + fisco-bcos 9bdcb476c: deposit/withdraw green (rc=0, ~490s), boundary asserted:

OK late-fork boundary: pre@73 9B v00 -> act@74 deposits-only 17B v01 -> head@234

The activation block carried exactly 1 attributes deposit + the 5 Jovian upgrade txs, all 0x7e — matching the upstream upgrade-tx count. (An initial over-strict 'exactly one tx' assertion was corrected against this live observation; deposits-only means no USER transactions.)

Fills the biggest gap the batch-2 triage found: both prior full-stack runs had every fork active from genesis. Rollout: merge FISCO side (already on feat/karst-318-integration) → merge this → bump c2-e2e.yml ref.

…rtions

L2_JOVIAN_OFFSET (seconds, relative to rollup genesis.l2_time) activates Jovian
mid-chain: the offset goes into the intent's [globalDeployOverrides] (hexutil
hex string), the absolute time is read back from rollup.json as the single
source of truth, and the FISCO config.genesis schedule aligns to it —
three-site consistency by construction (the A1 class of drift is re-checked on
a real stack). Isthmus stays the lane baseline (engine -38005 gate admits
Isthmus+ payloads only), so only Jovian (and later Karst) can be late; the
default (empty offset) keeps today's genesis-active config verbatim.

The mode probe's extraData check becomes fork-era aware (a pre-activation head
carries the 9-byte Holocene form, not 17-byte Jovian), and check_late_fork.py
asserts the boundary after the withdraw leg: pre-block 9B v00 -> activation
block all-deposits (0x7e only; observed live as 1 attributes + exactly the 5
Jovian upgrade txs) 17B v01 -> head advances. Deposits-only means no USER
transactions — an initial over-strict 'exactly one tx' assertion was corrected
against the live observation.

Validated end to end: L2_JOVIAN_OFFSET=150, anvil+op-deployer/op-node/batcher
@da197e45 + fisco-bcos 9bdcb476c, deposit/withdraw legs green (rc=0, ~490s) and
'OK late-fork boundary: pre@73 9B v00 -> act@74 deposits-only 17B v01 ->
head@234'.
@ywy2090
ywy2090 merged commit e7cded8 into main Sep 18, 2026
2 checks passed
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.

1 participant