Skip to content

Attach unverified_mirror_coin_id at the DHT announce (blocked on the dig-dht 0.15 cascade) #422

Description

@MichaelTaylor3d

Task

Step 7's DHT pointer half — attaching unverified_mirror_coin_id to this node's provider
announce (crates/dig-node-core/src/seams/dig_peer/dht.rs, announce_inventory_ids) and
re-announcing on epoch rollover — is BLOCKED upstream and cannot be unblocked by a version edit in
dig-node.

The measurement, re-taken 2026-08-30 against index.crates.io

crate latest published requires
dig-download 0.21.0 dig-dht ^0.13
dig-peer-selector 0.10.0 dig-dht ^0.13
dig-dht 0.15.0

^0.13 and 0.15 are semver-INCOMPATIBLE on a 0.x line, so declaring dig-dht = "0.15" in
dig-node resolves two dig-dht lines while cargo prints success. ProviderRecord::unverified_mirror_coin_id
lives in dig-dht 0.15 (dig-dht#23) and a repo-wide grep for that identifier returns zero hits in
the dig-node tree.

Bridging the two lines with a shim is the byte-drift class this ecosystem does not do.

Resume condition — checkable, not a judgement

dig-download and dig-peer-selector both release against dig-dht ^0.15. Then dig-node takes the
tier in one bump (measured from the LOCK, never the caret — name every crate explicitly with
cargo update -p <crate>, since a caret-compatible transitive is invisible to cargo fetch and can
leave two lines alive while reporting success).

What the pointer must then do

  • It is UNTRUSTED (NC-12): it tells a verifier where to look, never what the coin is. Its absence
    must not degrade discovery and must not read as a fault.
  • A verifier accepts a coin only on the coin's own evidence — at the mirror puzzle hash, genuinely
    $DIG with the asset id re-derived from the creating spend, carrying the declared collateral, and
    MirrorCoin::advertises(store, root, epoch) passing.
  • Re-announce on epoch rollover. dig-dht has no clock, and republish re-attaches whatever was
    recorded at announce time — so an un-refreshed pointer is wrong one epoch after publication, and a
    correctly-collateralised node reads as uncollateralised.

Parent

#412 ·
#377 ·
epic https://github.com/DIG-Network/dig_ecosystem/issues/3166

Metadata

Metadata

Assignees

No one assigned

    Labels

    mvpgates the releasable MVP

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions