Skip to content

SWIP-061: BPS multihop — FCFS multicast tree - #105

Draft
zelig wants to merge 3 commits into
masterfrom
swip-61-bps-multihop
Draft

SWIP-061: BPS multihop — FCFS multicast tree#105
zelig wants to merge 3 commits into
masterfrom
swip-61-bps-multihop

Conversation

@zelig

@zelig zelig commented Aug 5, 2026

Copy link
Copy Markdown
Member

Extends SWIP-60 (#104): removes the singlehop audience ceiling. A full node at capacity answers Subscribe by probing its own subtree over existing streams and returning the two shallowest attachment points — the joiner attaches to both, so every node keeps two parents (typically sisters): churn is masked, not suffered, self-healing is re-running the join, and withholding shows by comparing feeds. Join is ideally a two-step process regardless of tree size.

Key properties: forwarders are subscribers (accepting your first child = becoming a relay); no standing control state — idle cohorts are silent, probes carry depth in the frame itself; no depth bound (per-hop pricing steers joins rootward; closed cohorts are structurally singlehop); CohortSpec untouched; three control frames (Reparent, Probe, Candidates) fill the reserved Broadcast range; single new Ack field. Unmodified SWIP-60 clients attach as conformant (single-parented) leaves.

Deliberately out of scope (own SWIPs): bandwidth incentives, message history (pre-subscription delivery), broker discovery (SWIP-59, #103), NAT traversal (transport: circuit relay + DCUtR).

Wire: assets/swip-61/bps.proto — the SWIP-60 proto with the multihop control plane filled in. Implementation groundwork: bee ethersphere/bee#5435.

🤖 Generated with Claude Code

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@zelig zelig self-assigned this Aug 6, 2026
@zelig zelig changed the title add SWIP-61: BPS multihop — FCFS multicast tree SWIP-061: BPS multihop — FCFS multicast tree Aug 7, 2026
…PO_MIN

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Per SWIP-65 (PR #106): a delivery gap on a self-indexed cohort is
detectable and recoverable from storage, so the contract is satisfied
by deliver-or-recover. The second parent becomes a per-subscriber
latency/cost choice - single-parented nodes were already well-formed,
and a single-parented relay endangers only itself. Conformance items
5-6 bind only nodes that maintain a second parent.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@zelig

zelig commented Aug 9, 2026

Copy link
Copy Markdown
Member Author

Amendment pushed (1ca57ae), companion to SWIP-65 (#106):

  • Dual parenting is not required on self-indexed cohorts: a gap there is detectable at the next frame and recoverable from storage, so the contract is satisfied by deliver-or-recover. The second parent becomes a per-subscriber latency/cost choice — single-parented nodes were already well-formed (SWIP-60 leaves), and a single-parented relay endangers only itself. Conformance items 5–6 bind only nodes that maintain one. Dual parenting remains the costlier-but-faster product for the gap-intolerant live edge.

🤖 Generated with Claude Code

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant