Nockchain evidence

Source-level sync trace

Nockchain Sync/Gossip

A source-anchored read of the latest Nockchain libp2p catch-up gate: when a node is behind tip, the driver intentionally suppresses outbound gossip so wrong commitments, quiet mining output, and peer symptoms can be interpreted with sync context attached.

Commit
33ba97b1e206
Anchors
6
Scenarios
4
Crate
nockchain-libp2p-io

Priority Triage

wrong-block-commitment-while-catching-up

wrong block commitment while a node is still catching up or consuming stale state

likelyMeaning

A local miner or receipt may be comparing against a non-tip state, mismatched state-jam source, or suppressed gossip window.

firstChecks

syncMode, behindTipEstimate, stateJamFingerprint, nockchainCommit, routeTableSize

nextAction

Do not classify the commitment as an app failure until the node is at Tip and state-jam provenance matches the intended network.

empty-routing-table-with-quiet-node

routing table is empty and the node is quiet

likelyMeaning

Peer discovery or local bind/peer configuration may be wrong, but a catching-up node can also intentionally avoid originating gossip.

firstChecks

connectedPeerCount, routeTableSize, syncMode, fakenetBindAddr, peerMultiaddr

nextAction

Separate no-peer connectivity from behind-tip quietness before restarting miners or changing state.

miner-output-not-gossiped

mining output is produced locally but not gossiped

likelyMeaning

The driver suppresses mining-output gossip while CatchingUp so stale or out-of-order work does not pollute peers.

firstChecks

syncMode, gossipSuppressedBehindTipTotal, tipStatus, minerCommitment

nextAction

Wait for Tip or prove the fakenet is intentionally isolated before treating miner silence as a bug.

Behavior Invariants

cold-does-not-suppress

Cold at boot does not suppress because the node has not yet proven it is behind tip.

sourceAnchorIds

catch-up-signal, p2p-state-gate

catching-up-suppresses-all-gossip

CatchingUp suppresses every outbound gossip kind: historic block rebroadcasts, tx submission gossip, and mining output.

sourceAnchorIds

catch-up-signal, driver-gossip-effect, driver-suppression-test

tip-does-not-suppress

Tip does not suppress; once catch-up hysteresis expires, normal per-peer gossip fan-out resumes.

sourceAnchorIds

catch-up-refresh, p2p-state-gate

hysteresis-refresh-exits-catching-up

refresh_mode lets the driver-side read gate move from CatchingUp to Tip after the drained hysteresis window.

sourceAnchorIds

catch-up-refresh, p2p-state-gate

Source Anchors

catch-up-signal

file

crates/nockchain-libp2p-io/src/catch_up.rs

symbol

CatchUpSignal::is_catching_up

role

Reports whether the node is in SyncMode::CatchingUp.

evidence

Cold and Tip both return false; CatchingUp returns true and is the predicate for outgoing gossip suppression.

driver-gossip-effect

file

crates/nockchain-libp2p-io/src/driver.rs

symbol

EffectType::Gossip

role

Classifies kernel %gossip effects, clears heard-block serve caches, and either suppresses or fans out gossip.

evidence

When suppression is true, the driver skips every per-peer SendRequest and increments gossip_suppressed_behind_tip_total.

catch-up-refresh

file

crates/nockchain-libp2p-io/src/catch_up.rs

symbol

CatchUpSignal::refresh_mode

role

Lets read-side traffic gates expire CatchingUp -> Tip hysteresis without waiting for a new block event.

evidence

The upstream test refresh_exits_catching_up_after_hysteresis_without_new_input proves refresh_mode exits CatchingUp after the drained window.

p2p-state-gate

file

crates/nockchain-libp2p-io/src/p2p_state.rs

symbol

P2PState::should_suppress_outgoing_gossip

role

Refreshes catch-up mode and returns whether outbound gossip should be suppressed.

evidence

The gate deliberately covers historic block rebroadcasts, tx submission gossip, and mining output while behind tip.

suppression-metric

file

crates/nockchain-libp2p-io/src/metrics.rs

symbol

gossip_suppressed_behind_tip_total

role

Counts kernel-emitted %gossip effects dropped while the node is catching up.

evidence

The metric should fall to roughly zero after a node reaches Tip; nonzero values explain quiet local gossip.

driver-suppression-test

file

crates/nockchain-libp2p-io/src/driver/tests.rs

symbol

test_gossip_effect_suppresses_all_outbound_gossip_while_catching_up

role

Proves a catching-up node fans out zero heard-block/heard-tx gossip and increments the suppression metric.

evidence

The test builds a deferred backlog, emits heard-block and heard-tx gossip effects, observes no swarm messages, and expects metric count 2.

Receipt Fields

syncMode
behindTipEstimate
gossipSuppressedBehindTipTotal
routeTableSize
connectedPeerCount
tipStatus
stateJamFingerprint
nockchainCommit
nockchainRelease
fakenetBindAddr
peerMultiaddr
walletEndpointMode
verificationStatus

source-inspected-cargo-timeout

attemptedCommand

cargo test -p nockchain-libp2p-io suppress_outgoing_gossip --lib

result

The narrow upstream cargo test compile exceeded the local five-minute turn budget, so Nocksperimental records source and upstream test inspection rather than claiming a local Rust test pass.

Additional Scenarios

stale-tx-gossip-suppressed

tx submission gossip does not fan out while syncing

likelyMeaning

The same suppression gate covers heard-tx and future gossip kinds, not just heard-block rebroadcasts.

firstChecks

syncMode, walletEndpointMode, txAcceptedPublicApiOnly, gossipSuppressedBehindTipTotal

nextAction

Use wallet/API evidence and endpoint mode to distinguish transaction status from p2p gossip suppression.

Operator Checklist

Do not treat quiet mining output as failure until syncMode is Tip.
Record gossip_suppressed_behind_tip_total with fakenet diagnostics when available.
Capture behindTipEstimate, connectedPeerCount, and routeTableSize before interpreting wrong block commitments.
Keep state-jam/checkpoint provenance attached to any commitment or balance receipt.
Distinguish no-peer networking faults from intentional behind-tip gossip suppression.
watch

https://nocksperimental.com/api/nockchain/watch

operations

https://nocksperimental.com/api/nockchain/operations

zorpMap

https://nocksperimental.com/api/nockchain/zorp

stateJams

https://nocksperimental.com/api/nockchain/state-jams

commit

https://github.com/nockchain/nockchain/commit/33ba97b1e206dd89b15c61b72b7802caf2136c18