Skip to content

REACHED-by-broadcast: adopted dig-nat peers cannot receive a broadcast -- no wire frame, no dig-gossip ingest API (BLOCKED) #581

Description

@MichaelTaylor3d

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:

  1. 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.
  2. 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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    kind:businessa person can DO something new, or money moves, or a shipped surface stops lying to them

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions