Task
An adopted dig-nat peer (direct or relayed) is COUNTED and SERVED but cannot RECEIVE a broadcast
(DigMessage) -- the third property dig_ecosystem#3124 names, and the only one left once the
direct (#523) and relayed (#580) legs both register. This ticket tracks making it measurable and
then true. It is currently BLOCKED -- both prerequisites below are missing, and neither can land
inside a single dig-node PR.
Parent epic: https://github.com/DIG-Network/dig_ecosystem/issues/3124
Context
Two measured blockers, verified against origin/main:
- No wire frame. dig-node's only stream codec is
write_framed (serde_json::to_vec);
DigMessage is an opaque chia-protocol payload re-exported from chia-sdk-client via
dig-gossip. classify_request (crates/dig-node-core/src/peer.rs) dispatches on
method/length/items and has no arm for a broadcast frame -- it would fall to
PeerRequestKind::Unknown.
- No dig-gossip inbound injection API. dig-gossip's
inbound_tx is crate-private
(src/service/state.rs) and fed only by its own legacy DigLink TCP listener
(src/connection/listener.rs). set_nat_broadcast_sink covers the SEND direction only -- there
is no path for a dig-nat peer's received bytes to reach ingest.
Every dig-nat adoption site in dig-node (direct #402/#523, relayed #580) passes a None broadcast
sink today, which is the HONEST state of the whole layer rather than a shortcut taken at any one
site: dig-gossip reports such a peer unreachable for broadcast, which is true, instead of
pretending delivery that cannot happen.
Scope
Spec-first: define the wire frame shape for a DigMessage over dig-node's stream transport (or a
dedicated frame type), add the corresponding classify_request arm, and land a dig-gossip
inbound-injection API (release-first -- dig-gossip's own PR, published before dig-node adopts).
This is a genuine cross-repo family, not a single dig-node PR; it may need its own dig-gossip child
ticket once someone picks it up.
Acceptance
A test asserting bytes received at the ingest path, never send-list length (the family's
stated test bar throughout). Vacuous today -- there is no ingest path to receive into -- so writing
that assertion is itself evidence the prerequisites have landed.
Evidence
Cite the dig-gossip release + the dig-node adoption PR + the passing bytes-received test, once
built.
Task
An adopted dig-nat peer (direct or relayed) is COUNTED and SERVED but cannot RECEIVE a broadcast
(
DigMessage) -- the third property dig_ecosystem#3124 names, and the only one left once thedirect (#523) and relayed (#580) legs both register. This ticket tracks making it measurable and
then true. It is currently BLOCKED -- both prerequisites below are missing, and neither can land
inside a single dig-node PR.
Parent epic: https://github.com/DIG-Network/dig_ecosystem/issues/3124
Context
Two measured blockers, verified against
origin/main:write_framed(serde_json::to_vec);DigMessageis an opaque chia-protocol payload re-exported fromchia-sdk-clientviadig-gossip.
classify_request(crates/dig-node-core/src/peer.rs) dispatches onmethod/length/itemsand has no arm for a broadcast frame -- it would fall toPeerRequestKind::Unknown.inbound_txis crate-private(
src/service/state.rs) and fed only by its own legacy DigLink TCP listener(
src/connection/listener.rs).set_nat_broadcast_sinkcovers the SEND direction only -- thereis no path for a dig-nat peer's received bytes to reach ingest.
Every dig-nat adoption site in dig-node (direct #402/#523, relayed #580) passes a
Nonebroadcastsink today, which is the HONEST state of the whole layer rather than a shortcut taken at any one
site: dig-gossip reports such a peer unreachable for broadcast, which is true, instead of
pretending delivery that cannot happen.
Scope
Spec-first: define the wire frame shape for a
DigMessageover dig-node's stream transport (or adedicated frame type), add the corresponding
classify_requestarm, and land a dig-gossipinbound-injection API (release-first -- dig-gossip's own PR, published before dig-node adopts).
This is a genuine cross-repo family, not a single dig-node PR; it may need its own dig-gossip child
ticket once someone picks it up.
Acceptance
A test asserting bytes received at the ingest path, never send-list length (the family's
stated test bar throughout). Vacuous today -- there is no ingest path to receive into -- so writing
that assertion is itself evidence the prerequisites have landed.
Evidence
Cite the dig-gossip release + the dig-node adoption PR + the passing bytes-received test, once
built.