Skip to content

feat(node): stop Zone block production while the portal is paused - #1429

Draft
0xKitsune wants to merge 17 commits into
mainfrom
daniel/zone-pause-recovery
Draft

0xKitsune wants to merge 17 commits into
mainfrom
daniel/zone-pause-recovery

Conversation

@0xKitsune

@0xKitsune 0xKitsune commented Sep 9, 2026

Copy link
Copy Markdown
Collaborator

This PR makes a finalized Portal pause stop Zone execution without stopping L1 governance.

The producer and followers share the same pause gate: leaders finish at most the in-flight block, followers retain peer blocks without importing them, and neither side signs settlements while paused.

if drain.production_paused() {
    return Ok(None);
}

Portal state is initialized before startup and tracked independently of the bounded execution queue. RPC failures fail closed, while resume() or automatic expiry clears the gate and drains retained work.

if self.context.l1_block_tracker.portal_paused() {
    return Ok(PeerBlockImportOutcome::Paused(None));
}

Settlement retries also reuse a valid anchor until it approaches expiry, giving delayed follower signatures time to reach quorum while still rebuilding and validating the statement against current L1 state.

@0xrusowsky
0xrusowsky force-pushed the daniel/zone-pause-recovery branch 3 times, most recently from 36a2c47 to e1e279f Compare September 15, 2026 09:54
@0xrusowsky
0xrusowsky force-pushed the daniel/zone-pause-recovery branch from e1e279f to abeb1c1 Compare September 15, 2026 09:57
0xrusowsky and others added 2 commits September 15, 2026 11:59
Co-authored-by: Derek Cofausper <256792747+decofe@users.noreply.github.com>
pull Bot pushed a commit to Dustin4444/zones that referenced this pull request Sep 15, 2026
## Summary

Foundry's dependency checks block CI in two places: the tracked lockfile
points at an old `tempo-std` revision, and Docker copies that lockfile
into a source snapshot without the Git metadata needed to validate it.

- Align `crates/contracts/foundry.lock` with the existing `tempo-std`
submodule revision, `96f882963ce3b0e0abc7ec2b41d03d42457877bb`.
- Exclude that lockfile from Docker's build context alongside Git
metadata. Docker still compiles the checked-out, pinned submodule
sources; regular contract CI continues validating the tracked lockfile
against Git.

This unblocks contract and Docker builds affecting
[tempoxyz#1429](tempoxyz#1429) and
[tempoxyz#1443](tempoxyz#1443).

## Validation

- Verified both Foundry lockfile entries match their committed submodule
revisions.
- Reproduced Docker's `fatal: not a git repository` failure with its
exact Foundry nightly (`ba4700106baf7c633ec664b27db381a3401cd097`) and a
source snapshot without Git metadata.
- Excluding the lockfile from that snapshot makes the same `forge build
--skip test` command pass (33 Solidity files).
- `git diff --check` passed.
- Full Docker validation runs in CI; the local sandbox has no Docker
daemon.

Prompted by: @0xrusowsky

---------

Co-authored-by: 0xrusowsky <90208954+0xrusowsky@users.noreply.github.com>
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.

2 participants