Skip to content
Available on private testnetTestnet: yesMainnet: Not availableSoftware: Core bad4a06ea · protocol pqwerai-v8-testnet/1Updated

BFT finality

Parameter Value
Epoch / checkpoint spacing 32 blocks
Quorum strictly more than 2/3 of the epoch set's effective stake
Minimum genesis validators 4
Max link span 4096 blocks
Vote transport signed votes over authenticated JSON-RPC (g4_submitVote); certificates travel in blocks over devp2p

Flow

sequenceDiagram
  participant S as Validator signer
  participant N as Own node
  participant C as Chain
  S->>N: g4_link (source = justified, target = latest checkpoint)
  N-->>S: RLP vote context
  S->>S: journal check (no double / surround vote), fsync
  S->>N: g4_submitVote(context, signed vote)
  N->>N: verify signature vs epoch set, reject stale / replayed
  N->>C: certificate transaction once > 2/3 stake signed
  C-->>C: justify target, finalize source

Safety mechanisms

  • Signer journal: persistent, fsync before releasing a vote, refuses double votes (same target height, different hash) and surround votes, anchored against stale backups. Never restore it from an old backup.
  • Equivocation evidence: a node that sees two conflicting votes from one validator records them (g4_evidence) and relays a slashing transaction; 25 % of the validator's stake is burned.
  • Vote flood resistance: forged, malformed, stale and replayed submissions are rejected and counted (g4_status.vote_counters); rejected traffic cannot crowd out valid votes.

Liveness

With less than 2/3 of stake online, PoW block production continues but finality stalls. The candidate liveness/v1 genesis profile (experimental; active on the local testnet) adds a duty window for late certificates and force-exits validators that carry no vote for K consecutive checkpoints (not slashed); g4_status then reports liveness_ejected_validators and liveness_participation_records.


Found a problem? Report a documentation issue · Build testnet-rc1+72057fe3ec