Task
The anchored-root chain fact — the one the content-serve pin acts on — is resolved from a SINGLE
hardcoded HTTP third party on every default install. Corroborate it, or state honestly that it is not.
The path
dig-node-core/src/lib.rs:4460, :4731
-> default_anchored_resolver()
-> seams/chia_peer/coinset_resolver.rs:120
-> resolution_coinset() (:17 — hardcoded HTTP coinset)
Also single-sourced, same enumeration: lib.rs:2724, :3650, :3709, and melt confirmation
seams/dig_peer/store_melted.rs:588 (partly https://github.com/DIG-Network/dig_ecosystem/issues/2093).
Why this is the NC-12 blocker rather than a nice-to-have
https://github.com/DIG-Network/dig_ecosystem/issues/2790's acceptance requires that every chain fact
the node acts on is corroborated across several concurrently-queried untrusted peers. Measured against
origin/main @ 4efa57fc, most are: peak_height (chain.rs:196-201), coin_record_by_id (:339),
coin_spend (:348) and their cached variants (:359-372) all go through the corroborated path.
The anchored root does not — and it is the fact that decides which bytes a user is served. A single
third party that lies about it redirects content on every default install, with the pin fail-closed
against the wrong root rather than the right one.
NC-12 exists precisely to stop one voice determining a chain fact. This is one voice deciding the
most user-visible fact the node holds.
Also uncorroborated, and in scope
coin_records_by_puzzle_hashes (chain.rs:327), _by_hints (:333), _by_parent (:374), and
mempool submission (:285-291).
Scope — a finite checklist so this can close
"State it honestly" is a real option and sometimes the right one. What is not acceptable is a SPEC
that implies corroboration the code does not perform — that is the false-satisfaction class #2790 was
opened to end.
The trap to avoid
Do not add corroboration by consulting the same endpoint twice. Two providers that both resolve to
api.coinset.org are one voice — that exact defect was found and fixed in dig-wallet on
#354, where a 2-of-2 "independent-group" quorum was satisfied
by one endpoint with max_peers: 0. Independence must be derived from what a fabric can reach, not
from its type.
Context
Effort
High — this is the largest remaining piece of NC-12, and the anchored-root half touches the content-serve
trust boundary.
Task
The anchored-root chain fact — the one the content-serve pin acts on — is resolved from a SINGLE
hardcoded HTTP third party on every default install. Corroborate it, or state honestly that it is not.
The path
Also single-sourced, same enumeration:
lib.rs:2724,:3650,:3709, and melt confirmationseams/dig_peer/store_melted.rs:588(partly https://github.com/DIG-Network/dig_ecosystem/issues/2093).Why this is the NC-12 blocker rather than a nice-to-have
https://github.com/DIG-Network/dig_ecosystem/issues/2790's acceptance requires that every chain fact
the node acts on is corroborated across several concurrently-queried untrusted peers. Measured against
origin/main@4efa57fc, most are:peak_height(chain.rs:196-201),coin_record_by_id(:339),coin_spend(:348) and their cached variants (:359-372) all go through the corroborated path.The anchored root does not — and it is the fact that decides which bytes a user is served. A single
third party that lies about it redirects content on every default install, with the pin fail-closed
against the wrong root rather than the right one.
NC-12 exists precisely to stop one voice determining a chain fact. This is one voice deciding the
most user-visible fact the node holds.
Also uncorroborated, and in scope
coin_records_by_puzzle_hashes(chain.rs:327),_by_hints(:333),_by_parent(:374), andmempool submission (
:285-291).Scope — a finite checklist so this can close
single-source property stated in
SPEC.mdas a named, accepted limitation with its blast radiuscoin_records_by_puzzle_hashes/_by_hints/_by_parent— corroborated, or same treatmentvalue, each with a control that kills the always-refuse implementation
"State it honestly" is a real option and sometimes the right one. What is not acceptable is a SPEC
that implies corroboration the code does not perform — that is the false-satisfaction class #2790 was
opened to end.
The trap to avoid
Do not add corroboration by consulting the same endpoint twice. Two providers that both resolve to
api.coinset.orgare one voice — that exact defect was found and fixed indig-walleton#354, where a 2-of-2 "independent-group" quorum was satisfied
by one endpoint with
max_peers: 0. Independence must be derived from what a fabric can reach, notfrom its type.
Context
https://github.com/DIG-Network/dig_ecosystem/issues/2760
origin/main4efa57fcEffort
High — this is the largest remaining piece of NC-12, and the anchored-root half touches the content-serve
trust boundary.