diff --git a/specs/README.md b/specs/README.md new file mode 100644 index 00000000..f529f25e --- /dev/null +++ b/specs/README.md @@ -0,0 +1,200 @@ +# Emerald Specifications + +Formal specifications for Emerald, a modular framework combining [Malachite](https://github.com/informalsystems/malachite) consensus with [Reth](https://github.com/paradigmxyz/reth) execution for EVM networks. + +## Terminology + +- **Application**: the system being modeled (Emerald). Composes with external components treated as black boxes. +- **Component**: an external black box (Malachite, Reth). Publishes a contract + generator. +- **Boundary**: the API between application and component. Has a request side and a response side. + +The application can act as **server** at some boundaries (receives requests, sends responses) and **client** at others (sends requests, receives responses): + +| Boundary | Who sends requests | Who sends responses | +|---|---|---| +| Channel API | Malachite (component) | Emerald (application) | +| Engine API | Emerald (application) | Reth (component) | + +## Contracts + +A **contract** defines properties over a shared boundary (request/response history). The contract is authoritative — it is the specification of the boundary. + +Both sides make guarantees about what they produce: + +- **Component guarantees**: safety + liveness on the requests it sends (if component sends requests) or on the responses it sends (if component sends responses) +- **Application guarantees**: safety + liveness on the responses it sends (if application is server) or on the requests it sends (if application is client) + +Ordering properties are a subcategory of safety (constraints on valid sequences). + +For example: +- **Channel API contract**: Malachite guarantees safety + ordering on the requests it sends (agreement, validity, height monotonicity). Emerald guarantees correctness on its responses (assumptions in the contract). +- **Engine API contract**: Reth guarantees safety on the responses it sends (validationStability, buildIntegrity, headProgression). Emerald guarantees ordering on the requests it sends (buildLifecycle). + +### Contract Scope + +Contract scope depends on the component's nature, not the boundary type: +- **Channel API**: global (cross-node) — because Malachite is a consensus protocol where safety is defined across nodes +- **Engine API**: per-node — because each Reth is an independent local process + +## Generators + +A **generator** is a minimal state machine that produces traces satisfying the contract. The generator is a verified reference implementation — not authoritative, but useful for composition and testing. + +Generators publish: +- **Primitive actions** — one per API method (`send*` for request sources, `respond*` for request handlers) +- **Stutter action** — for steps that don't touch this boundary (`genUnchanged`, `rethUnchanged`) +- **Fault actions** — crash/restart following the disk/mem convention from `faults.qnt` +- **Pure helpers** — extracted logic reusable by the application (e.g., `computePayloadStatus`) +- **CallSpec + dispatcher** — boilerplate mapping call spec variants to generator actions (candidate for language-level automation) + +Generator drive model depends on the component's role: +- **Nondeterministic** (component sends requests): the generator chooses what to send (Channel API) +- **Reactive** (component sends responses): the generator responds to application requests (Engine API) + +## Composition + +The application composes generators by calling their **published actions** — it never writes to generator state variables directly. Reading observable generator state (e.g., `reth::rethStates.get(node).disk.chain`) is fine. + +Each composed step follows the pattern: +``` +all { + componentA::action(node), // or componentA::unchanged + componentB::action(node), // or componentB::unchanged + applicationStateUpdate(node), +} +``` + +Every generator's state must be accounted for in every step (either an action or the stutter/unchanged action). + +### Work Queue + +When a single incoming request requires multiple outgoing actions (to the same or different components) plus local state updates, they go into a sequential **work queue** (`pendingWork: List[WorkItem]`), processed one item per step: + +``` +Incoming request → enqueue work items → process one per step → done +``` + +`WorkItem` is a sum type combining: +- `EngineCall(spec)` — external call to a component (dispatched via CallSpec) +- `FinalizeX(context)` — local application state update + +For example, `stepGetValue` enqueues: +``` +[EngineCall(CallBuildRequest), EngineCall(CallGetPayload), FinalizeGetValue({proposal})] +``` + +Work items don't pass data to each other directly. They communicate through **observable component state**: the queue guarantees ordering, so each item reads the effects of prior items from the generator's state. + +### Generalization + +The work queue generalizes to any application that receives requests from one or more components and sends requests to one or more components: + +``` + ┌─────────────┐ + Component A ───►│ │───► Component B + (requests in) │ Application │ (requests out) + Component C ───►│ │───► Component D + (requests in) └─────────────┘ (requests out) +``` + +Each external component the application sends requests to needs: +- A **CallSpec** type — one variant per action, carrying parameters (e.g., `EngineCallSpec`) +- A **dispatcher** — maps CallSpec variants to generator actions (e.g., `dispatchEngineCall`) + +The application defines: +- **WorkItem** — combines CallSpec variants from all external components + local finalize handlers +- **Work queue** — `List[WorkItem]` processed one per step +- **Finalize handlers** — local state updates after external calls complete + +Adding a new external component (e.g., a mempool service) means adding its `CallSpec` variants to `WorkItem` and interleaving them with existing items. No changes to the queue processing infrastructure. + +Note: `CallSpec` types and dispatchers are boilerplate mechanically derivable from generator action signatures — candidates for language-level automation in Quint. + +## Conventions + +### Disk/Mem State Split + +All state follows the convention from `faults.qnt`: +- **Disk**: survives restart, lost on crash +- **Mem**: cleared on any fault (crash or restart) + +This applies uniformly across Emerald, Malachite (Channel API generator), and Reth (Engine API generator). Request/response histories are mem state. + +### Naming + +| Pattern | Meaning | +|---------|---------| +| `step*` | Composed transition (incoming request + enqueue work items) | +| `stepAdvanceWork` | Process next work queue item | +| `finalize*` | Local application state update (last item in a work sequence) | +| `handle*` | Direct application state update (not queue-dispatched, e.g., `handleConsensusReady`) | +| `respond*` | Engine API generator action (Reth responds to a request) | +| `send*` | Channel API generator action (Malachite sends a request) | + +### Invariant Categories + +Invariants are organized by which component boundaries they check: + +| Category | Examples | Reads | +|----------|----------|-------| +| Emerald-only | `emerald_agreement`, `no_pending_at_current_height` | `emeraldState` only | +| Emerald ↔ Malachite | `completion` | `emeraldState` + `gen::decisions` | +| Emerald ↔ Reth | `head_tracks_consensus`, `validated_before_decided` | `emeraldState` + `reth::rethStates` | + +Generator contracts (`gen::contractInv`, `reth::contractInv`) are available as commented-out invariants for full verification that the composition doesn't violate either contract. + +## File Map + +### Shared + +| File | Purpose | +|------|---------| +| `faults.qnt` | `FaultEvent` type + disk/mem convention | + +### Channel API (Malachite ↔ Emerald) + +| File | Purpose | +|------|---------| +| `channel_api_contract.qnt` | Declarative properties (safety + ordering on Malachite's requests) | +| `channel_api_generator.qnt` | Reference state machine producing valid request sequences | +| `channel_api_generator_test.qnt` | Test module (3 nodes) | + +### Engine API (Emerald ↔ Reth) + +| File | Purpose | +|------|---------| +| `engine_api_contract.qnt` | Declarative properties (response correctness + request ordering) | +| `engine_api_generator.qnt` | Reactive state machine modeling Reth's responses | +| `engine_api_generator_test.qnt` | Test module (4 nodes, nondeterministic driver) | + +### Composition + +| File | Purpose | +|------|---------| +| `emerald_with_generator.qnt` | Channel API only composition (Emerald + Malachite) | +| `emerald_with_generator_test.qnt` | Test module (3 nodes) | +| `emerald_with_both_generators.qnt` | Three-way composition (Emerald + Malachite + Reth) | +| `emerald_with_both_generators_test.qnt` | Test module (4 nodes) | + +### Legacy + +| File | Purpose | +|------|---------| +| `emerald.qnt`, `emerald_types.qnt`, `emerald_mbt.qnt`, `emerald_tests.qnt` | Earlier MBT artifacts, not actively maintained | + +## Future Work + +### State Separation +Emerald currently reads generator state directly in several places (block construction, validity pre-checks, cross-component data flow, phase checks). Cleaner alternatives: +- Engine call dispatch writes responses into Emerald's own state +- Block construction becomes a work item that reads Reth state at execution time +- Phase checks use observable flags published by generators + +### Independent Process Crashes +Malachite+Emerald run in one process, Reth in another. Currently crashes are coordinated. Should add independent crash/restart actions (`stepEmeraldCrash/Restart`, `stepRethCrash/Restart`). Key constraint: Reth crash must clear Emerald's work queue (deadlock otherwise) and validation cache. Invariants must gate on Reth not being offline. + +### Engine API Phase 2 +`exchangeCapabilities`, `getPayloadBodiesByRange/Hash`, SYNCING state. + +### Language-Level Automation +`EngineCallSpec` and `dispatchEngineCall` are boilerplate that Quint could auto-generate when a spec imports a generator. Related to the `satisfies`/`assumes` annotation proposal. diff --git a/specs/canDecideTwoHeights_debug_report.md b/specs/canDecideTwoHeights_debug_report.md new file mode 100644 index 00000000..ccd782c8 --- /dev/null +++ b/specs/canDecideTwoHeights_debug_report.md @@ -0,0 +1,163 @@ +# Witness Debug Report: `canDecideTwoHeights` + +**Spec:** `emerald/specs/emerald_with_both_generators_witnesses.qnt` +**Date:** 2026-03-11 +**Result:** Witness not violated by uniform random simulation; violated by biased step (scenario confirmed reachable) + +--- + +## Goal Analysis + +**Witness Definition:** +```quint +val canDecideTwoHeights: bool = + NODES.toSet().forall(n => emeraldState.get(n).disk.last_decided_height < 2) +``` + +**Target Condition:** Some node with `last_decided_height >= 2` + +**Required Path:** +``` +init +→ height-1 full pipeline × quorum (3/4 nodes) +→ sendDecided(h=1) × quorum → FinalizeDecided → consensus_height = 2 +→ StartedRound(h=2) → GetValue(node2) → newPayload × quorum +→ sendDecided(h=2) → FinalizeDecided → last_decided_height = 2 +``` + +--- + +## Static Analysis + +**Actions That Advance Goal:** + +- **`sendDecided`** (`channel_api_generator.qnt`) — advances height after quorum + - ✓ `phase == InRound or Syncing` + - ✓ `proposal.height == ns.mem.height` + - ✓ `deliveredProposals.contains(proposal)` + - ✓ `proposalSupport.size() * 3 > NODES.length() * 2` (requires ≥3/4 nodes) + +- **`sendGetValue`** (`channel_api_generator.qnt`) — creates the height-2 proposal + - ✓ `phase == InRound at height 2` + - ✗ `node == proposer_for(2, 0) == "node2"` ← **PROPOSER CONSTRAINT** + +No static impossibility: 4 nodes, quorum = 3 — mathematically satisfiable. + +--- + +## Dynamic Analysis + +**Search Progression:** + +| Pass | Samples | Steps | Result | +|------|---------|-------|--------| +| 1 | 5,000 | 500 | No violation | +| 2 | 6,000 | 600 | No violation | + +**Relaxation Test:** + +| | Condition | +|---|---| +| Original | `forall(n => last_decided_height < 2)` | +| Relaxed | `not(exists(n1, n2 \| n1≠n2, both last_decided_height >= 1))` | +| Result | **NOT VIOLATED** (2,000 samples × 200 steps) | + +**Insight:** The blocker is upstream — two nodes never both complete height-1, so the height-2 pipeline never starts. + +**Sample Traces:** One node finishes height-1 and advances, but no second node completes `FinalizeDecided(h=1)`. The Working-at-h=2 state IS reachable (GW3 violated), confirming the first node enters the height-2 round. But without the height-2 proposer (node2) completing height-1 first, no height-2 proposal is ever created. + +--- + +## Guard Analysis + +**Goal Variable:** `last_decided_height` (needs to reach >= 2) + +**Guard witnesses tested:** + +| Guard | Result | Meaning | +|-------|--------|---------| +| GW1: one node has `last_decided_height >= 1` and `consensus_height >= 2` | ✓ VIOLATED | One node CAN complete height-1 and advance | +| GW2: two distinct nodes both have `last_decided_height >= 1` | ✗ NOT VIOLATED | **Confirmed blocker** | +| GW3: any node in `Working` phase at `consensus_height == 2` | ✓ VIOLATED | StartedRound at height 2 is reachable | +| GW4: any node has `undecided_proposals != Set()` at `consensus_height == 2` | ✗ NOT VIOLATED | No height-2 proposal ever created | + +**Blocking Guards:** + +- Two distinct nodes both reaching `last_decided_height >= 1`: the height-2 quorum (3/4 nodes) requires all key nodes to complete height-1 first, but random simulation never drives enough nodes to completion. +- `undecided_proposals != Set()` at `consensus_height == 2`: no height-2 proposal is ever created because node2 (the only valid proposer at h=2, r=0) never advances past height-1 in observed traces. + +**Satisfiable Guards:** + +- ✓ One node reaches `last_decided_height >= 1` and `consensus_height >= 2` +- ✓ One node enters `Working` phase at `consensus_height == 2` + +--- + +## Diagnosis + +**Category:** PROBABILISTIC_TRAP + +Only one node ever completes height-1 under random simulation; the remaining three are stranded at height-1, making the height-2 quorum structurally unachievable. + +By the time the first node calls `sendDecided(h=1)`, the quorum guard is already satisfied (3 nodes supported the proposal), so `sendDecided(h=1)` is also enabled for the other three nodes. However, the random simulator picks uniformly across all enabled actions. Completing the remaining three `sendDecided(h=1)` calls — each followed by ~20 Engine API work steps — before making further progress on the height-2 pipeline is a specific ordering that occurs with very low probability. There is no explicit bias toward one node; the three remaining nodes are probabilistically starved in the uniform random walk. + +Round timeouts do not rescue the situation. `sendStartedRoundAfterTimeout` is a per-node action: it advances only the firing node's generator from `InRound(h=2, r=0)` to `InRound(h=2, r=1)`, where `proposer_for(2,1) = "node3"`. But node3's generator is still in `InRound(h=1)` — it never completed height-1. The `sendGetValue` guard requires `phase == InRound` at the target height, so node3 cannot act as proposer at height-2 regardless of how many rounds node1 advances through. The other potential proposers at higher rounds face the same constraint. + +The height-2 quorum guard (`proposalSupport.size() * 3 > NODES.length() * 2`, i.e. ≥3 nodes) is therefore unreachable: with only one node at height-2, at most one node can ever support a height-2 proposal. + +**Key Evidence:** GW1 violated (one node completes h=1 and advances), GW2 NOT violated (only one node ever completes h=1 — not two), GW3 violated (Working at h=2 reachable for that one node), GW4 NOT violated (no height-2 proposal is ever created), relaxed witness also NOT violated — all consistent with probabilistic starvation of height-1 completion for nodes 2–4, not a spec bug. + +--- + +## Biased Step + +The diagnosis was confirmed by implementing a biased step action in `emerald_with_both_generators_witnesses.qnt`. The biased step corrects the scheduler distribution by restricting node selection: while any node has `last_decided_height < 1`, only those behind nodes are eligible to act. Once all four nodes complete height-1, the step reverts to uniform random selection across all nodes. + +```quint +action biasedStep = { + val behindNodes = NODES.toSet().filter(n => + emeraldState.get(n).disk.last_decided_height < 1 + ) + val nodePool = if (behindNodes != Set()) behindNodes else NODES.toSet() + nondet node = nodePool.oneOf() + any { + stepConsensusReady(node), + stepStartedRound(node), + stepGetValue(node), + nondet proposal = allKnownProposals.oneOf() + stepReceivedProposal(node, proposal), + nondet proposal = allKnownProposals.oneOf() + stepDecided(node, proposal), + stepProcessSyncedValue(node), + stepAdvanceWork(node), + } +} +``` + +**Design notes:** +- `allKnownProposals` aggregates proposals from each node's `undecided_proposals ∪ pending_proposals ∪ decided_proposals`, avoiding the need for `gen::proposals` which is not re-exported from the composition module. +- `stepGetDecidedValue` is omitted — it requires `gen::MAX_HEIGHT` (also not re-exported) and is not on the critical path to height-2. +- Fault actions (`stepNodeCrash`, `stepNodeRestart`) are omitted — a crash resets `last_decided_height` to 0, re-adding the node to `behindNodes` and trapping the simulation before the all-complete condition is ever satisfied. + +**Result:** Invariant violated in 594ms (~99 traces/second, 200 samples × 500 steps). + +``` +quint run emerald/specs/emerald_with_both_generators_witnesses.qnt \ + --main=emerald_with_both_generators_witnesses \ + --step=biasedStep \ + --invariant=canDecideTwoHeights \ + --max-steps=500 --max-samples=200 --backend=rust +# [violation] Found an issue (594ms at 99 traces/second). +``` + +This confirms `canDecideTwoHeights` is a valid reachability witness. The scenario is reachable; uniform random simulation simply cannot find it because it requires all four nodes to complete the ~20-step height-1 Engine API pipeline in a coordinated order before any node advances to height-2. + +--- + +## Where to Investigate + +1. **`channel_api_generator.qnt` `sendDecided` guard** — once the quorum for height-1 is met, `sendDecided(h=1)` is enabled for all four nodes simultaneously; confirm the ~20-step Engine API work chain that must complete per node before any can advance to height-2. + +2. **`channel_api_generator.qnt` `sendGetValue` / `sendStartedRoundAfterTimeout` guards** — `sendGetValue` requires `phase == InRound` at the target height; nodes still at height-1 cannot act as proposer at height-2 even if another node's timeout advances the round there. Confirm no path exists for a height-1 node to skip ahead. + +3. ~~**Use a biased scheduler or manual ITF trace** to confirm reachability: force all 4 nodes to complete `sendDecided(h=1)` (and their Engine API chains) before any node's height-2 pipeline begins, then let the simulator proceed to height-2.~~ **Resolved** — see Biased Step below. diff --git a/specs/canReachDecision_trace.itf.json b/specs/canReachDecision_trace.itf.json new file mode 100644 index 00000000..c3c2da57 --- /dev/null +++ b/specs/canReachDecision_trace.itf.json @@ -0,0 +1,58358 @@ +{ + "#meta": { + "format": "ITF", + "format-description": "https://apalache-mc.org/docs/adr/015adr-trace.html", + "source": "emerald_with_both_generators_witnesses.qnt", + "status": "violation", + "description": "Created by Quint on Wed Mar 11 2026 11:35:21 GMT+0000 (Coordinated Universal Time)", + "timestamp": 1773228921560 + }, + "vars": [ + "emerald_with_both_generators::gen::decisions", + "emerald_with_both_generators::gen::lastEntry", + "emerald_with_both_generators::gen::nodeStates", + "emerald_with_both_generators::gen::proposalSupport", + "emerald_with_both_generators::gen::proposals", + "emerald_with_both_generators::gen::requestHistory", + "emerald_with_both_generators::reth::engineLastTraceEntry", + "emerald_with_both_generators::reth::nextId", + "emerald_with_both_generators::reth::requestHistory", + "emerald_with_both_generators::reth::rethStates", + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState" + ], + "states": [ + { + "#meta": { + "index": 0 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Offline", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Offline", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Offline", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Offline", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 1 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + }, + "node": "node4" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Offline", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Offline", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Offline", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 2 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + }, + "node": "node3" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node4", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Offline", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Offline", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 3 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + }, + "node": "node2" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node3", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node4", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Offline", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 4 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + }, + "node": "node3" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node3", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + ] + ], + [ + "node4", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Offline", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 5 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "FaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node3" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node3" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Offline", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 6 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + }, + "node": "node3" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node3", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node4", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node3" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Offline", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 7 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "FaultMsg", + "value": { + "tag": "Crash", + "value": { + "#tup": [] + } + } + }, + "node": "node3" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Crash", + "value": { + "#tup": [] + } + } + }, + "node": "node3" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Offline", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Offline", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 8 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Crash", + "value": { + "#tup": [] + } + } + }, + "node": "node3" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Offline", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 9 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + }, + "node": "node3" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node3", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node4", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Crash", + "value": { + "#tup": [] + } + } + }, + "node": "node3" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 10 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "FaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node3" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node3" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 11 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "FaultMsg", + "value": { + "tag": "Crash", + "value": { + "#tup": [] + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Crash", + "value": { + "#tup": [] + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Offline", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 12 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "FaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node2" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node2" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Offline", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 13 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + }, + "node": "node3" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node4", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node2" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Offline", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 14 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node2", + [] + ], + [ + "node3", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node4", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node2" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 15 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + }, + "node": "node2" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node3", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node4", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node2" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 16 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "FaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node4" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node3", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node4" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 17 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + ] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node3", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node4" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 18 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + }, + "node": "node2" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + ] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + ] + ], + [ + "node3", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node4" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 19 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqGetValue", + "value": { + "height": { + "#bigint": "1" + }, + "round": { + "#bigint": "0" + } + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [ + { + "#tup": [ + { + "#bigint": "1" + }, + { + "#bigint": "0" + } + ] + } + ] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + }, + { + "tag": "ReqGetValue", + "value": { + "height": { + "#bigint": "1" + }, + "round": { + "#bigint": "0" + } + } + } + ] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + ] + ], + [ + "node3", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node4" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "EngineCall", + "value": { + "tag": "CallBuildRequest", + "value": { + "#tup": [] + } + } + }, + { + "tag": "EngineCall", + "value": { + "tag": "CallGetPayload", + "value": { + "#tup": [] + } + } + }, + { + "tag": "FinalizeGetValue", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 20 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "FaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + ] + ], + [ + "node3", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 21 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node2", + "round": { + "#bigint": "1" + } + } + } + }, + "node": "node2" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "1" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node2", + "round": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node3", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "1" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 22 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "1" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node2", + "round": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node3", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "1" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 23 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "FaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node2" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node2", + [] + ], + [ + "node3", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node2" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 24 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + }, + "node": "node4" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node2", + [] + ], + [ + "node3", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node4", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node2" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 25 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "FaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node3" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node3" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 26 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "FaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 27 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + }, + "node": "node4" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + ] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 28 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + }, + "node": "node2" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + ] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 29 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + }, + "node": "node2" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + ] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 30 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + }, + "node": "node3" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + ] + ], + [ + "node3", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node4", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + ] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 31 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + }, + "node": "node3" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1", + "node3" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + ] + ], + [ + "node3", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ], + [ + "node4", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + ] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "EngineCall", + "value": { + "tag": "CallNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + } + } + }, + { + "tag": "FinalizeReceivedProposal", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 32 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "FaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node3" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1", + "node3" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + ] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node3" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 33 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "FaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node4" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1", + "node3" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node4" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 34 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node2", + "round": { + "#bigint": "1" + } + } + } + }, + "node": "node2" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "1" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1", + "node3" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node2", + "round": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node4" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "1" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 35 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "1" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1", + "node3" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node2", + "round": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node4" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "1" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 36 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "FaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "1" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1", + "node3" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node2", + "round": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "1" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 37 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "1" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1", + "node3" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node2", + "round": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "1" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 38 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "1" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1", + "node3" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + ] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node2", + "round": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "1" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 39 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + }, + "node": "node3" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "1" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1", + "node3" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + ] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node2", + "round": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node3", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "1" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 40 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + }, + "node": "node2" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "1" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1", + "node2", + "node3" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + ] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node2", + "round": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ], + [ + "node3", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "1" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "EngineCall", + "value": { + "tag": "CallNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + } + } + }, + { + "tag": "FinalizeReceivedProposal", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 41 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "FaultMsg", + "value": { + "tag": "Crash", + "value": { + "#tup": [] + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "1" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1", + "node2", + "node3" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node2", + "round": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ], + [ + "node3", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Crash", + "value": { + "#tup": [] + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Offline", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "1" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "EngineCall", + "value": { + "tag": "CallNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + } + } + }, + { + "tag": "FinalizeReceivedProposal", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 42 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "1" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1", + "node2", + "node3" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node2", + "round": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ], + [ + "node3", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Crash", + "value": { + "#tup": [] + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "1" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "EngineCall", + "value": { + "tag": "CallNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + } + } + }, + { + "tag": "FinalizeReceivedProposal", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 43 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "FaultMsg", + "value": { + "tag": "Crash", + "value": { + "#tup": [] + } + } + }, + "node": "node3" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "1" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1", + "node2", + "node3" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node2", + "round": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Crash", + "value": { + "#tup": [] + } + } + }, + "node": "node3" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Offline", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "1" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "EngineCall", + "value": { + "tag": "CallNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + } + } + }, + { + "tag": "FinalizeReceivedProposal", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 44 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + }, + "node": "node4" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "1" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1", + "node2", + "node3" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node2", + "round": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Crash", + "value": { + "#tup": [] + } + } + }, + "node": "node3" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Offline", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "1" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "EngineCall", + "value": { + "tag": "CallNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + } + } + }, + { + "tag": "FinalizeReceivedProposal", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 45 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "FaultMsg", + "value": { + "tag": "Crash", + "value": { + "#tup": [] + } + } + }, + "node": "node4" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "1" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1", + "node2", + "node3" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node2", + "round": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Crash", + "value": { + "#tup": [] + } + } + }, + "node": "node4" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Offline", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Offline", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "1" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "EngineCall", + "value": { + "tag": "CallNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + } + } + }, + { + "tag": "FinalizeReceivedProposal", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 46 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "1" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1", + "node2", + "node3" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + ] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node2", + "round": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Crash", + "value": { + "#tup": [] + } + } + }, + "node": "node4" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Offline", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Offline", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "1" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "EngineCall", + "value": { + "tag": "CallNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + } + } + }, + { + "tag": "FinalizeReceivedProposal", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 47 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "FaultMsg", + "value": { + "tag": "Crash", + "value": { + "#tup": [] + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "1" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1", + "node2", + "node3" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node2", + "round": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Crash", + "value": { + "#tup": [] + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Offline", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Offline", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Offline", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "1" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "EngineCall", + "value": { + "tag": "CallNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + } + } + }, + { + "tag": "FinalizeReceivedProposal", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 48 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "1" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1", + "node2", + "node3" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node2", + "round": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Crash", + "value": { + "#tup": [] + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "1" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Offline", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Offline", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "1" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "EngineCall", + "value": { + "tag": "CallNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + } + } + }, + { + "tag": "FinalizeReceivedProposal", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 49 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "1" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1", + "node2", + "node3" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node2", + "round": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineMsg", + "value": { + "tag": "ReqNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + } + }, + "node": "node2" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "2" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ], + [ + { + "#bigint": "1" + }, + { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [ + { + "#bigint": "1001" + } + ] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Offline", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Offline", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "1" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "FinalizeReceivedProposal", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 50 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + }, + "node": "node3" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "1" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1", + "node2", + "node3" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node2", + "round": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ], + [ + "node3", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineMsg", + "value": { + "tag": "ReqNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + } + }, + "node": "node2" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "2" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ], + [ + { + "#bigint": "1" + }, + { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [ + { + "#bigint": "1001" + } + ] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Offline", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "1" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "FinalizeReceivedProposal", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 51 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "FaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node3" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "1" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1", + "node2", + "node3" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node2", + "round": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node3" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "2" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ], + [ + { + "#bigint": "1" + }, + { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [ + { + "#bigint": "1001" + } + ] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Offline", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "1" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "FinalizeReceivedProposal", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 52 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + }, + "node": "node3" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "1" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1", + "node2", + "node3" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node2", + "round": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ], + [ + "node3", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node3" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "2" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ], + [ + { + "#bigint": "1" + }, + { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [ + { + "#bigint": "1001" + } + ] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Offline", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "1" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "FinalizeReceivedProposal", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 53 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + }, + "node": "node4" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "1" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1", + "node2", + "node3" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node2", + "round": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ], + [ + "node3", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node4", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node3" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "2" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ], + [ + { + "#bigint": "1" + }, + { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [ + { + "#bigint": "1001" + } + ] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "1" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "FinalizeReceivedProposal", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 54 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "FaultMsg", + "value": { + "tag": "Crash", + "value": { + "#tup": [] + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "1" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1", + "node2", + "node3" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node2", + "round": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ], + [ + "node3", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node4", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Crash", + "value": { + "#tup": [] + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "2" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Offline", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ], + [ + { + "#bigint": "1" + }, + { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [ + { + "#bigint": "1001" + } + ] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "1" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "FinalizeReceivedProposal", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 55 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + }, + "node": "node3" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "1" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1", + "node2", + "node3" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node2", + "round": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ], + [ + "node3", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ], + [ + "node4", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Crash", + "value": { + "#tup": [] + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "2" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Offline", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ], + [ + { + "#bigint": "1" + }, + { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [ + { + "#bigint": "1001" + } + ] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "1" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "FinalizeReceivedProposal", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "EngineCall", + "value": { + "tag": "CallNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + } + } + }, + { + "tag": "FinalizeReceivedProposal", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 56 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "1" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1", + "node2", + "node3" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node2", + "round": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ], + [ + "node3", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ], + [ + "node4", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Crash", + "value": { + "#tup": [] + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "2" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ], + [ + { + "#bigint": "1" + }, + { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [ + { + "#bigint": "1001" + } + ] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "1" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "FinalizeReceivedProposal", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "EngineCall", + "value": { + "tag": "CallNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + } + } + }, + { + "tag": "FinalizeReceivedProposal", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 57 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "1" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1", + "node2", + "node3" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + ] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node2", + "round": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ], + [ + "node3", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ], + [ + "node4", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Crash", + "value": { + "#tup": [] + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "2" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ], + [ + { + "#bigint": "1" + }, + { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [ + { + "#bigint": "1001" + } + ] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "1" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "FinalizeReceivedProposal", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "EngineCall", + "value": { + "tag": "CallNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + } + } + }, + { + "tag": "FinalizeReceivedProposal", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 58 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "1" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1", + "node2", + "node3" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + ] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node2", + "round": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ], + [ + "node3", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ], + [ + "node4", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Crash", + "value": { + "#tup": [] + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "2" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ], + [ + { + "#bigint": "1" + }, + { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [ + { + "#bigint": "1001" + } + ] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "1" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "validated_cache": { + "#set": [ + { + "#bigint": "1001" + } + ] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "EngineCall", + "value": { + "tag": "CallNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + } + } + }, + { + "tag": "FinalizeReceivedProposal", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 59 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + }, + "node": "node4" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "1" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1", + "node2", + "node3", + "node4" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + ] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node2", + "round": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ], + [ + "node3", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ], + [ + "node4", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Crash", + "value": { + "#tup": [] + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "2" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ], + [ + { + "#bigint": "1" + }, + { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [ + { + "#bigint": "1001" + } + ] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "1" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "validated_cache": { + "#set": [ + { + "#bigint": "1001" + } + ] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "EngineCall", + "value": { + "tag": "CallNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + } + } + }, + { + "tag": "FinalizeReceivedProposal", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "EngineCall", + "value": { + "tag": "CallNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + } + } + }, + { + "tag": "FinalizeReceivedProposal", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 60 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [ + [ + { + "#bigint": "1" + }, + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + ] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqDecided", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + }, + "node": "node2" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "1" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "2" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1", + "node2", + "node3", + "node4" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + ] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node2", + "round": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + }, + { + "tag": "ReqDecided", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ], + [ + "node3", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ], + [ + "node4", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Crash", + "value": { + "#tup": [] + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "2" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ], + [ + { + "#bigint": "1" + }, + { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [ + { + "#bigint": "1001" + } + ] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "1" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "EngineCall", + "value": { + "tag": "CallNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + } + } + }, + { + "tag": "EngineCall", + "value": { + "tag": "CallHeadUpdate", + "value": { + "headHash": { + "#bigint": "1001" + }, + "headHeight": { + "#bigint": "1" + } + } + } + }, + { + "tag": "FinalizeDecided", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "validated_cache": { + "#set": [ + { + "#bigint": "1001" + } + ] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "EngineCall", + "value": { + "tag": "CallNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + } + } + }, + { + "tag": "FinalizeReceivedProposal", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "EngineCall", + "value": { + "tag": "CallNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + } + } + }, + { + "tag": "FinalizeReceivedProposal", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 61 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [ + [ + { + "#bigint": "1" + }, + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + ] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqDecided", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + }, + "node": "node2" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "1" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "2" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1", + "node2", + "node3", + "node4" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + ] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node2", + "round": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + }, + { + "tag": "ReqDecided", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ], + [ + "node3", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ], + [ + "node4", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineMsg", + "value": { + "tag": "ReqNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + } + }, + "node": "node2" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "3" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + }, + { + "tag": "ReqNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ], + [ + { + "#bigint": "1" + }, + { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [ + { + "#bigint": "1001" + } + ] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "1" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "EngineCall", + "value": { + "tag": "CallHeadUpdate", + "value": { + "headHash": { + "#bigint": "1001" + }, + "headHeight": { + "#bigint": "1" + } + } + } + }, + { + "tag": "FinalizeDecided", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "validated_cache": { + "#set": [ + { + "#bigint": "1001" + } + ] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "EngineCall", + "value": { + "tag": "CallNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + } + } + }, + { + "tag": "FinalizeReceivedProposal", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "EngineCall", + "value": { + "tag": "CallNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + } + } + }, + { + "tag": "FinalizeReceivedProposal", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 62 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [ + [ + { + "#bigint": "1" + }, + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + ] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "FaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "1" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "2" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1", + "node2", + "node3", + "node4" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node2", + "round": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + }, + { + "tag": "ReqDecided", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ], + [ + "node3", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ], + [ + "node4", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "3" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + }, + { + "tag": "ReqNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ], + [ + { + "#bigint": "1" + }, + { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [ + { + "#bigint": "1001" + } + ] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "1" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "EngineCall", + "value": { + "tag": "CallHeadUpdate", + "value": { + "headHash": { + "#bigint": "1001" + }, + "headHeight": { + "#bigint": "1" + } + } + } + }, + { + "tag": "FinalizeDecided", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "validated_cache": { + "#set": [ + { + "#bigint": "1001" + } + ] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "EngineCall", + "value": { + "tag": "CallNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + } + } + }, + { + "tag": "FinalizeReceivedProposal", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "EngineCall", + "value": { + "tag": "CallNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + } + } + }, + { + "tag": "FinalizeReceivedProposal", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 63 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [ + [ + { + "#bigint": "1" + }, + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + ] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "FaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node4" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "1" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "2" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1", + "node2", + "node3", + "node4" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node2", + "round": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + }, + { + "tag": "ReqDecided", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ], + [ + "node3", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node4" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "3" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + }, + { + "tag": "ReqNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ], + [ + { + "#bigint": "1" + }, + { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [ + { + "#bigint": "1001" + } + ] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "1" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "EngineCall", + "value": { + "tag": "CallHeadUpdate", + "value": { + "headHash": { + "#bigint": "1001" + }, + "headHeight": { + "#bigint": "1" + } + } + } + }, + { + "tag": "FinalizeDecided", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "validated_cache": { + "#set": [ + { + "#bigint": "1001" + } + ] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "EngineCall", + "value": { + "tag": "CallNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + } + } + }, + { + "tag": "FinalizeReceivedProposal", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 64 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [ + [ + { + "#bigint": "1" + }, + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + ] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "FaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node4" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "1" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "2" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1", + "node2", + "node3", + "node4" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node2", + "round": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + }, + { + "tag": "ReqDecided", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ], + [ + "node3", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineMsg", + "value": { + "tag": "ReqNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + } + }, + "node": "node3" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "4" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + }, + { + "tag": "ReqNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + } + ] + ], + [ + "node3", + [ + { + "tag": "ReqNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + } + ] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ], + [ + { + "#bigint": "1" + }, + { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [ + { + "#bigint": "1001" + } + ] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ], + [ + { + "#bigint": "1" + }, + { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [ + { + "#bigint": "1001" + } + ] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "1" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "EngineCall", + "value": { + "tag": "CallHeadUpdate", + "value": { + "headHash": { + "#bigint": "1001" + }, + "headHeight": { + "#bigint": "1" + } + } + } + }, + { + "tag": "FinalizeDecided", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "validated_cache": { + "#set": [ + { + "#bigint": "1001" + } + ] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "FinalizeReceivedProposal", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 65 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [ + [ + { + "#bigint": "1" + }, + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + ] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "FaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node3" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "1" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "2" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1", + "node2", + "node3", + "node4" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node2", + "round": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + }, + { + "tag": "ReqDecided", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node3" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "4" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + }, + { + "tag": "ReqNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ], + [ + { + "#bigint": "1" + }, + { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [ + { + "#bigint": "1001" + } + ] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ], + [ + { + "#bigint": "1" + }, + { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "1" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "EngineCall", + "value": { + "tag": "CallHeadUpdate", + "value": { + "headHash": { + "#bigint": "1001" + }, + "headHeight": { + "#bigint": "1" + } + } + } + }, + { + "tag": "FinalizeDecided", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "validated_cache": { + "#set": [ + { + "#bigint": "1001" + } + ] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 66 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [ + [ + { + "#bigint": "1" + }, + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + ] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "1" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "2" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1", + "node2", + "node3", + "node4" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node2", + "round": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + }, + { + "tag": "ReqDecided", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node3" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "4" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + }, + { + "tag": "ReqNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ], + [ + { + "#bigint": "1" + }, + { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [ + { + "#bigint": "1001" + } + ] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ], + [ + { + "#bigint": "1" + }, + { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "1" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "EngineCall", + "value": { + "tag": "CallHeadUpdate", + "value": { + "headHash": { + "#bigint": "1001" + }, + "headHeight": { + "#bigint": "1" + } + } + } + }, + { + "tag": "FinalizeDecided", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "validated_cache": { + "#set": [ + { + "#bigint": "1001" + } + ] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 67 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [ + [ + { + "#bigint": "1" + }, + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + ] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "FaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "1" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "2" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1", + "node2", + "node3", + "node4" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node2", + "round": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + }, + { + "tag": "ReqDecided", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "4" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + }, + { + "tag": "ReqNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ], + [ + { + "#bigint": "1" + }, + { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [ + { + "#bigint": "1001" + } + ] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ], + [ + { + "#bigint": "1" + }, + { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "1" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "EngineCall", + "value": { + "tag": "CallHeadUpdate", + "value": { + "headHash": { + "#bigint": "1001" + }, + "headHeight": { + "#bigint": "1" + } + } + } + }, + { + "tag": "FinalizeDecided", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "validated_cache": { + "#set": [ + { + "#bigint": "1001" + } + ] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 68 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [ + [ + { + "#bigint": "1" + }, + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + ] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "1" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "2" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1", + "node2", + "node3", + "node4" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node2", + "round": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + }, + { + "tag": "ReqDecided", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "4" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + }, + { + "tag": "ReqNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ], + [ + { + "#bigint": "1" + }, + { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [ + { + "#bigint": "1001" + } + ] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ], + [ + { + "#bigint": "1" + }, + { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "1" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "EngineCall", + "value": { + "tag": "CallHeadUpdate", + "value": { + "headHash": { + "#bigint": "1001" + }, + "headHeight": { + "#bigint": "1" + } + } + } + }, + { + "tag": "FinalizeDecided", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "validated_cache": { + "#set": [ + { + "#bigint": "1001" + } + ] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 69 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [ + [ + { + "#bigint": "1" + }, + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + ] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "FaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "1" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "2" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1", + "node2", + "node3", + "node4" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node2", + "round": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + }, + { + "tag": "ReqDecided", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "4" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + }, + { + "tag": "ReqNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ], + [ + { + "#bigint": "1" + }, + { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [ + { + "#bigint": "1001" + } + ] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ], + [ + { + "#bigint": "1" + }, + { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "1" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "EngineCall", + "value": { + "tag": "CallHeadUpdate", + "value": { + "headHash": { + "#bigint": "1001" + }, + "headHeight": { + "#bigint": "1" + } + } + } + }, + { + "tag": "FinalizeDecided", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "validated_cache": { + "#set": [ + { + "#bigint": "1001" + } + ] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 70 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [ + [ + { + "#bigint": "1" + }, + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + ] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + }, + "node": "node4" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "1" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "2" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1", + "node2", + "node3", + "node4" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node2", + "round": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + }, + { + "tag": "ReqDecided", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineFaultMsg", + "value": { + "tag": "Restart", + "value": { + "#tup": [] + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "4" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + }, + { + "tag": "ReqNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ], + [ + { + "#bigint": "1" + }, + { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [ + { + "#bigint": "1001" + } + ] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ], + [ + { + "#bigint": "1" + }, + { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "1" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "EngineCall", + "value": { + "tag": "CallHeadUpdate", + "value": { + "headHash": { + "#bigint": "1001" + }, + "headHeight": { + "#bigint": "1" + } + } + } + }, + { + "tag": "FinalizeDecided", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "validated_cache": { + "#set": [ + { + "#bigint": "1001" + } + ] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 71 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [ + [ + { + "#bigint": "1" + }, + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + ] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + }, + "node": "node4" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "1" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "2" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1", + "node2", + "node3", + "node4" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node2", + "round": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + }, + { + "tag": "ReqDecided", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineMsg", + "value": { + "tag": "ReqForkchoiceUpdated", + "value": { + "building": false, + "headHash": { + "#bigint": "1001" + }, + "respPayloadId": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + } + }, + "node": "node2" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "4" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + }, + { + "tag": "ReqNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + }, + { + "tag": "ReqForkchoiceUpdated", + "value": { + "building": false, + "headHash": { + "#bigint": "1001" + }, + "respPayloadId": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ], + [ + { + "#bigint": "1" + }, + { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "1001" + }, + "headHeight": { + "#bigint": "1" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [ + { + "#bigint": "1001" + } + ] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ], + [ + { + "#bigint": "1" + }, + { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "1" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "FinalizeDecided", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "validated_cache": { + "#set": [ + { + "#bigint": "1001" + } + ] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 72 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [ + [ + { + "#bigint": "1" + }, + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + ] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "1" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "2" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1", + "node2", + "node3", + "node4" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node2", + "round": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + }, + { + "tag": "ReqDecided", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineMsg", + "value": { + "tag": "ReqForkchoiceUpdated", + "value": { + "building": false, + "headHash": { + "#bigint": "1001" + }, + "respPayloadId": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + } + }, + "node": "node2" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "4" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + }, + { + "tag": "ReqNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + }, + { + "tag": "ReqForkchoiceUpdated", + "value": { + "building": false, + "headHash": { + "#bigint": "1001" + }, + "respPayloadId": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ], + [ + { + "#bigint": "1" + }, + { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "1001" + }, + "headHeight": { + "#bigint": "1" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [ + { + "#bigint": "1001" + } + ] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ], + [ + { + "#bigint": "1" + }, + { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "1" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "FinalizeDecided", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "validated_cache": { + "#set": [ + { + "#bigint": "1001" + } + ] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 73 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [ + [ + { + "#bigint": "1" + }, + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + ] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "1" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "2" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1", + "node2", + "node3", + "node4" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + ] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node2", + "round": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + }, + { + "tag": "ReqDecided", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineMsg", + "value": { + "tag": "ReqForkchoiceUpdated", + "value": { + "building": false, + "headHash": { + "#bigint": "1001" + }, + "respPayloadId": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + } + }, + "node": "node2" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "4" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + }, + { + "tag": "ReqNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + }, + { + "tag": "ReqForkchoiceUpdated", + "value": { + "building": false, + "headHash": { + "#bigint": "1001" + }, + "respPayloadId": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ], + [ + { + "#bigint": "1" + }, + { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "1001" + }, + "headHeight": { + "#bigint": "1" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [ + { + "#bigint": "1001" + } + ] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ], + [ + { + "#bigint": "1" + }, + { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "1" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [ + { + "tag": "FinalizeDecided", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "validated_cache": { + "#set": [ + { + "#bigint": "1001" + } + ] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + }, + { + "#meta": { + "index": 74 + }, + "emerald_with_both_generators::gen::decisions": { + "#map": [ + [ + { + "#bigint": "1" + }, + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + ] + }, + "emerald_with_both_generators::gen::lastEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "ChannelMsg", + "value": { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + }, + "node": "node1" + } + }, + "emerald_with_both_generators::gen::nodeStates": { + "#map": [ + [ + "node1", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "InRound", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node2", + { + "disk": { + "maxDecided": { + "#bigint": "1" + } + }, + "mem": { + "deliveredProposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "2" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node3", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "0" + }, + "phase": { + "tag": "Unstarted", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ], + [ + "node4", + { + "disk": { + "maxDecided": { + "#bigint": "0" + } + }, + "mem": { + "deliveredProposals": { + "#set": [] + }, + "getValueSent": { + "#set": [] + }, + "height": { + "#bigint": "1" + }, + "phase": { + "tag": "Started", + "value": { + "#tup": [] + } + }, + "round": { + "#bigint": "0" + } + } + } + ] + ] + }, + "emerald_with_both_generators::gen::proposalSupport": { + "#map": [ + [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + }, + { + "#set": [ + "node1", + "node2", + "node3", + "node4" + ] + } + ] + ] + }, + "emerald_with_both_generators::gen::proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "emerald_with_both_generators::gen::requestHistory": { + "#map": [ + [ + "node1", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + ] + ], + [ + "node2", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + }, + { + "tag": "ReqStartedRound", + "value": { + "height": { + "#bigint": "1" + }, + "proposer": "node2", + "round": { + "#bigint": "1" + } + } + }, + { + "tag": "ReqReceivedProposal", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + }, + { + "tag": "ReqDecided", + "value": { + "proposal": { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [ + { + "tag": "ReqConsensusReady", + "value": { + "respStartHeight": { + "#bigint": "1" + } + } + } + ] + ] + ] + }, + "emerald_with_both_generators::reth::engineLastTraceEntry": { + "tag": "Some", + "value": { + "entry": { + "tag": "EngineMsg", + "value": { + "tag": "ReqForkchoiceUpdated", + "value": { + "building": false, + "headHash": { + "#bigint": "1001" + }, + "respPayloadId": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + } + }, + "node": "node2" + } + }, + "emerald_with_both_generators::reth::nextId": { + "#bigint": "4" + }, + "emerald_with_both_generators::reth::requestHistory": { + "#map": [ + [ + "node1", + [] + ], + [ + "node2", + [ + { + "tag": "ReqNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + }, + { + "tag": "ReqNewPayload", + "value": { + "block": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + }, + { + "tag": "ReqForkchoiceUpdated", + "value": { + "building": false, + "headHash": { + "#bigint": "1001" + }, + "respPayloadId": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "respStatus": { + "tag": "Valid", + "value": { + "#tup": [] + } + } + } + } + ] + ], + [ + "node3", + [] + ], + [ + "node4", + [] + ] + ] + }, + "emerald_with_both_generators::reth::rethStates": { + "#map": [ + [ + "node1", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ], + [ + { + "#bigint": "1" + }, + { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "1001" + }, + "headHeight": { + "#bigint": "1" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [ + { + "#bigint": "1001" + } + ] + } + } + } + ], + [ + "node3", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ], + [ + { + "#bigint": "1" + }, + { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "chain": { + "#map": [ + [ + { + "#bigint": "0" + }, + { + "hash": { + "#bigint": "0" + }, + "height": { + "#bigint": "0" + }, + "parentHash": { + "#bigint": "0" + } + } + ] + ] + }, + "head": { + "#bigint": "0" + }, + "headHeight": { + "#bigint": "0" + } + }, + "mem": { + "pendingBuild": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "validatedBlocks": { + "#set": [] + } + } + } + ] + ] + }, + "emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState": { + "#map": [ + [ + "node1", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Working", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node2", + { + "disk": { + "decided_proposals": { + "#set": [ + { + "height": { + "#bigint": "1" + }, + "payload": { + "#bigint": "100" + }, + "proposer": "node1", + "round": { + "#bigint": "0" + } + } + ] + }, + "last_decided_height": { + "#bigint": "1" + }, + "last_decided_payload": { + "tag": "Some", + "value": { + "#bigint": "100" + } + }, + "latest_block": { + "tag": "Some", + "value": { + "hash": { + "#bigint": "1001" + }, + "height": { + "#bigint": "1" + }, + "parentHash": { + "#bigint": "0" + } + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "2" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "1001" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [ + { + "#bigint": "1001" + } + ] + } + } + } + ], + [ + "node3", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "0" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Uninitialized", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ], + [ + "node4", + { + "disk": { + "decided_proposals": { + "#set": [] + }, + "last_decided_height": { + "#bigint": "0" + }, + "last_decided_payload": { + "tag": "None", + "value": { + "#tup": [] + } + }, + "latest_block": { + "tag": "None", + "value": { + "#tup": [] + } + } + }, + "mem": { + "consensus_height": { + "#bigint": "1" + }, + "consensus_round": { + "#bigint": "0" + }, + "head_block_hash": { + "#bigint": "0" + }, + "pendingWork": [], + "pending_proposals": { + "#set": [] + }, + "phase": { + "tag": "Ready", + "value": { + "#tup": [] + } + }, + "undecided_proposals": { + "#set": [] + }, + "validated_cache": { + "#set": [] + } + } + } + ] + ] + } + } + ] +} \ No newline at end of file diff --git a/specs/canReachDecision_trace.txt b/specs/canReachDecision_trace.txt new file mode 100644 index 00000000..268d73e4 --- /dev/null +++ b/specs/canReachDecision_trace.txt @@ -0,0 +1,17249 @@ +An example execution: + +[State 0] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: None, + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: Map(), + emerald_with_both_generators::gen::proposals: Set(), + emerald_with_both_generators::gen::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::engineLastTraceEntry: None, + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Offline, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Offline, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Offline, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Offline, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 1] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: ChannelMsg(ReqConsensusReady({ respStartHeight: 1 })), + node: "node4" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: Map(), + emerald_with_both_generators::gen::proposals: Set(), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [], + "node2" -> [], + "node3" -> [], + "node4" -> [ReqConsensusReady({ respStartHeight: 1 })] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: None, + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Offline, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Offline, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Offline, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 2] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: ChannelMsg(ReqConsensusReady({ respStartHeight: 1 })), + node: "node3" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: Map(), + emerald_with_both_generators::gen::proposals: Set(), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [], + "node2" -> [], + "node3" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node4" -> [ReqConsensusReady({ respStartHeight: 1 })] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: None, + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Offline, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Offline, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 3] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: ChannelMsg(ReqConsensusReady({ respStartHeight: 1 })), + node: "node2" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: Map(), + emerald_with_both_generators::gen::proposals: Set(), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [], + "node2" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node3" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node4" -> [ReqConsensusReady({ respStartHeight: 1 })] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: None, + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Offline, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 4] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: + ChannelMsg(ReqStartedRound({ height: 1, proposer: "node1", round: 0 })), + node: "node3" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: Map(), + emerald_with_both_generators::gen::proposals: Set(), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [], + "node2" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node3" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }) + ], + "node4" -> [ReqConsensusReady({ respStartHeight: 1 })] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: None, + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Offline, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 5] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ entry: FaultMsg(Restart), node: "node3" }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: Map(), + emerald_with_both_generators::gen::proposals: Set(), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [], + "node2" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node3" -> [], + "node4" -> [ReqConsensusReady({ respStartHeight: 1 })] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Restart), node: "node3" }), + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Offline, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 6] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: ChannelMsg(ReqConsensusReady({ respStartHeight: 1 })), + node: "node3" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: Map(), + emerald_with_both_generators::gen::proposals: Set(), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [], + "node2" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node3" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node4" -> [ReqConsensusReady({ respStartHeight: 1 })] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Restart), node: "node3" }), + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Offline, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 7] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ entry: FaultMsg(Crash), node: "node3" }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: Map(), + emerald_with_both_generators::gen::proposals: Set(), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [], + "node2" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node3" -> [], + "node4" -> [ReqConsensusReady({ respStartHeight: 1 })] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Crash), node: "node3" }), + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Offline, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Offline, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 8] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: ChannelMsg(ReqConsensusReady({ respStartHeight: 1 })), + node: "node1" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: Map(), + emerald_with_both_generators::gen::proposals: Set(), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node2" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node3" -> [], + "node4" -> [ReqConsensusReady({ respStartHeight: 1 })] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Crash), node: "node3" }), + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Offline, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 9] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: ChannelMsg(ReqConsensusReady({ respStartHeight: 1 })), + node: "node3" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: Map(), + emerald_with_both_generators::gen::proposals: Set(), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node2" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node3" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node4" -> [ReqConsensusReady({ respStartHeight: 1 })] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Crash), node: "node3" }), + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 10] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ entry: FaultMsg(Restart), node: "node3" }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: Map(), + emerald_with_both_generators::gen::proposals: Set(), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node2" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node3" -> [], + "node4" -> [ReqConsensusReady({ respStartHeight: 1 })] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Restart), node: "node3" }), + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 11] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ entry: FaultMsg(Crash), node: "node1" }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: Map(), + emerald_with_both_generators::gen::proposals: Set(), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [], + "node2" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node3" -> [], + "node4" -> [ReqConsensusReady({ respStartHeight: 1 })] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Crash), node: "node1" }), + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Offline, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 12] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ entry: FaultMsg(Restart), node: "node2" }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: Map(), + emerald_with_both_generators::gen::proposals: Set(), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [], + "node2" -> [], + "node3" -> [], + "node4" -> [ReqConsensusReady({ respStartHeight: 1 })] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Restart), node: "node2" }), + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Offline, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 13] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: ChannelMsg(ReqConsensusReady({ respStartHeight: 1 })), + node: "node3" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: Map(), + emerald_with_both_generators::gen::proposals: Set(), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [], + "node2" -> [], + "node3" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node4" -> [ReqConsensusReady({ respStartHeight: 1 })] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Restart), node: "node2" }), + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Offline, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 14] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: ChannelMsg(ReqConsensusReady({ respStartHeight: 1 })), + node: "node1" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: Map(), + emerald_with_both_generators::gen::proposals: Set(), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node2" -> [], + "node3" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node4" -> [ReqConsensusReady({ respStartHeight: 1 })] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Restart), node: "node2" }), + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 15] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: ChannelMsg(ReqConsensusReady({ respStartHeight: 1 })), + node: "node2" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: Map(), + emerald_with_both_generators::gen::proposals: Set(), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node2" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node3" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node4" -> [ReqConsensusReady({ respStartHeight: 1 })] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Restart), node: "node2" }), + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 16] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ entry: FaultMsg(Restart), node: "node4" }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: Map(), + emerald_with_both_generators::gen::proposals: Set(), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node2" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node3" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node4" -> [] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Restart), node: "node4" }), + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 17] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: + ChannelMsg(ReqStartedRound({ height: 1, proposer: "node1", round: 0 })), + node: "node1" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: Map(), + emerald_with_both_generators::gen::proposals: Set(), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }) + ], + "node2" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node3" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node4" -> [] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Restart), node: "node4" }), + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 18] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: + ChannelMsg(ReqStartedRound({ height: 1, proposer: "node1", round: 0 })), + node: "node2" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: Map(), + emerald_with_both_generators::gen::proposals: Set(), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }) + ], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }) + ], + "node3" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node4" -> [] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Restart), node: "node4" }), + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 19] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: ChannelMsg(ReqGetValue({ height: 1, round: 0 })), + node: "node1" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set((1, 0)), + height: 1, + phase: InRound, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> Set("node1") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }), + ReqGetValue({ height: 1, round: 0 }) + ], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }) + ], + "node3" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node4" -> [] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Restart), node: "node4" }), + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: + [ + EngineCall(CallBuildRequest), + EngineCall(CallGetPayload), + FinalizeGetValue({ + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 20] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ entry: FaultMsg(Restart), node: "node1" }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> Set("node1") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }) + ], + "node3" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node4" -> [] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Restart), node: "node1" }), + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 21] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: + ChannelMsg(ReqStartedRound({ height: 1, proposer: "node2", round: 1 })), + node: "node2" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 1 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> Set("node1") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }), + ReqStartedRound({ height: 1, proposer: "node2", round: 1 }) + ], + "node3" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node4" -> [] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Restart), node: "node1" }), + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 1, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 22] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: ChannelMsg(ReqConsensusReady({ respStartHeight: 1 })), + node: "node1" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 1 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> Set("node1") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }), + ReqStartedRound({ height: 1, proposer: "node2", round: 1 }) + ], + "node3" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node4" -> [] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Restart), node: "node1" }), + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 1, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 23] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ entry: FaultMsg(Restart), node: "node2" }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> Set("node1") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node2" -> [], + "node3" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node4" -> [] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Restart), node: "node2" }), + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 24] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: ChannelMsg(ReqConsensusReady({ respStartHeight: 1 })), + node: "node4" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> Set("node1") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node2" -> [], + "node3" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node4" -> [ReqConsensusReady({ respStartHeight: 1 })] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Restart), node: "node2" }), + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 25] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ entry: FaultMsg(Restart), node: "node3" }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> Set("node1") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node2" -> [], + "node3" -> [], + "node4" -> [ReqConsensusReady({ respStartHeight: 1 })] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Restart), node: "node3" }), + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 26] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ entry: FaultMsg(Restart), node: "node1" }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> Set("node1") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [], + "node2" -> [], + "node3" -> [], + "node4" -> [ReqConsensusReady({ respStartHeight: 1 })] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Restart), node: "node1" }), + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 27] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: + ChannelMsg(ReqStartedRound({ height: 1, proposer: "node1", round: 0 })), + node: "node4" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> Set("node1") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [], + "node2" -> [], + "node3" -> [], + "node4" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }) + ] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Restart), node: "node1" }), + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 28] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: ChannelMsg(ReqConsensusReady({ respStartHeight: 1 })), + node: "node2" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> Set("node1") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [], + "node2" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node3" -> [], + "node4" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }) + ] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Restart), node: "node1" }), + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 29] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: + ChannelMsg(ReqStartedRound({ height: 1, proposer: "node1", round: 0 })), + node: "node2" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> Set("node1") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }) + ], + "node3" -> [], + "node4" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }) + ] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Restart), node: "node1" }), + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 30] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: ChannelMsg(ReqConsensusReady({ respStartHeight: 1 })), + node: "node3" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> Set("node1") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }) + ], + "node3" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node4" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }) + ] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Restart), node: "node1" }), + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 31] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: + ChannelMsg(ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + })), + node: "node3" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> + Set("node1", "node3") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }) + ], + "node3" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + "node4" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }) + ] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Restart), node: "node1" }), + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: + [ + EngineCall(CallNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 } + })), + FinalizeReceivedProposal({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 32] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ entry: FaultMsg(Restart), node: "node3" }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> + Set("node1", "node3") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }) + ], + "node3" -> [], + "node4" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }) + ] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Restart), node: "node3" }), + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 33] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ entry: FaultMsg(Restart), node: "node4" }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> + Set("node1", "node3") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }) + ], + "node3" -> [], + "node4" -> [] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Restart), node: "node4" }), + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 34] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: + ChannelMsg(ReqStartedRound({ height: 1, proposer: "node2", round: 1 })), + node: "node2" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 1 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> + Set("node1", "node3") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }), + ReqStartedRound({ height: 1, proposer: "node2", round: 1 }) + ], + "node3" -> [], + "node4" -> [] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Restart), node: "node4" }), + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 1, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 35] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: ChannelMsg(ReqConsensusReady({ respStartHeight: 1 })), + node: "node1" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 1 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> + Set("node1", "node3") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }), + ReqStartedRound({ height: 1, proposer: "node2", round: 1 }) + ], + "node3" -> [], + "node4" -> [] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Restart), node: "node4" }), + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 1, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 36] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ entry: FaultMsg(Restart), node: "node1" }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 1 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> + Set("node1", "node3") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }), + ReqStartedRound({ height: 1, proposer: "node2", round: 1 }) + ], + "node3" -> [], + "node4" -> [] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Restart), node: "node1" }), + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 1, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 37] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: ChannelMsg(ReqConsensusReady({ respStartHeight: 1 })), + node: "node1" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 1 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> + Set("node1", "node3") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }), + ReqStartedRound({ height: 1, proposer: "node2", round: 1 }) + ], + "node3" -> [], + "node4" -> [] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Restart), node: "node1" }), + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 1, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 38] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: + ChannelMsg(ReqStartedRound({ height: 1, proposer: "node1", round: 0 })), + node: "node1" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 1 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> + Set("node1", "node3") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }) + ], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }), + ReqStartedRound({ height: 1, proposer: "node2", round: 1 }) + ], + "node3" -> [], + "node4" -> [] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Restart), node: "node1" }), + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 1, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 39] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: ChannelMsg(ReqConsensusReady({ respStartHeight: 1 })), + node: "node3" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 1 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> + Set("node1", "node3") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }) + ], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }), + ReqStartedRound({ height: 1, proposer: "node2", round: 1 }) + ], + "node3" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node4" -> [] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Restart), node: "node1" }), + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 1, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 40] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: + ChannelMsg(ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + })), + node: "node2" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 1 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> + Set("node1", "node2", "node3") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }) + ], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }), + ReqStartedRound({ height: 1, proposer: "node2", round: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + "node3" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node4" -> [] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Restart), node: "node1" }), + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 1, + head_block_hash: 0, + pendingWork: + [ + EngineCall(CallNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 } + })), + FinalizeReceivedProposal({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 41] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ entry: FaultMsg(Crash), node: "node1" }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 1 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> + Set("node1", "node2", "node3") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }), + ReqStartedRound({ height: 1, proposer: "node2", round: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + "node3" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node4" -> [] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Crash), node: "node1" }), + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Offline, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 1, + head_block_hash: 0, + pendingWork: + [ + EngineCall(CallNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 } + })), + FinalizeReceivedProposal({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 42] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: ChannelMsg(ReqConsensusReady({ respStartHeight: 1 })), + node: "node1" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 1 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> + Set("node1", "node2", "node3") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }), + ReqStartedRound({ height: 1, proposer: "node2", round: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + "node3" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node4" -> [] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Crash), node: "node1" }), + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 1, + head_block_hash: 0, + pendingWork: + [ + EngineCall(CallNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 } + })), + FinalizeReceivedProposal({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 43] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ entry: FaultMsg(Crash), node: "node3" }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 1 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> + Set("node1", "node2", "node3") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }), + ReqStartedRound({ height: 1, proposer: "node2", round: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + "node3" -> [], + "node4" -> [] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Crash), node: "node3" }), + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Offline, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 1, + head_block_hash: 0, + pendingWork: + [ + EngineCall(CallNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 } + })), + FinalizeReceivedProposal({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 44] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: ChannelMsg(ReqConsensusReady({ respStartHeight: 1 })), + node: "node4" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 1 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> + Set("node1", "node2", "node3") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }), + ReqStartedRound({ height: 1, proposer: "node2", round: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + "node3" -> [], + "node4" -> [ReqConsensusReady({ respStartHeight: 1 })] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Crash), node: "node3" }), + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Offline, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 1, + head_block_hash: 0, + pendingWork: + [ + EngineCall(CallNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 } + })), + FinalizeReceivedProposal({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 45] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ entry: FaultMsg(Crash), node: "node4" }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 1 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> + Set("node1", "node2", "node3") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }), + ReqStartedRound({ height: 1, proposer: "node2", round: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + "node3" -> [], + "node4" -> [] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Crash), node: "node4" }), + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Offline, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Offline, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 1, + head_block_hash: 0, + pendingWork: + [ + EngineCall(CallNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 } + })), + FinalizeReceivedProposal({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 46] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: + ChannelMsg(ReqStartedRound({ height: 1, proposer: "node1", round: 0 })), + node: "node1" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 1 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> + Set("node1", "node2", "node3") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }) + ], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }), + ReqStartedRound({ height: 1, proposer: "node2", round: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + "node3" -> [], + "node4" -> [] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Crash), node: "node4" }), + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Offline, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Offline, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 1, + head_block_hash: 0, + pendingWork: + [ + EngineCall(CallNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 } + })), + FinalizeReceivedProposal({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 47] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ entry: FaultMsg(Crash), node: "node1" }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 1 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> + Set("node1", "node2", "node3") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }), + ReqStartedRound({ height: 1, proposer: "node2", round: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + "node3" -> [], + "node4" -> [] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Crash), node: "node1" }), + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Offline, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Offline, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Offline, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 1, + head_block_hash: 0, + pendingWork: + [ + EngineCall(CallNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 } + })), + FinalizeReceivedProposal({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 48] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: ChannelMsg(ReqConsensusReady({ respStartHeight: 1 })), + node: "node1" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 1 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> + Set("node1", "node2", "node3") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }), + ReqStartedRound({ height: 1, proposer: "node2", round: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + "node3" -> [], + "node4" -> [] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Crash), node: "node1" }), + emerald_with_both_generators::reth::nextId: 1, + emerald_with_both_generators::reth::requestHistory: + Map("node1" -> [], "node2" -> [], "node3" -> [], "node4" -> []), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Offline, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Offline, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 1, + head_block_hash: 0, + pendingWork: + [ + EngineCall(CallNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 } + })), + FinalizeReceivedProposal({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 49] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: ChannelMsg(ReqConsensusReady({ respStartHeight: 1 })), + node: "node1" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 1 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> + Set("node1", "node2", "node3") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }), + ReqStartedRound({ height: 1, proposer: "node2", round: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + "node3" -> [], + "node4" -> [] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ + entry: + EngineMsg(ReqNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 }, + respStatus: Valid + })), + node: "node2" + }), + emerald_with_both_generators::reth::nextId: 2, + emerald_with_both_generators::reth::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 }, + respStatus: Valid + }) + ], + "node3" -> [], + "node4" -> [] + ), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: + Map( + 0 -> { hash: 0, height: 0, parentHash: 0 }, + 1 -> { hash: 1001, height: 1, parentHash: 0 } + ), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set(1001) } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Offline, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Offline, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 1, + head_block_hash: 0, + pendingWork: + [ + FinalizeReceivedProposal({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 50] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: ChannelMsg(ReqConsensusReady({ respStartHeight: 1 })), + node: "node3" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 1 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> + Set("node1", "node2", "node3") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }), + ReqStartedRound({ height: 1, proposer: "node2", round: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + "node3" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node4" -> [] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ + entry: + EngineMsg(ReqNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 }, + respStatus: Valid + })), + node: "node2" + }), + emerald_with_both_generators::reth::nextId: 2, + emerald_with_both_generators::reth::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 }, + respStatus: Valid + }) + ], + "node3" -> [], + "node4" -> [] + ), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: + Map( + 0 -> { hash: 0, height: 0, parentHash: 0 }, + 1 -> { hash: 1001, height: 1, parentHash: 0 } + ), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set(1001) } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Offline, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 1, + head_block_hash: 0, + pendingWork: + [ + FinalizeReceivedProposal({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 51] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ entry: FaultMsg(Restart), node: "node3" }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 1 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> + Set("node1", "node2", "node3") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }), + ReqStartedRound({ height: 1, proposer: "node2", round: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + "node3" -> [], + "node4" -> [] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Restart), node: "node3" }), + emerald_with_both_generators::reth::nextId: 2, + emerald_with_both_generators::reth::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 }, + respStatus: Valid + }) + ], + "node3" -> [], + "node4" -> [] + ), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: + Map( + 0 -> { hash: 0, height: 0, parentHash: 0 }, + 1 -> { hash: 1001, height: 1, parentHash: 0 } + ), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set(1001) } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Offline, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 1, + head_block_hash: 0, + pendingWork: + [ + FinalizeReceivedProposal({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 52] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: ChannelMsg(ReqConsensusReady({ respStartHeight: 1 })), + node: "node3" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 1 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> + Set("node1", "node2", "node3") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }), + ReqStartedRound({ height: 1, proposer: "node2", round: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + "node3" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node4" -> [] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Restart), node: "node3" }), + emerald_with_both_generators::reth::nextId: 2, + emerald_with_both_generators::reth::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 }, + respStatus: Valid + }) + ], + "node3" -> [], + "node4" -> [] + ), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: + Map( + 0 -> { hash: 0, height: 0, parentHash: 0 }, + 1 -> { hash: 1001, height: 1, parentHash: 0 } + ), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set(1001) } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Offline, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 1, + head_block_hash: 0, + pendingWork: + [ + FinalizeReceivedProposal({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 53] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: ChannelMsg(ReqConsensusReady({ respStartHeight: 1 })), + node: "node4" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 1 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> + Set("node1", "node2", "node3") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }), + ReqStartedRound({ height: 1, proposer: "node2", round: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + "node3" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node4" -> [ReqConsensusReady({ respStartHeight: 1 })] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Restart), node: "node3" }), + emerald_with_both_generators::reth::nextId: 2, + emerald_with_both_generators::reth::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 }, + respStatus: Valid + }) + ], + "node3" -> [], + "node4" -> [] + ), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: + Map( + 0 -> { hash: 0, height: 0, parentHash: 0 }, + 1 -> { hash: 1001, height: 1, parentHash: 0 } + ), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set(1001) } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 1, + head_block_hash: 0, + pendingWork: + [ + FinalizeReceivedProposal({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 54] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ entry: FaultMsg(Crash), node: "node1" }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 1 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> + Set("node1", "node2", "node3") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }), + ReqStartedRound({ height: 1, proposer: "node2", round: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + "node3" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node4" -> [ReqConsensusReady({ respStartHeight: 1 })] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Crash), node: "node1" }), + emerald_with_both_generators::reth::nextId: 2, + emerald_with_both_generators::reth::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 }, + respStatus: Valid + }) + ], + "node3" -> [], + "node4" -> [] + ), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Offline, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: + Map( + 0 -> { hash: 0, height: 0, parentHash: 0 }, + 1 -> { hash: 1001, height: 1, parentHash: 0 } + ), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set(1001) } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 1, + head_block_hash: 0, + pendingWork: + [ + FinalizeReceivedProposal({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 55] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: + ChannelMsg(ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + })), + node: "node3" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 1 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> + Set("node1", "node2", "node3") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }), + ReqStartedRound({ height: 1, proposer: "node2", round: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + "node3" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + "node4" -> [ReqConsensusReady({ respStartHeight: 1 })] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Crash), node: "node1" }), + emerald_with_both_generators::reth::nextId: 2, + emerald_with_both_generators::reth::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 }, + respStatus: Valid + }) + ], + "node3" -> [], + "node4" -> [] + ), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Offline, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: + Map( + 0 -> { hash: 0, height: 0, parentHash: 0 }, + 1 -> { hash: 1001, height: 1, parentHash: 0 } + ), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set(1001) } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 1, + head_block_hash: 0, + pendingWork: + [ + FinalizeReceivedProposal({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: + [ + EngineCall(CallNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 } + })), + FinalizeReceivedProposal({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 56] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: ChannelMsg(ReqConsensusReady({ respStartHeight: 1 })), + node: "node1" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 1 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> + Set("node1", "node2", "node3") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }), + ReqStartedRound({ height: 1, proposer: "node2", round: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + "node3" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + "node4" -> [ReqConsensusReady({ respStartHeight: 1 })] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Crash), node: "node1" }), + emerald_with_both_generators::reth::nextId: 2, + emerald_with_both_generators::reth::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 }, + respStatus: Valid + }) + ], + "node3" -> [], + "node4" -> [] + ), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: + Map( + 0 -> { hash: 0, height: 0, parentHash: 0 }, + 1 -> { hash: 1001, height: 1, parentHash: 0 } + ), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set(1001) } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 1, + head_block_hash: 0, + pendingWork: + [ + FinalizeReceivedProposal({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: + [ + EngineCall(CallNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 } + })), + FinalizeReceivedProposal({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 57] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: + ChannelMsg(ReqStartedRound({ height: 1, proposer: "node1", round: 0 })), + node: "node1" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 1 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> + Set("node1", "node2", "node3") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }) + ], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }), + ReqStartedRound({ height: 1, proposer: "node2", round: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + "node3" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + "node4" -> [ReqConsensusReady({ respStartHeight: 1 })] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Crash), node: "node1" }), + emerald_with_both_generators::reth::nextId: 2, + emerald_with_both_generators::reth::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 }, + respStatus: Valid + }) + ], + "node3" -> [], + "node4" -> [] + ), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: + Map( + 0 -> { hash: 0, height: 0, parentHash: 0 }, + 1 -> { hash: 1001, height: 1, parentHash: 0 } + ), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set(1001) } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 1, + head_block_hash: 0, + pendingWork: + [ + FinalizeReceivedProposal({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: + [ + EngineCall(CallNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 } + })), + FinalizeReceivedProposal({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 58] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: + ChannelMsg(ReqStartedRound({ height: 1, proposer: "node1", round: 0 })), + node: "node1" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 1 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> + Set("node1", "node2", "node3") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }) + ], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }), + ReqStartedRound({ height: 1, proposer: "node2", round: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + "node3" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + "node4" -> [ReqConsensusReady({ respStartHeight: 1 })] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Crash), node: "node1" }), + emerald_with_both_generators::reth::nextId: 2, + emerald_with_both_generators::reth::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 }, + respStatus: Valid + }) + ], + "node3" -> [], + "node4" -> [] + ), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: + Map( + 0 -> { hash: 0, height: 0, parentHash: 0 }, + 1 -> { hash: 1001, height: 1, parentHash: 0 } + ), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set(1001) } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 1, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Working, + undecided_proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + validated_cache: Set(1001) + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: + [ + EngineCall(CallNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 } + })), + FinalizeReceivedProposal({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 59] +{ + emerald_with_both_generators::gen::decisions: Map(), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: + ChannelMsg(ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + })), + node: "node4" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 1 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> + Set("node1", "node2", "node3", "node4") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }) + ], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }), + ReqStartedRound({ height: 1, proposer: "node2", round: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + "node3" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + "node4" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Crash), node: "node1" }), + emerald_with_both_generators::reth::nextId: 2, + emerald_with_both_generators::reth::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 }, + respStatus: Valid + }) + ], + "node3" -> [], + "node4" -> [] + ), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: + Map( + 0 -> { hash: 0, height: 0, parentHash: 0 }, + 1 -> { hash: 1001, height: 1, parentHash: 0 } + ), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set(1001) } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 1, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Working, + undecided_proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + validated_cache: Set(1001) + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: + [ + EngineCall(CallNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 } + })), + FinalizeReceivedProposal({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: + [ + EngineCall(CallNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 } + })), + FinalizeReceivedProposal({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 60] +{ + emerald_with_both_generators::gen::decisions: + Map(1 -> { height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: + ChannelMsg(ReqDecided({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + })), + node: "node2" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 1 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 2, + phase: Started, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> + Set("node1", "node2", "node3", "node4") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }) + ], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }), + ReqStartedRound({ height: 1, proposer: "node2", round: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }), + ReqDecided({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + "node3" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + "node4" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Crash), node: "node1" }), + emerald_with_both_generators::reth::nextId: 2, + emerald_with_both_generators::reth::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 }, + respStatus: Valid + }) + ], + "node3" -> [], + "node4" -> [] + ), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: + Map( + 0 -> { hash: 0, height: 0, parentHash: 0 }, + 1 -> { hash: 1001, height: 1, parentHash: 0 } + ), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set(1001) } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 1, + head_block_hash: 0, + pendingWork: + [ + EngineCall(CallNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 } + })), + EngineCall(CallHeadUpdate({ headHash: 1001, headHeight: 1 })), + FinalizeDecided({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Working, + undecided_proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + validated_cache: Set(1001) + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: + [ + EngineCall(CallNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 } + })), + FinalizeReceivedProposal({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: + [ + EngineCall(CallNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 } + })), + FinalizeReceivedProposal({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 61] +{ + emerald_with_both_generators::gen::decisions: + Map(1 -> { height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: + ChannelMsg(ReqDecided({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + })), + node: "node2" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 1 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 2, + phase: Started, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> + Set("node1", "node2", "node3", "node4") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }) + ], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }), + ReqStartedRound({ height: 1, proposer: "node2", round: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }), + ReqDecided({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + "node3" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + "node4" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ + entry: + EngineMsg(ReqNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 }, + respStatus: Valid + })), + node: "node2" + }), + emerald_with_both_generators::reth::nextId: 3, + emerald_with_both_generators::reth::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 }, + respStatus: Valid + }), + ReqNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 }, + respStatus: Valid + }) + ], + "node3" -> [], + "node4" -> [] + ), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: + Map( + 0 -> { hash: 0, height: 0, parentHash: 0 }, + 1 -> { hash: 1001, height: 1, parentHash: 0 } + ), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set(1001) } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 1, + head_block_hash: 0, + pendingWork: + [ + EngineCall(CallHeadUpdate({ headHash: 1001, headHeight: 1 })), + FinalizeDecided({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Working, + undecided_proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + validated_cache: Set(1001) + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: + [ + EngineCall(CallNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 } + })), + FinalizeReceivedProposal({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: + [ + EngineCall(CallNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 } + })), + FinalizeReceivedProposal({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 62] +{ + emerald_with_both_generators::gen::decisions: + Map(1 -> { height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::lastEntry: + Some({ entry: FaultMsg(Restart), node: "node1" }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 1 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 2, + phase: Started, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> + Set("node1", "node2", "node3", "node4") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }), + ReqStartedRound({ height: 1, proposer: "node2", round: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }), + ReqDecided({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + "node3" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + "node4" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Restart), node: "node1" }), + emerald_with_both_generators::reth::nextId: 3, + emerald_with_both_generators::reth::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 }, + respStatus: Valid + }), + ReqNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 }, + respStatus: Valid + }) + ], + "node3" -> [], + "node4" -> [] + ), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: + Map( + 0 -> { hash: 0, height: 0, parentHash: 0 }, + 1 -> { hash: 1001, height: 1, parentHash: 0 } + ), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set(1001) } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 1, + head_block_hash: 0, + pendingWork: + [ + EngineCall(CallHeadUpdate({ headHash: 1001, headHeight: 1 })), + FinalizeDecided({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Working, + undecided_proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + validated_cache: Set(1001) + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: + [ + EngineCall(CallNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 } + })), + FinalizeReceivedProposal({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: + [ + EngineCall(CallNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 } + })), + FinalizeReceivedProposal({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 63] +{ + emerald_with_both_generators::gen::decisions: + Map(1 -> { height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::lastEntry: + Some({ entry: FaultMsg(Restart), node: "node4" }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 1 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 2, + phase: Started, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> + Set("node1", "node2", "node3", "node4") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }), + ReqStartedRound({ height: 1, proposer: "node2", round: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }), + ReqDecided({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + "node3" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + "node4" -> [] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Restart), node: "node4" }), + emerald_with_both_generators::reth::nextId: 3, + emerald_with_both_generators::reth::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 }, + respStatus: Valid + }), + ReqNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 }, + respStatus: Valid + }) + ], + "node3" -> [], + "node4" -> [] + ), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: + Map( + 0 -> { hash: 0, height: 0, parentHash: 0 }, + 1 -> { hash: 1001, height: 1, parentHash: 0 } + ), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set(1001) } + }, + "node3" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 1, + head_block_hash: 0, + pendingWork: + [ + EngineCall(CallHeadUpdate({ headHash: 1001, headHeight: 1 })), + FinalizeDecided({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Working, + undecided_proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + validated_cache: Set(1001) + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: + [ + EngineCall(CallNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 } + })), + FinalizeReceivedProposal({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 64] +{ + emerald_with_both_generators::gen::decisions: + Map(1 -> { height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::lastEntry: + Some({ entry: FaultMsg(Restart), node: "node4" }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 1 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 2, + phase: Started, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> + Set("node1", "node2", "node3", "node4") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }), + ReqStartedRound({ height: 1, proposer: "node2", round: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }), + ReqDecided({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + "node3" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + "node4" -> [] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ + entry: + EngineMsg(ReqNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 }, + respStatus: Valid + })), + node: "node3" + }), + emerald_with_both_generators::reth::nextId: 4, + emerald_with_both_generators::reth::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 }, + respStatus: Valid + }), + ReqNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 }, + respStatus: Valid + }) + ], + "node3" -> + [ + ReqNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 }, + respStatus: Valid + }) + ], + "node4" -> [] + ), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: + Map( + 0 -> { hash: 0, height: 0, parentHash: 0 }, + 1 -> { hash: 1001, height: 1, parentHash: 0 } + ), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set(1001) } + }, + "node3" -> + { + disk: + { + chain: + Map( + 0 -> { hash: 0, height: 0, parentHash: 0 }, + 1 -> { hash: 1001, height: 1, parentHash: 0 } + ), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set(1001) } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 1, + head_block_hash: 0, + pendingWork: + [ + EngineCall(CallHeadUpdate({ headHash: 1001, headHeight: 1 })), + FinalizeDecided({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Working, + undecided_proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + validated_cache: Set(1001) + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: + [ + FinalizeReceivedProposal({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 65] +{ + emerald_with_both_generators::gen::decisions: + Map(1 -> { height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::lastEntry: + Some({ entry: FaultMsg(Restart), node: "node3" }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 1 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 2, + phase: Started, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> + Set("node1", "node2", "node3", "node4") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }), + ReqStartedRound({ height: 1, proposer: "node2", round: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }), + ReqDecided({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + "node3" -> [], + "node4" -> [] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Restart), node: "node3" }), + emerald_with_both_generators::reth::nextId: 4, + emerald_with_both_generators::reth::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 }, + respStatus: Valid + }), + ReqNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 }, + respStatus: Valid + }) + ], + "node3" -> [], + "node4" -> [] + ), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: + Map( + 0 -> { hash: 0, height: 0, parentHash: 0 }, + 1 -> { hash: 1001, height: 1, parentHash: 0 } + ), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set(1001) } + }, + "node3" -> + { + disk: + { + chain: + Map( + 0 -> { hash: 0, height: 0, parentHash: 0 }, + 1 -> { hash: 1001, height: 1, parentHash: 0 } + ), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 1, + head_block_hash: 0, + pendingWork: + [ + EngineCall(CallHeadUpdate({ headHash: 1001, headHeight: 1 })), + FinalizeDecided({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Working, + undecided_proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + validated_cache: Set(1001) + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 66] +{ + emerald_with_both_generators::gen::decisions: + Map(1 -> { height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: ChannelMsg(ReqConsensusReady({ respStartHeight: 1 })), + node: "node1" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 1 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 2, + phase: Started, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> + Set("node1", "node2", "node3", "node4") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }), + ReqStartedRound({ height: 1, proposer: "node2", round: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }), + ReqDecided({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + "node3" -> [], + "node4" -> [] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Restart), node: "node3" }), + emerald_with_both_generators::reth::nextId: 4, + emerald_with_both_generators::reth::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 }, + respStatus: Valid + }), + ReqNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 }, + respStatus: Valid + }) + ], + "node3" -> [], + "node4" -> [] + ), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: + Map( + 0 -> { hash: 0, height: 0, parentHash: 0 }, + 1 -> { hash: 1001, height: 1, parentHash: 0 } + ), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set(1001) } + }, + "node3" -> + { + disk: + { + chain: + Map( + 0 -> { hash: 0, height: 0, parentHash: 0 }, + 1 -> { hash: 1001, height: 1, parentHash: 0 } + ), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 1, + head_block_hash: 0, + pendingWork: + [ + EngineCall(CallHeadUpdate({ headHash: 1001, headHeight: 1 })), + FinalizeDecided({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Working, + undecided_proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + validated_cache: Set(1001) + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 67] +{ + emerald_with_both_generators::gen::decisions: + Map(1 -> { height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::lastEntry: + Some({ entry: FaultMsg(Restart), node: "node1" }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 1 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 2, + phase: Started, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> + Set("node1", "node2", "node3", "node4") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }), + ReqStartedRound({ height: 1, proposer: "node2", round: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }), + ReqDecided({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + "node3" -> [], + "node4" -> [] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Restart), node: "node1" }), + emerald_with_both_generators::reth::nextId: 4, + emerald_with_both_generators::reth::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 }, + respStatus: Valid + }), + ReqNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 }, + respStatus: Valid + }) + ], + "node3" -> [], + "node4" -> [] + ), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: + Map( + 0 -> { hash: 0, height: 0, parentHash: 0 }, + 1 -> { hash: 1001, height: 1, parentHash: 0 } + ), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set(1001) } + }, + "node3" -> + { + disk: + { + chain: + Map( + 0 -> { hash: 0, height: 0, parentHash: 0 }, + 1 -> { hash: 1001, height: 1, parentHash: 0 } + ), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 1, + head_block_hash: 0, + pendingWork: + [ + EngineCall(CallHeadUpdate({ headHash: 1001, headHeight: 1 })), + FinalizeDecided({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Working, + undecided_proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + validated_cache: Set(1001) + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 68] +{ + emerald_with_both_generators::gen::decisions: + Map(1 -> { height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: ChannelMsg(ReqConsensusReady({ respStartHeight: 1 })), + node: "node1" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 1 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 2, + phase: Started, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> + Set("node1", "node2", "node3", "node4") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }), + ReqStartedRound({ height: 1, proposer: "node2", round: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }), + ReqDecided({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + "node3" -> [], + "node4" -> [] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Restart), node: "node1" }), + emerald_with_both_generators::reth::nextId: 4, + emerald_with_both_generators::reth::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 }, + respStatus: Valid + }), + ReqNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 }, + respStatus: Valid + }) + ], + "node3" -> [], + "node4" -> [] + ), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: + Map( + 0 -> { hash: 0, height: 0, parentHash: 0 }, + 1 -> { hash: 1001, height: 1, parentHash: 0 } + ), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set(1001) } + }, + "node3" -> + { + disk: + { + chain: + Map( + 0 -> { hash: 0, height: 0, parentHash: 0 }, + 1 -> { hash: 1001, height: 1, parentHash: 0 } + ), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 1, + head_block_hash: 0, + pendingWork: + [ + EngineCall(CallHeadUpdate({ headHash: 1001, headHeight: 1 })), + FinalizeDecided({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Working, + undecided_proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + validated_cache: Set(1001) + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 69] +{ + emerald_with_both_generators::gen::decisions: + Map(1 -> { height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::lastEntry: + Some({ entry: FaultMsg(Restart), node: "node1" }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 1 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 2, + phase: Started, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> + Set("node1", "node2", "node3", "node4") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }), + ReqStartedRound({ height: 1, proposer: "node2", round: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }), + ReqDecided({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + "node3" -> [], + "node4" -> [] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Restart), node: "node1" }), + emerald_with_both_generators::reth::nextId: 4, + emerald_with_both_generators::reth::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 }, + respStatus: Valid + }), + ReqNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 }, + respStatus: Valid + }) + ], + "node3" -> [], + "node4" -> [] + ), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: + Map( + 0 -> { hash: 0, height: 0, parentHash: 0 }, + 1 -> { hash: 1001, height: 1, parentHash: 0 } + ), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set(1001) } + }, + "node3" -> + { + disk: + { + chain: + Map( + 0 -> { hash: 0, height: 0, parentHash: 0 }, + 1 -> { hash: 1001, height: 1, parentHash: 0 } + ), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 1, + head_block_hash: 0, + pendingWork: + [ + EngineCall(CallHeadUpdate({ headHash: 1001, headHeight: 1 })), + FinalizeDecided({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Working, + undecided_proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + validated_cache: Set(1001) + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 70] +{ + emerald_with_both_generators::gen::decisions: + Map(1 -> { height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: ChannelMsg(ReqConsensusReady({ respStartHeight: 1 })), + node: "node4" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 1 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 2, + phase: Started, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> + Set("node1", "node2", "node3", "node4") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }), + ReqStartedRound({ height: 1, proposer: "node2", round: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }), + ReqDecided({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + "node3" -> [], + "node4" -> [ReqConsensusReady({ respStartHeight: 1 })] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ entry: EngineFaultMsg(Restart), node: "node1" }), + emerald_with_both_generators::reth::nextId: 4, + emerald_with_both_generators::reth::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 }, + respStatus: Valid + }), + ReqNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 }, + respStatus: Valid + }) + ], + "node3" -> [], + "node4" -> [] + ), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: + Map( + 0 -> { hash: 0, height: 0, parentHash: 0 }, + 1 -> { hash: 1001, height: 1, parentHash: 0 } + ), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set(1001) } + }, + "node3" -> + { + disk: + { + chain: + Map( + 0 -> { hash: 0, height: 0, parentHash: 0 }, + 1 -> { hash: 1001, height: 1, parentHash: 0 } + ), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 1, + head_block_hash: 0, + pendingWork: + [ + EngineCall(CallHeadUpdate({ headHash: 1001, headHeight: 1 })), + FinalizeDecided({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Working, + undecided_proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + validated_cache: Set(1001) + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 71] +{ + emerald_with_both_generators::gen::decisions: + Map(1 -> { height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: ChannelMsg(ReqConsensusReady({ respStartHeight: 1 })), + node: "node4" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 1 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 2, + phase: Started, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> + Set("node1", "node2", "node3", "node4") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }), + ReqStartedRound({ height: 1, proposer: "node2", round: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }), + ReqDecided({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + "node3" -> [], + "node4" -> [ReqConsensusReady({ respStartHeight: 1 })] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ + entry: + EngineMsg(ReqForkchoiceUpdated({ + building: false, + headHash: 1001, + respPayloadId: None, + respStatus: Valid + })), + node: "node2" + }), + emerald_with_both_generators::reth::nextId: 4, + emerald_with_both_generators::reth::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 }, + respStatus: Valid + }), + ReqNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 }, + respStatus: Valid + }), + ReqForkchoiceUpdated({ + building: false, + headHash: 1001, + respPayloadId: None, + respStatus: Valid + }) + ], + "node3" -> [], + "node4" -> [] + ), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: + Map( + 0 -> { hash: 0, height: 0, parentHash: 0 }, + 1 -> { hash: 1001, height: 1, parentHash: 0 } + ), + head: 1001, + headHeight: 1 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set(1001) } + }, + "node3" -> + { + disk: + { + chain: + Map( + 0 -> { hash: 0, height: 0, parentHash: 0 }, + 1 -> { hash: 1001, height: 1, parentHash: 0 } + ), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 1, + head_block_hash: 0, + pendingWork: + [ + FinalizeDecided({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Working, + undecided_proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + validated_cache: Set(1001) + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 72] +{ + emerald_with_both_generators::gen::decisions: + Map(1 -> { height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: ChannelMsg(ReqConsensusReady({ respStartHeight: 1 })), + node: "node1" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 1 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 2, + phase: Started, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> + Set("node1", "node2", "node3", "node4") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> [ReqConsensusReady({ respStartHeight: 1 })], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }), + ReqStartedRound({ height: 1, proposer: "node2", round: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }), + ReqDecided({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + "node3" -> [], + "node4" -> [ReqConsensusReady({ respStartHeight: 1 })] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ + entry: + EngineMsg(ReqForkchoiceUpdated({ + building: false, + headHash: 1001, + respPayloadId: None, + respStatus: Valid + })), + node: "node2" + }), + emerald_with_both_generators::reth::nextId: 4, + emerald_with_both_generators::reth::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 }, + respStatus: Valid + }), + ReqNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 }, + respStatus: Valid + }), + ReqForkchoiceUpdated({ + building: false, + headHash: 1001, + respPayloadId: None, + respStatus: Valid + }) + ], + "node3" -> [], + "node4" -> [] + ), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: + Map( + 0 -> { hash: 0, height: 0, parentHash: 0 }, + 1 -> { hash: 1001, height: 1, parentHash: 0 } + ), + head: 1001, + headHeight: 1 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set(1001) } + }, + "node3" -> + { + disk: + { + chain: + Map( + 0 -> { hash: 0, height: 0, parentHash: 0 }, + 1 -> { hash: 1001, height: 1, parentHash: 0 } + ), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 1, + head_block_hash: 0, + pendingWork: + [ + FinalizeDecided({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Working, + undecided_proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + validated_cache: Set(1001) + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 73] +{ + emerald_with_both_generators::gen::decisions: + Map(1 -> { height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: + ChannelMsg(ReqStartedRound({ height: 1, proposer: "node1", round: 0 })), + node: "node1" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 1 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 2, + phase: Started, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> + Set("node1", "node2", "node3", "node4") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }) + ], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }), + ReqStartedRound({ height: 1, proposer: "node2", round: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }), + ReqDecided({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + "node3" -> [], + "node4" -> [ReqConsensusReady({ respStartHeight: 1 })] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ + entry: + EngineMsg(ReqForkchoiceUpdated({ + building: false, + headHash: 1001, + respPayloadId: None, + respStatus: Valid + })), + node: "node2" + }), + emerald_with_both_generators::reth::nextId: 4, + emerald_with_both_generators::reth::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 }, + respStatus: Valid + }), + ReqNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 }, + respStatus: Valid + }), + ReqForkchoiceUpdated({ + building: false, + headHash: 1001, + respPayloadId: None, + respStatus: Valid + }) + ], + "node3" -> [], + "node4" -> [] + ), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: + Map( + 0 -> { hash: 0, height: 0, parentHash: 0 }, + 1 -> { hash: 1001, height: 1, parentHash: 0 } + ), + head: 1001, + headHeight: 1 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set(1001) } + }, + "node3" -> + { + disk: + { + chain: + Map( + 0 -> { hash: 0, height: 0, parentHash: 0 }, + 1 -> { hash: 1001, height: 1, parentHash: 0 } + ), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 1, + head_block_hash: 0, + pendingWork: + [ + FinalizeDecided({ + block: { hash: 1001, height: 1, parentHash: 0 }, + proposal: + { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + pending_proposals: Set(), + phase: Working, + undecided_proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + validated_cache: Set(1001) + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[State 74] +{ + emerald_with_both_generators::gen::decisions: + Map(1 -> { height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::lastEntry: + Some({ + entry: + ChannelMsg(ReqStartedRound({ height: 1, proposer: "node1", round: 0 })), + node: "node1" + }), + emerald_with_both_generators::gen::nodeStates: + Map( + "node1" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: InRound, + round: 0 + } + }, + "node2" -> + { + disk: { maxDecided: 1 }, + mem: + { + deliveredProposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + getValueSent: Set(), + height: 2, + phase: Started, + round: 0 + } + }, + "node3" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 0, + phase: Unstarted, + round: 0 + } + }, + "node4" -> + { + disk: { maxDecided: 0 }, + mem: + { + deliveredProposals: Set(), + getValueSent: Set(), + height: 1, + phase: Started, + round: 0 + } + } + ), + emerald_with_both_generators::gen::proposalSupport: + Map( + { height: 1, payload: 100, proposer: "node1", round: 0 } -> + Set("node1", "node2", "node3", "node4") + ), + emerald_with_both_generators::gen::proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + emerald_with_both_generators::gen::requestHistory: + Map( + "node1" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }) + ], + "node2" -> + [ + ReqConsensusReady({ respStartHeight: 1 }), + ReqStartedRound({ height: 1, proposer: "node1", round: 0 }), + ReqStartedRound({ height: 1, proposer: "node2", round: 1 }), + ReqReceivedProposal({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }), + ReqDecided({ + proposal: { height: 1, payload: 100, proposer: "node1", round: 0 } + }) + ], + "node3" -> [], + "node4" -> [ReqConsensusReady({ respStartHeight: 1 })] + ), + emerald_with_both_generators::reth::engineLastTraceEntry: + Some({ + entry: + EngineMsg(ReqForkchoiceUpdated({ + building: false, + headHash: 1001, + respPayloadId: None, + respStatus: Valid + })), + node: "node2" + }), + emerald_with_both_generators::reth::nextId: 4, + emerald_with_both_generators::reth::requestHistory: + Map( + "node1" -> [], + "node2" -> + [ + ReqNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 }, + respStatus: Valid + }), + ReqNewPayload({ + block: { hash: 1001, height: 1, parentHash: 0 }, + respStatus: Valid + }), + ReqForkchoiceUpdated({ + building: false, + headHash: 1001, + respPayloadId: None, + respStatus: Valid + }) + ], + "node3" -> [], + "node4" -> [] + ), + emerald_with_both_generators::reth::rethStates: + Map( + "node1" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node2" -> + { + disk: + { + chain: + Map( + 0 -> { hash: 0, height: 0, parentHash: 0 }, + 1 -> { hash: 1001, height: 1, parentHash: 0 } + ), + head: 1001, + headHeight: 1 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set(1001) } + }, + "node3" -> + { + disk: + { + chain: + Map( + 0 -> { hash: 0, height: 0, parentHash: 0 }, + 1 -> { hash: 1001, height: 1, parentHash: 0 } + ), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + }, + "node4" -> + { + disk: + { + chain: Map(0 -> { hash: 0, height: 0, parentHash: 0 }), + head: 0, + headHeight: 0 + }, + mem: { pendingBuild: None, phase: Ready, validatedBlocks: Set() } + } + ), + emerald_with_both_generators_witnesses::emerald_with_both_generators::emeraldState: + Map( + "node1" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Working, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node2" -> + { + disk: + { + decided_proposals: + Set({ height: 1, payload: 100, proposer: "node1", round: 0 }), + last_decided_height: 1, + last_decided_payload: Some(100), + latest_block: Some({ hash: 1001, height: 1, parentHash: 0 }) + }, + mem: + { + consensus_height: 2, + consensus_round: 0, + head_block_hash: 1001, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set(1001) + } + }, + "node3" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 0, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Uninitialized, + undecided_proposals: Set(), + validated_cache: Set() + } + }, + "node4" -> + { + disk: + { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None + }, + mem: + { + consensus_height: 1, + consensus_round: 0, + head_block_hash: 0, + pendingWork: [], + pending_proposals: Set(), + phase: Ready, + undecided_proposals: Set(), + validated_cache: Set() + } + } + ) +} + +[violation] Found an issue (159ms at 6 traces/second). +Use --verbosity=3 to show executions. +Use --seed=0xecfbd9e43e8f7986 --backend=rust to reproduce. diff --git a/specs/canReachDecision_trace_explanation.md b/specs/canReachDecision_trace_explanation.md new file mode 100644 index 00000000..35401b26 --- /dev/null +++ b/specs/canReachDecision_trace_explanation.md @@ -0,0 +1,148 @@ +# Trace Explanation: `canReachDecision` + +**Check Type:** witness +**Result:** VIOLATED (scenario reached ✓) +**Trace Length:** 74 steps +**Seed:** `0xecfbd9e43e8f7986` + +--- + +## Initial State (Step 0) + +All four nodes are Uninitialized (no ConsensusReady received). +The channel API and Engine API histories are empty. +Each Reth instance is Offline with only the genesis block (hash=0) in chain. + +--- + +## Phase 1: Chaotic Initialization (Steps 1–53) + +The first 53 steps are dominated by ConsensusReady, Crash, and Restart events firing in arbitrary order. No node stays stable long enough to complete a consensus round. + +Key events in this phase: + +| Step | Event | Effect | +|------|-------|--------| +| 1 | ConsensusReady → node4 | node4: Uninitialized → Ready, ch=1 | +| 2–3 | ConsensusReady → node3, node2 | node3, node2: Ready | +| 4 | StartedRound(h=1,r=0,proposer=node1) → node3 | node3: Working | +| 5 | Restart node3 | node3: back to Uninitialized | +| 7 | Crash node3 | wiped again | +| 8 | ConsensusReady → node1 | node1: Ready | +| 11 | Crash node1 | node1 lost | +| 12 | Restart node2 | node2 wiped | +| 17 | StartedRound(h=1,r=0,proposer=node1) → node1 | node1: Working | +| 18 | StartedRound(h=1,r=0,proposer=node1) → node2 | node2: Working | +| 19 | GetValue(h=1,r=0) → node1 | node1 is proposer, builds block payload=100 | +| 20 | Crash node1 | proposal builder crashes mid-flight | +| 21 | StartedRound(h=1,r=1,proposer=node2) → node2 | round timeout fires; node2 is proposer at r=1 | +| 40 | ReceivedProposal({h=1,payload=100,proposer=node1,r=0}) → node2 | node2 validates proposal; support count increases | +| 41 | Crash node1 | | +| 54 | Crash node1 | node1: Working → Uninitialized | +| 55 | ReceivedProposal({h=1,payload=100,proposer=node1,r=0}) → node3 | proposalSupport: {node2, node3} | +| 56–58 | ConsensusReady → node1; StartedRound(h=1,r=0) → node1, node2 | node1, node2: Working | +| 59 | ReceivedProposal({h=1,payload=100,proposer=node1,r=0}) → node4 | proposalSupport: {node2, node3, node4} = 3 nodes ✓ quorum | + +Despite repeated crashes and restarts, proposal `{h=1, payload=100, proposer=node1, round=0}` (payload = height×100 + round) was built in step 19 and persists in the generator's global proposals set across all node faults. Support accumulates as nodes receive it across multiple attempts. + +Quorum satisfied at step 59: `3×3 > 4×2` (9 > 8). + +--- + +## Phase 2: Decision (Step 60) + +**Step 60:** `Decided({h=1, payload=100, proposer=node1, r=0}) → node2` + +| Field | Change | +|-------|--------| +| `gen::nodeStates["node2"].mem.phase` | InRound → Started | +| `gen::nodeStates["node2"].mem.height` | 1 → 2 | +| `emeraldState["node2"].mem.pendingWork` | `[]` → `[CallNewPayload, CallHeadUpdate, FinalizeDecided]` | + +The generator sends `EvDecided` to node2. Emerald handles it by enqueuing three Engine API operations. The consensus decision is recorded in the generator (`gen::decisions[1] = proposal`). node2's generator phase advances to Started at height 2. + +--- + +## Phase 3: Engine API Pipeline (Steps 61–74) + +The three work items are dispatched one per `stepAdvanceWork` call. Other nodes' faults and restarts interleave but don't affect node2's queue. + +**Step 61:** `stepAdvanceWork(node2)` — dispatches `CallNewPayload` + +| Field | Change | +|-------|--------| +| `reth::requestHistory["node2"]` | `+= ReqNewPayload({block: {height:1, hash:1001, parentHash:0}, respStatus: Valid})` | +| `reth::rethStates["node2"].disk.chain[1]` | `{height:1, hash:1001, parentHash:0}` | +| `reth::rethStates["node2"].mem.validatedBlocks` | `{} → {1001}` | +| `emeraldState["node2"].mem.validated_cache` | `{} → {1001}` | +| `pendingWork` | `[CallHeadUpdate, FinalizeDecided]` | + +Reth validates the block (hash = 1×1000+1 = 1001, parentHash=0 = genesis). Block is added to Reth's chain and marked valid. Emerald caches the validation result. + +_Steps 62–70: fault/recovery events for node1, node3, node4 — node2's work queue unaffected._ + +**Step 71:** `stepAdvanceWork(node2)` — dispatches `CallHeadUpdate` + +| Field | Change | +|-------|--------| +| `reth::requestHistory["node2"]` | `+= ReqForkchoiceUpdated({headHash: 1001, building: false, respStatus: Valid})` | +| `reth::rethStates["node2"].disk.head` | `0 → 1001` | +| `reth::rethStates["node2"].disk.headHeight` | `0 → 1` | +| `pendingWork` | `[FinalizeDecided]` | + +Reth advances its canonical head to block 1001 (height 1). The execution engine now considers the decided block as the chain tip. + +_Steps 72–73: ConsensusReady for node4, node1 — node2's FinalizeDecided still pending._ + +**Step ~74:** `stepAdvanceWork(node2)` — dispatches `FinalizeDecided` + +| Field | Change | +|-------|--------| +| `emeraldState["node2"].disk.last_decided_height` | `0 → 1` | +| `emeraldState["node2"].disk.last_decided_payload` | `None → Some(100)` | +| `emeraldState["node2"].disk.latest_block` | `None → Some({hash:1001, height:1, parentHash:0})` | +| `emeraldState["node2"].disk.decided_proposals` | `Set() → Set({h:1, payload:100, proposer:node1, r:0})` | +| `emeraldState["node2"].mem.consensus_height` | `1 → 2` | +| `emeraldState["node2"].mem.phase` | `Working → Ready` | +| `emeraldState["node2"].mem.head_block_hash` | `0 → 1001` | +| `emeraldState["node2"].mem.pendingWork` | `[FinalizeDecided] → []` | + +Emerald commits the decision to disk. The block built by Reth is recorded as `latest_block`. `consensus_height` advances to 2. node2 is now Ready to begin height 2. + +--- + +## Final State (Step 74) + +| Node | `last_decided_height` | `consensus_height` | `phase` | +|------|-----------------------|--------------------|---------| +| node1 | 0 | 1 | Working | +| **node2** | **1** | **2** | **Ready** | +| node3 | 0 | 0 | Uninitialized | +| node4 | 0 | 1 | Ready | + +**node2 Reth:** `headHeight=1`, `chain={0→genesis, 1→{hash:1001}}`, `validatedBlocks={1001}` + +✓ **SCENARIO REACHED:** `canReachDecision` violated (expected) + +`node2.last_decided_height = 1 ≥ 1`, falsifying `forall(n => last_decided_height < 1)`. The three-way composition (Malachite → Emerald → Reth) successfully completed a full height-1 decision end-to-end. + +--- + +## Summary + +The trace demonstrates an end-to-end decision at height 1 via node2, despite substantial fault activity across all four nodes. Proposal `{h=1, payload=100, proposer=node1, round=0}` was built in step 19 and survived multiple node1 crashes because the generator's `proposals` set is global and persists across node faults. Quorum (3/4 nodes: node2, node3, node4) was assembled by step 59. + +Once node2 received `EvDecided` (step 60), the Engine API pipeline ran across ~14 steps: `CallNewPayload` (step 61), `CallHeadUpdate` (step 71), and `FinalizeDecided` (~step 72–74). Only after all three work items completed did `last_decided_height` advance to 1, confirming the non-atomic work-queue model requires multiple transitions to finalize a single decision. + +--- + +## Reproduction + +```bash +quint run emerald/specs/emerald_with_both_generators_witnesses.qnt \ + --main=emerald_with_both_generators_witnesses \ + --invariant=canReachDecision \ + --seed=0xecfbd9e43e8f7986 \ + --max-steps=200 --max-samples=2000 \ + --verbosity=3 --backend=rust +``` diff --git a/specs/channel_api_contract.qnt b/specs/channel_api_contract.qnt new file mode 100644 index 00000000..52d64cc1 --- /dev/null +++ b/specs/channel_api_contract.qnt @@ -0,0 +1,905 @@ +// -*- mode: Bluespec; -*- + +// ============================================================================= +// Channel API Contract (DRAFT) +// ============================================================================= +// +// Behavioral contract for Malachite's Channel API. +// Written by the Emerald team as a proof of concept for the contract pattern. +// Models what the Malachite team would publish for applications to consume. +// +// This contract defines: +// 1. The request/response types for the Channel API +// 2. Component guarantees (Malachite → requests): safety + ordering +// 3. Application guarantees (Emerald → responses): consensusReadyResponse (formal); rest informal +// 4. Environment assumptions +// +// Both safety and ordering properties are checked as invariants on any +// conforming generator (e.g., channel_api_generator.qnt). The generator +// enforces ordering through its state machine structure; these declarative +// properties make the ordering auditable and verifiable independently. +// +// Fault handling: Faults (crash/restart) are node-level, not API-specific. +// After a fault, the node's request history is cleared (it's ephemeral/mem +// state), while proposals and decisions survive on disk. This means contract +// properties only need to reason about the current session's requests — no +// ReqFault variant or session-reset logic needed. +// +// State follows the disk/mem convention from faults.qnt: +// - Disk: all_proposals, decisions (survive crash/restart) +// - Mem: request_history (cleared on fault, contains only current session) +// +// Source: Malachite's app-channel crate (crates/app-channel/src/msgs.rs) +// and the consensus Quint spec (specs/consensus/quint/). + +module channel_api_contract { + import basicSpells.* from "spells/basicSpells" + + // =========================================================================== + // CONTRACTS + // =========================================================================== + + // Client (Malachite) guarantees: safety + ordering properties. + pure def componentGuarantees(s: ChannelState, nNodes: int): bool = and { + safety(s, nNodes), + ordering(s), + } + + // Server (Emerald) guarantees: safety properties on responses. + pure def applicationGuarantees(s: ChannelState): bool = and { + consensusReadyResponse(s), + } + + // Full contract: both sides. + pure def channelContract(s: ChannelState, nNodes: int): bool = and { + componentGuarantees(s, nNodes), + applicationGuarantees(s), + } + + // =========================================================================== + // TYPES (derived from AppMsg in msgs.rs) + // =========================================================================== + + type Node = str + type Height = int + type Round = int + type Payload = int + + type Proposal = { + height: Height, + round: Round, + proposer: Node, + payload: Payload, + } + + // Messages from Malachite consensus to the application, observable at the + // Channel API boundary. This is the subset relevant to Emerald. + // + // Not modeled here (future work): + // - ExtendVote / VerifyVoteExtension (vote extension lifecycle) + // - RestreamProposal (re-broadcast) + // - GetHistoryMinHeight (sync protocol detail) + // - ReceivedProposalPart (modeled as ReceivedProposal for simplicity) + // + // Faults (crash/restart) are NOT part of the Channel API request type. + // They are node-level events handled by clearing request histories. + // See faults.qnt for the FaultEvent type. + type ChannelRequest = + | ReqConsensusReady({ respStartHeight: Height }) + | ReqStartedRound({ height: Height, round: Round, proposer: Node }) + | ReqGetValue({ height: Height, round: Round }) + | ReqReceivedProposal({ proposal: Proposal }) + | ReqDecided({ proposal: Proposal }) + | ReqProcessSyncedValue({ proposal: Proposal }) + | ReqGetDecidedValue({ height: Height }) + + // =========================================================================== + // REQUEST HELPERS + // =========================================================================== + + /// Extract the height from a request, if it has one. + pure def requestHeight(e: ChannelRequest): Option[Height] = match e { + | ReqConsensusReady(_) => None + | ReqStartedRound(r) => Some(r.height) + | ReqGetValue(r) => Some(r.height) + | ReqReceivedProposal(r) => Some(r.proposal.height) + | ReqDecided(r) => Some(r.proposal.height) + | ReqProcessSyncedValue(r) => Some(r.proposal.height) + | ReqGetDecidedValue(r) => Some(r.height) + } + + /// Whether a request is a consensus progress request (vs. a query/delivery request). + /// Progress requests follow monotonic height ordering and are subject to + /// heightMonotonic and decidedIsFinal. + /// Excluded requests: + /// - ReqConsensusReady: one-time initialization, not height progress + /// - ReqGetDecidedValue: intentionally queries past heights + /// - ReqReceivedProposal: can arrive for future heights (buffered as pending) + pure def isProgressRequest(e: ChannelRequest): bool = match e { + | ReqConsensusReady(_) => false + | ReqGetDecidedValue(_) => false + | ReqReceivedProposal(_) => false + | _ => true + } + + // =========================================================================== + // OBSERVABLE STATE + // =========================================================================== + // + // State that any conforming generator must maintain for contract properties + // to be checkable. This is the "public interface" of the generator's state. + // + // Follows the disk/mem convention from faults.qnt: + // - Disk state survives restarts (proposals, decisions) + // - Mem state is cleared on fault (request histories — current session only) + // + // Design: request_history is the primary observable — most properties are + // checked over it. decisions and all_proposals are kept as separate fields + // for efficient lookup by validity and syncedValueIsDecided. + + type ChannelStateDisk = { + // All proposals that have been made (via GetValue responses) + all_proposals: Set[Proposal], + // Decided proposals per height (at most one per height) + decisions: Height -> Proposal, + // Per-proposal: which nodes have been delivered this specific proposal + // and are in a position to vote on it. Keyed by Proposal (not Height) + // because different rounds at the same height can have different + // proposals from different proposers. + // Updated by GetValue (proposer), ReceivedProposal at current height + // (non-proposer), and StartedRound (retroactive — if a node had the + // proposal from a prior height as pending, counted when it reaches + // this height). NOT updated by ProcessSyncedValue — synced values + // are already decided, so the quorum was already met. + // Disk state: a vote is cast when the proposal is received — this + // doesn't un-happen on restart or crash. The network saw it. + proposal_support: Proposal -> Set[Node], + } + + type ChannelStateMem = { + // Per-node: request history for the current session. + // Cleared on fault (crash/restart). Properties fold over only + // current-session requests — no cross-session reasoning needed. + request_history: Node -> List[ChannelRequest], + } + + type ChannelState = { + disk: ChannelStateDisk, + mem: ChannelStateMem, + } + + // =========================================================================== + // CLIENT GUARANTEES: SAFETY + // =========================================================================== + // + // Properties on the requests Malachite sends. These are guarantees that + // Malachite provides to any application consuming the Channel API. + + /// @guarantor component + /// @category safety + /// @scope global + // Agreement: For any two Decided requests across all nodes, if they are for + // the same height, the decided proposals must be identical. + // + // This corresponds to AgreementInv in statemachineAsync.qnt: + // "Any two correct processes agree in the consensus instances in which + // they both have already decided" + // + // Checked directly over request histories so it catches disagreement even + // if a buggy generator records inconsistent decisions. After a fault, + // histories are cleared — cross-session agreement is enforced by the + // generator's sendDecided guard checking against the decisions map (disk). + pure def agreement(s: ChannelState): bool = { + // Collect all decided proposals across all nodes, grouped by height. + // Cost: O(nodes × history_length). + val decidedByHeight: Height -> Set[Proposal] = + s.mem.request_history.keys().fold(Map(), (acc, node) => + s.mem.request_history.get(node).foldl(acc, (m, e) => + match e { + | ReqDecided(d) => + val h = d.proposal.height + val existing = if (m.has(h)) m.get(h) else Set() + m.put(h, existing.union(Set(d.proposal))) + | _ => m + } + ) + ) + // At most one distinct proposal per height. + decidedByHeight.keys().forall(h => decidedByHeight.get(h).size() <= 1) + } + + /// @guarantor component + /// @category safety + /// @scope global + // Validity: Every decided proposal was previously proposed by some node + // via GetValue. + // + // This corresponds to the requirement in consensus.qnt that + // ProposalAndCommitAndValidCInput requires a matching proposal. + pure def validity(s: ChannelState): bool = + s.disk.decisions.keys().forall(h => + s.disk.decisions.get(h).in(s.disk.all_proposals) + ) + + /// @guarantor component + /// @category safety + /// @scope global + // Decisions contiguous: Decided heights have no gaps. If height h is + // decided, then all heights 1..h-1 are also decided. + // + // Consensus processes heights sequentially. A decision at height h requires + // that height h-1 was already decided (the decided value determines the + // app state for h). Combined with agreement, this means the global decision + // sequence is a contiguous prefix of heights. + // + // Source: consensus.qnt — the state machine advances to h+1 only after + // deciding at h. A node starts at height 1 (or its last decided + 1). + pure def decisionsContiguous(s: ChannelState): bool = + s.disk.decisions.keys().forall(h => + h == 1 or s.disk.decisions.has(h - 1) + ) + + /// @guarantor component + /// @category safety + /// @scope global + // quorumDecision: Every decided height has proposal support from strictly + // more than 2/3 of the network. + // + // In BFT consensus, a decision requires 2f+1 precommits (where n >= 3f+1), + // which is strictly more than 2/3 of voting power. A node can only + // precommit a proposal it has seen. At the Channel API boundary, proposal + // delivery is observable via GetValue (proposer), ReceivedProposal at + // current height (non-proposer), and retroactively at StartedRound + // (for proposals received at a prior height as pending). + // ProcessSyncedValue is NOT counted — synced proposals are already + // decided, so the quorum was already met. + // + // Keyed by Proposal (not Height) because different rounds at the same + // height can have different proposals from different proposers. The + // quorum must hold for the specific proposal that was decided. + // + // This property ensures a minority partition cannot unilaterally decide. + // The generator enforces this as a guard on sendDecided. + // + // Assumption: all validators have equal voting power. The quorum + // threshold is computed as strictly more than 2/3 of node count. + // With non-uniform voting power, this would use the validator set's + // total voting power instead of node count. + // + // Source: Tendermint BFT — decision requires 2f+1 precommits where n≥3f+1. + pure def quorumDecision(s: ChannelState, nNodes: int): bool = + s.disk.decisions.keys().forall(h => + val proposal = s.disk.decisions.get(h) + s.disk.proposal_support.has(proposal) and + s.disk.proposal_support.get(proposal).size() * 3 > nNodes * 2 + ) + + // Combined safety properties + pure def safety(s: ChannelState, nNodes: int): bool = and { + agreement(s), + validity(s), + decisionsContiguous(s), + quorumDecision(s, nNodes), + } + + // =========================================================================== + // CLIENT GUARANTEES: ORDERING + // =========================================================================== + // + // Properties on the order in which Malachite delivers Channel API requests + // to each node. These are guarantees that Malachite provides about request + // sequencing. Expressed declaratively over per-node request histories, + // making them readable and auditable without understanding any generator's + // internal state machine. + // + // Request histories contain only current-session requests (cleared on fault). + // This simplifies all fold-based properties — no session boundary logic + // needed. + // + // The reference generator enforces these through its phase transitions. + // These declarative properties let us verify that any generator (including + // alternative or simplified ones) respects the Channel API ordering. + // + // Source: derived from driver.qnt, consensus.qnt, and msgs.rs documentation. + + /// @guarantor component + /// @category ordering + /// @scope per-node + // heightsPositive: All request heights are >= 1. + // + // Consensus starts at height 1 (or higher after restart). Height 0 is + // never a valid consensus height. This is a basic structural constraint + // that applies to all requests carrying a height. + // + // Source: consensus.qnt — heights start at 1. The application replies to + // ConsensusReady with a starting height >= 1. + pure def heightsPositive(s: ChannelState): bool = + s.mem.request_history.keys().forall(node => + s.mem.request_history.get(node).foldl(true, (ok, e) => + ok and match requestHeight(e) { + | Some(h) => h >= 1 + | None => true + } + ) + ) + + /// @guarantor component + /// @category ordering + /// @scope per-node + // consensusReadyFirst: ConsensusReady is the first request in the history, + // and it appears at most once per session. + // + // Before any other Channel API interaction, Malachite sends ConsensusReady + // to initialize the node. Histories are per-session (cleared on fault), + // so this is automatically scoped to the current session. + // + // Source: msgs.rs — ConsensusReady is sent when the consensus engine + // has been initialized and is ready to start. + pure def consensusReadyFirst(s: ChannelState): bool = + s.mem.request_history.keys().forall(node => + val hist = s.mem.request_history.get(node) + hist.foldl({ isFirst: true, ok: true }, (acc, e) => + if (not(acc.ok)) acc + else match e { + | ReqConsensusReady(_) => + if (not(acc.isFirst)) { isFirst: false, ok: false } + else { isFirst: false, ok: true } + | _ => if (acc.isFirst) { isFirst: false, ok: false } else acc + } + ).ok + ) + + /// @guarantor component + /// @category ordering + /// @scope per-node + // getValueAfterStartedRound: GetValue(h, r) on node N is preceded by + // StartedRound(h, r, proposer=N) for the same node. The node receiving + // GetValue must have been declared as the proposer for that round. + // + // Strictly stronger than "preceded by StartedRound(h, r, _)": also + // verifies that the proposer field matches the receiving node. + // Histories are per-session (cleared on fault). + // + // Source: driver.qnt — GetValue is produced as part of the proposer logic + // in applyVotekeeper, after entering a new round. + pure def getValueAfterStartedRound(s: ChannelState): bool = + s.mem.request_history.keys().forall(node => + // Scan left to right: track which (h, r) declared this node as proposer. + // On GetValue(h, r), check (h, r) was started with proposer=self. Cost: O(n). + s.mem.request_history.get(node).foldl({ startedAsProposer: Set(), ok: true }, (acc, e) => + if (not(acc.ok)) acc + else match e { + | ReqStartedRound(sr) => + if (sr.proposer == node) + { ...acc, startedAsProposer: acc.startedAsProposer.union(Set((sr.height, sr.round))) } + else acc + | ReqGetValue(gv) => + { ...acc, ok: acc.startedAsProposer.contains((gv.height, gv.round)) } + | _ => acc + } + ).ok + ) + + /// @guarantor component + /// @category ordering + /// @scope global + // getValueUnique: GetValue(h, r) is sent at most once globally — to at + // most one node, at most once per node. + // + // Only the proposer for a given (height, round) receives GetValue, and + // consensus requests a value exactly once per round. Combined, this means + // each (h, r) produces at most one GetValue request across all nodes. + // + // Replaces the previous getValueAtMostOnce (per-node) and getValueToOneNode + // (cross-node) with a single global uniqueness check via counting. + // + // Source: driver.qnt — GetValue is produced exactly when entering a round + // where the node is the proposer, and a round is entered at most once. + pure def getValueUnique(s: ChannelState): bool = { + // Count GetValue requests per (h, r) across all nodes. + // Cost: O(nodes × history_length). + val counts: (Height, Round) -> int = + s.mem.request_history.keys().fold(Map(), (acc, node) => + s.mem.request_history.get(node).foldl(acc, (m, e) => + match e { + | ReqGetValue(gv) => + val key = (gv.height, gv.round) + val cur = if (m.has(key)) m.get(key) else 0 + m.put(key, cur + 1) + | _ => m + } + ) + ) + counts.keys().forall(k => counts.get(k) <= 1) + } + + /// @guarantor component + /// @category ordering + /// @scope per-node + // heightMonotonic: Heights are non-decreasing in a node's consensus progress + // requests. + // + // Consensus processes heights sequentially. A node never receives progress + // requests for an earlier height after it has received requests for a later + // height. Query requests (GetDecidedValue) are excluded — they intentionally + // reference past heights. Histories are per-session (cleared on fault). + // + // Source: consensus.qnt — the state machine processes one height at a time, + // advancing to h+1 only after deciding at h. + pure def heightMonotonic(s: ChannelState): bool = + s.mem.request_history.keys().forall(node => + // Scan left to right: track the max height seen in progress requests. + // Each new progress request must have height >= max. Cost: O(n). + s.mem.request_history.get(node).foldl({ maxHeight: 0, ok: true }, (acc, e) => + if (not(acc.ok)) acc + else if (isProgressRequest(e)) { + match requestHeight(e) { + | Some(h) => + if (h < acc.maxHeight) { ...acc, ok: false } + else { ...acc, maxHeight: h } + | None => acc + } + } else acc + ).ok + ) + + /// @guarantor component + /// @category ordering + /// @scope per-node + // decidedIsFinal: After Decided(h), all subsequent consensus progress requests + // for the same node have height exactly h+1. + // + // Once consensus decides at height h, it moves on to height h+1. No further + // progress requests are delivered for the decided height, and no heights are + // skipped. Query requests (GetDecidedValue) are excluded — they intentionally + // reference past heights. Histories are per-session (cleared on fault). + // + // Strictly stronger than just "height > maxDecided": prevents height gaps + // (e.g., Decided(3) then StartedRound(5,0) is rejected). + // + // Source: driver.qnt — after producing a Decided output, the driver resets + // to a new height. msgs.rs — Decided triggers the application to call + // StartHeight(h+1). + pure def decidedIsFinal(s: ChannelState): bool = + s.mem.request_history.keys().forall(node => + // Scan left to right: track the max decided height. + // Every progress request after a Decided must have height exactly + // maxDecided + 1. Cost: O(n). + s.mem.request_history.get(node).foldl({ maxDecided: 0, ok: true }, (acc, e) => + if (not(acc.ok)) acc + else + val check = + if (acc.maxDecided > 0 and isProgressRequest(e)) { + match requestHeight(e) { + | Some(h) => h == acc.maxDecided + 1 + | None => true + } + } else true + val newMax = match e { + | ReqDecided(d) => d.proposal.height + | _ => acc.maxDecided + } + { maxDecided: newMax, ok: check } + ).ok + ) + + /// @guarantor component + /// @category ordering + /// @scope per-node + // heightAdvanceRequiresDecision: A node's consensus height only advances + // after a decision at the previous height. + // + // When the height increases between progress requests, the earlier height + // must have been decided first. This prevents height jumps without + // decisions (e.g., StartedRound(1,0) → StartedRound(2,0) with no + // Decided(1) in between). + // + // Combined with decidedIsFinal (post-decision height is exactly h+1) + // and heightMonotonic (no regression), this fully constrains height + // progression: heights advance one at a time, only after deciding. + // + // Source: consensus.qnt — the state machine advances to h+1 only after + // deciding at h. driver.qnt — Decided triggers StartHeight(h+1). + pure def heightAdvanceRequiresDecision(s: ChannelState): bool = + s.mem.request_history.keys().forall(node => + s.mem.request_history.get(node).foldl( + { currentHeight: 0, maxDecided: 0, ok: true }, (acc, e) => + if (not(acc.ok)) acc + else + val newMaxDecided = match e { + | ReqDecided(d) => + if (d.proposal.height > acc.maxDecided) d.proposal.height + else acc.maxDecided + | _ => acc.maxDecided + } + // Track current height from progress requests. + // After Decided(h), the node advances to h+1. + if (isProgressRequest(e)) { + match e { + | ReqDecided(d) => + val h = d.proposal.height + 1 + if (acc.currentHeight > 0 and h > acc.currentHeight) + { currentHeight: h, maxDecided: newMaxDecided, + ok: acc.currentHeight <= newMaxDecided } + else + { currentHeight: h, maxDecided: newMaxDecided, ok: true } + | _ => match requestHeight(e) { + | Some(h) => + if (acc.currentHeight > 0 and h > acc.currentHeight) + { currentHeight: h, maxDecided: newMaxDecided, + ok: acc.currentHeight <= newMaxDecided } + else + { currentHeight: h, maxDecided: newMaxDecided, ok: true } + | None => { ...acc, maxDecided: newMaxDecided } + } + } + } else { ...acc, maxDecided: newMaxDecided } + ).ok + ) + + /// @guarantor component + /// @category ordering + /// @scope per-node + // receivedProposalNotToProposer: A node does not receive its own proposal + // via ReceivedProposal. + // + // The proposer learns its proposal through GetValue. Other nodes learn it + // through ReceivedProposal. Malachite never sends a proposal back to the + // node that created it. + // + // Source: msgs.rs — ReceivedProposalPart is delivered to non-proposer nodes. + pure def receivedProposalNotToProposer(s: ChannelState): bool = + s.mem.request_history.keys().forall(node => + val hist = s.mem.request_history.get(node) + hist.indices().forall(i => + match hist[i] { + | ReqReceivedProposal(rp) => rp.proposal.proposer != node + | _ => true + } + ) + ) + + /// @guarantor component + /// @category ordering + /// @scope global + // syncedValueIsDecided: ProcessSyncedValue carries a proposal that was + // decided at that height. + // + // The sync protocol delivers decided values. A synced proposal must match + // the authoritative decision for its height. + // + // Source: msgs.rs — ProcessSyncedValue delivers a decided block for + // catch-up. The value comes from the sync protocol which retrieves + // decided blocks from other nodes. + pure def syncedValueIsDecided(s: ChannelState): bool = + s.mem.request_history.keys().forall(node => + val hist = s.mem.request_history.get(node) + hist.indices().forall(i => + match hist[i] { + | ReqProcessSyncedValue(sv) => + val p = sv.proposal + s.disk.decisions.has(p.height) and s.disk.decisions.get(p.height) == p + | _ => true + } + ) + ) + + /// @guarantor component + /// @category ordering + /// @scope per-node + // syncRequiresStartedRound: ProcessSyncedValue(h) requires a prior + // StartedRound(h, _) at the same height. Malachite always enters a round + // (via start_height → StartedRound) before sync can deliver values for + // that height. A node cannot receive a synced value for a height it hasn't + // started consensus on. + // + // Source: Malachite start_height.rs — start_height always emits + // StartedRound(h, 0) before any other requests at height h. + pure def syncRequiresStartedRound(s: ChannelState): bool = + s.mem.request_history.keys().forall(node => + // Scan left to right: track heights where StartedRound has been seen. + // On ProcessSyncedValue(h), check StartedRound(h, _) preceded it. Cost: O(n). + s.mem.request_history.get(node).foldl({ startedHeights: Set(), ok: true }, (acc, e) => + if (not(acc.ok)) acc + else match e { + | ReqStartedRound(sr) => + { ...acc, startedHeights: acc.startedHeights.union(Set(sr.height)) } + | ReqProcessSyncedValue(sv) => + { ...acc, ok: acc.startedHeights.contains(sv.proposal.height) } + | _ => acc + } + ).ok + ) + + /// @guarantor component + /// @category ordering + /// @scope per-node + // syncIsIrrevocable: After ProcessSyncedValue(h), no StartedRound or + // GetValue requests can occur at the same height h. Once Malachite enters + // the sync path for a height, it stays in sync until deciding — it does + // not fall back to normal consensus rounds. + // + // In the implementation, once Malachite detects it is behind and receives + // a synced value, timeouts are effectively disabled for that height. + // The next step is always Decided, followed by height advancement (which + // cancels all timeouts via CancelAllTimeouts + ResetTimeouts). + // + // Source: Malachite core-consensus sync.rs — on_value_response processes + // the commit certificate immediately. start_height.rs — CancelAllTimeouts + // on height advancement. timeout.rs — stale timeouts are ignored + // (round mismatch check). + pure def syncIsIrrevocable(s: ChannelState): bool = + s.mem.request_history.keys().forall(node => + // Scan left to right: track heights where ProcessSyncedValue has been seen. + // If StartedRound or GetValue appears at a synced height, fail. Cost: O(n). + s.mem.request_history.get(node).foldl({ syncedHeights: Set(), ok: true }, (acc, e) => + if (not(acc.ok)) acc + else match e { + | ReqProcessSyncedValue(sv) => + { ...acc, syncedHeights: acc.syncedHeights.union(Set(sv.proposal.height)) } + | ReqStartedRound(sr) => + { ...acc, ok: not(acc.syncedHeights.contains(sr.height)) } + | ReqGetValue(gv) => + { ...acc, ok: not(acc.syncedHeights.contains(gv.height)) } + | _ => acc + } + ).ok + ) + + /// @guarantor component + /// @category ordering + /// @scope per-node + // roundsConsecutiveWithinHeight: Within the same height, StartedRound + // requests have consecutive rounds (exactly +1), and the first round at + // each height is 0. + // + // Consensus starts each height at round 0. Rounds advance by exactly 1 + // via timeout. A node never skips rounds within normal operation. + // Histories are per-session (cleared on fault). + // + // Strictly stronger than "strictly increasing": prevents round gaps + // (e.g., round 0 → round 3). Subsumes the previous + // roundsIncreasingWithinHeight. + // + // Source: consensus.qnt — timeout increments round by 1. driver.qnt — + // each height starts at round 0. + pure def roundsConsecutiveWithinHeight(s: ChannelState): bool = + s.mem.request_history.keys().forall(node => + // Scan left to right: track the last round seen per height. + // First StartedRound at a height must be round 0. Each subsequent + // one must be exactly previous + 1. Cost: O(n). + s.mem.request_history.get(node).foldl({ lastRound: Map(), ok: true }, (acc, e) => + if (not(acc.ok)) acc + else match e { + | ReqStartedRound(sr) => + if (acc.lastRound.has(sr.height)) { + val prev = acc.lastRound.get(sr.height) + { ok: sr.round == prev + 1, + lastRound: acc.lastRound.put(sr.height, sr.round) } + } else { + { ok: sr.round == 0, + lastRound: acc.lastRound.put(sr.height, sr.round) } + } + | _ => acc + } + ).ok + ) + + /// @guarantor component + /// @category ordering + /// @scope per-node + // decidedRequiresDeliveredProposal: Before Decided(p), Malachite must + // have delivered p to the node. The delivery path determines whether + // StartedRound is also required: + // + // - Sync path: ProcessSyncedValue(p) preceded Decided(p). + // No StartedRound required — the node is catching up. + // + // - Normal path: the proposal was delivered via ReceivedProposal(p) or + // GetValue(p.h, p.r) as proposer, AND StartedRound(p.height, p.round) + // preceded Decided(p). Without round skips, consecutive round + // progression guarantees the node went through StartedRound(h, r) + // for the proposal's round. + // + // In the implementation, Decided contains only a certificate (2f+1 vote + // proof), not the proposal itself. Malachite guarantees the proposal + // has been delivered before sending the decision certificate. + // Histories are per-session (cleared on fault). + // + // Source: Malachite driver — proposals are gossiped to all nodes, and the + // proposer builds its value via GetValue. + pure def decidedRequiresDeliveredProposal(s: ChannelState): bool = + s.mem.request_history.keys().forall(node => + s.mem.request_history.get(node).foldl({ + // Proposals delivered via ProcessSyncedValue (sync path) + syncDelivered: Set(), + // Proposals delivered via ReceivedProposal (normal path) + receivedProposals: Set(), + // (h, r) where this node was asked to build a value (proposer path) + proposedRounds: Set(), + // (h, r) where StartedRound was seen + startedRounds: Set(), + ok: true, + }, (acc, e) => + if (not(acc.ok)) acc + else match e { + | ReqStartedRound(sr) => + { ...acc, startedRounds: acc.startedRounds.union(Set((sr.height, sr.round))) } + | ReqGetValue(gv) => + { ...acc, proposedRounds: acc.proposedRounds.union(Set((gv.height, gv.round))) } + | ReqReceivedProposal(rp) => + { ...acc, receivedProposals: acc.receivedProposals.union(Set(rp.proposal)) } + | ReqProcessSyncedValue(sv) => + { ...acc, syncDelivered: acc.syncDelivered.union(Set(sv.proposal)) } + | ReqDecided(d) => + val p = d.proposal + // Sync path: no StartedRound required + val viaSynced = acc.syncDelivered.contains(p) + // Normal path: proposal delivered AND StartedRound(h, r) preceded + val viaProposer = acc.proposedRounds.contains((p.height, p.round)) + and p.proposer == node + val viaReceived = acc.receivedProposals.contains(p) + val normalDelivered = viaProposer or viaReceived + val roundStarted = acc.startedRounds.contains((p.height, p.round)) + { ...acc, ok: viaSynced or (normalDelivered and roundStarted) } + | _ => acc + } + ).ok + ) + + /// @guarantor component + /// @category ordering + /// @scope global + // receivedProposalExists: Every ReceivedProposal request references a + // proposal that was previously created via GetValue. + // + // Malachite gossips proposals between nodes, but only proposals that + // actually exist (were built by some proposer). A ReceivedProposal for + // a non-existent proposal would indicate a fabrication bug. + // + // Source: Malachite driver — proposals are gossiped after being built + // by the proposer via GetValue. Only existing proposals are forwarded. + pure def receivedProposalExists(s: ChannelState): bool = + s.mem.request_history.keys().forall(node => + s.mem.request_history.get(node).foldl(true, (ok, e) => + ok and match e { + | ReqReceivedProposal(rp) => rp.proposal.in(s.disk.all_proposals) + | _ => true + } + ) + ) + + /// @guarantor component + /// @category ordering + /// @scope global + // proposerConsistency: For each (height, round), all StartedRound requests + // across all nodes declare the same proposer. + // + // Proposer selection is deterministic — every node in the network is told + // the same proposer for a given round. This catches bugs where different + // nodes receive conflicting proposer assignments. + // + // Cost: O(nodes × history_length). + pure def proposerConsistency(s: ChannelState): bool = { + val proposersByRound: (Height, Round) -> Set[Node] = + s.mem.request_history.keys().fold(Map(), (acc, node) => + s.mem.request_history.get(node).foldl(acc, (m, e) => + match e { + | ReqStartedRound(sr) => + val key = (sr.height, sr.round) + val existing = if (m.has(key)) m.get(key) else Set() + m.put(key, existing.union(Set(sr.proposer))) + | _ => m + } + ) + ) + proposersByRound.keys().forall(k => proposersByRound.get(k).size() <= 1) + } + + // Combined ordering properties + pure def ordering(s: ChannelState): bool = and { + heightsPositive(s), + consensusReadyFirst(s), + getValueAfterStartedRound(s), + getValueUnique(s), + proposerConsistency(s), + heightMonotonic(s), + decidedIsFinal(s), + heightAdvanceRequiresDecision(s), + receivedProposalNotToProposer(s), + receivedProposalExists(s), + syncedValueIsDecided(s), + syncRequiresStartedRound(s), + syncIsIrrevocable(s), + roundsConsecutiveWithinHeight(s), + decidedRequiresDeliveredProposal(s), + } + + // =========================================================================== + // SERVER GUARANTEES (Emerald → responses) + // =========================================================================== + // + // Obligations on the responses Emerald sends back to Malachite. These are + // predominantly liveness obligations ("the application eventually responds + // with a correct value") with some safety mixed in (e.g., #3 requires + // response fields match the request). Stated informally — to be formalized + // as checkable properties in future work. + // + // 1. On ConsensusReady: the application MUST reply with a starting height + // and validator set. + // + // 2. On StartedRound: the application MUST reply immediately with any + // known values for this round (or empty). Needed for crash recovery. + // + // 3. On GetValue: the application MUST reply with a proposed value within + // the timeout duration. The proposal's height, round, and proposer + // fields MUST match the GetValue request (height, round, node). + // The payload is the application's choice. + // + // 4. On Decided: the application MUST reply with Next (start next height + // or restart current height). If no reply, consensus stalls. + // + // 5. On GetDecidedValue: the application MUST reply with the decided + // value if available, or None. + // + // 6. On ProcessSyncedValue: the application MUST reply with the decoded + // value, or None. + + // --- Formal application safety properties --- + + /// @guarantor application + /// @category safety + /// @scope per-node + // consensusReadyResponse: The application's reply to ConsensusReady has + // a starting height >= 1. + // + // Consensus starts at height 1 or higher. Height 0 is never a valid + // starting point. The generator enforces this as a guard on + // sendConsensusReady; this property makes it an explicit application + // guarantee checkable independently of any generator. + // + // Source: Malachite start_height.rs — start_height is called with the + // height returned by the application. Consensus rejects height 0. + pure def consensusReadyResponse(s: ChannelState): bool = + s.mem.request_history.keys().forall(node => + s.mem.request_history.get(node).foldl(true, (ok, e) => + ok and match e { + | ReqConsensusReady(cr) => cr.respStartHeight >= 1 + | _ => true + } + ) + ) + + // =========================================================================== + // ENVIRONMENT ASSUMPTIONS + // =========================================================================== + // + // External conditions required for both component and application + // guarantees to hold. Not obligations of either side. + // + // 7. At most f validators are faulty, where n >= 3f+1. + // + // 8. The network eventually delivers messages between correct validators. + // + // 9. All validators have equal voting power. The quorum threshold + // (strictly more than 2/3 of node count) assumes this. With + // non-uniform voting power, quorumDecision would need the validator + // set's total voting power instead of nNodes. + + // =========================================================================== + // CLIENT GUARANTEES: LIVENESS (semi-formal) + // =========================================================================== + // + // Under the environment assumptions above: + // + // - For every height h, eventually Decided(h) is sent to all correct nodes. + // + // - The timeout mechanism (Propose -> Prevote -> Precommit -> skip round) + // ensures progress across rounds even when the proposer is faulty. + // + // - A correct proposer in a synchronous round leads to a decision. + // + // These are not checked as invariants (they require fairness constraints). + // The reference generator produces finite traces that demonstrate progress + // but does not prove liveness in general. +} diff --git a/specs/channel_api_generator.qnt b/specs/channel_api_generator.qnt new file mode 100644 index 00000000..3b0f1a7c --- /dev/null +++ b/specs/channel_api_generator.qnt @@ -0,0 +1,684 @@ +// -*- mode: Bluespec; -*- + +// ============================================================================= +// Channel API Reference Generator (DRAFT) +// ============================================================================= +// +// A minimal state machine that produces valid Channel API message sequences. +// Verified against channel_api_contract.qnt. +// +// This is NOT the full Malachite consensus spec. It models only the observable +// behavior at the Channel API boundary — just enough state to produce messages +// in the correct order with correct safety properties (agreement, validity). +// +// Consumers (e.g., Emerald) compose with this generator instead of writing +// ad-hoc listen_* functions that guess at Malachite's behavior. +// +// Design: +// - Per-node state tracks the phase in the Channel API lifecycle +// - Global state tracks decisions (for agreement) and proposals (for validity) +// - Actions correspond to Channel API messages from Malachite to the app +// - Ordering is enforced by the state machine structure (phase transitions) +// - Safety is enforced by global state constraints +// - All contract properties are checked via contractInv at every step +// - Fault injection: nodeCrash (lose all state) and nodeRestart (preserve +// disk state) clear the node's request history and reset to Unstarted +// +// State follows the disk/mem convention from faults.qnt: +// - Disk: maxDecided (survives restart) +// - Mem: phase, height, round, deliveredProposals, getValueSent (reset on fault) +// - Request histories are mem state (cleared on fault, current session only) +// +// Phase transitions: +// Unstarted ──sendConsensusReady──────────────> Started +// Started ──sendStartedRound────────────────> InRound +// InRound ──sendStartedRoundAfterTimeout─────> InRound (new round, same height) +// InRound ──sendDecided─────────────────────> Started (height h+1) +// InRound ──sendProcessSyncedValue──────────> Syncing +// Syncing ──sendProcessSyncedValue──────────> Syncing +// Syncing ──sendDecided─────────────────────> Started (height h+1) +// * ──nodeCrash──────────────────────────> Unstarted (all state lost) +// * ──nodeRestart────────────────────────> Unstarted (disk preserved) + +module channel_api_generator { + import basicSpells.* from "spells/basicSpells" + import rareSpells.* from "spells/rareSpells" + import faults.* from "faults" + import channel_api_contract.* from "channel_api_contract" + + // =========================================================================== + // CONFIGURATION + // =========================================================================== + + const NODES: List[Node] + + // Proposer selection — provided by the application (e.g., Emerald). + // In the real system, the application defines this via the Malachite + // Context trait. The generator (modeling Malachite) is parameterized + // over it rather than defining it. + const proposer_for: (Height, Round) => Node + + // Max height the generator will explore (bounds the trace length) + pure val MAX_HEIGHT = 4 + + // Max round per height (bounds timeout exploration) + pure val MAX_ROUND = 3 + + // =========================================================================== + // PER-NODE STATE (disk/mem split) + // =========================================================================== + + // Lifecycle phases for a node's view of the Channel API. + // These model the sequence of messages a node receives from Malachite. + // + // Unstarted + // → [ConsensusReady] → + // Started + // → [StartedRound(h, r)] → + // InRound + // → [GetValue(h, r)] if proposer → + // InRound (value proposed) + // → [Decided(h, v)] → + // Started (height h+1) + // → ... + // + // InRound + // → [Timeout(h, r)] → + // Started (same height, round r+1) + // + type Phase = + | Unstarted // Before ConsensusReady + | Started // ConsensusReady received, ready for StartedRound + | InRound // StartedRound received, consensus in progress + | Syncing // Receiving synced values (catch-up) + + // Disk state: survives restart, lost on crash + type GenDiskState = { + // Latest height decided by this node. Since decisions are strictly + // sequential, the max decided height fully characterizes all decided + // heights. Prevents sendDecided and sendProcessSyncedValue from firing + // twice for the same (node, height). + maxDecided: Height, + } + + // Mem state: cleared on any fault (crash or restart) + type GenMemState = { + phase: Phase, + height: Height, + round: Round, + // Proposals Malachite has delivered to this node via GetValue (proposer), + // ReceivedProposal (gossip), or ProcessSyncedValue (sync). Guards + // sendDecided — a node can only decide on a proposal it has received. + deliveredProposals: Set[Proposal], + // Which (height, round) have had GetValue sent to this node. + // Prevents duplicate GetValue for the same (h, r). + getValueSent: Set[(Height, Round)], + } + + type GenNodeState = { + disk: GenDiskState, + mem: GenMemState, + } + + pure val initGenDisk: GenDiskState = { + maxDecided: 0, + } + + pure val initGenMem: GenMemState = { + phase: Unstarted, + height: 0, + round: 0, + deliveredProposals: Set(), + getValueSent: Set(), + } + + pure val initGenNode: GenNodeState = { + disk: initGenDisk, + mem: initGenMem, + } + + // =========================================================================== + // TRACE ENTRY (for lastEntry observation / MBT integration) + // =========================================================================== + // + // Since faults are no longer part of ChannelRequest, we need a separate + // type to represent what happened in the last step (channel message or fault). + + type TraceEntry = + | ChannelMsg(ChannelRequest) + | FaultMsg(FaultEvent) + + // =========================================================================== + // GLOBAL STATE + // =========================================================================== + + // Per-node Channel API state (disk/mem split per node) + var nodeStates: Node -> GenNodeState + + // All proposals made via GetValue (for validity checking) + var proposals: Set[Proposal] + + // Authoritative decisions: at most one per height. + // Used as a guard in sendDecided (ensuring the same proposal is decided + // across nodes) and by the contract's validity and syncedValueIsDecided + // properties. The contract's agreement property checks request histories + // directly, so it catches disagreement even if this map were buggy. + var decisions: Height -> Proposal + + // Per-node request history for the current session (mem state). + // Cleared on fault — contains only current-session requests. + var requestHistory: Node -> List[ChannelRequest] + + // Per-proposal: which nodes have been delivered this specific proposal + // and are in a position to vote on it. Keyed by Proposal (not Height) + // because different rounds at the same height can have different + // proposals from different proposers. + // Disk state — a vote is cast when a proposal is received; this doesn't + // un-happen on restart or crash (the network saw it). + // Updated by: + // - sendGetValue: proposer participates at their height + // - sendReceivedProposal: at current height only (future-height + // proposals are pending — not voted on yet) + // - sendStartedRound: retroactive — if a node already has proposals + // for this height (received at a prior height as pending), count + // the node as support now that it has reached this height + // NOT updated by sendProcessSyncedValue — already decided, quorum was met. + // Guards sendDecided: requires > 2/3 support before any node can decide. + var proposalSupport: Proposal -> Set[Node] + + // Last trace entry emitted (for trace observation / MBT integration). + // None in the initial state (no entry yet). + var lastEntry: Option[{ node: Node, entry: TraceEntry }] + + // =========================================================================== + // ACTIONS: Channel API messages from Malachite to the application + // =========================================================================== + + // Implementation details vs contract properties: + // Guards and behaviors in these actions fall into four categories: + // + // 1. CONTRACT ENFORCEMENT: directly enforces a named contract property + // 2. IMPLEMENTATION DETAILS: internal state machine, not observable by contract + // 3. OPTIMIZATIONS: search space bounds, not required by contract + // 4. ASSUMPTIONS: application guarantee constraints on nondeterministic inputs + // + // Inline comments below mark guards with [CONTRACT], [IMPL], [OPT], or + // [ASSUMPTION] to clarify their purpose. + + // --- ConsensusReady --- + // Malachite has initialized and is ready. Sent once per node. + // The application replies with a starting height (replyStartHeight). + // + // Source: AppMsg::ConsensusReady in msgs.rs + action sendConsensusReady(node: Node, replyStartHeight: Height): bool = { + val ns = nodeStates.get(node) + all { + // [CONTRACT] heightsPositive + consensusReadyResponse: all request heights >= 1 + replyStartHeight >= 1, + // [IMPL] phase progression: must be Unstarted before ConsensusReady + ns.mem.phase == Unstarted, + val req = ReqConsensusReady({ respStartHeight: replyStartHeight }) + all { + // state update + nodeStates' = nodeStates.set(node, { + ...ns, + mem: { ...ns.mem, phase: Started, height: replyStartHeight, round: 0 }, + }), + proposals' = proposals, + decisions' = decisions, + proposalSupport' = proposalSupport, + // bookkeeping + lastEntry' = Some({ node: node, entry: ChannelMsg(req) }), + requestHistory' = requestHistory.set(node, + requestHistory.get(node).append(req) + ), + } + } + } + + // --- StartedRound --- + // The first round at a new height. Sent after ConsensusReady (height 1) or + // after Decided (next height). Guard: phase == Started. + // For timeout-driven round bumps at the same height, see sendStartedRoundAfterTimeout. + // + // Source: AppMsg::StartedRound in msgs.rs + action sendStartedRound(node: Node): bool = { + val ns = nodeStates.get(node) + val h = ns.mem.height + // [CONTRACT] quorumDecision: retroactive support — if the node already has + // proposals for this height (received at a prior height as pending), count + // it as support now that the node is at this height. + val pendingAtHeight = ns.mem.deliveredProposals.filter(p => p.height == h) + val updatedSupport = pendingAtHeight.fold(proposalSupport, (acc, p) => + val existing = if (acc.has(p)) acc.get(p) else Set() + acc.put(p, existing.union(Set(node))) + ) + all { + // [IMPL] phase progression: must be Started (after ConsensusReady or Decided) + ns.mem.phase == Started, + // [OPT] search space bound: limits trace exploration + ns.mem.height <= MAX_HEIGHT, + val proposer = proposer_for(ns.mem.height, ns.mem.round) + val req = ReqStartedRound({ + height: ns.mem.height, + round: ns.mem.round, + proposer: proposer, + }) + all { + // state update + nodeStates' = nodeStates.set(node, { + ...ns, + mem: { ...ns.mem, phase: InRound }, + }), + proposals' = proposals, + decisions' = decisions, + proposalSupport' = updatedSupport, + // bookkeeping + lastEntry' = Some({ node: node, entry: ChannelMsg(req) }), + requestHistory' = requestHistory.set(node, + requestHistory.get(node).append(req) + ), + } + } + } + + // --- GetValue --- + // Request the application to build a value for consensus to propose. + // Only sent to the proposer for (height, round). At most once per + // (node, height, round). The application replies with a proposal + // (replyProposal). The generator validates (height, round, proposer) + // but the payload is the application's choice. + // + // Source: AppMsg::GetValue in msgs.rs + action sendGetValue(node: Node, replyProposal: Proposal): bool = { + val ns = nodeStates.get(node) + all { + // [CONTRACT] getValueUnique: at most once per (height, round) + not(ns.mem.getValueSent.contains((ns.mem.height, ns.mem.round))), + // [ASSUMPTION] application guarantee #3: reply matches current (height, round, proposer). + // The payload is the application's choice — not constrained here. + replyProposal.height == ns.mem.height, + replyProposal.round == ns.mem.round, + replyProposal.proposer == node, + // [IMPL] phase progression: must be InRound (after StartedRound) + ns.mem.phase == InRound, + // [CONTRACT] getValueAfterStartedRound: only the proposer receives GetValue + // Note: placed after [IMPL] phase check to avoid calling proposer_for at height 0 + node == proposer_for(ns.mem.height, ns.mem.round), + val req = ReqGetValue({ + height: ns.mem.height, + round: ns.mem.round, + }) + // [CONTRACT] quorumDecision: proposer supports their own proposal + val existing = if (proposalSupport.has(replyProposal)) proposalSupport.get(replyProposal) else Set() + all { + // state update + proposals' = proposals.union(Set(replyProposal)), + nodeStates' = nodeStates.set(node, { + ...ns, + mem: { + ...ns.mem, + getValueSent: ns.mem.getValueSent.union(Set((ns.mem.height, ns.mem.round))), + deliveredProposals: ns.mem.deliveredProposals.union(Set(replyProposal)), + }, + }), + decisions' = decisions, + // Proposer supports their specific proposal + proposalSupport' = proposalSupport.put(replyProposal, existing.union(Set(node))), + // bookkeeping + lastEntry' = Some({ node: node, entry: ChannelMsg(req) }), + requestHistory' = requestHistory.set(node, + requestHistory.get(node).append(req) + ), + } + } + } + + // --- ReceivedProposal --- + // Inform a non-proposer node about a proposal. + // The proposal must exist (was created via GetValue). + // Can arrive in any phase after ConsensusReady — including before + // StartedRound (Emerald buffers as pending) or during sync. + // + // Source: AppMsg::ReceivedProposalPart in msgs.rs (simplified) + action sendReceivedProposal(node: Node, proposal: Proposal): bool = { + val ns = nodeStates.get(node) + all { + // [CONTRACT] receivedProposalExists: proposal was created via GetValue + proposal.in(proposals), + // [CONTRACT] receivedProposalNotToProposer: nodes don't receive their own proposals + proposal.proposer != node, + // [IMPL] phase progression: must have started (after ConsensusReady) + ns.mem.phase != Unstarted, + // [OPT] stale proposal filtering: real network can deliver stale proposals + // (Emerald drops them). Not enforced by the contract. + proposal.height >= ns.mem.height, + val req = ReqReceivedProposal({ proposal: proposal }) + // [CONTRACT] quorumDecision: only count support when the node is at the + // proposal's height. Future-height proposals are pending — not voted on yet. + val atCurrentHeight = proposal.height == ns.mem.height + val existing = if (proposalSupport.has(proposal)) proposalSupport.get(proposal) else Set() + all { + // state update + nodeStates' = nodeStates.set(node, { + ...ns, + mem: { + ...ns.mem, + deliveredProposals: ns.mem.deliveredProposals.union(Set(proposal)), + }, + }), + proposals' = proposals, + decisions' = decisions, + proposalSupport' = if (atCurrentHeight) + proposalSupport.put(proposal, existing.union(Set(node))) + else + proposalSupport, + // bookkeeping + lastEntry' = Some({ node: node, entry: ChannelMsg(req) }), + requestHistory' = requestHistory.set(node, + requestHistory.get(node).append(req) + ), + } + } + } + + // --- Decided --- + // Consensus has decided on a value. The decided proposal must exist. + // + // AGREEMENT ENFORCEMENT: If a decision already exists for this height, + // we must decide on the same proposal. If no decision exists yet, we + // record this as the authoritative decision for this height. + // + // Source: AppMsg::Decided in msgs.rs + // Safety: corresponds to AgreementInv in statemachineAsync.qnt + action sendDecided(node: Node, proposal: Proposal): bool = { + val ns = nodeStates.get(node) + all { + // [CONTRACT] validity: decided proposal must exist (was created via GetValue) + proposal.in(proposals), + // [CONTRACT] decidedRequiresDeliveredProposal: Malachite delivered the proposal + ns.mem.deliveredProposals.contains(proposal), + // [CONTRACT] agreement: if already decided for this height, must be the same + not(decisions.has(ns.mem.height)) or decisions.get(ns.mem.height) == proposal, + // [CONTRACT] quorumDecision: strictly more than 2/3 of nodes must have + // received this specific proposal before any node can decide on it + proposalSupport.has(proposal), + proposalSupport.get(proposal).size() * 3 > NODES.length() * 2, + // [IMPL] phase progression: must be InRound or Syncing + or { ns.mem.phase == InRound, ns.mem.phase == Syncing }, + // [IMPL] height match: decision must be for the current height + proposal.height == ns.mem.height, + // [IMPL] prevent duplicate: not already decided at this node for this height + ns.disk.maxDecided < ns.mem.height, + // [OPT] future round filtering: restricts generator to avoid decisions + // referencing a future round (contract's roundsConsecutiveWithinHeight + // already constrains this in the normal path) + proposal.round <= ns.mem.round, + // state update + // Record the decision + decisions' = decisions.put(ns.mem.height, proposal), + // Move to next height + val req = ReqDecided({ proposal: proposal }) + all { + // state update + nodeStates' = nodeStates.set(node, { + disk: { ...ns.disk, maxDecided: ns.mem.height }, + mem: { ...ns.mem, phase: Started, height: ns.mem.height + 1, round: 0 }, + }), + proposals' = proposals, + proposalSupport' = proposalSupport, + // bookkeeping + lastEntry' = Some({ node: node, entry: ChannelMsg(req) }), + requestHistory' = requestHistory.set(node, + requestHistory.get(node).append(req) + ), + } + } + } + + // --- StartedRound after timeout --- + // Consensus timed out waiting for progress in the current round. + // Timeout is internal to Malachite — the application only sees the + // resulting StartedRound at the next round. + action sendStartedRoundAfterTimeout(node: Node): bool = { + val ns = nodeStates.get(node) + all { + // [IMPL] phase progression: must be InRound (timeout during a round) + ns.mem.phase == InRound, + // [OPT] search space bound: limits round exploration + ns.mem.round < MAX_ROUND, + // [OPT] search space bound: limits height exploration + ns.mem.height <= MAX_HEIGHT, + val newRound = ns.mem.round + 1 + val proposer = proposer_for(ns.mem.height, newRound) + val req = ReqStartedRound({ + height: ns.mem.height, + round: newRound, + proposer: proposer, + }) + all { + // state update + nodeStates' = nodeStates.set(node, { + ...ns, + mem: { ...ns.mem, phase: InRound, round: newRound }, + }), + proposals' = proposals, + decisions' = decisions, + proposalSupport' = proposalSupport, + // bookkeeping + lastEntry' = Some({ node: node, entry: ChannelMsg(req) }), + requestHistory' = requestHistory.set(node, + requestHistory.get(node).append(req) + ), + } + } + } + + // --- ProcessSyncedValue --- + // A synced value arrives from the network (catch-up scenario). + // The proposal must have been decided at some other node. + // + // Source: AppMsg::ProcessSyncedValue in msgs.rs + action sendProcessSyncedValue(node: Node): bool = { + val ns = nodeStates.get(node) + all { + // [CONTRACT] syncedValueIsDecided: synced value must have been decided + decisions.has(ns.mem.height), + // [IMPL] phase progression: must be InRound or Syncing + or { ns.mem.phase == InRound, ns.mem.phase == Syncing }, + // [IMPL] prevent duplicate: not already decided at this node for this height + ns.disk.maxDecided < ns.mem.height, + val proposal = decisions.get(ns.mem.height) + val req = ReqProcessSyncedValue({ proposal: proposal }) + all { + // state update + nodeStates' = nodeStates.set(node, { + ...ns, + mem: { + ...ns.mem, + phase: Syncing, + deliveredProposals: ns.mem.deliveredProposals.union(Set(proposal)), + }, + }), + proposals' = proposals, + decisions' = decisions, + // No support update — proposal is already decided, quorum was already met. + proposalSupport' = proposalSupport, + // bookkeeping + lastEntry' = Some({ node: node, entry: ChannelMsg(req) }), + requestHistory' = requestHistory.set(node, + requestHistory.get(node).append(req) + ), + } + } + } + + // --- GetDecidedValue --- + // Malachite asks the application for a previously decided value (sync). + // + // Source: AppMsg::GetDecidedValue in msgs.rs + action sendGetDecidedValue(node: Node, height: Height): bool = { + val ns = nodeStates.get(node) + all { + // [OPT] heights start at 1: real Malachite can query any height + height >= 1, + // [OPT] only query past heights: restricts traces to reduce state space + height < ns.mem.height, + val req = ReqGetDecidedValue({ height: height }) + all { + // state update + nodeStates' = nodeStates, + proposals' = proposals, + decisions' = decisions, + proposalSupport' = proposalSupport, + // bookkeeping + lastEntry' = Some({ node: node, entry: ChannelMsg(req) }), + requestHistory' = requestHistory.set(node, + requestHistory.get(node).append(req) + ), + } + } + } + + // =========================================================================== + // FAULT ACTIONS: crash and restart + // =========================================================================== + // + // Faults clear the node's request history (mem state) instead of appending + // ReqFault. This keeps histories short (bounded by session length) and + // eliminates session-boundary logic from all contract properties. + + // --- Node Crash --- + // Node lost all state: reset disk + mem, clear request history. + action nodeCrash(node: Node): bool = { + val ns = nodeStates.get(node) + all { + // [IMPL] must be running: can't crash a node that hasn't started + ns.mem.phase != Unstarted, + // state update + nodeStates' = nodeStates.set(node, initGenNode), + proposals' = proposals, + decisions' = decisions, + // Disk state — votes already cast don't un-happen + proposalSupport' = proposalSupport, + // bookkeeping + requestHistory' = requestHistory.set(node, []), + lastEntry' = Some({ node: node, entry: FaultMsg(Crash) }), + } + } + + // --- Node Restart --- + // Node restarted: preserve disk state, reset mem, clear request history. + // Decisions survive on disk (maxDecided preserved). Malachite re-initializes + // and will re-deliver proposals and ConsensusReady. + action nodeRestart(node: Node): bool = { + val ns = nodeStates.get(node) + all { + // [IMPL] must be running: can't restart a node that hasn't started + ns.mem.phase != Unstarted, + // state update + nodeStates' = nodeStates.set(node, { disk: ns.disk, mem: initGenMem }), + proposals' = proposals, + decisions' = decisions, + // Disk state — votes already cast don't un-happen + proposalSupport' = proposalSupport, + // bookkeeping + requestHistory' = requestHistory.set(node, []), + lastEntry' = Some({ node: node, entry: FaultMsg(Restart) }), + } + } + + // =========================================================================== + // PASSTHROUGH ACTION (for composition) + // =========================================================================== + + // Stutter action: no Channel API activity this step. + // Exported for composition steps that only interact with Engine API. + action genUnchanged: bool = all { + nodeStates' = nodeStates, + proposals' = proposals, + decisions' = decisions, + requestHistory' = requestHistory, + proposalSupport' = proposalSupport, + lastEntry' = lastEntry, + } + + // =========================================================================== + // INITIALIZATION + // =========================================================================== + + action init = { + val nodes = NODES.toSet() + all { + nodeStates' = nodes.mapBy(n => initGenNode), + proposals' = Set(), + decisions' = Map(), + requestHistory' = nodes.mapBy(n => []), + proposalSupport' = Map(), + lastEntry' = None, + } + } + + // =========================================================================== + // STEP: nondeterministically pick a node and a valid action + // =========================================================================== + + action step = { + val nodes = NODES.toSet() + nondet node = nodes.oneOf() + any { + sendConsensusReady(node, 1), + sendStartedRound(node), + val ns = nodeStates.get(node) + sendGetValue(node, { + height: ns.mem.height, + round: ns.mem.round, + proposer: node, + payload: proposals.size(), + }), + nondet proposal = proposals.oneOf() + sendReceivedProposal(node, proposal), + nondet proposal = proposals.oneOf() + sendDecided(node, proposal), + sendProcessSyncedValue(node), + nondet height = 1.to(MAX_HEIGHT).oneOf() + sendGetDecidedValue(node, height), + nodeCrash(node), + nodeRestart(node), + } + } + + // =========================================================================== + // CONTRACT PROPERTIES (checked as invariants) + // =========================================================================== + + // Build the observable ChannelState for contract checking. + // Only the fields used by contract properties are included. + // Internal generator state (nodeStates) is not exposed — it exists + // only for the generator's own guards. + val channelState: ChannelState = { + disk: { + all_proposals: proposals, + decisions: decisions, + proposal_support: proposalSupport, + }, + mem: { + request_history: requestHistory, + }, + } + + // Safety invariants from the contract + val agreementInv = agreement(channelState) + val validityInv = validity(channelState) + val safetyInv = safety(channelState, NODES.length()) + + // Ordering invariants from the contract + val orderingInv = ordering(channelState) + + // Server (Emerald) guarantees from the contract + val applicationGuaranteesInv = applicationGuarantees(channelState) + + // Client (Malachite) guarantees: safety + ordering + val contractInv = componentGuarantees(channelState, NODES.length()) + +} diff --git a/specs/channel_api_generator_test.qnt b/specs/channel_api_generator_test.qnt new file mode 100644 index 00000000..da8615f2 --- /dev/null +++ b/specs/channel_api_generator_test.qnt @@ -0,0 +1,28 @@ +// -*- mode: Bluespec; -*- + +// Test module for channel_api_generator: instantiates with concrete nodes +// and checks the contract invariant via simulation. +// +// 4 nodes: with equal voting power and the >2/3 quorum threshold, 3 out of 4 +// nodes must support a proposal before any node can decide. This allows +// traces where one node crashes and the remaining 3 still make progress. + +module channel_api_generator_test { + import channel_api_contract.* from "channel_api_contract" + + pure val NODES = List("node1", "node2", "node3", "node4") + + pure def test_proposer_for(height: Height, round: Round): Node = + NODES[(height - 1 + round) % NODES.length()] + + import channel_api_generator( + NODES = NODES, + proposer_for = test_proposer_for, + ) as gen from "channel_api_generator" + + // Re-export generator state for simulation + action init = gen::init + action step = gen::step + val contractInv = gen::contractInv + val applicationGuaranteesInv = gen::applicationGuaranteesInv +} diff --git a/specs/emerald_with_both_generators.qnt b/specs/emerald_with_both_generators.qnt new file mode 100644 index 00000000..650aa5ae --- /dev/null +++ b/specs/emerald_with_both_generators.qnt @@ -0,0 +1,699 @@ +// -*- mode: Bluespec; -*- + +// ============================================================================= +// Composition: Emerald ↔ Malachite (Channel API) ↔ Reth (Engine API) +// +// Boundaries: +// gen (channel_api_generator) — Malachite → Emerald [nondeterministic] +// reth (engine_api_generator) — Emerald → Reth [reactive] +// +// Invariants checked here: +// emerald_agreement, consensus_height_gt_last_decided_height, no_pending_at_current_height +// (Emerald-only) +// completion (Emerald ↔ Malachite) +// head_tracks_consensus, validated_before_decided (Emerald ↔ Reth) +// +// Step mapping — Channel API request → Engine API work queue: +// stepConsensusReady → gen::sendConsensusReady → reth::rethStart +// stepStartedRound → gen::sendStartedRound → reth::rethUnchanged +// stepGetValue → gen::sendGetValue → [CallBuildRequest, CallGetPayload, FinalizeGetValue] +// stepReceivedProposal → gen::sendReceivedProposal → [CallNewPayload, FinalizeReceivedProposal] +// stepDecided → gen::sendDecided → [CallNewPayload, CallHeadUpdate, FinalizeDecided] +// stepProcessSyncedValue → gen::sendProcessSyncedValue → reth::rethUnchanged +// stepAdvanceWork → dispatches head WorkItem from pendingWork queue +// ============================================================================= + +module emerald_with_both_generators { + import basicSpells.* from "spells/basicSpells" + import rareSpells.* from "spells/rareSpells" + import channel_api_contract.* from "channel_api_contract" + import engine_api_contract as eac from "engine_api_contract" + + const NODES: List[Node] + + // Proposer selection — application-defined, passed to the channel generator. + pure def proposer_for(height: Height, round: Round): Node = + NODES[(height - 1 + round) % NODES.length()] + + import channel_api_generator(NODES = NODES, proposer_for = proposer_for) as gen from "channel_api_generator" + import engine_api_generator(NODES = NODES) as reth from "engine_api_generator" + + // =========================================================================== + // EMERALD-SPECIFIC TYPES (disk/mem split, extended with Engine API tracking) + // =========================================================================== + + type AppPhase = + | Uninitialized // Before ConsensusReady + | Ready // After ConsensusReady or Decided, before StartedRound + | Working // After StartedRound + | Syncing // After ProcessSyncedValue + + // --------------------------------------------------------------------------- + // Non-atomic Engine API types + // --------------------------------------------------------------------------- + + // Specifies which Engine API primitive action to call. + // One variant per primitive action, carrying required parameters. + // + // TODO: EngineCallSpec and dispatchEngineCall are boilerplate — mechanically + // derivable from the generator's action signatures. They belong in (or next + // to) the engine generator as reusable consumer infrastructure, and are + // candidates for language-level automation (Quint could auto-generate a call + // enum + dispatcher when a spec imports a generator). + type EngineCallSpec = + | CallBuildRequest // respondBuildRequest(node) + | CallGetPayload // respondGetPayload(node) + | CallNewPayload({ block: eac::Block }) // respondNewPayload(node, block) + | CallHeadUpdate({ headHash: eac::BlockHash, + headHeight: eac::Height }) // respondHeadUpdate(node, headHash, headHeight) + + // A single unit of work in the node's processing queue. + // EngineCall: external calls to Reth (generic, any consumer would have the same). + // FinalizeX: local Emerald state updates after engine work completes (app-specific). + // Generalizes naturally: an app talking to multiple external components would + // add variants for each (e.g., MempoolCall, OracleCall) interleaved with local logic. + // + // TODO: Cleaner state separation between Emerald and generators. + // Currently Emerald reads reth::rethStates directly in several places: + // (a) Block construction: reads reth.disk.chain for parentHash at enqueue time + // (stepReceivedProposal, stepDecided) + // (b) Validity pre-check: computePayloadStatus guard at enqueue time (stepDecided) + // (c) Cross-component data flow: FinalizeReceivedProposal reads reth state to get + // validation result from preceding CallNewPayload + // (d) Phase check: stepConsensusReady checks reth phase to decide rethStart + // To eliminate this coupling: + // - EngineCall dispatch could write responses into Emerald's own state (e.g., + // lastResponse: Option[EngineResponse]), so handlers read local state not + // generator state. This fixes (c). + // - Block construction could become a work item itself (e.g., + // BuildValidationBlock) that reads Reth state and enqueues CallNewPayload. + // This fixes (a) and (b). + // - Phase check could use an observable flag published by the generator. Fixes (d). + type WorkItem = + | EngineCall(EngineCallSpec) + | FinalizeGetValue({ proposal: Proposal }) + | FinalizeReceivedProposal({ proposal: Proposal, block: eac::Block }) + | FinalizeDecided({ proposal: Proposal, block: eac::Block }) + + // --------------------------------------------------------------------------- + // Emerald node state + // --------------------------------------------------------------------------- + + // Disk state: survives restart, lost on crash + type EmeraldDiskState = { + decided_proposals: Set[Proposal], // committed decisions + last_decided_height: Height, + last_decided_payload: Option[Payload], + // Engine API tracking (persisted) + latest_block: Option[eac::Block], // Latest committed block + } + + // Mem state: cleared on any fault (crash or restart) + type EmeraldMemState = { + phase: AppPhase, + consensus_height: Height, + consensus_round: Round, + pending_proposals: Set[Proposal], // height > consensus_height + undecided_proposals: Set[Proposal], // height == consensus_height + // Engine API tracking (ephemeral) + head_block_hash: eac::BlockHash, // Current execution head + validated_cache: Set[eac::BlockHash], // Cached validation results + // Sequential work queue: engine API calls + local handlers + pendingWork: List[WorkItem], + } + + type EmeraldNodeState = { + disk: EmeraldDiskState, + mem: EmeraldMemState, + } + + // =========================================================================== + // STATE + // =========================================================================== + + var emeraldState: Node -> EmeraldNodeState + + // =========================================================================== + // INITIALIZATION + // =========================================================================== + + pure val initEmeraldDisk: EmeraldDiskState = { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + latest_block: None, + } + + pure val initEmeraldMem: EmeraldMemState = { + phase: Uninitialized, + consensus_height: 0, + consensus_round: 0, + pending_proposals: Set(), + undecided_proposals: Set(), + head_block_hash: 0, + validated_cache: Set(), + pendingWork: [], + } + + pure val initEmeraldNode: EmeraldNodeState = { + disk: initEmeraldDisk, + mem: initEmeraldMem, + } + + action init = all { + gen::init, + reth::init, + emeraldState' = NODES.toSet().mapBy(n => initEmeraldNode), + } + + // =========================================================================== + // HANDLERS: Emerald's response to Channel API messages + // =========================================================================== + + // ConsensusReady: Initialize node. + action handleConsensusReady(node: Node, startHeight: Height): bool = { + val s = emeraldState.get(node) + all { + s.mem.phase == Uninitialized, + emeraldState' = emeraldState.set(node, { + ...s, + mem: { ...s.mem, phase: Ready, consensus_height: startHeight, consensus_round: 0 }, + }), + } + } + + // StartedRound: Enter new consensus round. + action handleStartedRound(node: Node, height: Height, round: Round): bool = { + val s = emeraldState.get(node) + val promoted = s.mem.pending_proposals.filter(p => p.height == height) + val remaining = s.mem.pending_proposals.exclude(promoted) + emeraldState' = emeraldState.set(node, { + ...s, + mem: { + ...s.mem, + phase: Working, + consensus_height: height, + consensus_round: round, + pending_proposals: remaining, + undecided_proposals: s.mem.undecided_proposals.union(promoted), + }, + }) + } + + // Update Emerald state after Engine API build (respondBuildRequest + respondGetPayload). + // Adds the proposer's proposal to undecided_proposals. + action finalizeGetValue(node: Node, proposal: Proposal, remaining: List[WorkItem]): bool = { + val s = emeraldState.get(node) + emeraldState' = emeraldState.set(node, { + ...s, + mem: { + ...s.mem, + undecided_proposals: s.mem.undecided_proposals.union(Set(proposal)), + pendingWork: remaining, + }, + }) + } + + // Update Emerald state after Engine API validation (respondNewPayload). + // Adds proposal to undecided_proposals and caches validation result. + // Only called for current-height proposals — stale and future proposals + // are filtered at enqueue time in stepReceivedProposal. + action finalizeReceivedProposal(node: Node, proposal: Proposal, blockHash: eac::BlockHash, valid: bool, remaining: List[WorkItem]): bool = { + val s = emeraldState.get(node) + emeraldState' = emeraldState.set(node, { + ...s, + mem: { + ...s.mem, + undecided_proposals: s.mem.undecided_proposals.union(Set(proposal)), + validated_cache: if (valid) s.mem.validated_cache.union(Set(blockHash)) else s.mem.validated_cache, + pendingWork: remaining, + }, + }) + } + + // Update Emerald state after Engine API finalization (respondNewPayload + respondHeadUpdate). + // Commits decided proposal to disk, advances to next height, updates head. + action finalizeDecided(node: Node, proposal: Proposal, decidedBlock: eac::Block, remaining: List[WorkItem]): bool = { + val s = emeraldState.get(node) + val nextHeight = proposal.height + 1 + emeraldState' = emeraldState.set(node, { + disk: { + ...s.disk, + last_decided_height: proposal.height, + last_decided_payload: Some(proposal.payload), + decided_proposals: s.disk.decided_proposals.union(Set(proposal)), + latest_block: Some(decidedBlock), + }, + mem: { + phase: Ready, + consensus_height: nextHeight, + consensus_round: 0, + pending_proposals: s.mem.pending_proposals, + undecided_proposals: Set(), + head_block_hash: decidedBlock.hash, + validated_cache: s.mem.validated_cache.union(Set(decidedBlock.hash)), + pendingWork: remaining, + }, + }) + } + + // ProcessSyncedValue: Catch-up with a synced decided value. + // No Engine API calls — validation deferred to Decided. + action handleProcessSyncedValue(node: Node, proposal: Proposal): bool = { + val s = emeraldState.get(node) + emeraldState' = emeraldState.set(node, { + ...s, + mem: { ...s.mem, phase: Syncing, undecided_proposals: s.mem.undecided_proposals.union(Set(proposal)) }, + }) + } + + // GetDecidedValue: Query for past decided value (no Emerald state change) + action handleGetDecidedValue(node: Node, height: Height): bool = + emeraldState' = emeraldState + + // NodeCrash: Full reset — all state lost (disk + mem). + action handleNodeCrash(node: Node): bool = + emeraldState' = emeraldState.set(node, initEmeraldNode) + + // NodeRestart: Preserve disk state, reset mem. + action handleNodeRestart(node: Node): bool = { + val s = emeraldState.get(node) + emeraldState' = emeraldState.set(node, { disk: s.disk, mem: initEmeraldMem }) + } + + // =========================================================================== + // PROPOSAL CONSTRUCTION (same as emerald_with_generator) + // =========================================================================== + + pure def buildProposal(s: EmeraldNodeState, node: Node): Proposal = { + val existing = s.mem.undecided_proposals.find(p => + p.height == s.mem.consensus_height and p.round == s.mem.consensus_round + ) + match existing { + | Some(p) => p + | None => { + height: s.mem.consensus_height, + round: s.mem.consensus_round, + proposer: node, + payload: s.mem.consensus_height * 100 + s.mem.consensus_round, + } + } + } + + // =========================================================================== + // BLOCK CONSTRUCTION (for Engine API calls) + // =========================================================================== + + // Block for validating a received/decided proposal + pure def validationBlock(proposal: Proposal, parentHash: eac::BlockHash): eac::Block = { + height: proposal.height, + hash: proposal.payload * 10 + proposal.height, + parentHash: parentHash, + } + + // =========================================================================== + // WORK QUEUE PROCESSING + // =========================================================================== + + // Dispatch a single Engine API call to the appropriate Reth primitive action. + // TODO: boilerplate — see EngineCallSpec TODO above. + action dispatchEngineCall(node: Node, call: EngineCallSpec): bool = + match call { + | CallBuildRequest => reth::respondBuildRequest(node) + | CallGetPayload => reth::respondGetPayload(node) + | CallNewPayload(np) => reth::respondNewPayload(node, np.block) + | CallHeadUpdate(hu) => reth::respondHeadUpdate(node, hu.headHash, hu.headHeight) + } + + // Process the next work item from the queue. + // Pops the head, dispatches it, and advances the queue in one step. + action stepAdvanceWork(node: Node): bool = { + val s = emeraldState.get(node) + val remaining = s.mem.pendingWork.tail() + all { + s.mem.pendingWork.length() > 0, + match s.mem.pendingWork.head() { + | EngineCall(call) => + all { + dispatchEngineCall(node, call), + gen::genUnchanged, + emeraldState' = emeraldState.set(node, { + ...s, + mem: { ...s.mem, pendingWork: remaining }, + }), + } + | FinalizeGetValue(gv) => + all { + reth::rethUnchanged, + gen::genUnchanged, + finalizeGetValue(node, gv.proposal, remaining), + } + | FinalizeReceivedProposal(rp) => + // Cross-component data flow: read Reth state to get the validation + // result from the preceding CallNewPayload (which wrote to rethStates). + val rns = reth::rethStates.get(node) + val valid = reth::computePayloadStatus(rns, rp.block) == eac::Valid + all { + reth::rethUnchanged, + gen::genUnchanged, + finalizeReceivedProposal(node, rp.proposal, rp.block.hash, valid, remaining), + } + | FinalizeDecided(d) => + all { + reth::rethUnchanged, + gen::genUnchanged, + finalizeDecided(node, d.proposal, d.block, remaining), + } + } + } + } + + // =========================================================================== + // COMPOSED STEPS + // =========================================================================== + + // ConsensusReady: Channel API only. Also start Reth if offline. + // TODO: Model bootstrap logic on ConsensusReady. + // The real implementation (bootstrap.rs) has two initialization paths: + // 1. Genesis (no stored blocks): initialize_state_from_genesis fetches the + // genesis block from Reth, sets latest_block, and starts consensus at + // genesis height + 1. + // 2. Existing block (restart with stored decisions): initialize_state_from_existing_block + // compares Reth's latest height against Emerald's stored height. If Reth + // is behind, replays decided blocks via newPayload + forkchoiceUpdated per + // height until aligned. Then sends a final forkchoiceUpdated to set the head, + // and starts consensus at stored height + 1. + // Currently the spec skips all of this — handleConsensusReady just sets phase + // to Ready without initializing latest_block or aligning Reth's chain state. + // This means: + // - latest_block is None after ConsensusReady (genesis block not fetched) + // - Reth's head may be inconsistent with Emerald's disk after restart + // - No Engine API replay calls are modeled (newPayload + FCU per replayed height) + // - head_tracks_consensus invariant is only incidentally satisfied + action stepConsensusReady(node: Node): bool = { + val startHeight = emeraldState.get(node).disk.last_decided_height + 1 + val rns = reth::rethStates.get(node) + all { + emeraldState.get(node).mem.pendingWork.length() == 0, + gen::sendConsensusReady(node, startHeight), + handleConsensusReady(node, startHeight), + // Start Reth if not already running + + if (rns.mem.phase == reth::Offline) reth::rethStart(node) + else reth::rethUnchanged, + } + } + + // StartedRound: Channel API only, no Engine API calls. + // TODO: Add Engine API validation for promoted proposals + // Currently, pending proposals are promoted to undecided WITHOUT validation via + // newPayload. In the real implementation, StartedRound validates pending proposals + // at the new height before promoting them. This causes: + // 1. Missing Engine API calls (not matching implementation) + // 2. validated_before_decided invariant is trivial (validation happens in stepDecided) + // 3. Later validation failures that could be caught earlier + // + // Fix: Add validatePromotedProposals(node, promoted) before handleStartedRound + // to validate pending proposals via newPayload (mem only, no disk chain updates). + // See plan file: /home/dev/.claude/plans/shimmering-bubbling-breeze.md + action stepStartedRound(node: Node): bool = { + val s = emeraldState.get(node).mem + all { + emeraldState.get(node).mem.pendingWork.length() == 0, + any { + all { + gen::sendStartedRound(node), + handleStartedRound(node, s.consensus_height, s.consensus_round), + }, + all { + gen::sendStartedRoundAfterTimeout(node), + handleStartedRound(node, s.consensus_height, s.consensus_round + 1), + }, + }, + reth::rethUnchanged, + } + } + + // GetValue: Receive Channel API event, enqueue [BuildRequest, GetPayload] + // for Engine API processing. Handler fires during finalization. + action stepGetValue(node: Node): bool = { + val s = emeraldState.get(node) + val proposal = buildProposal(s, node) + all { + s.mem.pendingWork.length() == 0, + gen::sendGetValue(node, proposal), + reth::rethUnchanged, + emeraldState' = emeraldState.set(node, { + ...s, + mem: { ...s.mem, + // Work items don't pass data to each other directly — they communicate + // through observable component state. The queue guarantees ordering so + // reads see prior writes. E.g., CallGetPayload reads the pendingBuild + // that CallBuildRequest wrote to rethStates; FinalizeGetValue could read + // the built block from reth::rethStates.get(node).disk.chain if needed + // (as FinalizeReceivedProposal already does for validation). + pendingWork: [ + EngineCall(CallBuildRequest), + EngineCall(CallGetPayload), + FinalizeGetValue({ proposal: proposal }), + ], + }, + }), + } + } + + // ReceivedProposal: Receive Channel API event. For current-height proposals, + // enqueue [NewPayload] for Engine API validation. For future-height proposals, + // handle immediately (buffer as pending, no Engine API needed). + action stepReceivedProposal(node: Node, proposal: Proposal): bool = { + val s = emeraldState.get(node) + + val rns = reth::rethStates.get(node) + val parentHash = if (rns.disk.chain.has(proposal.height - 1)) + rns.disk.chain.get(proposal.height - 1).hash + else + -1 + val block: eac::Block = validationBlock(proposal, parentHash) + all { + s.mem.pendingWork.length() == 0, + gen::sendReceivedProposal(node, proposal), + reth::rethUnchanged, + emeraldState' = if (proposal.height < s.mem.consensus_height) + // Stale proposal — drop it, no Engine API call. + // Currently unreachable (generator guards height >= node.height), + // but defensive for when independent crashes are modeled. + emeraldState + else if (proposal.height == s.mem.consensus_height) + // Current height — enqueue Engine API validation + local handler + emeraldState.set(node, { ...s, mem: { ...s.mem, + pendingWork: [ + EngineCall(CallNewPayload({ block: block })), + FinalizeReceivedProposal({ proposal: proposal, block: block }), + ], + }}) + else + // Future height — buffer as pending, no Engine API needed + emeraldState.set(node, { ...s, mem: { ...s.mem, + pending_proposals: s.mem.pending_proposals.union(Set(proposal)), + }}), + } + } + + // Decided: Receive Channel API event, enqueue [NewPayload, HeadUpdate] + // for Engine API processing. Handler fires during finalization. + // Guard: block must be valid (prevents enqueueing uncompleable work). + action stepDecided(node: Node, proposal: Proposal): bool = { + val s = emeraldState.get(node) + + val rns = reth::rethStates.get(node) + val parentHash = if (rns.disk.chain.has(proposal.height - 1)) + rns.disk.chain.get(proposal.height - 1).hash + else + -1 + val block: eac::Block = validationBlock(proposal, parentHash) + all { + s.mem.pendingWork.length() == 0, + // Guard: block must be valid (parent chain linkage) + reth::computePayloadStatus(rns, block) == eac::Valid, + gen::sendDecided(node, proposal), + reth::rethUnchanged, + emeraldState' = emeraldState.set(node, { ...s, mem: { ...s.mem, + pendingWork: [ + EngineCall(CallNewPayload({ block: block })), + EngineCall(CallHeadUpdate({ headHash: block.hash, headHeight: block.height })), + FinalizeDecided({ proposal: proposal, block: block }), + ], + }}), + } + } + + // ProcessSyncedValue: Channel API only, no Engine API calls. + action stepProcessSyncedValue(node: Node): bool = { + val h = emeraldState.get(node).mem.consensus_height + val proposal = gen::decisions.get(h) + all { + emeraldState.get(node).mem.pendingWork.length() == 0, + gen::sendProcessSyncedValue(node), + handleProcessSyncedValue(node, proposal), + reth::rethUnchanged, + } + } + + // GetDecidedValue: Channel API only, no Engine API calls. + action stepGetDecidedValue(node: Node, height: Height): bool = all { + emeraldState.get(node).mem.pendingWork.length() == 0, + gen::sendGetDecidedValue(node, height), + handleGetDecidedValue(node, height), + reth::rethUnchanged, + } + + // NodeCrash: Both generators + Emerald state reset. + // No idle guard — faults can occur mid-processing (clears pendingWork). + // + // TODO: Model independent process crashes. + // Malachite+Emerald run in one process, Reth in another. Should replace + // stepNodeCrash/stepNodeRestart with 4 independent actions: + // + // - stepEmeraldCrash/Restart: gen::nodeCrash/Restart + handleNodeCrash/Restart, + // reth::rethUnchanged. Emerald+Malachite fail, Reth keeps running. + // + // - stepRethCrash: reth::rethCrash, gen::genUnchanged. Must also clear + // Emerald's pendingWork (engine calls can't execute against Offline Reth, + // and rethStart requires empty queue — deadlock otherwise) and + // validated_cache (references blocks no longer in Reth's chain). + // + // - stepRethRestart: reth::rethRestart, gen::genUnchanged. Must clear + // Emerald's pendingWork (pendingBuild is gone, queued CallGetPayload + // would fail). validated_cache can stay (disk chain preserved). + // + // Invariant impact: + // - head_tracks_consensus: after Reth crash, headHeight resets to 0 while + // last_decided_height stays. Must gate on reth phase != Offline. + // - validated_before_decided: after Reth crash, all evidence (mem + disk) + // is gone. Must gate on reth phase != Offline. + // - chainContinuity (reth contract): uses disk state only, robust to all crash types. + // + // No "both crash" convenience action needed — stepEmeraldCrash followed by + // stepRethCrash in consecutive steps achieves the same result. + action stepNodeCrash(node: Node): bool = all { + gen::nodeCrash(node), + reth::rethCrash(node), + handleNodeCrash(node), + } + + // NodeRestart: Both generators + Emerald state reset (disk preserved). + // No idle guard — faults can occur mid-processing (clears pendingWork). + // TODO: See stepNodeCrash TODO — same independent crash split applies. + action stepNodeRestart(node: Node): bool = all { + gen::nodeRestart(node), + reth::rethRestart(node), + handleNodeRestart(node), + } + + action step = { + nondet node = NODES.toSet().oneOf() + any { + stepConsensusReady(node), + stepStartedRound(node), + stepGetValue(node), + nondet proposal = gen::proposals.oneOf() + stepReceivedProposal(node, proposal), + nondet proposal = gen::proposals.oneOf() + stepDecided(node, proposal), + stepProcessSyncedValue(node), + nondet height = 1.to(gen::MAX_HEIGHT).oneOf() + stepGetDecidedValue(node, height), + stepAdvanceWork(node), + stepNodeCrash(node), + stepNodeRestart(node), + } + } + + // =========================================================================== + // INVARIANTS + // =========================================================================== + + // Invariants are organized by scope: + // - Emerald-only: properties of Emerald's own state + // - Emerald ↔ Malachite: properties relating Emerald state to Channel API generator state + // - Emerald ↔ Reth: properties relating Emerald state to Engine API generator state + // The generators also expose contractInv (gen::contractInv, reth::contractInv) + // which check the full contract properties. These can be uncommented below + // to verify the composition doesn't violate either contract. + + // --- Emerald-only invariants --- + + // Safety: All nodes agree on decided blocks. + val emerald_agreement = + NODES.toSet().forall(n1 => + NODES.toSet().forall(n2 => + val st1 = emeraldState.get(n1) + val st2 = emeraldState.get(n2) + st1.disk.last_decided_height == st2.disk.last_decided_height implies + st1.disk.last_decided_payload == st2.disk.last_decided_payload + ) + ) + + // Consistency: consensus height > last decided height after initialization. + val consensus_height_gt_last_decided_height = + NODES.toSet().forall(n => + val st = emeraldState.get(n) + st.mem.consensus_height > 0 implies + st.mem.consensus_height > st.disk.last_decided_height + ) + + // Lifecycle: No pending proposals at current height. + val no_pending_at_current_height = + NODES.toSet().forall(n => + val st = emeraldState.get(n) + st.mem.consensus_height > 0 implies + st.mem.pending_proposals.forall(p => p.height > st.mem.consensus_height) + ) + + // --- Cross-boundary invariants (Emerald ↔ Malachite) --- + + // Completeness: All nodes know all decided proposals. + val completion = + NODES.toSet().forall(n => + val st = emeraldState.get(n) + 1.to(st.disk.last_decided_height).forall(height => + gen::decisions.has(height) and gen::decisions.get(height).in(st.disk.decided_proposals) + ) + ) + + // --- Cross-boundary invariants (Emerald ↔ Reth) --- + + // head_tracks_consensus: After Decided(h), Reth's head height >= h. + val head_tracks_consensus = + NODES.toSet().forall(n => + val st = emeraldState.get(n) + val rns = reth::rethStates.get(n) + st.disk.last_decided_height > 0 and st.mem.phase != Uninitialized implies + rns.disk.headHeight >= st.disk.last_decided_height + ) + + // validated_before_decided: Every decided block was validated. + // Checks mem (validated_cache, reth validatedBlocks) and disk (reth chain). + // After restart, mem evidence is cleared but the block persists in Reth's chain. + val validated_before_decided = + NODES.toSet().forall(n => + val st = emeraldState.get(n) + val rns = reth::rethStates.get(n) + match st.disk.latest_block { + | Some(b) => + // Mem evidence (current session) + st.mem.validated_cache.contains(b.hash) or + rns.mem.validatedBlocks.contains(b.hash) or + // Disk evidence (survives restart) + rns.disk.chain.keys().exists(h => rns.disk.chain.get(h).hash == b.hash) + | None => true + } + ) + + // --- Generator contract invariants --- + // Expensive: full contract property scans per step. Uncomment for + // full verification that the composition doesn't violate either contract. + // val channelContractInv = gen::contractInv + // val engineContractInv = reth::contractInv + +} diff --git a/specs/emerald_with_both_generators_test.qnt b/specs/emerald_with_both_generators_test.qnt new file mode 100644 index 00000000..5e8b7bd0 --- /dev/null +++ b/specs/emerald_with_both_generators_test.qnt @@ -0,0 +1,19 @@ +// -*- mode: Bluespec; -*- + +// Test module for emerald_with_both_generators: instantiates with concrete +// nodes and checks invariants via simulation. +// +// 4 nodes: allows progress with one crashed node (3/4 > 2/3 quorum). + +module emerald_with_both_generators_test { + import rareSpells.* from "spells/rareSpells" + import emerald_with_both_generators(NODES = List("node1", "node2", "node3", "node4")).* from "emerald_with_both_generators" + + // Liveness: every node eventually responds to ConsensusReady and starts + // consensus. Checked as bounded liveness over finite traces — semi-formal. + // Requires fair scheduling (the simulator's oneOf provides probabilistic + // fairness). Full liveness proof would require export to TLA+. + temporal allNodesStartConsensus = NODES.toSet().forall(node => + eventually(emeraldState.get(node).mem.phase != Uninitialized) + ) +} diff --git a/specs/emerald_with_both_generators_witnesses.qnt b/specs/emerald_with_both_generators_witnesses.qnt new file mode 100644 index 00000000..64f56ddc --- /dev/null +++ b/specs/emerald_with_both_generators_witnesses.qnt @@ -0,0 +1,404 @@ +// -*- mode: Bluespec; -*- + +// ============================================================================= +// Witness invariants for emerald_with_both_generators (three-way composition) +// ============================================================================= +// +// IMPORTANT: These are REACHABILITY CHECKS via negated invariants. +// Random simulation tries to VIOLATE these invariants. +// +// Violation = scenario is reachable ✓ (spec is expressive) +// No violation = scenario may be unreachable (investigate spec constraints) +// +// Usage: +// quint run emerald/specs/emerald_with_both_generators_witnesses.qnt \ +// --main=emerald_with_both_generators_witnesses \ +// --invariant= \ +// --max-steps= --max-samples=1000 --backend=rust +// +// Expected: Invariant VIOLATION (proves scenario is reachable) +// +// Note on step counts: The three-way composition has a work-queue model +// (one Engine API call dispatched per step). End-to-end scenarios need +// longer traces than comparable two-boundary specs. Empirical minimums +// per witness are documented in each run command. +// +// ============================================================================= +// Witness Catalog (8 liveness witnesses) +// ============================================================================= +// +// Fast (20-50 steps) — reach reliably with random simulation: +// • canReachWorking - At least one node enters Working phase +// • canAdvanceRound - At least one node reaches consensus round >= 1 +// • canHaveUndecidedProposal - At least one node has an undecided proposal +// +// Medium (200 steps) — reachable but require longer traces: +// • canReachSyncing - At least one node enters Syncing (sync path) +// • canReachDecision - At least one node decides at height >= 1 +// • canCommitBlock - At least one node commits a block to disk +// +// Hard (high step counts) — require targeted simulation or relaxation: +// • canDecideTwoHeights - At least one node decides at height >= 2 +// • canHavePendingProposal - At least one node buffers a future-height proposal +// +// Configuration: 4 nodes (same as emerald_with_both_generators_test) +// - Allows progress with one crashed node (3/4 > 2/3 quorum) +// ============================================================================= + +module emerald_with_both_generators_witnesses { + import basicSpells.* from "spells/basicSpells" + import rareSpells.* from "spells/rareSpells" + import emerald_with_both_generators(NODES = List("node1", "node2", "node3", "node4")).* from "emerald_with_both_generators" + + // =========================================================================== + // FAST WITNESSES (20-50 steps) + // =========================================================================== + + // ────────────────────────────────────────────────────────────────────────── + // Witness: canReachWorking + // ────────────────────────────────────────────────────────────────────────── + // Goal: At least one node enters the Working phase + // Rationale: Verifies the ConsensusReady → StartedRound path works. + // The Working phase means Emerald received StartedRound and is actively + // participating in a consensus round. Required for GetValue and + // ReceivedProposal to be processed. + // + // EXPECTED: Invariant VIOLATION (proves Working phase is reachable) + // + // Run: quint run emerald/specs/emerald_with_both_generators_witnesses.qnt \ + // --main=emerald_with_both_generators_witnesses \ + // --invariant=canReachWorking \ + // --max-steps=20 --max-samples=1000 --backend=rust + // ────────────────────────────────────────────────────────────────────────── + val canReachWorking: bool = + NODES.toSet().forall(n => emeraldState.get(n).mem.phase != Working) + + // ────────────────────────────────────────────────────────────────────────── + // Witness: canAdvanceRound + // ────────────────────────────────────────────────────────────────────────── + // Goal: At least one node reaches consensus round >= 1 (round timeout fired) + // Rationale: Verifies the timeout-triggered round advancement path works. + // When a round times out without a decision, Malachite increments the + // round and sends StartedRound(h, r+1). Exercises sendStartedRoundAfterTimeout + // in the generator and the roundsConsecutiveWithinHeight contract property. + // + // EXPECTED: Invariant VIOLATION (proves round advancement is reachable) + // + // Run: quint run emerald/specs/emerald_with_both_generators_witnesses.qnt \ + // --main=emerald_with_both_generators_witnesses \ + // --invariant=canAdvanceRound \ + // --max-steps=30 --max-samples=1000 --backend=rust + // ────────────────────────────────────────────────────────────────────────── + val canAdvanceRound: bool = + NODES.toSet().forall(n => emeraldState.get(n).mem.consensus_round < 1) + + // ────────────────────────────────────────────────────────────────────────── + // Witness: canHaveUndecidedProposal + // ────────────────────────────────────────────────────────────────────────── + // Goal: At least one node has an undecided proposal in its local set + // Rationale: Verifies the proposal reception pipeline. A node marks a + // proposal as "undecided" when it has been received for the current + // height (via ReceivedProposal + Engine API validation, or GetValue as + // proposer) but the height has not yet been decided. This is the + // intermediate liveness state between proposal arrival and commitment. + // + // EXPECTED: Invariant VIOLATION (proves undecided proposal state is reachable) + // + // Run: quint run emerald/specs/emerald_with_both_generators_witnesses.qnt \ + // --main=emerald_with_both_generators_witnesses \ + // --invariant=canHaveUndecidedProposal \ + // --max-steps=30 --max-samples=1000 --backend=rust + // ────────────────────────────────────────────────────────────────────────── + val canHaveUndecidedProposal: bool = + NODES.toSet().forall(n => emeraldState.get(n).mem.undecided_proposals == Set()) + + // =========================================================================== + // MEDIUM WITNESSES (200 steps) + // =========================================================================== + + // ────────────────────────────────────────────────────────────────────────── + // Witness: canReachSyncing + // ────────────────────────────────────────────────────────────────────────── + // Goal: At least one node enters the Syncing phase (ProcessSyncedValue) + // Rationale: Verifies the sync catch-up path is reachable. A node enters + // Syncing when it falls behind and receives a synced decided value from + // another node instead of participating in normal round consensus. + // Exercises syncRequiresStartedRound and syncIsIrrevocable contract properties. + // + // EXPECTED: Invariant VIOLATION (proves Syncing phase is reachable) + // + // Run: quint run emerald/specs/emerald_with_both_generators_witnesses.qnt \ + // --main=emerald_with_both_generators_witnesses \ + // --invariant=canReachSyncing \ + // --max-steps=200 --max-samples=2000 --backend=rust + // ────────────────────────────────────────────────────────────────────────── + val canReachSyncing: bool = + NODES.toSet().forall(n => emeraldState.get(n).mem.phase != Syncing) + + // ────────────────────────────────────────────────────────────────────────── + // Witness: canReachDecision + // ────────────────────────────────────────────────────────────────────────── + // Goal: At least one node decides at height >= 1 + // Rationale: Verifies the full three-way pipeline works end-to-end: + // ConsensusReady → StartedRound → GetValue (Engine API build) → + // ReceivedProposal (Engine API newPayload) → Decided → + // [newPayload + headUpdate + FinalizeDecided]. + // The most fundamental liveness check for the composition. + // + // Note: needs ~200 steps because the work-queue dispatches one Engine API + // call per transition, so a single decision takes ~20+ transitions even + // on a direct path. The random simulator needs room to explore. + // + // EXPECTED: Invariant VIOLATION (proves decision is reachable) + // + // Run: quint run emerald/specs/emerald_with_both_generators_witnesses.qnt \ + // --main=emerald_with_both_generators_witnesses \ + // --invariant=canReachDecision \ + // --max-steps=200 --max-samples=2000 --backend=rust + // ────────────────────────────────────────────────────────────────────────── + val canReachDecision: bool = + NODES.toSet().forall(n => emeraldState.get(n).disk.last_decided_height < 1) + + // ────────────────────────────────────────────────────────────────────────── + // Witness: canCommitBlock + // ────────────────────────────────────────────────────────────────────────── + // Goal: At least one node has latest_block set (a block committed to disk) + // Rationale: Verifies the complete Engine API finalization pipeline: + // Decided → enqueue [CallNewPayload, CallHeadUpdate, FinalizeDecided] → + // stepAdvanceWork × 3 → latest_block persisted to EmeraldDiskState. + // latest_block != None means a Reth block has been fully committed, + // Reth's head updated, and Emerald's disk state reflects the decision. + // Stronger than canReachDecision: checks the full finalization completes. + // + // EXPECTED: Invariant VIOLATION (proves block commitment is reachable) + // + // Run: quint run emerald/specs/emerald_with_both_generators_witnesses.qnt \ + // --main=emerald_with_both_generators_witnesses \ + // --invariant=canCommitBlock \ + // --max-steps=200 --max-samples=1000 --backend=rust + // ────────────────────────────────────────────────────────────────────────── + val canCommitBlock: bool = + NODES.toSet().forall(n => + match emeraldState.get(n).disk.latest_block { + | Some(_) => false + | None => true + } + ) + + // =========================================================================== + // HARD WITNESSES (require targeted simulation or relaxation) + // =========================================================================== + // + // These witnesses are valid reachability checks but are rarely found by + // pure random simulation because they require long sequential pipelines + // at low probability. They document correct spec behavior but may need + // /verify:debug-witness or manual trace construction to confirm. + + // ────────────────────────────────────────────────────────────────────────── + // Witness: canDecideTwoHeights + // ────────────────────────────────────────────────────────────────────────── + // Goal: At least one node decides at height >= 2 + // Rationale: Verifies the protocol can progress through multiple consecutive + // heights. Checks that decided_proposals accumulates, consensus_height + // advances after each decision, and the block chain grows (each block's + // parentHash links to the previous committed block). + // + // Hard to reach: requires completing the entire height-1 decision pipeline + // for multiple nodes (quorum), then the full height-2 pipeline. Each + // height requires ~20+ transitions; with 4 nodes the state space is large. + // The /verify:debug-witness skill can help relax constraints to find a path. + // + // EXPECTED: Invariant VIOLATION (proves multi-height progress is reachable) + // + // Run: quint run emerald/specs/emerald_with_both_generators_witnesses.qnt \ + // --main=emerald_with_both_generators_witnesses \ + // --invariant=canDecideTwoHeights \ + // --max-steps=500 --max-samples=10000 --backend=rust + // ────────────────────────────────────────────────────────────────────────── + val canDecideTwoHeights: bool = + NODES.toSet().forall(n => emeraldState.get(n).disk.last_decided_height < 2) + + // ────────────────────────────────────────────────────────────────────────── + // Witness: canHavePendingProposal + // ────────────────────────────────────────────────────────────────────────── + // Goal: At least one node buffers a future-height pending proposal + // Rationale: Verifies the proposal buffering path. When a node receives + // ReceivedProposal for a height > consensus_height, it stores it as + // "pending". Pending proposals are promoted to undecided by + // handleStartedRound when the node advances to that height. + // Exercises the pending_proposals lifecycle in Emerald state. + // + // Hard to reach: requires one node to be ahead at height h+1 (created a + // proposal there via GetValue) while another node is still at height h. + // Random simulation rarely creates this asymmetry without biased scheduling. + // The /verify:debug-witness skill can help find a targeted trace. + // + // EXPECTED: Invariant VIOLATION (proves pending proposal buffering is reachable) + // + // Run: quint run emerald/specs/emerald_with_both_generators_witnesses.qnt \ + // --main=emerald_with_both_generators_witnesses \ + // --invariant=canHavePendingProposal \ + // --max-steps=500 --max-samples=10000 --backend=rust + // ────────────────────────────────────────────────────────────────────────── + val canHavePendingProposal: bool = + NODES.toSet().forall(n => emeraldState.get(n).mem.pending_proposals == Set()) + + // =========================================================================== + // DEBUG ARTIFACTS (canDecideTwoHeights — kept as reference, do not run) + // =========================================================================== + // + // These were used during /verify:debug-witness analysis to pinpoint the + // blocker for canDecideTwoHeights. Kept as commented-out documentation. + // + // Findings summary: + // GW1 VIOLATED — one node CAN complete height-1 and advance to h=2 + // GW2 NOT VIOLATED — two nodes NEVER both complete height-1 (the blocker) + // GW3 VIOLATED — StartedRound at height 2 IS reachable + // GW4 NOT VIOLATED — no undecided proposal ever exists at height 2 + // + // Relaxed witness (= GW2) also NOT VIOLATED — confirms the blocker. + // + // Root cause: The random scheduler converges on one node finishing + // height-1 while the remaining nodes (including node2, the only valid + // proposer at h=2,r=0) never complete their height-1 pipelines. + // Without node2 deciding height-1, no quorum forms for height-2. + // This is a probabilistic trap, not a spec bug. + // + // To confirm reachability, use a biased/fair scheduler or manual trace. + // + // // GW1: Any node decides height 1 and advances (consensus_height >= 2) + // // Expected: VIOLATED — confirmed violated + // val witness_guard_1: bool = + // not(NODES.toSet().exists(n => + // emeraldState.get(n).disk.last_decided_height >= 1 and + // emeraldState.get(n).mem.consensus_height >= 2 + // )) + // + // // GW2 / canDecideTwoHeights_relaxed: Two different nodes both decide height 1 + // // Expected: VIOLATED — NOT VIOLATED (confirmed blocker) + // val witness_guard_2: bool = + // not(NODES.toSet().exists(n1 => + // NODES.toSet().exists(n2 => + // n1 != n2 and + // emeraldState.get(n1).disk.last_decided_height >= 1 and + // emeraldState.get(n2).disk.last_decided_height >= 1 + // ) + // )) + // + // // GW3: Any node in Working phase at consensus height 2 + // // Expected: VIOLATED — confirmed violated + // val witness_guard_3: bool = + // not(NODES.toSet().exists(n => + // emeraldState.get(n).mem.phase == Working and + // emeraldState.get(n).mem.consensus_height == 2 + // )) + // + // // GW4: Any node has undecided proposals at consensus height 2 + // // Expected: VIOLATED — NOT VIOLATED (pipeline stalls without quorum) + // val witness_guard_4: bool = + // not(NODES.toSet().exists(n => + // emeraldState.get(n).mem.consensus_height == 2 and + // emeraldState.get(n).mem.undecided_proposals != Set() + // )) + + // =========================================================================== + // MINIMAL TRACE: canReachDecision + // =========================================================================== + // + // Deterministic 16-step path to a height-1 decision on node1. + // node4 is uninvolved. node2 and node3 contribute to quorum but their + // Engine API work queues are not drained (not needed for the decision). + // + // Sequence: + // 1–3: ConsensusReady for node1/2/3 (Reth starts, consensus_height=1) + // 4–6: StartedRound(h=1,r=0,proposer=node1) to node1/2/3 (→ Working) + // 7–10: GetValue + 3×AdvanceWork on node1 + // CallBuildRequest: FCU(building=true) → payloadId=1 + // CallGetPayload: getPayload(1) → block{h=1,hash=1001} + // FinalizeGetValue: proposal{h=1,payload=100} → undecided + // 11–12: ReceivedProposal to node2, node3 (proposalSupport: node1+2+3 = 3/4 ✓) + // 13–16: Decided + 3×AdvanceWork on node1 + // CallNewPayload: newPayload(block{h=1}) → Valid + // CallHeadUpdate: FCU(headHash=1001) → Valid, head=1001 + // FinalizeDecided: last_decided_height=1, latest_block=Some(...) + // + // Run: quint test emerald/specs/emerald_with_both_generators_witnesses.qnt \ + // --main=emerald_with_both_generators_witnesses + // =========================================================================== + run minimalCanReachDecision = + init + .then(stepConsensusReady("node1")) + .then(stepConsensusReady("node2")) + .then(stepConsensusReady("node3")) + .then(stepStartedRound("node1")) + .then(stepStartedRound("node2")) + .then(stepStartedRound("node3")) + .then(stepGetValue("node1")) + .then(stepAdvanceWork("node1")) // CallBuildRequest + .then(stepAdvanceWork("node1")) // CallGetPayload + .then(stepAdvanceWork("node1")) // FinalizeGetValue + .then(stepReceivedProposal("node2", { height: 1, payload: 100, proposer: "node1", round: 0 })) + .then(stepReceivedProposal("node3", { height: 1, payload: 100, proposer: "node1", round: 0 })) + .then(stepDecided("node1", { height: 1, payload: 100, proposer: "node1", round: 0 })) + .then(stepAdvanceWork("node1")) // CallNewPayload + .then(stepAdvanceWork("node1")) // CallHeadUpdate + .then(stepAdvanceWork("node1")) // FinalizeDecided + .expect(not(canReachDecision)) + + // =========================================================================== + // BIASED STEP (canDecideTwoHeights) + // =========================================================================== + // + // The random simulator cannot find canDecideTwoHeights because it + // probabilistically starves nodes 2–4 at height-1, preventing the height-2 + // quorum from ever forming. This biased step corrects the distribution by + // restricting node selection: while any node has last_decided_height < 1, + // only behind nodes are eligible. Once all four nodes complete height-1, + // the step reverts to uniform random selection. + // + // Fault actions (stepNodeCrash, stepNodeRestart) are intentionally excluded: + // a crash resets last_decided_height to 0, re-adding the node to behindNodes + // and preventing the all-complete precondition from ever being satisfied. + // + // Run: + // quint run emerald/specs/emerald_with_both_generators_witnesses.qnt \ + // --main=emerald_with_both_generators_witnesses \ + // --step=biasedStep \ + // --invariant=canDecideTwoHeights \ + // --max-steps=500 --max-samples=1000 --backend=rust + // + // Expected: Invariant VIOLATION (proves two-height progress is reachable) + // =========================================================================== + // All proposals that any node has ever seen (undecided, pending, or decided). + // These are a subset of gen::proposals — valid inputs to stepReceivedProposal + // and stepDecided — but accessible without going through gen::. + // stepGetDecidedValue is omitted (needs gen::MAX_HEIGHT; not on the critical + // path to height-2). + pure def allKnownProposals = + NODES.toSet().fold(Set(), (acc, n) => + acc + .union(emeraldState.get(n).mem.undecided_proposals) + .union(emeraldState.get(n).mem.pending_proposals) + .union(emeraldState.get(n).disk.decided_proposals) + ) + + action biasedStep = { + val behindNodes = NODES.toSet().filter(n => + emeraldState.get(n).disk.last_decided_height < 1 + ) + val nodePool = if (behindNodes != Set()) behindNodes else NODES.toSet() + nondet node = nodePool.oneOf() + any { + stepConsensusReady(node), + stepStartedRound(node), + stepGetValue(node), + nondet proposal = allKnownProposals.oneOf() + stepReceivedProposal(node, proposal), + nondet proposal = allKnownProposals.oneOf() + stepDecided(node, proposal), + stepProcessSyncedValue(node), + stepAdvanceWork(node), + } + } + +} diff --git a/specs/emerald_with_generator.qnt b/specs/emerald_with_generator.qnt new file mode 100644 index 00000000..84f19f29 --- /dev/null +++ b/specs/emerald_with_generator.qnt @@ -0,0 +1,361 @@ +// -*- mode: Bluespec; -*- + +// ============================================================================= +// Composition: Emerald ↔ Malachite (Channel API) +// +// Boundaries: +// gen (channel_api_generator) — Malachite → Emerald [nondeterministic] +// +// Invariants checked here: +// emerald_agreement, consensus_height_gt_last_decided_height, completion +// no_pending_at_current_height +// +// Step mapping: +// stepConsensusReady → gen::sendConsensusReady + handleConsensusReady +// stepStartedRound → gen::sendStartedRound + handleStartedRound +// stepGetValue → gen::sendGetValue + handleGetValue +// stepReceivedProposal → gen::sendReceivedProposal + handleReceivedProposal +// stepDecided → gen::sendDecided + handleDecided +// stepProcessSyncedValue → gen::sendProcessSyncedValue + handleProcessSyncedValue +// ============================================================================= + +module emerald_with_generator { + import basicSpells.* from "spells/basicSpells" + import rareSpells.* from "spells/rareSpells" + import channel_api_contract.* from "channel_api_contract" + + const NODES: List[Node] + + // Proposer selection — application-defined, passed to the generator. + // Rotating proposer based on (height, round). + pure def proposer_for(height: Height, round: Round): Node = + NODES[(height - 1 + round) % NODES.length()] + + import channel_api_generator(NODES = NODES, proposer_for = proposer_for) as gen from "channel_api_generator" + + // =========================================================================== + // EMERALD-SPECIFIC TYPES (disk/mem split) + // =========================================================================== + + type AppPhase = + | Uninitialized // Before ConsensusReady + | Ready // After ConsensusReady or Decided, before StartedRound + | Working // After StartedRound + | Syncing // After ProcessSyncedValue + + // Disk state: survives restart, lost on crash + type EmeraldDiskState = { + decided_proposals: Set[Proposal], // committed decisions + last_decided_height: Height, + last_decided_payload: Option[Payload], + } + + // Mem state: cleared on any fault (crash or restart) + type EmeraldMemState = { + phase: AppPhase, + consensus_height: Height, + consensus_round: Round, + pending_proposals: Set[Proposal], // height > consensus_height, can't validate + undecided_proposals: Set[Proposal], // height == consensus_height, actionable + } + + type EmeraldNodeState = { + disk: EmeraldDiskState, + mem: EmeraldMemState, + } + + // =========================================================================== + // STATE + // =========================================================================== + + var emeraldState: Node -> EmeraldNodeState + + // =========================================================================== + // INITIALIZATION + // =========================================================================== + + pure val initEmeraldDisk: EmeraldDiskState = { + decided_proposals: Set(), + last_decided_height: 0, + last_decided_payload: None, + } + + pure val initEmeraldMem: EmeraldMemState = { + phase: Uninitialized, + consensus_height: 0, + consensus_round: 0, + pending_proposals: Set(), + undecided_proposals: Set(), + } + + pure val initEmeraldNode: EmeraldNodeState = { + disk: initEmeraldDisk, + mem: initEmeraldMem, + } + + action init = all { + gen::init, + emeraldState' = NODES.toSet().mapBy(n => initEmeraldNode), + } + + // =========================================================================== + // HANDLERS: Emerald's response to each Channel API message + // =========================================================================== + + // ConsensusReady: Initialize node. The starting height is passed in + // (computed from the node's last decided height in the composed step). + action handleConsensusReady(node: Node, startHeight: Height): bool = { + val s = emeraldState.get(node) + all { + s.mem.phase == Uninitialized, + emeraldState' = emeraldState.set(node, { + ...s, + mem: { ...s.mem, phase: Ready, consensus_height: startHeight, consensus_round: 0 }, + }), + } + } + + // StartedRound: Enter new consensus round. + // Height and round come from the StartedRound message payload. + // When entering a new height, promote matching pending proposals to undecided. + action handleStartedRound(node: Node, height: Height, round: Round): bool = { + val s = emeraldState.get(node) + val promoted = s.mem.pending_proposals.filter(p => p.height == height) + val remaining = s.mem.pending_proposals.exclude(promoted) + emeraldState' = emeraldState.set(node, { + ...s, + mem: { + phase: Working, + consensus_height: height, + consensus_round: round, + pending_proposals: remaining, + undecided_proposals: s.mem.undecided_proposals.union(promoted), + }, + }) + } + + // GetValue: Proposer builds or returns a value. + // The proposal is computed in the composed step and passed to both the + // generator (which records it) and this handler (which stores it locally). + // Proposer is at consensus_height, so proposal goes to undecided (mem). + action handleGetValue(node: Node, proposal: Proposal): bool = { + val s = emeraldState.get(node) + emeraldState' = emeraldState.set(node, { + ...s, + mem: { ...s.mem, undecided_proposals: s.mem.undecided_proposals.union(Set(proposal)) }, + }) + } + + // ReceivedProposal: Non-proposer learns about a proposal. + // Categorize by height: stale proposals dropped, current → undecided, future → pending. + action handleReceivedProposal(node: Node, proposal: Proposal): bool = { + val s = emeraldState.get(node) + if (proposal.height < s.mem.consensus_height) { + // Stale proposal — drop it + emeraldState' = emeraldState + } else if (proposal.height == s.mem.consensus_height) { + // Current height — actionable + emeraldState' = emeraldState.set(node, { + ...s, + mem: { ...s.mem, undecided_proposals: s.mem.undecided_proposals.union(Set(proposal)) }, + }) + } else { + // Future height — can't validate yet + emeraldState' = emeraldState.set(node, { + ...s, + mem: { ...s.mem, pending_proposals: s.mem.pending_proposals.union(Set(proposal)) }, + }) + } + } + + // Decided: Consensus decided on a value, advance to next height. + // Move proposal to decided (disk), clear undecided at this height (stale for next). + // Pending proposals for future heights are kept. + action handleDecided(node: Node, proposal: Proposal): bool = { + val s = emeraldState.get(node) + val nextHeight = proposal.height + 1 + emeraldState' = emeraldState.set(node, { + disk: { + ...s.disk, + last_decided_height: proposal.height, + last_decided_payload: Some(proposal.payload), + decided_proposals: s.disk.decided_proposals.union(Set(proposal)), + }, + mem: { + phase: Ready, + consensus_height: nextHeight, + consensus_round: 0, + pending_proposals: s.mem.pending_proposals, + undecided_proposals: Set(), + }, + }) + } + + // ProcessSyncedValue: Catch-up with a synced decided value. + // The proposal comes from the ProcessSyncedValue message payload. + // Goes to undecided (mem) — subsequent Decided will promote to decided (disk). + action handleProcessSyncedValue(node: Node, proposal: Proposal): bool = { + val s = emeraldState.get(node) + emeraldState' = emeraldState.set(node, { + ...s, + mem: { ...s.mem, phase: Syncing, undecided_proposals: s.mem.undecided_proposals.union(Set(proposal)) }, + }) + } + + // GetDecidedValue: Query for past decided value (no Emerald state change) + action handleGetDecidedValue(node: Node, height: Height): bool = + emeraldState' = emeraldState + + // NodeCrash: Full reset — all state lost (disk + mem). + action handleNodeCrash(node: Node): bool = + emeraldState' = emeraldState.set(node, initEmeraldNode) + + // NodeRestart: Preserve disk state, reset mem. + // Proposals + last_decided_* survive on disk. Phase and consensus + // height/round reset — Malachite will re-send ConsensusReady. + action handleNodeRestart(node: Node): bool = { + val s = emeraldState.get(node) + emeraldState' = emeraldState.set(node, { disk: s.disk, mem: initEmeraldMem }) + } + + // =========================================================================== + // PROPOSAL CONSTRUCTION + // =========================================================================== + + // Build a proposal for GetValue: return existing undecided proposal for (h, r) or create new. + // Payload derived from (height, round) — unique per proposal slot. Safe for MAX_ROUND=3, MAX_HEIGHT=4. + pure def buildProposal(s: EmeraldNodeState, node: Node): Proposal = { + val existing = s.mem.undecided_proposals.find(p => + p.height == s.mem.consensus_height and p.round == s.mem.consensus_round + ) + match existing { + | Some(p) => p + | None => { + height: s.mem.consensus_height, + round: s.mem.consensus_round, + proposer: node, + payload: s.mem.consensus_height * 100 + s.mem.consensus_round, + } + } + } + + // =========================================================================== + // COMPOSED STEPS + // =========================================================================== + + action stepConsensusReady(node: Node): bool = { + val startHeight = emeraldState.get(node).disk.last_decided_height + 1 + all { gen::sendConsensusReady(node, startHeight), handleConsensusReady(node, startHeight) } + } + + action stepStartedRound(node: Node): bool = { + val s = emeraldState.get(node).mem + any { + // Normal: after ConsensusReady or Decided + all { + gen::sendStartedRound(node), + handleStartedRound(node, s.consensus_height, s.consensus_round), + }, + // After timeout: Malachite internally timed out, app sees StartedRound at next round + all { + gen::sendStartedRoundAfterTimeout(node), + handleStartedRound(node, s.consensus_height, s.consensus_round + 1), + }, + } + } + + action stepGetValue(node: Node): bool = { + val proposal = buildProposal(emeraldState.get(node), node) + all { gen::sendGetValue(node, proposal), handleGetValue(node, proposal) } + } + + action stepReceivedProposal(node: Node, proposal: Proposal): bool = + all { gen::sendReceivedProposal(node, proposal), handleReceivedProposal(node, proposal) } + + action stepDecided(node: Node, proposal: Proposal): bool = + all { gen::sendDecided(node, proposal), handleDecided(node, proposal) } + + action stepProcessSyncedValue(node: Node): bool = { + val h = emeraldState.get(node).mem.consensus_height + val proposal = gen::decisions.get(h) + all { gen::sendProcessSyncedValue(node), handleProcessSyncedValue(node, proposal) } + } + + action stepGetDecidedValue(node: Node, height: Height): bool = + all { gen::sendGetDecidedValue(node, height), handleGetDecidedValue(node, height) } + + action stepNodeCrash(node: Node): bool = + all { gen::nodeCrash(node), handleNodeCrash(node) } + + action stepNodeRestart(node: Node): bool = + all { gen::nodeRestart(node), handleNodeRestart(node) } + + action step = { + nondet node = NODES.toSet().oneOf() + any { + stepConsensusReady(node), + stepStartedRound(node), + stepGetValue(node), + nondet proposal = gen::proposals.oneOf() + stepReceivedProposal(node, proposal), + nondet proposal = gen::proposals.oneOf() + stepDecided(node, proposal), + stepProcessSyncedValue(node), + nondet height = 1.to(gen::MAX_HEIGHT).oneOf() + stepGetDecidedValue(node, height), + stepNodeCrash(node), + stepNodeRestart(node), + } + } + + // =========================================================================== + // INVARIANTS + // =========================================================================== + + // Safety: All nodes agree on decided blocks. + // This is backed by the generator's contract guarantee (agreement), not + // by a hand-crafted oracle. + val emerald_agreement = + NODES.toSet().forall(n1 => + NODES.toSet().forall(n2 => + val st1 = emeraldState.get(n1) + val st2 = emeraldState.get(n2) + st1.disk.last_decided_height == st2.disk.last_decided_height implies + st1.disk.last_decided_payload == st2.disk.last_decided_payload + ) + ) + + // Consistency: After initialization, consensus height is always greater + // than the last decided height. + val consensus_height_gt_last_decided_height = + NODES.toSet().forall(n => + val st = emeraldState.get(n) + st.mem.consensus_height > 0 implies + st.mem.consensus_height > st.disk.last_decided_height + ) + + // Completeness: All nodes know all decided proposals up to their last + // decided height. + val completion = + NODES.toSet().forall(n => + val st = emeraldState.get(n) + 1.to(st.disk.last_decided_height).forall(height => + gen::decisions.has(height) and gen::decisions.get(height).in(st.disk.decided_proposals) + ) + ) + + // Lifecycle: After StartedRound(h), no proposals at height h remain pending — + // they should all have been promoted to undecided. + val no_pending_at_current_height = + NODES.toSet().forall(n => + val st = emeraldState.get(n) + st.mem.consensus_height > 0 implies + st.mem.pending_proposals.forall(p => p.height > st.mem.consensus_height) + ) + + // Contract: The generator's Channel API contract is verified separately + // in channel_api_generator_test.qnt. Checking it here adds ~11 history + // scans per step for properties already enforced by the generator's + // guards. Uncomment for full verification runs. + // val contractInv = gen::contractInv +} diff --git a/specs/emerald_with_generator_test.qnt b/specs/emerald_with_generator_test.qnt new file mode 100644 index 00000000..15622c00 --- /dev/null +++ b/specs/emerald_with_generator_test.qnt @@ -0,0 +1,19 @@ +// -*- mode: Bluespec; -*- + +// Test module for emerald_with_generator: instantiates with concrete nodes +// and checks invariants via simulation. +// +// 4 nodes: allows progress with one crashed node (3/4 > 2/3 quorum). + +module emerald_with_generator_test { + import rareSpells.* from "spells/rareSpells" + import emerald_with_generator(NODES = List("node1", "node2", "node3", "node4")).* from "emerald_with_generator" + + // Liveness: every node eventually responds to ConsensusReady and starts + // consensus. Checked as bounded liveness over finite traces — semi-formal. + // Requires fair scheduling (the simulator's oneOf provides probabilistic + // fairness). Full liveness proof would require export to TLA+. + temporal allNodesStartConsensus = NODES.toSet().forall(node => + eventually(emeraldState.get(node).mem.phase != Uninitialized) + ) +} diff --git a/specs/engine_api_contract.qnt b/specs/engine_api_contract.qnt new file mode 100644 index 00000000..c7a5af36 --- /dev/null +++ b/specs/engine_api_contract.qnt @@ -0,0 +1,429 @@ +// -*- mode: Bluespec; -*- + +// ============================================================================= +// Engine API Contract (DRAFT) +// ============================================================================= +// +// Behavioral contract for Reth's Engine API boundary (Emerald↔Reth). +// Written by the Emerald team as a proof of concept for the contract pattern. +// Models what the Reth team would publish for Emerald to consume. +// +// This contract defines: +// 1. The request/response types for the Engine API +// 2. Server guarantees (Reth → responses): response correctness +// 3. Client guarantees (Emerald → requests): request ordering +// 4. Phase 1 constraints +// +// Key structural difference from Channel API: +// - Channel API: Malachite sends requests to Emerald (Emerald responds) +// - Engine API: Emerald sends requests to Reth (Reth responds) +// - Generator models Reth producing responses to Emerald's requests +// +// Phase 1 scope: 3 core methods +// - engine_forkchoiceUpdatedV3(head, attrs?) +// - engine_newPayloadV4(payload, ...) +// - engine_getPayloadV4(payloadId) +// +// State follows the disk/mem convention from faults.qnt: +// - Disk: chain, head (persist through restart) +// - Mem: request_history (cleared on fault, current session only) +// +// Source: Reth's Engine API implementation + Ethereum Engine API spec. +// +// ============================================================================= +// WHY PER-NODE CONTRACT CHECKING? +// ============================================================================= +// +// Unlike the Channel API (which checks properties globally across all nodes), +// the Engine API contract is checked INDEPENDENTLY for each node's Reth instance. +// This reflects the fundamental architectural difference between the two APIs: +// +// Channel API (Malachite ↔ Emerald): +// - Models a DISTRIBUTED CONSENSUS PROTOCOL +// - Nodes coordinate via Malachite to reach agreement +// - Properties check CROSS-NODE consistency (e.g., agreement: all nodes +// deciding the same proposal at a given height) +// - Shared global state: decisions map, proposal support (quorum tracking) +// - Contract must see ALL nodes' histories to verify consensus safety +// +// Engine API (Emerald ↔ Reth): +// - Models a LOCAL RPC INTERFACE between one Emerald and one Reth +// - Each node runs its own INDEPENDENT Reth execution engine +// - No coordination at the Engine API boundary (Reth instances don't +// communicate through this API) +// - Properties check SINGLE-INSTANCE correctness (e.g., validationStability: +// this Reth instance never changes Valid → Invalid) +// - Per-node state: each Reth has its own chain, head, validation cache +// - Each Emerald only observes its own Reth instance +// +// What about Reth's P2P layer (syncing)? +// - When Phase 2 adds SYNCING state, Reth nodes will sync blocks from each +// other via p2p (Reth1 ↔ Reth2). +// - This is an IMPLEMENTATION DETAIL of how Reth gets block data, not part +// of the Engine API boundary. +// - The contract specifies WHAT Emerald observes (SYNCING → VALID transitions), +// not HOW Reth gets blocks (p2p, snapshots, database). +// - Contract properties remain per-node: "If my Reth transitions SYNCING → VALID +// for block B, it never later says INVALID" (single-instance consistency). +// - The generator may model cross-node sync actions to produce realistic traces, +// but contract properties still check each Reth instance independently. +// +// Why this matters: +// - Correct abstraction: Contract models the observable API boundary, not +// internal implementation (p2p layer is internal to Reth). +// - Composability: Emerald can reason about its local Reth without needing +// to know about other nodes' Reth instances. +// - Testability: Properties can be verified against a single Reth instance +// in isolation (useful for Reth developers). +// +// Generator checking strategy: +// The generator checks: NODES.toSet().forall(n => componentGuarantees(stateForNode(n))) +// This means: "Every Reth instance independently satisfies the server-side contract." +// Compare to Channel API: componentGuarantees(globalState) checks cross-node properties +// like agreement over all nodes simultaneously. + +module engine_api_contract { + import basicSpells.* from "spells/basicSpells" + + // =========================================================================== + // CONTRACTS + // =========================================================================== + + // Server (Reth) guarantees: response correctness + phase 1 constraints. + pure def componentGuarantees(s: EngineState): bool = and { + responseCorrectness(s), + phase1Constraints(s), + } + + // Client (Emerald) guarantees: request ordering. + pure def applicationGuarantees(s: EngineState): bool = and { + requestOrdering(s), + } + + // Full contract: both sides. + pure def engineContract(s: EngineState): bool = and { + componentGuarantees(s), + applicationGuarantees(s), + } + + // =========================================================================== + // TYPES (abstract — no real EVM types, protocol-level structure) + // =========================================================================== + + // Shared with channel_api_contract (same structural types) + type Node = str + type Height = int + + type BlockHash = int + type PayloadId = int + + type Block = { + height: Height, + hash: BlockHash, + parentHash: BlockHash, + } + + type PayloadStatusCode = + | Valid + | Invalid + + // Request-response pairs logged at the Engine API boundary. + // Each variant captures both the request parameters and the response. + // Response fields are prefixed with "resp" to distinguish them from + // request fields. + type EngineRequest = + | ReqNewPayload({ block: Block, respStatus: PayloadStatusCode }) + | ReqForkchoiceUpdated({ + headHash: BlockHash, + building: bool, + respStatus: PayloadStatusCode, + respPayloadId: Option[PayloadId], + }) + | ReqGetPayload({ payloadId: PayloadId, respBlock: Block }) + + // =========================================================================== + // OBSERVABLE STATE + // =========================================================================== + // + // State that any conforming generator must maintain for contract properties + // to be checkable. Follows the disk/mem convention from faults.qnt. + + type EngineStateDisk = { + // Canonical chain: height → block (persisted by Reth) + chain: Height -> Block, + // Current canonical head hash + head: BlockHash, + // Current head height + headHeight: Height, + } + + type EngineStateMem = { + // Per-node: request history for the current session. + // Cleared on fault — contains only current-session requests. + request_history: Node -> List[EngineRequest], + } + + type EngineState = { + disk: EngineStateDisk, + mem: EngineStateMem, + } + + // =========================================================================== + // SERVER GUARANTEES: RESPONSE CORRECTNESS + // =========================================================================== + + /// @guarantor component + /// @category safety + /// @scope per-node + // validationStability: Once newPayload(block) returns Valid, subsequent + // calls for the same block hash never return Invalid. + // + // Reth persists validation results. Once a block is accepted as valid, + // it remains valid. This lets Emerald cache validation status safely. + // + // Source: Engine API spec — payload status is deterministic for a given + // payload. Valid payloads do not become Invalid. + pure def validationStability(s: EngineState): bool = + s.mem.request_history.keys().forall(node => + val hist = s.mem.request_history.get(node) + // No subsequent newPayload for a validated hash returns Invalid + hist.foldl({ validated: Set(), ok: true }, (acc, ex) => + if (not(acc.ok)) acc + else match ex { + | ReqNewPayload(np) => + match np.respStatus { + | Valid => + { ...acc, validated: acc.validated.union(Set(np.block.hash)) } + | Invalid => + { ...acc, ok: not(acc.validated.contains(np.block.hash)) } + } + | _ => acc + } + ).ok + ) + + /// @guarantor component + /// @category safety + /// @scope per-node + // buildIntegrity: getPayload(id) returns a block whose parentHash matches + // the head from the forkchoiceUpdated that produced that payloadId. + // + // When Emerald calls forkchoiceUpdated with building=true, Reth starts + // building on top of the current head. The resulting block must extend + // that head. + // + // Source: Engine API spec — getPayload returns the execution payload + // built on the state identified by the prior forkchoiceUpdated. + pure def buildIntegrity(s: EngineState): bool = + s.mem.request_history.keys().forall(node => + val hist = s.mem.request_history.get(node) + // Single pass: collect payloadId → headHash from FCU, check getPayload against it. + // Works because forkchoiceUpdated always precedes its getPayload in the history. + hist.foldl({ buildHeads: Map(), ok: true }, (acc, ex) => + if (not(acc.ok)) acc + else match ex { + | ReqForkchoiceUpdated(fcu) => + if (fcu.building) match fcu.respPayloadId { + | Some(pid) => + { ...acc, buildHeads: acc.buildHeads.put(pid, fcu.headHash) } + | None => acc + } + else acc + | ReqGetPayload(gp) => + { ...acc, ok: acc.buildHeads.has(gp.payloadId) and + gp.respBlock.parentHash == acc.buildHeads.get(gp.payloadId) } + | _ => acc + } + ).ok + ) + + /// @guarantor component + /// @category safety + /// @scope per-node + // headProgression: After forkchoiceUpdated(hash) returns Valid, the + // canonical head is updated to that hash. + // + // A successful forkchoiceUpdated sets the execution head. This is the + // primary mechanism for finalizing blocks. + // + // Checked globally (not per-node) since Reth has a single canonical chain. + // + // Source: Engine API spec — forkchoiceUpdated updates the fork choice state. + pure def headProgression(s: EngineState): bool = + s.mem.request_history.keys().forall(node => + val hist = s.mem.request_history.get(node) + hist.length() == 0 or { + // The last successful forkchoiceUpdated determines the head. + // Check that the global head matches the last valid FCU. + // Note: foldl is used as "find last match" — Quint would benefit from findLast. + val lastValidFCU: Option[BlockHash] = hist.foldl(None, (acc, ex) => + match ex { + | ReqForkchoiceUpdated(fcu) => + match fcu.respStatus { + | Valid => Some(fcu.headHash) + | _ => acc + } + | _ => acc + } + ) + match lastValidFCU { + | Some(h) => s.disk.head == h + | None => true + } + } + ) + + /// @guarantor component + /// @category safety + /// @scope per-node + // validBeforeHead: forkchoiceUpdated(hash) returning Valid requires that + // the block was previously known — either via newPayload returning Valid, + // getPayload returning it (built by Reth), or already in the chain. + // + // Source: Engine API spec — INVALID_FORKCHOICE_STATE if the head + // references an unknown or invalid payload. + pure def validBeforeHead(s: EngineState): bool = + s.mem.request_history.keys().forall(node => + val hist = s.mem.request_history.get(node) + // Track hashes known via newPayload(Valid) + getPayload + chain + val chainHashes: Set[BlockHash] = s.disk.chain.keys().fold(Set(), (acc, h) => + acc.union(Set(s.disk.chain.get(h).hash)) + ) + hist.foldl({ validated: chainHashes, ok: true }, (acc, ex) => + if (not(acc.ok)) acc + else match ex { + | ReqNewPayload(np) => + match np.respStatus { + | Valid => { ...acc, validated: acc.validated.union(Set(np.block.hash)) } + | _ => acc + } + | ReqGetPayload(gp) => + // Built by Reth — implicitly valid + { ...acc, validated: acc.validated.union(Set(gp.respBlock.hash)) } + | ReqForkchoiceUpdated(fcu) => + match fcu.respStatus { + | Valid => { ...acc, ok: acc.validated.contains(fcu.headHash) } + | _ => acc + } + | _ => acc + } + ).ok + ) + + /// @guarantor component + /// @category safety + /// @scope per-node + // chainContinuity: Blocks in the canonical chain form a linked list + // via parentHash. + // + // Each block at height h > 1 must have parentHash equal to the hash + // of the block at height h-1. + // + // Source: Ethereum block structure — blocks form a chain via parentHash. + pure def chainContinuity(s: EngineState): bool = + s.disk.chain.keys().forall(h => + h == 0 or { + s.disk.chain.has(h - 1) and + s.disk.chain.get(h).parentHash == s.disk.chain.get(h - 1).hash + } + ) + + // =========================================================================== + // PHASE 1 CONSTRAINTS (to be relaxed in Phase 2) + // =========================================================================== + + /// @guarantor component + /// @category phase1 + /// @scope per-node + // headMonotonic: The canonical head height never decreases (no reorgs). + // + // Phase 1 constraint: Once the head advances to height h, it never moves + // back to a lower height. This simplifies initial modeling by excluding + // reorg scenarios. + // + // In Phase 1: + // - forkchoiceUpdated can only move head forward or stay at same height + // - Idempotent updates (same height/hash) are allowed for retry handling + // + // Phase 2 will relax this to allow reorgs: + // - Head can move to different blocks at same or lower heights + // - Models Ethereum's fork choice with chain reorganizations + // + // NOTE: This is NOT a fundamental Reth guarantee — real Reth supports reorgs. + // This property is enforced by the generator's state machine guards, not by + // Reth's implementation. + pure def headMonotonic(s: EngineState): bool = + s.mem.request_history.keys().forall(node => + val hist = s.mem.request_history.get(node) + // Track head height progression through successful forkchoiceUpdated calls + hist.foldl({ maxHeight: 0, ok: true }, (acc, ex) => + if (not(acc.ok)) acc + else match ex { + | ReqForkchoiceUpdated(fcu) => + match fcu.respStatus { + | Valid => + // After this FCU, head is at the height of the referenced block + val newHeight = s.disk.chain.keys().fold(-1, (maxH, h) => + if (s.disk.chain.get(h).hash == fcu.headHash and h > maxH) h else maxH + ) + { maxHeight: if (newHeight > acc.maxHeight) newHeight else acc.maxHeight, + ok: newHeight >= acc.maxHeight } + | _ => acc + } + | _ => acc + } + ).ok + ) + + // Combined response correctness properties + pure def responseCorrectness(s: EngineState): bool = and { + validationStability(s), + buildIntegrity(s), + headProgression(s), + validBeforeHead(s), + chainContinuity(s), + } + + // Phase 1 specific constraints + pure def phase1Constraints(s: EngineState): bool = and { + headMonotonic(s), + } + + // =========================================================================== + // CLIENT GUARANTEES: REQUEST ORDERING + // =========================================================================== + + /// @guarantor application + /// @category ordering + /// @scope per-node + // buildLifecycle: getPayload(id) must follow a forkchoiceUpdated that + // returned that id. Each payloadId is consumed at most once. + // + // Source: Engine API spec — payloadId is a one-time-use token. + pure def buildLifecycle(s: EngineState): bool = + s.mem.request_history.keys().forall(node => + val hist = s.mem.request_history.get(node) + hist.foldl({ available: Set(), ok: true }, (acc, ex) => + if (not(acc.ok)) acc + else match ex { + | ReqForkchoiceUpdated(fcu) => + if (fcu.building) match fcu.respPayloadId { + | Some(pid) => + { ...acc, available: acc.available.union(Set(pid)) } + | None => acc + } + else acc + | ReqGetPayload(gp) => + { ok: acc.available.contains(gp.payloadId), + available: acc.available.exclude(Set(gp.payloadId)) } + | _ => acc + } + ).ok + ) + + // Combined request ordering properties + pure def requestOrdering(s: EngineState): bool = and { + buildLifecycle(s), + } + +} diff --git a/specs/engine_api_generator.qnt b/specs/engine_api_generator.qnt new file mode 100644 index 00000000..369fd370 --- /dev/null +++ b/specs/engine_api_generator.qnt @@ -0,0 +1,610 @@ +// -*- mode: Bluespec; -*- + +// ============================================================================= +// Engine API Reference Generator (DRAFT) +// ============================================================================= +// +// A state machine modeling Reth's Engine API responses. Verified against +// engine_api_contract.qnt. +// +// Unlike the Channel API generator (which nondeterministically picks what to +// send), this generator is REACTIVE — it responds to requests from Emerald. +// The caller (Emerald or a test driver) picks which Engine API call to make; +// the generator determines the response. +// +// Design: +// - Per-node state tracks Reth's execution state (chain, builds in progress) +// - Actions correspond to Engine API request-response pairs +// - Response correctness is enforced by the state machine structure +// - All contract properties are checked via contractInv at every step +// - Fault injection: rethCrash (lose all state) and rethRestart (preserve +// disk state) clear request histories and reset to Ready +// +// State follows the disk/mem convention from faults.qnt: +// - Disk: chain, head, headHeight (survive restart) +// - Mem: phase, validatedBlocks, pendingBuild (reset on fault) +// - Request histories are mem state (cleared on fault) +// +// Phase 1 scope: Ready + Building phases. No SYNCING state. +// +// Block hash abstraction: deterministic hash = height * 1000 + index. +// Genesis block: height 0, hash 0, parentHash 0. +// +// Phase transitions: +// Offline ──rethStart──────────────────────────> Ready +// Ready ──respondForkchoiceUpdated (attrs)───> Building +// Building ──respondGetPayload───────────────────> Ready +// Building ──respondForkchoiceUpdated (no attrs)─> Ready (head update only) +// * ──rethCrash──────────────────────────> Offline (all state lost) +// * ──rethRestart────────────────────────> Ready (disk preserved) + +module engine_api_generator { + import basicSpells.* from "spells/basicSpells" + import rareSpells.* from "spells/rareSpells" + import faults.* from "faults" + import engine_api_contract.* from "engine_api_contract" + + // =========================================================================== + // CONFIGURATION + // =========================================================================== + + const NODES: List[Node] + + // Max height the generator will explore (bounds trace length) + pure val MAX_HEIGHT = 4 + + // =========================================================================== + // PER-NODE STATE (disk/mem split) + // =========================================================================== + + type RethPhase = + | Offline // Not running + | Ready // Processing requests normally + | Building // forkchoiceUpdated called with attrs, payload in progress + + // Disk state: survives restart, lost on crash + type RethDiskState = { + // Persisted canonical chain: height → block + chain: Height -> Block, + // Current head hash + head: BlockHash, + // Current head height + headHeight: Height, + } + + // Mem state: cleared on any fault (crash or restart) + type RethMemState = { + phase: RethPhase, + // Blocks validated via newPayload in this session + validatedBlocks: Set[BlockHash], + // Pending build: payloadId + parentHash of the build + pendingBuild: Option[{ payloadId: PayloadId, parentHash: BlockHash, parentHeight: Height }], + } + + type RethNodeState = { + disk: RethDiskState, + mem: RethMemState, + } + + // Genesis block: the foundation of the chain + pure val GENESIS_BLOCK: Block = { + height: 0, + hash: 0, + parentHash: 0, + } + + pure val initRethDisk: RethDiskState = { + chain: Map(0 -> GENESIS_BLOCK), + head: 0, + headHeight: 0, + } + + pure val initRethMem: RethMemState = { + phase: Offline, + validatedBlocks: Set(), + pendingBuild: None, + } + + pure val readyRethMem: RethMemState = { + phase: Ready, + validatedBlocks: Set(), + pendingBuild: None, + } + + pure val initRethNode: RethNodeState = { + disk: initRethDisk, + mem: initRethMem, + } + + // =========================================================================== + // TRACE ENTRY (for lastEvent observation / MBT integration) + // =========================================================================== + + type EngineTraceEntry = + | EngineMsg(EngineRequest) + | EngineFaultMsg(FaultEvent) + + // =========================================================================== + // GLOBAL STATE + // =========================================================================== + + // Per-node Reth state (disk/mem split) + var rethStates: Node -> RethNodeState + + // Per-node request history (mem state) + var requestHistory: Node -> List[EngineRequest] + + // Last trace entry emitted (for trace observation) + var engineLastTraceEntry: Option[{ node: Node, entry: EngineTraceEntry }] + + // Counter for generating unique IDs (payload IDs and block hashes) + var nextId: int + + // =========================================================================== + // HELPERS + // =========================================================================== + + // Deterministic hash: height * 1000 + a counter-like offset. + pure def blockHash(height: Height, payloadId: PayloadId): BlockHash = + height * 1000 + payloadId + + // Compute newPayload validation status for a block against a node's chain. + // Extracted from respondNewPayload for reuse by composition (e.g., to pass + // the validity result to Emerald's handleReceivedProposal). + pure def computePayloadStatus(ns: RethNodeState, block: Block): PayloadStatusCode = { + val parentValid = ns.disk.chain.has(block.height - 1) and + ns.disk.chain.get(block.height - 1).hash == block.parentHash + if (parentValid) Valid else Invalid + } + + // =========================================================================== + // ACTIONS: Engine API request-response pairs + // =========================================================================== + // + // Phase state machine: + // + // Offline ─────────► Ready ◄──────────────┐ + // (rethStart) │ │ + // │ │ + // ▼ │ + // Building ───────────────┘ + // (respondBuildRequest) (respondGetPayload, + // respondHeadUpdate) + // + // Composition usage note: + // - In emerald_with_both_generators.qnt, respondBuildRequest + respondGetPayload + // are combined atomically in stepGetValue (instantaneous build model). + // - Standalone test driver explores these actions independently to validate + // contract properties under broader conditions than realistic usage. + // + // Implementation details vs contract properties: + // Guards and behaviors in these actions fall into three categories: + // + // 1. CONTRACT ENFORCEMENT: Guards that directly enforce contract properties + // Example: respondHeadUpdate checks block exists in chain (validBeforeHead) + // + // 2. IMPLEMENTATION DETAILS: Generator-specific choices not required by contract + // Example: respondBuildRequest always builds on current head (enables buildIntegrity + // but not the only way); phase state machine (internal, not observable) + // + // 3. OPTIMIZATIONS: Bounds that reduce search space without affecting correctness + // Example: block.height <= MAX_HEIGHT (real Reth handles arbitrary heights) + // + // 4. PHASE 1 CONSTRAINTS: Temporary simplifications to be relaxed in Phase 2 + // Example: headMonotonic (no reorgs) — real Reth supports reorgs + // + // Inline comments below mark guards with [CONTRACT], [IMPL], [OPT], or [PHASE1] + // to clarify their purpose. + // + + // --- respondNewPayload --- + // Emerald sends a block for validation. Reth validates and returns status. + // + // Valid if: block's parentHash matches the chain at (height - 1). + // Invalid otherwise. + // + // Source: engine_newPayloadV4 in Engine API spec + action respondNewPayload(node: Node, block: Block): bool = { + val ns = rethStates.get(node) + // [CONTRACT] validationDeterminism: validation outcome is deterministic based on chain state + // This enables validationStability (once Valid, always Valid) + val status = computePayloadStatus(ns, block) + val parentValid = status == Valid + val request =ReqNewPayload({ block: block, respStatus: status }) + all { + // [IMPL] Phase check: internal state machine, not observable by contract + or { ns.mem.phase == Ready, ns.mem.phase == Building }, + // [OPT] Height bounds: search space optimization (real Reth handles arbitrary heights) + block.height >= 1, + block.height <= MAX_HEIGHT, + // state update + rethStates' = rethStates.set(node, { + disk: { + ...ns.disk, + // Add valid blocks to the chain if no entry exists at that height. + // Don't overwrite existing entries — prevents chainContinuity violations + // when the standalone test validates different blocks at the same height. + chain: if (parentValid and not(ns.disk.chain.has(block.height))) + ns.disk.chain.put(block.height, block) + else + ns.disk.chain, + }, + mem: { + ...ns.mem, + validatedBlocks: if (parentValid) + ns.mem.validatedBlocks.union(Set(block.hash)) + else + ns.mem.validatedBlocks, + }, + }), + // Increment counter to ensure standalone test driver generates unique + // block hashes (blockHash uses nextId). Without this, consecutive + // respondNewPayload calls at the same height produce hash collisions. + nextId' = nextId + 1, + // bookkeeping + requestHistory' = requestHistory.set(node, + requestHistory.get(node).append(request) + ), + engineLastTraceEntry' = Some({ node: node, entry: EngineMsg(request) }), + } + } + + // --- respondBuildRequest --- + // Emerald requests Reth to build a new block on top of the current head. + // Generates a unique payloadId and enters Building phase. + // + // Key behaviors: + // - Always builds on ns.disk.head + // - Can be called while Building (overwrites pendingBuild, orphans old payloadId) + // - No disk changes (build persisted only when respondGetPayload is called) + // + // Composition: Combined atomically with respondGetPayload in stepGetValue. + // + // Source: engine_forkchoiceUpdatedV3 with payload attributes + action respondBuildRequest(node: Node): bool = { + val ns = rethStates.get(node) + // [IMPL] buildOnCurrentHead: always builds on current head + // One way to achieve buildIntegrity, but not the only way + val headHash = ns.disk.head + val request = ReqForkchoiceUpdated({ + headHash: headHash, + building: true, + respStatus: Valid, + // [CONTRACT] payloadIdUniqueness: structural guarantee enabling buildLifecycle + // nextId counter ensures globally unique payloadIds + respPayloadId: Some(nextId), + }) + all { + // [IMPL] Phase check: internal state machine, not observable by contract + or { ns.mem.phase == Ready, ns.mem.phase == Building }, + // state update + rethStates' = rethStates.set(node, { + ...ns, + mem: { + phase: Building, + validatedBlocks: ns.mem.validatedBlocks, + pendingBuild: Some({ payloadId: nextId, parentHash: headHash, parentHeight: ns.disk.headHeight }), + }, + }), + nextId' = nextId + 1, + // bookkeeping + requestHistory' = requestHistory.set(node, + requestHistory.get(node).append(request) + ), + engineLastTraceEntry' = Some({ node: node, entry: EngineMsg(request) }), + } + } + + // --- respondHeadUpdate --- + // Emerald updates Reth's canonical head after a consensus decision. + // This finalizes a block as the active execution head without requesting a build. + // + // Key distinction from respondNewPayload/respondGetPayload: + // - Those actions ADD blocks to the chain (validation) + // - This action SELECTS which block is canonical (finalization) + // + // Source: engine_forkchoiceUpdatedV3 without payload attributes + action respondHeadUpdate(node: Node, headHash: BlockHash, headHeight: Height): bool = { + val ns = rethStates.get(node) + val request = ReqForkchoiceUpdated({ + headHash: headHash, + building: false, + respStatus: Valid, + respPayloadId: None, + }) + all { + // [CONTRACT] validBeforeHead: block must already exist in chain before finalization + ns.disk.chain.has(headHeight) and ns.disk.chain.get(headHeight).hash == headHash, + + // [PHASE1] headMonotonic: no reorgs constraint + // EITHER: headHash == current head (idempotent update, allows retries) + // OR: headHeight > current headHeight (monotonic forward progress) + // + // Why idempotency is needed: + // - Consensus layer retries after network delays + // - Re-establishment after restarts + // - Duplicate Decided events in the model + // + // Phase 1 limitation: Prevents reorgs (can't move head from height 3 back to height 2) + // Phase 2 will relax this to allow forking/reorg scenarios + // NOTE: Real Reth supports reorgs — this is a modeling simplification + or { headHash == ns.disk.head, headHeight > ns.disk.headHeight }, + + // [IMPL] Phase check: internal state machine, not observable by contract + or { ns.mem.phase == Ready, ns.mem.phase == Building }, + + // state update (only disk.head changes, chain itself is unchanged) + rethStates' = rethStates.set(node, { + disk: { + chain: ns.disk.chain, // Chain unchanged (block already added earlier) + head: headHash, // Update canonical head + headHeight: headHeight, + }, + mem: { + phase: Ready, // Return to Ready (clear Building if active) + validatedBlocks: ns.mem.validatedBlocks, + pendingBuild: ns.mem.pendingBuild, + }, + }), + nextId' = nextId, + // bookkeeping + requestHistory' = requestHistory.set(node, + requestHistory.get(node).append(request) + ), + engineLastTraceEntry' = Some({ node: node, entry: EngineMsg(request) }), + } + } + + // --- respondGetPayload --- + // Emerald retrieves the block built by a prior respondBuildRequest. + // Returns the built block, adds it to chain, and clears pendingBuild. + // + // Lifecycle: PayloadId is single-use (respondBuildRequest generates, this consumes). + // + // Block construction: + // - Height: parentHeight + 1 + // - Hash: deterministic (height * 1000 + payloadId) + // - ParentHash: from pendingBuild + // + // Match-with-defaults: Guards ensure pendingBuild is Some, None case never executes. + // + // Composition: Combined atomically with respondBuildRequest in stepGetValue. + // + // Source: engine_getPayloadV4 in Engine API spec + action respondGetPayload(node: Node): bool = { + val ns = rethStates.get(node) + // Extract build info; guard ensures pendingBuild is Some + val build = match ns.mem.pendingBuild { + | Some(b) => b + | None => { payloadId: -1, parentHash: -1, parentHeight: -1 } + } + val newBlock: Block = { + height: build.parentHeight + 1, + hash: blockHash(build.parentHeight + 1, build.payloadId), + parentHash: build.parentHash, + } + val request =ReqGetPayload({ payloadId: build.payloadId, respBlock: newBlock }) + all { + // [CONTRACT] buildLifecycle: payloadId must exist (part of single-use token property) + ns.mem.pendingBuild != None, + // [IMPL] getPayloadRequiresBuilding: stricter than contract requires + // Contract only requires prior forkchoiceUpdated with this payloadId (buildLifecycle) + // This guard adds phase ordering: must still be in Building state + ns.mem.phase == Building, + // state update + rethStates' = rethStates.set(node, { + disk: { + ...ns.disk, + // Don't overwrite existing chain entries (same rationale as respondNewPayload) + chain: if (not(ns.disk.chain.has(newBlock.height))) + ns.disk.chain.put(newBlock.height, newBlock) + else + ns.disk.chain, + }, + mem: { + phase: Ready, + validatedBlocks: ns.mem.validatedBlocks.union(Set(newBlock.hash)), + pendingBuild: None, + }, + }), + nextId' = nextId, + // bookkeeping + requestHistory' = requestHistory.set(node, + requestHistory.get(node).append(request) + ), + engineLastTraceEntry' = Some({ node: node, entry: EngineMsg(request) }), + } + } + + // =========================================================================== + // UTILITY ACTIONS (for composition) + // =========================================================================== + + // --- rethUnchanged --- + // Passthrough: no Engine API activity this step. + // Exported for composition steps that don't interact with Reth. + action rethUnchanged: bool = all { + rethStates' = rethStates, + requestHistory' = requestHistory, + engineLastTraceEntry' = engineLastTraceEntry, + nextId' = nextId, + } + + // =========================================================================== + // LIFECYCLE ACTIONS + // =========================================================================== + + // --- rethStart --- + // Start Reth on a node. Transitions from Offline to Ready. + action rethStart(node: Node): bool = { + val ns = rethStates.get(node) + all { + ns.mem.phase == Offline, + // state update + rethStates' = rethStates.set(node, { + ...ns, + mem: readyRethMem, + }), + nextId' = nextId, + // bookkeeping + requestHistory' = requestHistory, + engineLastTraceEntry' = engineLastTraceEntry, + } + } + + // =========================================================================== + // FAULT ACTIONS + // =========================================================================== + + // --- rethCrash --- + // Node lost all state: reset disk + mem, clear request history. + action rethCrash(node: Node): bool = { + val ns = rethStates.get(node) + all { + ns.mem.phase != Offline, + // state update + rethStates' = rethStates.set(node, initRethNode), + nextId' = nextId, + // bookkeeping + requestHistory' = requestHistory.set(node, []), + engineLastTraceEntry' = Some({ node: node, entry: EngineFaultMsg(Crash) }), + } + } + + // --- rethRestart --- + // Node restarted: preserve disk state, reset mem, clear request history. + // Chain and head survive on disk. Validated blocks and pending builds lost. + action rethRestart(node: Node): bool = { + val ns = rethStates.get(node) + all { + ns.mem.phase != Offline, + // state update + rethStates' = rethStates.set(node, { disk: ns.disk, mem: readyRethMem }), + nextId' = nextId, + // bookkeeping + requestHistory' = requestHistory.set(node, []), + engineLastTraceEntry' = Some({ node: node, entry: EngineFaultMsg(Restart) }), + } + } + + // =========================================================================== + // INITIALIZATION + // =========================================================================== + + action init = { + val nodes = NODES.toSet() + all { + rethStates' = nodes.mapBy(n => initRethNode), + requestHistory' = nodes.mapBy(n => []), + engineLastTraceEntry' = None, + nextId' = 1, + } + } + + // =========================================================================== + // STEP: nondeterministic test driver + // =========================================================================== + // + // For standalone testing: a nondeterministic caller picks which Engine API + // call to make. The generator responds. This validates the contract + // independently of Emerald. + + action step = { + nondet node = NODES.toSet().oneOf() + val ns = rethStates.get(node) + any { + // Start Reth + rethStart(node), + // newPayload: Test driver explores ALL possible heights and validity scenarios. + // + // NOTE: This is deliberately MORE GENERAL than real usage in Emerald composition. + // In emerald_with_both_generators.qnt, newPayload is only called at heights + // driven by consensus progression (sequential: 1 → 2 → 3...). + // + // Here we test the Engine API contract exhaustively by: + // 1. Picking random heights (1 to MAX_HEIGHT) - tests out-of-order validation + // 2. Nondeterministically choosing valid/invalid parentHash - tests both paths + // + // This validates that the contract properties hold even under adversarial or + // nonsensical calling patterns, proving Reth's validation logic is correct + // regardless of how the caller behaves. + nondet height = 1.to(MAX_HEIGHT).oneOf() // Explore all heights (not just sequential) + nondet validParent = Set(true, false).oneOf() // Test both valid and invalid blocks + val parentHash = if (ns.disk.chain.has(height - 1)) + ns.disk.chain.get(height - 1).hash + else + -1 // Parent doesn't exist in chain + val block: Block = { + height: height, + hash: blockHash(height, nextId + 100), + // If validParent=true and parent exists: use correct parentHash (valid block) + // If validParent=false or parent missing: use -1 (invalid block) + parentHash: if (validParent and parentHash != -1) parentHash else -1, + } + respondNewPayload(node, block), + // forkchoiceUpdated: build request (always builds on current head) + respondBuildRequest(node), + // forkchoiceUpdated: head update (test driver respects Phase 1 constraints) + // + // NOTE: This explores forward head progression only, respecting the Phase 1 + // no-reorg constraint. In emerald_with_both_generators.qnt, head updates + // are driven by consensus Decided events (sequential: height 1 → 2 → 3...). + // + // Here we test: + // 1. Idempotent updates (same height/hash) + // 2. Forward progression (higher heights) + // 3. Skip-ahead scenarios (jumping multiple heights) + // + // The range starts at current headHeight (not 1) because respondHeadUpdate's + // guard blocks backward movement: headHeight > ns.disk.headHeight. + nondet updateHeight = ns.disk.headHeight.to(MAX_HEIGHT).oneOf() // Forward only + // Lookup the hash for the chosen height: + // - If same as current height: use current head (tests idempotency) + // - If block exists at updateHeight: use its hash (tests forward progress) + // - If block doesn't exist: use -1 (filtered by guard below) + val updateHash = if (updateHeight == ns.disk.headHeight) ns.disk.head + else if (ns.disk.chain.has(updateHeight)) ns.disk.chain.get(updateHeight).hash + else -1 + // Guard: only call respondHeadUpdate if we found a valid block + // Filters out cases where updateHeight has no block in chain yet + all { updateHash != -1, respondHeadUpdate(node, updateHash, updateHeight) }, + // getPayload + respondGetPayload(node), + // Faults + rethCrash(node), + rethRestart(node), + } + } + + // =========================================================================== + // CONTRACT PROPERTIES (checked as invariants) + // =========================================================================== + + // Build per-node EngineState for contract checking. + // Each node has its own Reth instance, so disk state and request history + // are checked independently per node. + pure def engineStateForNode( + ns: RethNodeState, + hist: List[EngineRequest], + node: Node + ): EngineState = { + disk: { + chain: ns.disk.chain, + head: ns.disk.head, + headHeight: ns.disk.headHeight, + }, + mem: { + request_history: Map(node -> hist), + }, + } + + // Server (Reth) guarantees checked per-node + val contractInv = NODES.toSet().forall(n => + componentGuarantees(engineStateForNode(rethStates.get(n), requestHistory.get(n), n)) + ) + + // Client (Emerald) guarantees checked per-node — verified by the composition + val applicationGuaranteesInv = NODES.toSet().forall(n => + applicationGuarantees(engineStateForNode(rethStates.get(n), requestHistory.get(n), n)) + ) +} diff --git a/specs/engine_api_generator_test.qnt b/specs/engine_api_generator_test.qnt new file mode 100644 index 00000000..e839e3e3 --- /dev/null +++ b/specs/engine_api_generator_test.qnt @@ -0,0 +1,22 @@ +// -*- mode: Bluespec; -*- + +// Test module for engine_api_generator: instantiates with concrete nodes +// and checks the contract invariant via simulation. +// +// 4 nodes: consistent with channel API tests (allows fault tolerance +// exploration with one crashed node). + +module engine_api_generator_test { + import engine_api_contract.* from "engine_api_contract" + + pure val NODES = List("node1", "node2", "node3", "node4") + + import engine_api_generator( + NODES = NODES, + ) as gen from "engine_api_generator" + + // Re-export generator state for simulation + action init = gen::init + action step = gen::step + val contractInv = gen::contractInv +} diff --git a/specs/faults.qnt b/specs/faults.qnt new file mode 100644 index 00000000..306b0273 --- /dev/null +++ b/specs/faults.qnt @@ -0,0 +1,38 @@ +// -*- mode: Bluespec; -*- + +// ============================================================================= +// Fault Events (reusable) +// ============================================================================= +// +// General infrastructure fault types. +// A node crash/restart affects all APIs simultaneously — faults are +// node-level events, not embedded in individual API request types. +// +// Disk/mem convention: +// Modules using faults should split state into { disk: D, mem: M }. +// - Crash: reset both disk and mem to initial values +// - Restart: reset mem to initial, preserve disk (survives on disk) +// +// This encodes persistence semantics in the type structure: +// - New persistent fields → add to DiskState → auto-survive restarts +// - New ephemeral fields → add to MemState → auto-reset on restart +// +// Example: +// pure def crashReset(initDisk, initMem) = { disk: initDisk, mem: initMem } +// pure def restartReset(current, initMem) = { ...current, mem: initMem } +// +// Request histories are mem state — cleared on fault, containing only the +// current session's requests. This means contract properties over request +// histories automatically scope to the current session with no +// session-boundary logic needed. + +module faults { + type FaultEvent = + | Crash // Node lost all state (disk + mem) + | Restart // Node restarted, disk state preserved + + pure def isCrash(e: FaultEvent): bool = match e { + | Crash => true + | _ => false + } +}