The rohu does not carry a barometer. It feels the current.
Every consensus paper starts with a confession of faith. We assume partial synchrony. We assume an asynchronous adversary. The author picks a weather at whitepaper time and prays for the rest of the protocol's life. Rohu-Paplet refuses to pick.
The rohu is a river fish. Here it is the fast path, which finalizes in two message delays when the network is kind. The paplet is a sea fish. Here it is the asynchronous reader, which orders by common coin when the network is not. Both read the same water. This post tells the line in three acts:
- Act I, two readers, one river. One uncertified DAG, written the same way in every weather and read two ways. Rohu finalizes in 2δ when the river runs clear. Paplet orders by coin in a storm. The monsoon flip moves between them on evidence that sits in the DAG itself. Cross-read confluence (O1-C) says the two readings give one order. It is machine-checked for all N and reduced to one threshold-clock rule, and its 2δ leg is conditional on granular synchrony. On 11 nodes across four continents, the log kept committing through a storm in which River finalized nothing.
- Act II, the dabbas get their own train. Transaction data gets its own plane: independent producer chains with DA certificates, under the same control DAG. For f ≥ 2, no rule over a control cone alone can carry a fast extension both completely and soundly, so the frontier has to travel as a signed artifact, the FrontierCert. The paper makes no claim at f = 1. T1 to T4 compose the two planes into one log and one checkpoint sequence. Then a stricter per-position state-root oracle caught a real ordering bug. Anchors agreed, total order did not, and the paper reports it.
- Act III, the monsoon, one parent at a time. The global eras, the flip, and the Heal go away. Each certified parent gets one domain that can close forever. Votes cast before a timeout can still form a certificate after recovery starts, and every valid closure set must select that child (Section 9). This is the current design, and most of the post.
docs/v4/ sits between Acts II and III.Claim status · read this first
The headings argue with swagger. This table is where each claim meets its proof. A claim not in the table is positioning, not a result.
| Act | Claim | Status | Scope and where |
|---|---|---|---|
| I | Agreement safety of the 3δ slow path (any network) and of Ocean (arbitrary scheduling) against f Byzantine | Proven | Rohu reads the river · Paplet reads the sea |
| I | O1-C cross-read confluence safety, machine-checked for all N and reduced to one threshold-clock rule | Proven | Two readers, one order (O1-C) |
| I | Both mode boundaries are fork-free for all N: the flip by O1-A, the heal by collective re-entry | Proven | Monsoon: nobody votes on the rain |
| I | 2δ fast-path safety, under granular synchrony. Hydrangea Theorem 3 forbids it free for f ≥ 3 | Conditional | The fast-path bound, honestly |
| I | Ocean commit rate of at least (f+2)/(5f+1), favorable case. Expected O(1) waves is elementary and not mechanized | Conditional | Paplet reads the sea |
| I | On n = 11 across four continents: zero River finalizations in the storm while the log kept committing, and the flip at one identical round on 9 of 11 nodes, in 1 of 3 runs | Evidence | On real water: eleven nodes, four continents |
| I | "First direct 3δ DAG commit", "first in-band two modes in one DAG", and "first 2δ on an uncertified DAG" | Withdrawn | On real water: eleven nodes, four continents |
| II | Withholding, equivocation, or stalling on any data chain cannot stall the control clock (T1) | Proven | T1 · machine-checked for all N |
| II | For f ≥ 2, no cone-local predicate carries unproposed extensions soundly and completely, so the FrontierCert is necessary | Proven | T2 · hand proof, witnessed concretely at f = 2, 3 |
| II | Same-round FrontierCert candidates form a compatible family (T2) | Proven | T2 · machine-checked for all N |
| II | Deterministic Ocean extraction (T3) and one log and checkpoint sequence across both readers (T4) | Proven | T3 and T4 · hand proofs over the control-safety package from Act I |
| II | 2δ fast-path safety alongside f-crash tolerance | Conditional | proof tier · holds under granular synchrony, an irreducible premise |
| II | On four continents, the flip fires at the same round on every node that reaches it, and the log commits while River is dead | Evidence | evaluation · n = 11, onset in 1 of 3 runs |
| II | Total-order clause of confluence, as the reference serializer realizes it | Withdrawn | evaluation · falsified on hardware, frozen pending fix and re-run |
| II | "First direct 3δ DAG commit" and novelty for in-band switching without a view change | Withdrawn | positioning · Mysticeti-C and full Bullshark got there first |
| III | One certified child per parent, and one certified prefix across the FAST, FIN, and Ocean routes | Proven | Hand proof over the stated signing, storage, and ordering contracts. No mechanized refinement of the native runtime. Section 9. |
| III | Every valid closure set selects any child that could still become FAST or FIN | Proven | Hand proof, the quorum counts in (2.2). Section 9. |
| III | 2f+1 receipts are necessary for a one-shot, status-only selector | Proven | For that one interface. Signed witnesses at f = 1 to 4. Section 9. |
| III | Almost-sure progress, at most n/Q expected eligible waves to a core hit | Conditional | Ideal-coin contract (Assumption 3) and the progress premises. Sections 8, 10. |
| III | FAST at 2δ, FIN at 3δ, 2δ decision intervals after warmup | Conditional | Ready prerequisites, one-way delay at most δ, signers that stay open. Sections 6, 10. |
| III | Signed parent-local kernel and Ocean adapter | Evidence | 32 tests, including 28,591 finite quorum-intersection checks. Section 12. |
| III | A native end-to-end parent-local runtime | Not claimed | The native Rust components implement the earlier era-based revision. Section 11. |
| III | A DAG plus a fast route plus a recovery route is new | Not claimed | General fast and fallback composition is prior art. Section 13. |
A word on register before the swagger starts. The jokes live in the headings. The theorem statements, quorum counts, and caveats are exactly as strong as the paper makes them, and no stronger. When a quip and a theorem disagree, the theorem wins, and the claim-to-artifact ledger in Section 11 settles the rest.
Field guide
Two readers, one river
Every consensus paper opens with a confession of faith: we assume partial synchrony. Act I refused to pick a weather. It wrote one DAG and read it two ways.
Act I runs two consensus read functions over one uncertified DAG. River finalizes in 2δ or 3δ under partial synchrony. Ocean commits coin-elected anchors under asynchrony. An in-band flip moves between them, and a machine-checked theorem says the two readings give one order.
At n = 5f+1 with at most f Byzantine, the 3δ slow path and the asynchronous Ocean are unconditionally safe. The 2δ fast path is safe under granular synchrony, and the flip gates it for exactly the regime where that assumption fails. The paper sorts every claim into proven, conditional, residual, implementation evidence, or positioning, and each claim below keeps its status.
The water: one DAG in every weather
A block is (author, round, parents, older_refs, payload, flags, σcoin?, sig). Its parents are at least 3f+1 distinct-author blocks of the previous round, and the self-parent is mandatory. Nothing on the wire changes between modes. Consensus is interpretation.
| Flag | Meaning |
|---|---|
| strong(r) | Vote plus promise "I will never ⊥(r)". Cast in the round-(r+1) block of its author, with the leader as a parent. |
| weak(r) | Late vote, no promise |
| ⊥(r) | Dummy vote, anchored: castable only in the round-(r+1) block of its author |
| fin(r) | Finalize-ack. Needs its author's own strong(r) and a notarization in its cone. |
| bind(a, w) | Pre-coin commitment to the first round-3w block of author a in wave w (Ocean) |
A certificate is a set of valid flags from distinct authors anywhere in the DAG. Flag validity is syntactic. A verifier checks a flag against the cone of the block that carries it, so an invalid flag is stripped at interpretation, whatever its author intended.
| Quorum | Size | Use |
|---|---|---|
| qclk | 3f+1 | Threshold clock |
| qnotar | 3f+1 | Notarization, fin-certs, skip-certs, Ocean commits |
| qfast | 4f+1 | Fast finality |
| qcoin | f+1 | Coin reconstruction, not a consensus quorum |
The commit rules read three outcomes off the same substrate. No extra message distinguishes them.
Anchor validity (R3) makes every leader block a carrier. A leader block is valid only if its cone contains a notarization or a skip-cert for every earlier round.
Flags are artifacts, not patterns in somebody's view. The never-⊥ promise is folded into the strong vote, so a promise violation (⊥ after your own strong, or fin without strong) is slashable from a two-block proof. A certificate is portable: a light client can check it without the full DAG. Cordial Miners already treats signed equivocation as an accountable fault. The delta here is light-client portability.
Rohu reads the river
River takes the three commit rules directly. The single-round lemmas follow from quorum intersection over n = 5f+1 and from the anchoring of ⊥. Each honest author has exactly one round-(r+1) block, so it casts at most one ⊥(r).
Proof
Two notarizations are two 3f+1 support quorums. They share at least f+1 authors, and so at least one honest author. That author would have supported two distinct leaders in one round, which the syntactic flag rule forbids.
Proof
A fast (4f+1 strong) and a skip (3f+1 ⊥) share at least 2f+1 authors, so at least f+1 honest ones. Each of them promised never to ⊥(r) and also cast ⊥(r), which is a slashable promise violation. A fin(r) needs its author's own strong(r), so a fincert and a skip share at least f+1 honest authors that hold both strong(r) and ⊥(r).
Proof
A skip-cert has at least 2f+1 honest ⊥ authors. Of the 4f+1 honest validators, at most the rest can cast strong(r):
The cap is permanent by anchoring. Each honest ⊥ author spent its single round-(r+1) block on ⊥, so nobody can top up the cap later.
Proof
Let s be the number of honest validators that strong-support round r. If s ≤ f, then at least (4f+1) − f = 3f+1 honest validators cast ⊥, and a skip-cert forms. If s > f, the leader block is a parent of an honest block. It then spreads through the DAG to every honest validator, which weak-supports it on arrival. Supports reach 4f+1 ≥ 3f+1, and a notarization forms.
C1 does not stop for anybody. You board at 4f+1 strong votes in 2δ, or you watch it go. C2 stops at every station and still reaches VT in 3δ.
Paplet reads the sea
Ocean runs waves of W = 3 rounds. Any f+1 coin shares reconstruct a threshold-BLS coin cw, which elects ℓw = cw mod n. The anchor is the round-3w block of ℓw. It commits if it is cascade-committable and carries a BindCert. The cascade supplies liveness, and the BindCert supplies safety. The coin is elected after the votes that fix certifiability are sealed, so the adversary cannot aim it.
Proof
A BindCert is at least 3f+1 distinct-author bindings, so at least 2f+1 are honest. An honest validator binds author a to one value per wave: the canonical lowest-hash block. Two BindCerts for distinct blocks of one author would need two disjoint honest-binder sets:
Proof
Each round-(r+1) block references at least 3f+1 distinct round-r authors. There are at least 4f+1 honest round-(r+1) authors. Write cov(c) for the number of honest validators that strong-path-support candidate c:
Let k candidates be committable. The other 5f+1−k have cov at most 2f:
This cardinality fact lies outside the quantifier-free fragment of the safety prover. SMT discharges it at f = 1, 2, 3 (UNSAT below f+2), alongside the proof for all f. A negative control that weakens the parents rule to 3f reaches only 1, 2, and 3 committable candidates, so the 3f+1 quorum is load-bearing.
Proof
The cascade fixes at least f+2 committable candidates before the coin. The committed value of each one is frozen pre-coin as the canonical lowest-hash binding. At t = f+1, the f Byzantine shares alone cannot reconstruct the coin, and honest shares appear only at round 3w+2, after the bindings are sealed. The elected anchor is therefore committable with probability at least (f+2)/(5f+1). A committable anchor's BindCert forms from honest bindings alone, so the f Byzantine cannot withhold it away. The bound holds per wave, conditioned on history, so no independence across waves is needed.
Two caveats from the paper's own ledger. The rate (f+2)/(5f+1) is filed as conditional, favorable case only. The probability step is elementary and not mechanized. The paper notes that, to its knowledge, no asynchronous randomized BFT result mechanizes one.
Monsoon: nobody votes on the rain
A trigger is kout consecutive skip-certs. By L4 the trigger rounds are finality-dead, so the trigger can never conflict with finality after the fact. Exit is scent suppression. A strong or fin flag is invalid if its cone contains a scent: at least f+1 distinct-author ⊥ columns in each of kout consecutive rounds, unless a certified Heal is present.
Proof
A block at round r+2 or later has at least 3f+1 distinct-author round-(r+1) blocks in its cone, by the threshold clock. A skip-cert supplies at least 3f+1 distinct-author ⊥-flagged round-(r+1) blocks. Anchoring gives each honest author exactly one round-(r+1) block, so containing a block by that author means containing the ⊥-flagged one:
A full skip-cert can hide from a cone. Its f+1 distinct-⊥ scent cannot. Anchoring fixes where the ⊥ flags live, and the clock forces their columns into every later cone, so the timing of certificate assembly stops mattering.
Proof
A collective exit needs honest nodes to agree that a storm is on. That is consensus, and a storm is the failure of consensus on the fast read. By Lemma F, once a skip-cert exists every cone that reaches its round carries the scent. A node suppresses its own river finality on seeing the scent, with no message to anyone. It never exits without a genuine storm.
Proof
If each node re-entered the river when its own cone looked calm, two honest nodes could re-enter at rounds r1 ≠ r2. At a slot between them they would read different canonical values. The Heal is one ratified event-wave anchor, unique per boundary, and every cone carries it within two rounds. Every node re-enters at the Heal's round, so nobody straddles the boundary.
Panic is unilateral, recovery is collective. Revoking the fast read is locally detectable and locally safe. Restoring it is locally unsafe and needs one ratified object. Exit rests on circularity: you cannot vote your way out of a failure of voting. Re-entry rests on indistinguishability. Mumbai knows this already. Nobody holds a referendum on whether it is raining, but when the trains restart, the announcement is for everyone at once.
Two readers, one order (O1-C)
The central safety obligation is that River and Ocean never disagree. Every height commits the same value whichever reader resolves it, and no observer revises a delivered prefix. The obstacle comes first, as a lower bound.
Proof
A cone is guaranteed only 3f+1 of the round-(r+1) author columns, so the adversary can make every honest cone miss one chosen column. World W1 has exactly 3f+1 strong(r) flags, so a fincert is possible. World W0 has exactly 3f and differs only in the missing author's flag. Every honest cone sees the same thing in both worlds, so any predicate gives the same answer in both. Completeness says true in W1 and soundness says false in W0, on the same cone.
Mode detection cannot be both sound and complete, so the design makes the question moot. Scent suppression empties the contested region, and chain anchors carry the certificates that matter.
Proof
A strong(s) or fin(s) flag lives in a block at round s+1 or later, which is at least (x+i)+2 for every trigger round x+i. By Lemma F its cone carries the scent, so the flag is invalid. The Heal exception needs s ≥ h+2 and the certified Heal, which exists only from round h+2. So no valid strong(s) or fin(s) exists in the window, and the two sets in (I.5) are disjoint.
Proof
A certificate rules out skip(s) by L2/L3. R3 then can only be met at round s by notar(s), which is unique by L1. Each support carries Ls as an ancestor by flag validity.
Every observer uses one linearization function lin for every anchor. It orders the anchor's cone by ascending round, pivots at any leader block carrying notar(r) in that fixed cone, and recursively emits the pivot's batch. The pivot predicate is evaluated in the anchor's cone, so pivot batches never depend on the outer observer.
Proof
Induct on the anchor position i. Genesis is agreed. Given an agreed prefix, R3 makes the next slot a deterministic function of it. Under river tenancy, L1 and L2/L3 force a unique river outcome. A live trigger would scent-suppress at least 2f+1 honest voters, leaving at most 3f < 3f+1 valid finality flags, so no Ocean anchor fits there. Under Ocean tenancy, O1-A rules out river certificates. The coin is recovered identically from any f+1 shares, and BindCert uniqueness leaves one committable block. The flip is a deterministic function of the DAG, and the Heal is one ratified object, so every observer places the boundaries identically. Within an agreed anchor, lin and carriage give identical batches. A delivered river anchor excludes any trigger over its slot, and a delivered Ocean anchor sits where no river certificate can exist, so nothing is revised.
The same result is proven inductively over all N in Ivy/mypyvy and reduced to one rule of the threshold clock: a cone reaches round R only with a quorum of 3f+1 distinct-author round-R blocks in it. Forced scent and forced carrier derive from that rule plus quorum intersection. The fused model proves agreement, cross-mode exclusion, chain linkage, and delivery together, non-vacuous and load-bearing-gated. Lemma 0, forced exit, the forking of unilateral re-entry, and the safety of collective re-entry are also checked for all N.
The prover has no module system, so the composition across models is a vocabulary correspondence, with every dependency listed. One seam, the duality between immutable cones at commit and growing cones during dissemination, is shown irreducible by a deliberate counter-model. The lin properties are derived for all N from two primitives. The kernel's global pivot recursion is the one step not mechanized. Its order and determinism are cross-validated against the kernel at f = 1, 2, 3.
The fast-path bound, honestly
A 2δ fast commit at about 80% responsiveness, combined with 20% crash tolerance, is not free under bare partial synchrony. Hydrangea Theorem 3 caps the safe optimistic two-round threshold:
The paper reads this as forbidding Rohu-Paplet's popt = f under bare partial synchrony for f ≥ 3. So the 2δ path takes its safety from granular synchrony. Before GST, at most f honest parties' messages to any honest party are delayed beyond a bound Γ ≥ Δ. The protocol realizes this as a wait of Λ = 2Γ + 2Δ before casting ⊥. Granular synchrony is weaker than full synchrony and stronger than partial synchrony.
- Where the premise enters. Exactly at the cross-round carriage between the 2f+1 fast-worth and the 3f+1 clock quorum (O15). Without it, the fast commit is provably strandable. The carriage is then derived from the premise for all N. The premise itself is irreducible, and the paper makes no claim that the DAG escapes the bound.
- What the premise does not buy. The skip-side inference, that no fast commit coexists with a skip-cert, holds with the premise deleted (anchoring plus counting). Granular synchrony buys the carriage and nothing else.
- The flip is the gate. When the evidence says the premise broke (sustained skips), the protocol drops to Ocean, which is unconditionally safe and live. The 3δ slow path's 20+20 tolerance stays unconditional.
There is a second door: pay validators instead of assumptions. At n = 6f+1, with qclk = 4f+1 and qfast = 5f+1, counting alone forces the carriage:
The cost is about 3% resilience: f/(6f+1) against f/(5f+1). The gate proves the same carried theorem as the 5f+1 model with that one axiom's status flipped. The default stays 5f+1 with granular synchrony. Assumption or validators, both mechanized.
Liveness is regime-complete, to the VABA/Ben-Or standard. River resolves every round under partial synchrony (checked for all N). Ocean commits under sustained asynchrony through the cascade, withholding resistance, and coin anti-aiming. Both boundaries are fork-free, so the transitions keep progress. The only step not mechanized is the per-wave probability from the standard coin.
On real water: eleven nodes, four continents
The reference implementation is a Rust sibling module to commonware_consensus::simplex. A six-node network reaches consensus, tolerates a crashed leader, and stays safe under an equivocating one. It runs Ocean on a real threshold-BLS coin (t = f+1) from a real over-the-wire DKG, with no trusted dealer. It flips on a storm, heals on sustained calm, and delivers one canonical log across all nodes, over simulated networks and real TCP. A killed validator recovers from its journal and rejoins.
| Path | Before | After | Note |
|---|---|---|---|
ledger.ingest (healthy) | 9,318,645 ns | 2,158 ns | about 4300× |
ocean_commit (per tick) | about 1–5 ms | about 2 μs | flat in DAG size, about 2000× |
| Sustained storm, no finality | super-linear | linear | gated test |
The geo-distributed run uses n = 11 (f = 2) VMs in five cloud regions on four continents: Virginia, Oregon, Belgium, Singapore, and São Paulo. Links are real (Virginia to Singapore is about 230 ms RTT), and the coin is real threshold-BLS. The storm halts the three validators that lead kout = 3 consecutive round slots, which leaves 8 ≥ qclk = 7 alive, so the DAG keeps advancing.
| Regime | Measurement | Value |
|---|---|---|
| Calm | Canonical log, deduplicated positions | about 1.7 commits/s |
| Calm | River finalizations on the 2δ fast path | 75–100% |
| Storm | River finalizations, scent-suppressed by O1-A, over the whole 360 s storm | 0 |
| Storm | Canonical log, Ocean anchors, deduplicated | about 0.53 commits/s |
| Flip | ⊥ columns on the three storm rounds (threshold 7) | 10, 9, 10 |
| Flip | Nodes that flipped, and at which round | 9 of 11, all identical |
| Flip | Runs in which onset occurred | 1 of 3 |
| Safety | Cross-node divergence, all seven storm scenarios | none, position-level |
The chain kept committing through a regime in which the partial-synchrony path was provably and observably dead. That is the reason the dual read exists, measured instead of argued. The unanimity of the flip is the other point: the trigger is a pure function of the DAG, so independent observers place the boundary at the same round with no coordination. The two nodes that did not flip had fallen behind and had not reached that round yet.
The flip fired in one of three leader-failure runs. In the other two, skip-certs formed in runs of two but never three, so there was correctly no flip. Uniform degradation does not flip either: during a 3 s-delay storm, 78–94% of commits still took the fast path, because slow synchrony is not asynchrony. The divergence check was position-level. The harness now also checks one digest per position, but the runs above predate that check.
Three early "firsts" did not survive a literature crawl, and the paper withdraws them. A direct 3δ DAG commit is not new: Mysticeti-C has it. Two synchrony modes in-band in one DAG are not new: full Bullshark has them, on a certified DAG with per-wave mode votes. A 2δ commit on a 5f+1 uncertified DAG is not new: Odontoceti has it, with no asynchronous mode. The defensible claim is the conjunction: two synchrony-model readers over one uncertified DAG that provably collapse to one order, with an evidence-anchored flip, all machine-checked. On an uncertified DAG the visibility gap is real, and that is where the confluence theorem earns its keep. Shana mat ban.
The dabbas get their own train
Act I taught the river to read the weather. Act II gives the dabbawalas their own train, so a late tiffin never stops the clock.
Replicated state machines have two jobs with two different hard cases. Dissemination fails under data withholding. Ordering fails under adversarial timing. Act II gives each job its own plane and proves that the pair still collapses to one order.
The control plane is Act I: one uncertified DAG, two readers, an in-band flip, and machine-checked confluence. Act II puts independent producer chains underneath it and proves the seam. The paper states the motivation plainly: a system is exactly as live as its least adaptable layer.
Two jobs, two villains, two planes
Dissemination degrades when a producer hides a batch. Ordering degrades when the adversary controls message delay. Availability certificates and prefix rules defeat withholding. Synchrony assumptions and fallback paths address timing. Act II arms each plane against its own villain.
The data plane is K transaction-block chains, one per producer, in the Multimmit line. The paper takes K = n. A data block on chain i is
with exactly one data parent at height h − 1 on the same chain. An honest validator casts at most one DA vote per pair (i, h). Before it votes, it must hold, and have DA-voted, the whole path from its greatest locally certified anchor through the block. A DA certificate is 3f+1 DA votes. Two counting facts over n = 5f+1 drive almost every proof:
Proof
Take incompatible certified blocks with a lexicographically minimal height pair. Their two 3f+1 voter sets share f+1 validators, so they share an honest one. That validator either voted twice at one height or voted through a path that contains a conflicting block at the lower height. Both break the one-vote rule. For availability, take the least-height certified block that extends a given ancestor. Each of its 2f+1 honest voters held the path through that ancestor when it voted.
This lemma is the only fact that the composition imports from the data plane. Everything else in Act II is about the seam.
Data-parent edges are not control edges. A control vertex can name no data, old data, uncertified tips, or DA certificates. Missing data only lowers the vector report of its author. It never blocks the control vertex, and the threshold clock never sees it.
Nobody can see the storm coming
The architecture of both acts comes from one lower bound. A cone contains at least 3f+1 of the 5f+1 author columns of a round, never more by guarantee. So the adversary can schedule delivery so that every honest cone misses one chosen column.
Proof
Build two worlds that differ only in the flag of the one column that every honest cone misses:
Every honest cone sees the same bytes in both worlds. A deterministic predicate gives one answer on identical views. Completeness forces true in W1, and soundness forces false in W0, on the same cone.
So storm detection cannot be both sound and complete. The design does not build a better detector. It computes both readings all the time, and confluence forces them to agree. The shape of the transition then follows:
- Exit is unilateral. Agreeing that "we are in a storm" would need the consensus that is failing. Instead, a node suppresses its own River finality when it sees the scent of a skip-certificate: f+1 distinct ⊥ flags, at least one honest.
- Re-entry is collective. If each node re-entered when its own cone looked calm, two honest nodes could re-enter at different rounds and read different values. One ratified Heal puts everyone back at the same round.
The paper states this principle once and then meets it at every layer. Lemma 0 forces the dual read. A second impossibility, in T2 below, forces the FrontierCert. The deployment then shows the last component that still extracted order failing in the field.
T1 · A late tiffin never stops the train
The first obligation is the one whose failure would be fatal and silent. If data-plane misbehavior could stall the control clock, the liveness of the whole weather machine would depend on producers. It does not.
Proof
By induction on rounds, every later cone has at least 3f+1 distinct authors at each earlier round. Intersect with the evidence object:
Control validity checks only control headers, the self-parent, commitments, and flag syntax. No rule requires fetching a named data block first. The data plane changes the values in a control payload, never eligibility for the clock.
T1 is machine-checked for all N in rohu_wdc_t1_control_clock.pyv. The decoupling is structural. The model has an adversarial withhold_data transition that the environment can fire at will, and no control transition mentions it in a guard. Removing either intersection axiom produces a counterexample to induction, so neither axiom is slack.
T2 · The frontier rides in a dabba, not in a guess
A committed anchor must record which data frontier it reached: a vector F = (F1, …, FK) with one block per chain. For a River proposal C and a pool P of 4f+1 vector-strong votes, let ki(P) be the (3f+1)-st largest reported position on chain i. Then
A fast pool safely pins positions that the proposal names. With fa ≤ f actual Byzantine validators, two honest voter sets on rival branches cannot both exist:
Blocks above the proposed tip are a different matter. No proposal pins them, and an equivocating producer can put incompatible branches behind the same height.
Proof
A Byzantine producer d signs incompatible extensions x and y at one height. The cone holds 3f+1 columns: f+1 votes for x and 2f for y, with d on the y side. The other 2f authors stay outside the cone.
The cone is byte-identical in both executions. Returning x is unsound in Ey. Returning y is unsound in Ex. Returning neither is incomplete in both.
The paper makes no cone-local impossibility claim at f = 1. With one Byzantine validator, the faulty party must be the equivocating producer, so no second author can route the opposite outside vote. The construction is checked concretely at f = 2 and f = 3 in wdc_ext_calibrate.py. Multimmit separately proves an exact extension threshold for notarization-only carry rules. This theorem is about a different gap: a 4f+1 certificate can exist globally while an uncertified cone does not reveal its branch.
The answer is not a better extractor. It is an artifact:
Here A is the control anchor and FC− is the parent FrontierCert. The evidence is either a River fast pool, from which the frontier is recomputed by (II.3), or a committed Ocean anchor with its BindCert and DA-certificate digests. Validity requires the parent frontier to be coordinatewise below the new one. Candidates from different local pools need not be byte-identical. The reference chain ratifies one, and later anchors must descend from it. Two same-round candidates are still compatible. Proposal positions lie on one pinned path. For a variant that allows a fast extension only with all 4f+1 votes, two such pools share honest voters:
Candidate compatibility is machine-checked for all N in rohu_wdc_t2_fc_family.pyv. Both the pool-intersection count and the honest single-branch rule are load-bearing: removing either produces a counterexample.
T3 and T4 · One log, whichever fish is reading
T3 makes Ocean extraction deterministic. For a committed Ocean anchor A with parent FrontierCert frontier F−, collect the DA-certified blocks in its full cone that extend the parent coordinate:
DA-certified blocks on one chain are totally ordered by ancestry, so the maximum is unique. Honest observers that fix the same anchor eventually hold the same finite cone and accept the same certificates. They therefore compute the same frontier G, the same Sweep order, and the same state root. Safety uses no synchrony bound. Eventual delivery is used only for retrieval and termination.
T4 lifts this to one log across both readers. A ratified checkpoint binds the anchor, its FrontierCert, the frontier, the state root, and which reader held the slot. The log grows only by sweeps between ratified frontiers:
Proof
Induct on the checkpoint index. In a River slot, the canonical reference selects one member of a compatible candidate family. In an Ocean slot, O1-A excludes a River commit, BindCert picks one anchor, and T3 gives one frontier and root. At a Heal, one ratified tuple fixes the anchor, FrontierCert, state root, and boundary, so River resumes from the exact state where Ocean stopped.
T3 and T4 are hand proofs over the control-safety package imported from Act I. The paper names what the composition still owes. The fused gate that lifts confluence to FrontierCert hashes and state roots is not yet mechanized. FrontierCert production liveness is unproved, and the paper does not claim it.
105 gates, exit 0
A fair reviewer asks whether "machine-checked for all N" means one theorem or twenty hand-glued lemmas. All gates rebuild from clean with ./setup.sh && ./check.sh on a pinned toolchain: 105 gates, exit 0. The tiers are explicit:
- inductive invariants for all N in Ivy and mypyvy,
- SMT calibration at f = 1, 2, 3 for counting facts outside the decidable fragment,
- Rust differential harnesses that cross-check model against kernel.
One fused model proves agreement and no-cross-mode for all N in a single transition system, reduced to one threshold-clock axiom. The composition has exactly two seams. The first, between a committability snapshot and a growing dissemination view, is itself machine-checked as an expected counterexample gate. The second consumes a proved conclusion from above.
| Result | Gate | Status |
|---|---|---|
| Confluence O1-C | rohu_o1c_fused | proved for all N |
| Visibility gap (Lemma 0) | rohu_lemma0_visibility_gap | lower bound witnessed for all N |
| T1 clock decoupling | rohu_wdc_t1_control_clock | proved for all N |
| T2 candidate compatibility | rohu_wdc_t2_fc_family | proved for all N |
| FrontierCert necessity | wdc_ext_calibrate | impossibility witnessed at f = 2, 3 |
| 2δ fast path | rohu_o15_granular_bridge | conditional on granular synchrony |
The artifact also says what it does not prove. mypyvy has no module import, so the seams rest on about six shared vocabulary identities. The single headline step without a mechanized proof is the global linearization pivot recursion. Its causal-total-order properties are derived for all N. The specific pivot-grouped order and its determinism are only cross-validated at f = 1, 2, 3. Remember that address.
Four continents, one storm, and a bug we report anyway
The deployment runs n = 11 validators (f = 2) in five cloud regions on four continents: Virginia, Oregon, Belgium, Singapore, and São Paulo. The links are real, with about 230 ms round trip from Virginia to Singapore, and the coin is real threshold BLS. In calm weather the log advances at about 9.9 commits per second, and 75 to 100 percent of River finalizations take the 2δ fast path.
The FrontierCert layer behaved exactly as T3 and T4 predict. Every node that reached an anchor minted a byte-identical FrontierCert. Digests diverged only where the committed order underneath diverged. That faithfulness has a sharp corollary: any divergence must come from an imported input. One did.
The stricter oracle compares the block digest at every position and an order-sensitive running state root on every node:
Two nodes agree on S exactly when they committed the same blocks in the same order. Under this oracle, one lagging node diverged at one position and never reconciled. A second run reproduced the same class at a different node and position. Earlier runs missed it because the benchmark proposed identical payloads, and reordering identical payloads does not change the root.
Replay settled the diagnosis. A majority journal, replayed into a fresh ledger, matched its own committed order over all 168 positions, so the kernel linearization is deterministic. Every block of the lagging node was canonical, and its block set was a strict subset of the majority's. Its committed order contained three inversions.
So anchor agreement held, and the total-order half of confluence failed, only on a node whose cone was incomplete when the fast emit path ran. The emit path delivered a batch before its cone finished disseminating. That path implements the linearization pivot recursion: the one step the residual ledger had always listed as cross-validated but not mechanized. The paper named the address, and the bug turned up there.
"No two nodes ever diverged" was true under a head-position oracle and is unverified under the per-position oracle. The paper restates it as "no two nodes ever committed conflicting anchors". The total-order clause of confluence, as this implementation realizes it, is frozen pending the fix and a re-run.
The immediate fix applies the rule that the fast path skipped: emit only the prefix through which every round is resolved in the fixed cone, and stall at an unresolved round. A node that already diverged detects the mismatch against ratified checkpoint roots and resynchronizes from the last agreed checkpoint. The structural escape is stronger: Sweep over a ratified FrontierCert chain is height arithmetic, with no fixpoint and no sensitivity to arrival order. It sits inside the fragment the prover handles.
The impossibility theorem says that cone-local extraction of order cannot be sound and complete. The deployment showed extraction-based ordering failing in the field. Order must be an artifact, not an extraction. The paper would rather report that than a clean table.
Three process changes outlive the fix. Per-position digests and the order-sensitive root become permanent oracles. The captured trace becomes a regression in a new class of adversarial schedules, because random DAGs were not enough. And the benchmark moves to distinct payloads, so the state root does the checking.
The monsoon, one parent at a time
Act III throws out the eras, the flip, and the Heal. The trains never stop now. Only the stalled parent closes, and its certified descendants keep every signing right.
A timeout does not erase votes. Votes cast before a timeout can still form a certificate after recovery has started. Rohu-Paplet makes fast finality and continuous asynchronous recovery agree on which child survives.
Independent producer chains supply retrievable transaction data. Accepted cuts of a continuously running control DAG define deterministic ordered deltas. Each certified parent opens exactly one successor domain.
River, the fast path, finalizes a child inside that domain. Ocean, the asynchronous ordering service, orders recovery records for domains that stall. Recovery closes the stalled domain permanently. It preserves any child that could still get a fast certificate, and it certifies exactly one successor. It never appends a recovery tail that could collide with descendants that already make progress.
Two counts summarize the cost. An eligible proposal with complete evidence is ratified in two message delays. A stalled parent needs one effective ordered resolution. That is a count of coordination stages, not a bound on elapsed time.
Act III at a glance
2812f22. The native Rust components implement the earlier era-based revision, not this construction.A timeout is not an eraser
Somewhere a Byzantine collector is sitting on a finished certificate and a smirk. Recovery has to plan for that collector, not for the polite ones.
Byzantine consensus must connect three statements: some data exists, validators agree on its position, and an application can consume the agreed result. A fast certificate counts only if later recovery preserves it.
Each statement needs its own contract. A certificate for a block digest proves that the data exists only under a custody contract. Agreement on selected DAG anchors fixes a position only with a deterministic interpretation of their complete ancestry. A fast certificate gives irreversible authority only if later recovery preserves it. That must hold even when no recovery participant has assembled the certificate yet.
The late-certificate problem
A proposal that looks unsuccessful can still finalize. Signed messages can be delayed, and a Byzantine collector can reveal them after recovery makes another choice. So recovery needs evidence about what could already finalize, not only a report of what its participants have learned. The evidence must also survive the loss of the first recipient of a certificate. A signed promise to hold a complete artifact must imply that the signer retains it and that others can eventually retrieve it.
Certified descendants create a second difficulty. Suppose a late certificate proves p → x, and another observer has already certified x → y. Recovery of p must then authorize exactly x. It cannot preserve x and append a recovery transition after it, because that transition would be a competing successor of x. It also cannot treat two proofs for x as two different parents. Otherwise, honest validators could sign conflicting children in domains that they wrongly think are separate.
Exclusion happens at an exact semantic parent. The successor domain of that parent gets one fast attempt and can close permanently. A closed status carries the earlier choices of its signer and all complete protection that the signer retained. One ordered resolution then selects one immediate child and preserves any possible late finality. The certified child enables the next domain. The old parent never reopens, and the closure of an ancestor does not close any descendant domain.
Four distinctions used throughout
The four distinctions explain why a working fast path, a DAG, and a persistence layer are not enough. The system still needs a composition argument.
Contributions and scope
The paper makes four contributions within the stated model:
- A complete interface from data to certificate: compatible producer paths, accepted cuts, exact semantic children, replaceable proof artifacts, and deterministic ordered deltas.
- A parent-local preservation construction. Quorum arguments show that closure and ordered resolution preserve possible late FAST and receipt finality. Induction then gives one certified prefix across both routes.
- A connection to native asynchronous DAG ordering. It states the broadcast, coin, complete-cone, and first-resolution obligations, the explicit progress premises, and a structural count of recovery stages.
- An implementation and falsification record. It separates the signed reference construction, its ordering adapter, the earlier native components, and the independent transport and extension experiments.
The paper establishes one algorithmic comparison, against the earlier era-based design. One parent resolution replaces the cycle of barrier, executed checkpoint intent, and Heal ownership in that design.
The water
Everyone writes the same water in every weather. The fault budget is f, in total, for the whole execution, and it counts the people who fall in later.
Fix f ≥ 1 and a committee N of n = 5f+1 authenticated identities. Over the whole execution, at most f identities in total may deviate, disappear, or lose their safety state.
The budget is total, and it counts later failures too. It is not f Byzantine identities plus a separate crash allowance. Quorums count distinct configured identities, not messages. A restarted process keeps its identity and must restore its earlier restrictions before it signs again.
Roles
Configuration binds
Communication
The durability condition is a publication barrier, not a mandate for a particular database. If a storage callback fails, no output that depends only on the unacknowledged transition can escape. A signer that loses its state must stay unavailable until it recovers safely. A new empty journal under the old key violates the model. The baseline retains history. It does not provide bounded-storage garbage collection or rollback detection.
Section 8 discharges this assumption with the native DAG construction. It states the dependencies on broadcast, ancestry, fair inclusion, seals, and an ideal coin. The ordered transcript and its complete interpretation are separate from the application head that an observer has executed so far.
What consensus guarantees
Write hist(π) for the semantic history that a finality proof π describes, and ⪯ for the prefix relation. Certified-prefix safety then reads:
Notation
| Symbol | Meaning |
|---|---|
| N, H | The committee, and the identities in it that never deviate or disappear: |N ∖ H| ≤ f |
| p, x | Certified semantic parent and a proposed immediate child |
| dp | Permanent successor-signing domain derived from id(p) |
| Fp, Lp | Certified producer frontier and ordered-log commitment of the parent |
| cx, rx, Dx | Accepted source cut, cut round, and ordered block delta of the child |
| Up(x) | Complete protection certificate of 3f+1 PREPAREs |
| Sp | Exactly 4f+1 complete closed statuses for dp |
| Q, W | Ocean parent and seal quorum 4f+1, and wave length ⌈log2 Q⌉ + 2 |
| δ | One-way delay bound, used only in timed statements that name their premises |
Quorum arithmetic
Every safety proof on this page uses one counting fact. For sets A, B ⊆ N of distinct identities:
With n = 5f+1, the four thresholds give the intersections below. A positive honest count means that the two sets share an honest identity. An honest identity never signs two conflicting values in one domain or slot.
| Sizes |A|, |B| | Where the page uses the pair | |A ∩ B| ≥ | |A ∩ B ∩ H| ≥ |
|---|---|---|---|
| 3f+1, 3f+1 | Two DA certificates (Section 4), two U certificates (Sections 6, 9), two ECHO seed sets (Section 8) | f+1 | 1 |
| 3f+1, 4f+1 | A U and a FAST (Section 6), an ECHO seed and a fast delivery proof (Section 8) | 2f+1 | f+1 |
| 4f+1, 4f+1 | FAST signers and the status set Sp (Section 9), two fast delivery proofs (Section 8) | 3f+1 | 2f+1 |
| 2f+1, 4f+1 | FIN receipt signers and the status set Sp (Section 9) | f+1 | 1 |
The route map
One transaction from the platform to the terminus, with six validators and no surprises. Then the same trip with one surprise.
Data certificates establish compatible, retrievable producer paths. Accepted control vertices expose finite source cones. A proposal uses a complete cone to build an exact child of a certified parent. River can finalize that child directly. Otherwise, closed statuses constrain an Ocean resolution.
paper4/overview.tex.Application delivery follows the certified parent chain, whichever route supplied the certificate. Ocean has two jobs here, and neither job is to decide the application head. It supplies accepted cuts to child construction, and it orders recovery records. Only a valid finality route authorizes a child: River or an effective resolution.
From a transaction to a certified child (f = 1, six validators)
- A producer puts transaction t in a signed block b. Four distinct DA votes certify the compatible path through b. At least three of those voters are honest holders of the complete data.
- An accepted control cone advertises this certificate. The designated leader derives a frontier that extends Fp and sweeps the newly included blocks. It proposes child x with t at a deterministic position. The source-cut round is strictly newer than the round of p, and the proposal verifier has all prerequisite evidence.
- Open validators persist a choice for x and multicast PREPARE. Five distinct PREPAREs form FAST, and an observer can then certify x. Alternatively, validators can retain a complete four-PREPARE certificate Up(x). Three distinct receipt signers then acknowledge it to produce FIN. A receipt proves possession of the complete U. It is not another name for an isolated PREPARE vote.
- After it verifies either proof, an observer enables the domain for children of x. The application can consume Dx when its payloads and predecessors are available. It does not wait for a recovery record for p.
The same execution with a late certificate
Suppose five PREPARE signatures for x exist, but the assembled FAST is withheld. A timeout closes dp at an honest signer. Closure spreads, and validators collect five complete statuses. The FAST signers and the status authors share at least three honest identities:
Each of these three must include its earlier PREPARE for x in its status. So the selection rule preserves x, although no status collector has seen FAST. For a hidden FIN, every five-status set contains at least one honest holder of its complete U, and that status supplies the same preservation evidence.
A validator advertises a complete resolution record. The first valid resolution for p in Ocean order certifies x. Another observer may already have learned FAST and certified a descendant x → y. Then the resolution is one more proof for x. It has no authority to create a different successor of x.
When the statuses force no child, the record supplies a complete valid fallback child instead. Its delta can be empty only if its source cut and semantic height still advance under the normal validity rule.
Dabbas
The dabba principle: the routing is painted on the box. A DA certificate names the 3f+1 validators that hold the data, and anyone along the way can check it.
A producer block has an authenticated header. The header identifies the configuration, the producer, an increasing sequence number, the exact predecessor, a payload commitment, and the committed transaction positions and identities. Each producer starts at a configured genesis.
An honest DA voter durably chooses one append-only branch per producer. It retains the complete payload path that justifies each of its votes. It may not vote for conflicting branches, at the same height or at different heights. The certificate for a block contains 3f+1 distinct DA votes with matching bindings. The DA certificate is therefore a full-holder availability contract.
Proof
Take two certificates with voter sets V and V′.
The honest voter in V ∩ V′ cannot vote on conflicting branches, so the two paths are compatible. Each of the 2f+1 honest voters in one certificate retained the complete promised path. Their service and eventual delivery give retrieval. The proof uses the branch restriction across heights, not only a ban on two votes at one height.
A Byzantine producer can withhold a new block or strand an uncertified branch. Neither stops the control DAG, which advances without that advertisement. Honest data holders keep serving earlier certified blocks.
Frontiers, cuts, and their certificates
A frontier F gives one certified position for each configured producer. A coordinate can stay at the position of its parent or advance along a compatible DA-certified path. The lemma makes the valid positions on one producer chain comparable, so their greatest position is well defined.
A source cut c identifies an accepted Ocean vertex and its complete, finite strong-and-weak ancestry, with authenticated bodies and accepted-slot proofs. The physical round r(c) of the cut is the round of its root vertex. Source cuts are available before Ocean needs to select their vertices as ordering anchors. Acceptance proves the contents of the cut. It does not ratify a proposed application transition.
Start at Fp. Extract every valid compatible DA-certified coordinate that the complete cut advertises, and take the coordinatewise maximum. For each producer i:
Here Ai(cx) is the set of valid compatible DA-certified positions of producer i that the complete cut advertises. The full contribution is mandatory.
Under the common parser, an invalid complete data advertisement contributes nothing. A missing required opening is Pending, and no verifier can mistake it for an empty contribution. The resulting portable evidence is a FrontierCert (FC). It stays a candidate until an exact child that carries its vector and source cut is ratified. Two valid candidates can be compatible coordinate by coordinate and still induce different transaction interleavings. The ratified parent chain selects the actual order.
Optional complete vector evidence
The conservative v4 evidence interface also permits a complete, proposal-relative vector pool. The pool supplements the mandatory cut. It contains 4f+1 distinct signed records. Each record binds one configuration, source proposal, predecessor frontier, and vector schema, and supplies its body and authenticated compatible paths.
On a proposed path, a position that at least 3f+1 records support is eligible. Beyond a fully supported proposed tip, selection requires the support of 4f+1 records. Support from 2f+1 records for an extension is carry evidence for a later proposal. It gives no authority to execute that extension now. The child commits one exact result before validators sign PREPAREs. Different complete pools can justify different candidates. Agreement comes from the ratification of one child.
Sweep and duplicate handling
For each producer, enumerate the blocks strictly after its parent coordinate, through its new coordinate. Sort the union lexicographically by producer sequence (seq), then configured producer index (idx), then block digest:
Within a block, transactions keep their committed order. Keep the first occurrence of each canonical transaction identity in the delivered prefix. A receiver computes the whole delta before it appends it. It cannot sweep only the part of a cone that it can see now. Missing payloads can delay transaction decoding and execution. They cannot change the certified order of block identifiers.
The inclusion obligation
Every child names a cut with a strictly greater round than the cut of its parent: rx > rp. The child includes the entire contribution of that cut. Each honest Ocean author includes its own previous accepted vertex as a strong parent. Each author also serves an arrival-ordered FIFO queue of older accepted vertices that are absent from its own cone. While that queue is not empty, each new vertex carries a positive, bounded number of weak references from it. Arrival means complete accepted admission. Canonical sorting of the selected references must not let newer arrivals overtake an older queued vertex.
Proof
Broadcast eventually delivers the advertisement to every honest author. Local finiteness leaves only finitely many earlier admissions ahead of it in the queue. Continued positive FIFO service therefore puts it into the cone of each author, and the mandatory own-parent edge keeps it there. Choose a round by which this holds for all honest authors. Every later parent quorum of 4f+1 contains at least (4f+1) − f = 3f+1 vertices of honest authors. So the advertisement is in its complete ancestry. Induction extends the property to all later valid vertices.
The lemma needs an honest advertisement of the certified data. It says nothing about fairness for a client request that was never admitted, or for a producer that never gets its DA certificate. Its purpose is narrower. It stops infinitely many otherwise successful children from omitting already eligible data forever.
Promises in ink
A child is its contents, not its paperwork. Signatures, routes, and proof bytes never enter its identity.
The configured semantic genesis has height zero, source-cut round zero, initial producer frontiers, and the initial ordered-log commitment. Its authority comes from the agreed configuration, not from a certificate collected at runtime.
A child of a certified parent p is the semantic tuple
Here F is the certified frontier, and cx commits to the complete accepted source cut. Its physical round is rx > rp. Dx is the canonical ordered block delta, and Lx is the extended log commitment. The identity of the child and the successor domain of the parent are
Neither identity contains proposal signatures, signer subsets, delivery routes, or Ocean proof representations. Frontier and cut commitments identify their semantic contents, not the bytes of the DA or broadcast certificates around them. The domain has no era number and no retry counter.
Complete child validity
The verifier checks:
- configuration and canonical encoding,
- exact predecessor and height,
- a complete finality proof for p,
- a complete accepted cut at a strictly later round,
- compatible certified frontier contributions,
- mandatory inclusion of the entire cut,
- recomputed delta and log commitments.
An empty delta is legal only when these same checks pass. Renaming an arbitrary empty value is not a recovery opportunity. A fast proposal also needs the signature of the designated leader. An Ocean-selected fallback needs no leader signature, because the ordered resolution authorizes it. Both routes check the same semantic child predicate.
Evidence types and quorums
| Object | Distinct authors | Meaning |
|---|---|---|
| DA certificate | 3f+1 | Complete compatible producer-path custody |
| Up(x) | 3f+1 PREPAREs | Unique prepare protection for an exact child |
| FASTp(x) | 4f+1 PREPAREs | Immediate-child finality |
| FINp(x) | 2f+1 receipts | Finality backed by complete retained Up(x) |
| Sp | 4f+1 closed statuses | Permanent closure evidence for one parent |
| Closure trigger | f+1 closed statuses | Amplify closure at a local signer |
| STORE certificate | 4f+1 | Complete-object and dependency retention |
Evidence counts are typed. A STORE quorum is not a finality quorum, and a receipt is not an isolated PREPARE. PREPARE and receipt signatures bind (config, dp, id(x), kind). A receipt acknowledges possession of a complete valid Up(x) and carries that protection. It does not require every receipt signer to retain the same U signer subset, which would split aggregation.
A closed status binds dp. It contains the own PREPARE of its author, if any.
The status also contains every complete U protection that the author retained before closure, including the protection behind a receipt. A signer may have prepared a different child from the one in its retained U. The status must disclose both.
State and the publication barrier
Each validator keeps a durable map indexed by dp. An entry holds:
- the chosen PREPARE or reserved signing intent,
- the retained complete protection,
- the released receipt,
- the immutable closed status, if any,
- the matching outbox.
Learned finality is recorded separately, so learning a child does not erase the entry of its parent. A monotone floor for timer backoff also survives parent changes.
Ocean keeps its accepted DAG, seals and coin authority, emitted transcript, and first-effective-resolution map. All of these are separate from the application delivery cursor. Every signing transition follows four steps:
- Validate the input and its complete dependencies against the configured instance and semantic parent. If required evidence is missing, stop with Pending.
- Reserve the permitted choice or closure in durable state. After this step, recovery cannot choose a conflicting signature, even if no signature was sent.
- Produce and retain the authorized signed output and its outbox entry. Publish only after the persistence contract acknowledges the transition.
- After restart, check identity and state consistency, restore the restrictions, and retransmit the retained outbox as needed.
Valid, Invalid, Pending
Every verifier distinguishes three outcomes. A known wrong digest, an invalid signature, a conflicting binding, or forward Ocean authority is Invalid. An earlier opening that was promised but not yet fetched is Pending. A reader can skip a record only when it is completely and deterministically invalid.
Proof dependencies are finite and acyclic. Equivalent proofs establish one semantic identity. But one proof artifact can still be unusable at a particular Ocean position. An Ocean proof from a future position cannot replace a FAST proof to justify an earlier resolution.
Rohu, in the river
The Virar fast does not stop for anybody. Board with 4f+1 PREPAREs, or watch it go.
The configuration fixes the leader for each child height. The exact certified parent enables one attempt. A timer, an alternative certificate encoding, or late evidence cannot change the leader or create another attempt for that parent.
Proposal, prepare, and possession receipt
The leader proposes an exact valid child with its complete parent, cut, frontier, and availability evidence. Each open validator verifies the signature of the designated leader and the complete child predicate. If it has not chosen another child in dp, it persists its choice and multicasts one PREPARE. A validator answers duplicate messages from its outbox. Duplicates cannot authorize a new choice.
A complete certificate Up(x) contains 3f+1 matching PREPAREs. A validator may retain it even if its own PREPARE named another child. If its domain is still open and its receipt restriction permits, it persists this complete protection and multicasts a possession receipt. A receipt certifies retention of that evidence. It does not assert that the receipt signer proposed or prepared the same value.
Fast-path transition rules
Two ways to learn the same finality
An observer finalizes x on either of two typed quorums:
Both prove an exact immediate child of p. The observer does not wait for Ocean to process a resolution for p before it proposes or votes for a child of x.
Two complete U quorums share an honest signer:
An honest signer prepares only one child, so distinct valid U certificates cannot protect conflicting children. FAST contains such protection, and FIN acknowledges it explicitly. The smaller receipt quorum does not weaken dependency checking. It is large enough that an honest holder of the complete artifact appears in every later closure set (Section 9).
Message-delay ledger
| Time (eligible case) | Message | New knowledge at the observer |
|---|---|---|
| s | PROPOSE with complete evidence | Leader fixes the exact child |
| s + δ | Validators multicast PREPARE | Validity and durable choice are checked |
| s + 2δ | 4f+1 PREPAREs arrive | FAST can be assembled at each included observer |
| s + 2δ | Complete U holders issue receipts | Receipt route has its causal prerequisite |
| s + 3δ | 2f+1 receipts arrive | A freshly constructed FIN can be assembled |
The ledger assumes ready prerequisites and open signers. Processing and persistence time are either inside the service envelope or charged separately. The smaller receipt quorum does not remove the extra causal leg.
paper4/river.tex.When the fast path does not finish
The fast path has no internal view-change rule. If the parent stays unresolved, a finite local timer can close its domain and start recovery. A closure is a promise about future signing. It does not prove that the old child never finalized.
An early timeout can preempt an honest proposal. Safety survives because recovery preserves its possible finality. Fast-service claims must still require that signers stay open for the stated interval.
Monsoon
Panic is unilateral, recovery is collective. A local timer closes one domain without asking anyone. Ocean then orders one resolution that everyone reads the same way.
Recovery must preserve evidence that can become visible later. It uses three separate functions. Closure stops new honest signatures in the old domain. Complete statuses constrain which child is permissible. Ocean chooses one common resolution. A status set alone is not an agreement decision.
Permanent closure
A finite local timeout for an unresolved child closes only dp. Receipt of f+1 valid closed statuses for dp also triggers closure and a status multicast. Closure atomically records both the ban on future old-domain signatures and the complete status, before the status is published.
After it advances, a signer keeps serving valid requests about the old parent. It returns its cached status and any finality evidence it has. Closing an ancestor never closes a child. A signer may learn a late valid finality proof after closure. It may not create a new old-domain signature.
Protection extracted from a status set
Take exactly 4f+1 distinct complete statuses Sp. Verify all signatures, parent bindings, and embedded evidence. Then apply the first matching rule:
Each rule selects at most one child. Two conflicting complete U certificates cannot exist under the fault contract (Section 6). Each status reports at most one own PREPARE, so two distinct children cannot both reach 2f+1 reports in one set:
A verifier rejects inconsistent evidence. It does not choose arbitrarily among it. A status set is preservation evidence, not an agreement certificate. Different valid sets can return different unfinalized children.
The resolution record and its authority
Any validator may form R = (p, πp, Sp, z). Here πp proves the exact parent, and z is a complete valid fallback child derived from a strictly newer accepted source cut. The fallback does not need the signature of the designated fast leader. The common selection function is
Use the normal form z = protect(Sp) when protection is present. The protected old child already has a valid cut strictly newer than p, so the resolution does not need an extra unused fallback. In the unprotected case, any complete valid fallback child is eligible.
All dependencies, including the selected old child, must be retrievable under the storage contract. An external object reference is eligible only with 4f+1 distinct STORE signatures. These signatures commit to the type, canonical length, content hash, chunk Merkle root, and exact acyclic dependency list of the object. A STORE signer first retains the complete body and validates the retention certificates of its dependencies. The resulting (4f+1) − f = 3f+1 honest holders supply eventual retrieval. An arbitrary unbacked hash is structurally invalid. It is not an instruction to wait forever.
Ocean readers keep a first-resolution map for semantic parents. In the complete ordered transcript, the first valid resolution for p certifies exactly child(R):
Its certificate binds the position of that record and the verified earlier prefix that shows it is first. A portable proof that a later record appears in an anchor is not enough. Later resolutions for p cannot authorize another child.
Position precedence
Every Ocean authority that a resolution reaches through its parent-proof chain must come before the transcript position of the resolution itself:
Here ocean(πp) is the set of Ocean authorities reachable through the parent-proof chain. A complete forward or cyclic Ocean dependency is invalid. Substituting a future Ocean proof for an otherwise equivalent FAST parent proof must not make an earlier record wait forever. The check applies recursively at the position of every embedded Ocean certificate, including through intervening FAST or FIN proof wrappers. A known false position or digest membership is Invalid. Only earlier evidence that is truly unavailable is Pending. An explicitly forward Ocean dependency is Invalid at once. Retrieval must not turn that structural contradiction into an indefinite wait.
Validity and firstness depend on complete evidence and transcript order. They never depend on the current application head of the reader or on when certificates arrive. An earlier record with an unavailable opening keeps the interpreter Pending. The interpreter cannot skip it in favor of a later record that is open. Structurally invalid complete records are deterministic no-ops. Every anchor advances the control transcript. Only effective parent resolutions advance application authority.
Installing certified children
The selected old x keeps its exact identity, even if Ocean supplies an extra proof for it. Install certified ancestors before descendants, and append each semantic transition at most once. A resolution for x can appear in Ocean before a resolution for its ancestor p when it carries a FAST proof of x. A later resolution of p must certify that same x. It neither rewinds execution nor appends an extra transition after x. An honest observer gossips every newly verified finality proof and serves its complete dependencies. It does this independently of application execution and parent closure.
There is no mode switch, no global signing stop, no checkpoint attestation, and no Heal. After a leaderless fallback z is certified, dz is the next opportunity. The old domain dp stays closed forever. Storage compaction must preserve an equivalent permanent exclusion.
Deterministic interpretation
The interpreter keeps a durable transcript cursor and a map first[dp], initially empty for each parent. It processes each ordered record in four steps:
- Verify the ordered position and the authenticated record opening. Retrieve certified dependencies. If an earlier required opening is unavailable, return Pending and do not move the cursor past it.
- Check the configuration, the parent proof, the recursively decreasing positions of Ocean authority, exactly 4f+1 distinct complete statuses, and the complete semantic validity of the selected child. Treat a structurally invalid reference or a complete contradiction as a deterministic no-op.
- If the parent of the valid record already has an effective first resolution, advance the cursor and leave its child unchanged. Otherwise, durably record this position and the selected child as the first resolution of that parent.
- Retain the verified preceding transcript and the record evidence that justifies firstness. Publish the resulting finality authority. Install any semantic ancestors that are now complete before the child. Advance the durable cursor.
A later Pending record does not erase certificates produced from an earlier complete prefix. Conversely, a local fast head does not permit the interpreter to skip an old-parent record before it checks it. Application delivery can be idempotent while record interpretation stays complete and ordered.
Why preservation still needs agreement
For f = 1, one five-status set can contain three own PREPAREs for x, two for another child, and no complete four-PREPARE U. Another valid five-status set can show a different unfinished distribution. The protocol does not require these sets to select the same child unless an admissible fast final forces it. Every eligible set must preserve such a final. Ocean chooses among the remaining possibilities. The signed reference tests exercise split-support cases and competing records. They do not assume a common local selection.
Firstness also has an explicit proof cost. A membership proof for record i cannot show that no earlier valid record resolves the same parent.
Paplet, in the ocean
The ocean keeps moving when the tracks are under water. Control rounds advance through empty bodies, unresolved coins, and a stuck fast path.
Ocean accepts authenticated control vertices, supplies complete source cuts to child construction, and orders recovery advertisements. Its output is a control transcript. Application authority comes only from the parent-resolution interpreter. This split prevents a generic anchor from writing application successors on its own.
Strong edges connect a vertex to the previous round. The wave arguments use them. Weak edges bring older accepted vertices into complete emitted cones. They do not replace the strong-parent quorum. A vertex is accepted only with its entire certified strong-and-weak parent closure. Complete cuts advance even when their transaction contributions are empty.
Uniform reliable broadcast
A slot is the triple (configuration, round, author). The sender signs its exact payload. An honest validator sends ECHO for at most one authenticated valid payload and READY for at most one digest. It persists both choices before it releases them. Every ECHO holder retains and serves the complete payload.
Proof
Let H be the set of identities that never deviate or disappear. Then |N ∖ H| ≤ f, and this count includes every later failure. The proof uses five counts:
Agreement. Any two ECHO seed sets share at least f+1 identities, so they share a member of H. That member sends ECHO for one value only, so no two seeds carry different values.
Take the first READY of an H-member for a value. It comes from a seed, or from amplification by f+1 earlier READYs. Amplification needs an earlier READY from an H-member, so a finite causal descent reaches an ECHO seed. All READYs from H therefore agree with the one seed value.
A fast proof and an ECHO seed share at least 2f+1 > f identities. Two fast proofs share at least 3f+1 > f. A slow proof has at least f+1 members of H, so it implies the unique seeded READY value. These facts exclude a conflict between any pair of delivery routes.
Fast totality. The F ECHOs of a fast proof include at least F − f = E members of H. Their own multicast ECHOs eventually reach every member of H, and each member of H then seeds READY. These ECHO senders also retain the exact body. The fast recipient does not need to cooperate again, and neither does a faulty certificate signer.
Slow totality. At least f+1 members of H already sent READY. Their multicasts amplify READY at every member of H. The originating seed has at least E − f = 2f+1 honest holders that retain the payload.
In both cases, the 4f+1 or more members of H supply more than the 2f+1 READYs that delivery needs. Durable choices and retention keep each premise true across a restart.
SEND arrives by s + δ. At least 4f+1 honest ECHOs arrive by s + 2δ and form fast delivery proofs. Possession by the author alone does not give this bound. All honest authors then hold the 4f+1 previous-round parents that the next round needs.
DAG and coin boundary
The Ocean instance starts with one deterministic round-zero seed vertex per configured author. The agreed configuration binds these seeds. They need no broadcast, and Ocean never emits them as control records. An accepted vertex has:
- Q = 4f+1 or more exact strong parents from the previous round, each from a distinct author,
- optional weak parents from earlier rounds, and
- complete parent closure.
The accepted slot is globally unique. Honest authors produce a vertex when enough parents arrive, with an empty control body if necessary. Unresolved coins do not block later control rounds. Transaction execution does not block them either.
W is the wave length in rounds. The first round of a wave is its candidate round. Before an honest author produces a coin share, it durably seals Q accepted final-round endpoints and their complete ancestry.
The coin domain binds the configuration, the Ocean genesis instance, and the wave. Different shares can have different seals. The seal digest is not part of the common signed coin message. The seal is the local durable prerequisite for signing that message.
Proof
Pair the endpoints. Every pair has a common exact parent, because two parent quorums intersect and slots are globally unique:
Replace each pair by such a parent. Replace an unpaired endpoint by any of its parents. Each representative is an ancestor of the endpoints it represents.
Repeat for k predecessor layers. One second-round representative then remains, and every endpoint reaches it. Its Q first-round parents are the core. All these objects are in the immutable finite seal before the protocol-following coin contribution is released.
Here Cj is the author elected at reveal j and 𝓗j is the pre-reveal history. The history includes the success or failure of earlier core hits. A uniform marginal for each wave alone does not give the geometric tail.
A computational realization must justify an adaptive, finite-horizon replacement for this joint ideal-coin contract. Threshold-BLS share validity, domain separation, and unique reconstruction do not prove it alone. With f adversarial shares, the first released honest share can already let the adversary reconstruct the coin. For this reason the seal must come before that release.
Backward commitment and closed-cone emission
A reader keeps the last closed wave and an ordered anchor sequence. To close a later wave that has direct support, the reader does five things:
- Recover every earlier unresolved coin through that wave.
- Set current to the elected candidate of that wave.
- Scan waves backward to the last closed wave. Select an earlier elected vertex if and only if it is in the complete strong cone of current. Each selected vertex becomes the new current.
- Emit the selected chain in forward order. For each anchor, emit its complete strong-and-weak cone minus the IDs already emitted, sorted by (round, author, digest).
- Persist the whole state update atomically.
Missing evidence is Pending. Absence becomes an exclusion only inside the specified complete strong cone.
Proof
Let La have a direct witness of Q final-round supporters. The Q parents of every next-round vertex intersect that witness in an exact accepted vertex, because 2Q > n and accepted slots are unique. So every such vertex reaches La. By induction, every later-wave candidate reaches La too.
A backward scan from any later direct root must select La. Until the scan reaches wave a, each current selected candidate is in a later wave and reaches La. After it meets La, the scan has the same current vertex, complete cone, and earlier coin values as a scan rooted at La. So it reproduces the earlier sequence. Direct roots are ordered by wave, and induction gives compatible prefixes for all directly and indirectly selected anchors.
A direct witness that arrives after its wave closed cannot contradict an exclusion. Propagation would have forced its candidate into that scan.
Proof
The 4f+1 honest participants are enough for every parent quorum, broadcast, and seal. So rounds advance by induction without faulty cooperation. At reveal j, choose a deterministic Q-member common core Kj from the fixed seal. Kj is measurable in the pre-reveal history. Then:
Infinitely many core hits therefore occur almost surely. Each hit has a direct witness that eventually reaches every honest reader. Every finite set of earlier coins that its backward scan needs eventually completes. FIFO weak-reference inclusion also orders each honest control record eventually.
The bound (8.4) is tightest at f = 1. Because f/n = f/(5f+1) < 1/5 for every f, the right column bounds every committee size.
| Eligible reveals t | f = 1 (f/n = 1/6) | every f ≥ 1 (f/n < 1/5) |
|---|---|---|
| 1 | 1/6 ≈ 0.167 | < 0.2 |
| 2 | 1/36 ≈ 0.0278 | < 0.04 |
| 3 | 1/216 ≈ 0.00463 | < 0.008 |
| 4 | 1/1296 ≈ 0.000772 | < 0.0016 |
| Expected reveals, n/Q | 6/5 = 1.2 | < 5/4 = 1.25 |
A shorter four-round wave under the total-f budget also has a counting argument. Any Q third-round vertices have at least Q2 strong edges into at most n second-round vertices. If each second-round vertex had at most f supporters, there would be at most n·f such edges. But
So, by pigeonhole, some second-round vertex has more than f supporters. A fourth-round parent quorum misses at most n − Q = f third-round vertices, so every such quorum intersects that supporter set.
From ordered cones to recovery service
Inside an emitted vertex, the configured canonical body encoding fixes the order of its advertised records. Three things together define the record transcript that the first-resolution interpreter reads: the anchor order, deterministic cone emission, and body order. Readers retain the authenticated ordering evidence and the complete openings that interpretation needs. A firstness proof also verifies the interpretation of the earlier records. An accepted-slot proof is not enough, and inclusion under one anchor is not enough. These are the concrete dependencies of Assumption 2.
Why nothing forks
Two lemmas about one parent, one induction over all of them, zero forks.
The safety argument composes the data and evidence contracts with the two finality routes. It depends on four facts: the certified-data-paths lemma, complete child validity, durable per-parent signing, and the authenticated common Ocean transcript. Two lemmas cover one parent. Induction connects all parents.
Proof
Two sets of 3f+1 PREPAREs intersect in more than f identities:
So the intersection contains an honest signer. An honest signer never chooses two children in dp. FAST contains a complete U, and FIN explicitly retains one. The argument concerns semantic parent domains. It does not depend on how their parent certificates are encoded.
Proof
Let H be the honest identities and S the 4f+1 status authors.
FAST case.
Each of these honest signers sent its PREPARE before its closure, because closure forbids later signing. So its status contains its own PREPARE for x. These 2f+1 own reports force the second branch of protect, unless a complete U is present. By uniqueness, any such U also names x.
FIN case. Let R be the 2f+1 receipt signers.
That receipt came before its signer closed. Its status exposes the retained complete Up(x), and the first branch forces x. Neither case assumes that anyone assembled or received the final certificate before closure or before the Ocean decision.
Proof
Unique prepare protection gives fast/fast uniqueness. By the preservation lemma, every effective Ocean resolution preserves any possible fast final. One common complete transcript and the first-resolution rule give Ocean/Ocean uniqueness. The proof does not assume that different status sets choose the same unfinalized value.
Proof
Induct on height. Each valid child has a complete finality proof of its exact parent. By the induction hypothesis, the parent at that height is unique.
The one-child theorem gives the same next semantic transition for every certificate route. Identities exclude certificate representations, so the next successor domain is also unique. Exact deterministic frontier and delta verification then give the same ordered block prefix. Complete payload retrieval and deterministic execution refine this prefix to application state.
Proof
Closure changes only the durable entry indexed by dp. By the one-child theorem, a resolution of p must certify exactly x, and its effects end there. Domain dx depends on the semantic identity of x. It does not depend on the open or closed flag of the old domain, or on the representation of its certificate.
Descendant validation uses the same exact parent chain in either processing order. Induction extends the argument along the certified chain. Application replay is idempotent.
The theorem gives independence of signing permissions and semantic outcomes. It does not claim that shared CPU, storage, or network queues cannot delay fast messages. At an unresolved current head, a strict successor still needs its certified parent.
The corollary is a conditional refinement argument. It is not an execution attestation inside FAST or FIN. A client that wants evidence that a state root was executed needs the additional attestation contract of the application.
Proof dependencies and what they rule out
| Boundary | Required fact | Failure excluded |
|---|---|---|
| Data to frontier | Compatible certified paths and a complete cut | Conflicting coordinates or extraction from a partial cache |
| Frontier to child | Canonical identities and common validity | Proof aliases creating multiple signing domains |
| Fast to closure | Earlier own votes and retained complete U | A hidden FAST or FIN contradicting a recovery choice |
| Closure to Ocean | First valid record in a common complete prefix | Different local status pools choosing different outcomes |
| Parent to descendant | Exact-child authority and persistent exclusion | Reopened old parents or a recovery tail after a certified child |
| Order to execution | Complete payloads and deterministic replay | Equal anchors with different emitted transaction order |
Each row is necessary even when the adjacent component is correct in isolation.
A scoped necessity result for receipts
The honest-intersection inequality has a matching indistinguishability witness. Fix one certified predecessor p, prepare threshold 3f+1, and 4f+1 complete retired statuses. A one-shot status-only selector must choose a successor from those statuses, with no further old-side exchange.
Lower the FIN threshold from 2f+1 to 2f. Then two executions with incompatible hidden finals can produce identical complete recovery evidence. The witness partitions the committee into Byzantine B, honest A and C, honest D, and honest T:
A Byzantine leader signs two valid successors x and y. A prepares x, C prepares y, and D prepares neither. T prepares x in execution Ex and y in execution Ey. All cross-group messages are delayed past recovery.
The status bytes are identical in Ex and Ey, but the hidden weakened finals conflict. So no selector that sees only the status bytes can choose safely in both executions.
With 2f+1 receipts, at least f+1 honest holders exist. Only f identities lie outside the status set, so an honest holder inside it exposes the U. Actual-signature witnesses at f = 1 to 4 accompany the construction in spec/v4/test_transfer_bound.py. This result concerns one interface. It is not a lower bound on rounds, bytes, or storage.
paper4/receipt_bound.tex.The fast-path bound, honestly
Two delays when the river runs clear. Six when the data is fresh off the boat. A few coin-elected waves when the weather turns. Here is the bill, itemized.
Proof
If an honest participant learns a fast final, dissemination supplies the certified child. Otherwise, an honest timeout supplies a closed status. Every honest participant eventually learns the parent, and then learns its child or times out. The honest participants supply 4f+1 statuses without faulty cooperation. They also answer old-parent requests after they advance.
Each honest proposer can construct a valid resolution. When a child is forced, the proposer retains the selected complete old child and uses it as the normal-form fallback. Otherwise, it obtains a later accepted cut and derives a valid fallback. Even an empty delta advances the certified height and cut.
The complete honest record is eventually ordered. If an earlier effective resolution exists, it already certified a child of the same parent. Prefix agreement and eventual retrieval disseminate the result. Applying the argument after each finite prefix gives unbounded certified progress, almost surely.
Every certified child strictly increases its source-cut round and includes the entire cut contribution. So unbounded certified progress eventually includes every continually advertised certified block. This holds even when some earlier fallbacks had empty deltas.
Good-case fast service
4f+1 multicast PREPAREs ratify a fully evidenced proposal from an honest leader within 2δ under three conditions:
- its first leg delivers the complete prerequisites,
- one-way delay is at most δ, and
- honest signers stay open for that proposal.
Consecutive eligible honest leaders can overlap accepted-cut production. After warmup, this sustains 2δ decision intervals. The condition is that each turn has a fresh, strictly later cut and complete evidence ready within its first-leg service bound. Fresh data can still need six delays from dissemination:
The redesign removes the recovery ownership stages. It does not remove these fresh-data dependencies.
Background Ocean progress and quick recovery links do not show that an honest proposal cannot still arrive. An aggressive timeout can close a parent before its delayed honest proposal gets FAST. The paper claims no unconditional honest-leader noninterference result. Timers start only after the exact parent is admitted, and they are finite. They use a persisted monotone backoff floor that carries across parent changes:
An empty fallback must not reset that floor.
One-resolution service bound
Measure time from the first honest admission of p. For a failed opportunity, define four service terms:
With supplied bounds on these services, the recovery time Rp satisfies
The bound has one new Ocean selection stage. The era baseline instead orders a barrier, a checkpoint intent, and a Heal. It also waits for executed checkpoint attestations and readmission. Those stages are absent from this algorithm. The bound omits them because they do not occur, not because their cost is assumed to be zero.
Suppose B distinct parent domains have stalled child opportunities that invoke recovery. Then recovery needs at most B effective first-resolution records and B immediate recovered children. These closures revoke no signing rights in other certified-parent domains. One faulty identity can cause unboundedly many failed opportunities, so f does not bound B.
For native Ocean, Q = 4f+1 and W = ⌈log2 Q⌉ + 2. Suppose an external service envelope gives four bounds:
- A for catchup and advertisement,
- d accepted rounds for ancestry inclusion,
- ρ for each complete round, and
- K for the required coins and interpretation.
A conservative budget for m fresh waves is then
A union bound over B failed opportunities gives at most B·(f/n)m, plus service-envelope and computational-coin errors. Eventual delivery alone gives no wall-clock values for these parameters.
Message, verification, and retention costs
Here n is the committee size and σ is the size of one signature.
Six timestamps are distinct: client submission, DA certificate, accepted cut, learned FAST or FIN, Ocean resolution, and executed transaction. A count of empty certified children proves neither positive transaction goodput nor bounded client latency.
In the workshop
Restoring a signer means restoring its promises. Forgetting a published vote is how forks start.
The repository contains several protocol generations. The parent-local source baseline is commit 2812f22.
Signed parent-local kernel
Ocean-model adapter
Native components (Rust)
Crash recovery as a protocol obligation
Restoring a signer means restoring its promises. Each component must retain its part:
The native Unix SnapshotStore acknowledges success only after four steps. It stages an identity-bound, checksummed snapshot, syncs the temporary file, renames it atomically, and syncs the containing directory. It holds an advisory lock for its lifetime and halts on an ambiguous I/O failure. Restore validates the installed snapshot. It does not treat an unfinished temporary file as a checkpoint. A checksum and a generation number in the same replaceable directory do not detect malicious rollback.
Before durable acknowledgement, no output that depends only on the staged state may escape. After acknowledgement, a restart must recover that state or a later one, even if its output was never sent. Keeping an unused vote reservation is safe. Forgetting a published choice is not safe. A parent-local integration must apply this rule to one coherent validator state. It must not combine individually correct stores whose checkpoints can disagree.
The blockchain-facing contract
A blockchain adapter supplies a trusted configuration and genesis, deterministic validity rules, transaction-data admission, and application execution. Consensus returns exact certified children with ordered block deltas and their verifiable parent chain. This gives a linear interface, although the control structure is a DAG. A consumer never picks its own order from the latest visible DAG or from the local arrival order of proofs.
| Interface event | Required interpretation |
|---|---|
| Submit data | Admission request. Not evidence of DA or finality. |
| Learn final child | Verify the exact parent, child validity, and FAST/FIN or first-resolution authority. Record the certified semantic identity. |
| Deliver ordered delta | Install predecessors first. Keep Sweep order. Record the delivery position durably. Make duplicate delivery idempotent. |
| Execute | Retrieve the required payloads and apply the configured deterministic transition. Keep this completion distinct from learned finality. |
| Restore or synchronize | Verify the configuration and proof history. Recover signing promises and the application cursor before resuming effects. |
No interface event implies that a later event is complete. A semantic child height counts transitions. An application delivery position can count blocks or transactions inside their deltas.
An empty child advances the height without creating application work. Under the baseline retention contract, a late observer can replay a complete certified history from genesis. An optimized state-sync checkpoint must bind the semantic identity, frontier, log commitment, application cursor, and retained proof obligations. It must also have an independently justified trust rule. Importing an executed state snapshot does not permit the signer to forget its closed old domains.
Claim-to-artifact ledger
| Claim | Argument or evidence |
|---|---|
| Compatible available data | Certified-data-paths lemma · native DA component evidence |
| One child and one prefix | Unique-U and preservation lemmas · one-child and prefix theorems · signed kernel tests |
| Local ancestor closure | Independence theorem · concurrent-descendant tests |
| Native Ocean order | Prefix-agreement theorem · Ocean reader and adapter tests |
| Almost-sure progress | Ocean-progress and asynchronous-progress theorems |
| Data inclusion | Inclusion lemma · increasing mandatory cuts |
| Durable signing | Publication contract · interrupted memory-journal tests · native store |
| Transport tradeoff | Recorded byte counts, modeled links, TCP/fsync experiments |
| Application state agreement | Refinement corollary |
Trying to sink it
We weakened the rules on purpose and watched the boat take on water. Then we put the rules back and checked that it floats.
The evaluation asks two questions. Do the implemented reference transitions respect the interfaces that the proofs use? What do the separate dissemination experiments show about transport cost?
Parent-local kernel and ordering adapter
The combined signed kernel and adapter suite has 32 tests: 21 kernel tests and 11 Ocean-adapter tests. The September 8 record reports 7.293 s. The September 10 validation reran the suite in 7.107 s with Python 3.12.3 and cryptography 41.0.7. The tests include:
- 28,591 finite quorum-intersection checks at f = 1, 2,
- actual signed late FAST and FIN assembly,
- proof aliases and competing resolutions, and
- permanent closure and interrupted journal updates.
| Validators | Schedule | Children | FAST | Resolved | Restores |
|---|---|---|---|---|---|
| 6 | Rotation, one silent identity | 18 | 15 | 3 | 5 |
| 11 | Rotation, one silent identity | 22 | 20 | 2 | 10 |
| 6 | Fixed silent leader, synthetic | 12 | 0 | 12 | 5 |
| 11 | Fixed silent leader, synthetic | 12 | 0 | 12 | 10 |
Falsifying schedules and regression oracles
| Adversarial or weakened schedule | Rule exercised |
|---|---|
| Reopen the same parent after closure | An unsafe reset admits a signed fork. Permanent exclusion prevents a second old attempt. |
| Encode two proofs for the same parent | Semantic identity shares one lock. Certificate bytes cannot create separate domains. |
| Withhold FAST or FIN until after closure | Own-PREPARE reports and retained complete U preserve the hidden child. |
| Resolve an ancestor after a fast descendant | Recovery certifies the original child and appends no conflicting tail. |
| Deliver a later resolution before an earlier opening | Missing evidence stays Pending. Local arrival order cannot choose the winner. |
| Insert a forward Ocean proof or a known wrong membership | A complete contradiction is Invalid. This prevents permanent poisoning of the transcript. |
| Fail persistence before signing or release | Reserved choices survive. Unacknowledged new outputs cannot escape. |
| Close early during a delayed honest proposal | Locality alone does not imply unconditional fast-path noninterference. |
The ordered-log oracle must compare the exact semantic child identity and the ordered delta at each position. Comparing only the latest height or the selected anchor is not enough. A later matching suffix cannot repair a conflicting prefix that is already published append-only. This requirement comes from a recorded failure in the earlier full-system evaluation. Agreement on anchors held, but a lagging observer emitted them in a different order.
Separate transport evidence
The local transport experiment compares direct dissemination with a coded one-relay construction. The coded path uses Reed–Solomon coding, a signed Merkle commitment, authenticated fragments, and k = n − f. Both paths keep complete native DA custody. The setup has six validators, one producer, equal-weight identities, and a fixed relay assignment.
| Payload | Block bytes | Producer, direct | Producer, coded | Aggregate, direct | Aggregate, coded |
|---|---|---|---|---|---|
| 1 KiB | 4,469 | 22,859 | 12,279 | 24,874 | 37,834 |
| 64 KiB | 234,250 | 1,171,762 | 472,437 | 1,173,770 | 1,418,305 |
| 1 MiB | 3,737,394 | 18,687,483 | 7,478,518 | 18,689,520 | 22,436,575 |
At 64 KiB, producer upload falls 59.7% and total traffic rises 20.8%:
At eleven validators and 64 KiB, producer bytes fall 77.5% and aggregate bytes rise 23.7%. In the sequential local TCP harness, the median whole-experiment time rises from 63.96 to 94.38 ms with memory-acknowledged snapshots. With atomic fsync snapshots, it rises from 106.38 to 135.30 ms. The deterministic link model favors coding when serialization dominates. Coding loses for small payloads on fast links because of the extra hop. The endpoint of these measurements is a DA certificate, not finality.
Separate signed extension model
The model explored 5,554 bounded worlds and ran 1,112,888 fast/recovery prefix checks. It found no guarded-prefix violation. Naive lane merging produced incompatible order in 388 worlds. Complete statuses still permitted competing unfinished recovery continuations in 2,430 worlds. These are counterexamples to deliberately weakened interfaces. They are not attacks on published protocols.
Run it yourself
Do not trust the fish. Run the tests.
| Location | Contents and scope |
|---|---|
paper4/main.tex | The 18-page two-column manuscript, with sections assembled in order from introduction through artifact guide |
docs/v4/PARENT_LOCAL_RESEARCH.md | The parent-local construction, symbolic safety argument, cross-parent commutation, and progress bound |
docs/v4/PARENT_LOCAL_RESULTS_2026-09-08.md | Recorded current-reference tests, exact schedule counts, assumptions, and commands |
bench/results/parent-local-20260908-232242/ | Manifest, source hashes, test log, schedule outputs, and completion assertions |
docs/v4/PROTOCOL.md | Era-based v4 normative rules that the native Rust components implement |
docs/v4/EVIDENCE.md | Native component coverage and revision boundaries, with the claim-to-artifact mapping |
docs/v4/NATIVE_CONTROL.md · docs/v4/RECOVERY.md | Finite durable control-driver contract. Snapshot publication, retention, and restore contract. |
docs/v4/LATENCY_AUDIT.md | Independent causal audit of the two-delay claims and the RBC repair |
spec/v4/ | Executable Python reference models: RBC, Ocean, River, recovery policy, and transfer-bound witness |
spec/experiments/ | Signed parent-local kernel, Ocean adapter, and extension-transfer model |
rohu-paplet/src/weather_v4/ | Native Rust: rbc, ocean, coin, river, frontier, weather, objects, storage, wire, control, recovery_policy |
bench/results/local-composition-20260908-224511/ | Transport frames, modeled service, TCP/fsync runs, and signed extension witnesses |
spec/ivy/ · spec/*.tla | Earlier formal models (31 mypyvy, 5 Apalache), calibration, and proof lineage for the Rohu-Paplet generation |
Reproduce the current reference checks
# signed kernel + Ocean adapter (32 tests) python3 -m unittest spec.experiments.test_parent_local spec.experiments.test_parent_local_ocean -v # the four signed CLI schedules python3 -m spec.experiments.parent_local --f 1 --heights 18 --schedule round-robin python3 -m spec.experiments.parent_local --f 2 --heights 22 --schedule round-robin python3 -m spec.experiments.parent_local --f 1 --heights 12 --schedule all-silent python3 -m spec.experiments.parent_local --f 2 --heights 12 --schedule all-silent # executable v4 models (75 tests). Under Python 3.15 pass -t as well: python3 -m unittest discover -s spec/v4 -t spec/v4 -q # native component suites (pinned Commonware checkout required; see COMMONWARE_PIN.txt) cargo test --locked --manifest-path rohu-paplet/Cargo.toml \ --test native_rbc_v4 --test native_ocean_v4 --test native_weather_v4 --test native_river_v4 \ --test native_frontier_v4 --test native_weather_cycles_v4 --test native_objects_v4 --test native_latency_v4 # transport + extension experiments python3 bench/local_composition_lab.py --include-loopback --include-fsync --repeats 3 python3 -m unittest spec.experiments.test_extension_transfer -v # manuscript cd paper4 && latexmk -pdf -interaction=nonstopmode -halt-on-error main.tex
For each replication, retain the command, exit status, environment, source and binary fingerprints, raw outputs, workload, and unresolved requests. For a negative schedule, record the mutated rule and the resulting conflicting proofs.