Waypoint Publication Process
Responsibility. Our scoped open Bitcoin-anchor channel: Hashcash → pool → batch/tree → confirm → path fetch window (Bari-shaped). Used by a producer that publishes paths via this channel. Constrained by Construction’s two-way Bitcoin bind.
Source. Satoshi Hike 2.3 (tag spec-2.3.0). Section numbers are the specification section numbers:
- §13.6 Bari waypoint service
- Rule BR1 Acceptance and Hashcash
- Rule BR2 Deduplication
- Rule BR3 Pool and tree
- Rule BR4 Path serving
FRAMING (2026-10-24). Construction owns the required two-way Bitcoin bind (headers into the hike; anchors that make history observe the hike). This document scopes batching as the path we specify. Direct-to-Bitcoin plant/confirm/fetch with different timing is a similar but out-of-scope mechanism; Construction’s bind still holds. Plant-measurement procedure (former §14.3 path/plant checks against the portable index) lives in 06-Measurement_Record_Process.md. Canonical path-body layout is part of that measurement text. Bari fetchability (path served in the anchor window) is the real include window for anchored paths.
13.6 Bari waypoint service
Normative for a Bari operator. Bari is the service at {bari-url}. This section states what a conforming Bari does with a waypoint POST and a path ask. It is the whole Bari rule set for this file. An implementation constant does not add another rule.
Rule BR1. Paid waypoint
Bari only accepts or denies a submitted waypoint. It accepts a POST if and only if the POST carries a valid Hashcash payment solved within ±1 block of Bari’s current block. That is, all of these hold:
- The body is exactly 32 bytes.
X-Bari-Hashcash-Nonceis the shortest decimal spelling of au64.X-Bari-Hashcash-Headeris 160 hexadecimal digits, the 80 fee-header bytes. - The fee header is one of these three blocks, judged against Bari’s own view of the Bitcoin best chain when the POST arrives:
- current: its
header_hashequals the hash of Bari’s tip; - before: its
header_hashequals the previous-block hash of Bari’s tip; - after: its previous-block field equals the hash of Bari’s tip, its
nBitsequals the required target for the plane (live plane: the Bitcoin mainnet consensus target for the height of Bari’s tip plus one, including a retarget at a 2016-block boundary; test plane: the fixed synthnBitsof section 9), andSHA-256(SHA-256(header)), read as a little-endian 256-bit integer, is at most the target thatnBitsencodes.
- current: its
- The section 13.1 digest over
SHA-256("bari-hc-v2" ‖ bari_origin ‖ header_hash), the 32 body bytes, and the nonce has at least 21 leading zero bits. Herebari_originis Bari’s own public origin, serialized as section 13.1 states.
An accepted waypoint is answered 204 and Bari holds it. Nothing else about timing applies: the gap between Bari’s tip and the producer’s tip, the arrival time, and which of the three blocks the fee was solved on do not change the answer. Any other POST, unpaid or invalid in any way, is answered with a plain 402 and nothing more. Bari’s only answers to a waypoint POST are 204 and 402.
Rule BR2. Dedupe
Normative. Dedupe applies only to paid posts. The dedupe key is the 32 waypoint bytes within one pool. A POST that meets Rule BR1 and whose waypoint Bari already holds in the current pool is answered 204 and makes no second entry. Any POST without a valid fee is answered with a plain 402, duplicate or not. Bari checks the fee before dedupe.
Rule BR3. Pool and tree
Normative. Bari appends each accepted waypoint to its pool. When a beacon arrives, that is, a new block on Bari’s best chain, Bari builds the tree from the pool, and that clears the pool for the next stage. Pool capacity, and what happens when a pool is full, are out of scope of this file.
Rule BR4. Path serve
Normative. GET {bari-url}/path/{leaf} answers 200 with the canonical path body (section 14.3) once the waypoint’s plant is included in a block, through the last offset of the anchor window (section 13.1). Otherwise it answers 404 with exactly one of the phrases still in the pool, sealed but not in a block yet, not included, already archived after it was served, or unknown. A path ask is never refused for timing.
Informative. Bari’s cost per entry is one Hashcash fee. The fee header can only come from a three-block span of the best chain, so precomputed fees are bounded to that span, and the origin binding stops one fee from being reused at a second Bari operator. The 21-bit difficulty is a constant of this file (P13.5).
FRAMING note on BR4 “section 14.3”. The canonical path body layout formerly adjacent in §14.3 is now in Measurement Record (§14.3 there). Wording of Rule BR4 itself is unchanged.
Republished from pcoc 1b9f632 (spec/ six-doc pack; same bytes at e8030ba). Raw markdown.