Skip to content

feat(dlv): the 0x0026 bundle consumes the generic proof, and a trader can build one - #766

Merged
cryptskii merged 1 commit into
mainfrom
feat/dlv-reserve-consumption-bundle
Sep 4, 2026
Merged

feat(dlv): the 0x0026 bundle consumes the generic proof, and a trader can build one#766
cryptskii merged 1 commit into
mainfrom
feat/dlv-reserve-consumption-bundle

Conversation

@cryptskii

Copy link
Copy Markdown
Collaborator

Summary

The 0x0026 cut: the reserve-consumption bundle consumes the generic proof artifact, and a trader can build one the production verifier accepts.

routing advertisement            (locator only)
        ↓
(owner economic position, artifact address)
        ↓
resolve the owner's write-once R_econ root      ← the verifier's own walk
        ↓
fetch + verify EconomicProofArtifactV1          ← against coordinates the ARM derived
        ↓
select the exact vault reserve leaves           ← this vault, this generation
        ↓
owner authority from the authenticated presentation
        ↓
ReserveConsumptionEvidenceV1  →  the REAL 0x0026 verifier  →  build_write_set

One proof source, not two

The bundle carried its own reserve_a_state / reserve_a_siblings / reserve_b_state / reserve_b_siblings — a second representation of exactly what the artifact proves. Those are now reserved, replaced by economic_proof_addr. Two representations of one fact can disagree; one cannot.

The arm fetches the artifact by the same inner content identity every object in this DAG uses, re-hashes it to the named address, verifies it against the owner, position and root it derived itself, and then selects exactly the two reserve leaves for this vault at this generation. A valid proof of another generation, or of another vault by the same owner, selects nothing.

The trader's side

input source
exact_vault_state_ccb re-encoded from the composition whose commitment the settle names; the producer re-hashes it and refuses a mismatch rather than assuming
owner_authority_evidence the composition's own anchor presentation. AnchorPresentationV3 fields 4–9 are AuthorityEvidenceV1 fields 1–6, verified through the same resolver at the same position — the bytes that were checked, not a second format and not a re-fetch
economic_proof_addr the advertisement's locator, copied and never trusted; the verifier is what makes it mean anything

ComposedVaultState now carries the authority evidence so a consumer takes the authenticated bytes rather than fetching an object that could differ.

Proof

check result
two devices, production verifier: owner funds legitimately → admitted create → publish; trader with no record of the vault composes from storage, locates the proof, builds the bundle, drives it through the real write-set builder from its own real admitted pre-state, and verify_transition_provenance funds exactly one credit for the curve's output green
mutation arms, each failing for its own reason: artifact address (proof does not exist), economic position (artifact names another), owner authority (malformed evidence), vault and generation (state no longer hashes to the settle's parent binding) green
new core controls for gates that had none: proven leaves disagreeing with V_n's reserves; an artifact proving another generation selecting nothing green
mutation, per rewired gate: artifact verification, V_n agreement, vault-and-generation selection each reddens only its own named test; restored checksum-verified
core 0x0026 suite 13 / 13
boards workspace 74 binaries, 3968 passed / 0 failed / 17 ignored (dsm lib 1692/0, dsm_sdk lib 1815/0/7 ignored), exit 0; node 11 binaries, 276/0, exit 0; root make lint exit 0; frontend type-check 0, lint 0, jest 1101 passed; ci/production_safety_checks.sh PASS (pinned 1.98.0, incl. TLA+); scripts/ci_scan.sh PASS — all on tree stamp 8072a355fb88, identical before and after every run

One existing expectation changed, and it is a finding rather than an accommodation: an owner root the proofs do not belong to is now refused earlier and by name, because the artifact declares which root it proves into, where the old message came from discovering the mismatch one leaf at a time. The proposition is unchanged.

Not in this PR

No admission. DlvSettle still advances the device head with no AdmissionPlan and no acceptance fence. The bundle is built and accepted by the verifier; attaching it to a real settle is the next cut.

… can build one

The reserve-consumption bundle used to carry its own copy of the owner's two
reserve leaves and their 256-sibling paths — the same fact the generic
`EconomicProofArtifactV1` proves, in a second representation that could
disagree with the first. It now carries an ADDRESS instead:

    ReserveConsumptionEvidenceV1 {
        exact_vault_state_ccb,        // hashes to the settle's parent_binding
        owner_authority_evidence,     // the presentation's own six values
        economic_proof_addr,          // the ONE proof source
    }

Fields 3-6 are reserved, not reused. The arm fetches the artifact by the same
inner content identity every object in this DAG uses, re-hashes it to the
named address, verifies it against the owner, economic position and validated
root THE ARM derived — never anything a locator supplied — and then selects
exactly the two reserve leaves for this vault at this generation. A valid
proof of another generation, or of another vault by the same owner, selects
nothing rather than the nearest usable pair.

The trader can now produce one. Every input comes from material it already
authenticated: `CCB(V_n)` re-encoded from the composition whose commitment the
settle names (stated, not assumed — the producer re-hashes it and refuses a
mismatch), the owner's authority evidence as the composition's own anchor
presentation resolved it, and the artifact address located through the
advertisement. `ComposedVaultState` now carries that authority evidence:
`AnchorPresentationV3` fields 4-9 ARE `AuthorityEvidenceV1` fields 1-6, and
the presentation was verified through the same resolver at the same position,
so this is the bytes that were checked rather than a second format or a
re-fetch that could differ.

Proven end to end across TWO DEVICES, against the PRODUCTION verifier: the
owner funds legitimately, creates an admitted vault, publishes; a trader on
its own database with no record of that vault composes it from storage,
locates the proof through the advertisement, builds the bundle, drives it
through the real write-set builder from its own real admitted pre-state, and
`verify_transition_provenance` funds exactly one credit for the curve's
output. Five mutation arms each fail for their own reason: the artifact
address (the proof does not exist), the economic position (the artifact names
another), the owner authority (the evidence is malformed), and the vault and
generation (the state no longer hashes to the settle's parent binding).

Core-side controls added for the two gates that had none: proven leaves that
disagree with V_n's reserves, and an artifact proving another generation
selecting nothing. Three mutation cycles on the rewired arm — the artifact
verification, the V_n agreement, the vault-and-generation selection — each
reddening only its own named test, restored checksum-verified.

NOT in this change: no admission. `DlvSettle` still advances the device head
with no `AdmissionPlan` and no acceptance fence. The bundle is built and
accepted by the verifier; attaching it to a real settle is the next cut.

Boards: workspace 74 binaries, 3968 passed / 0 failed / 17 ignored (dsm lib 1692/0, dsm_sdk lib 1815/0/7 ignored), exit 0; node 11 binaries, 276/0, exit 0; make lint exit 0; frontend
type-check, lint and jest green; production safety PASS (pinned 1.98.0);
ci_scan PASS.
@cryptskii
cryptskii merged commit 9e2d0bf into main Sep 4, 2026
15 checks passed
@cryptskii
cryptskii deleted the feat/dlv-reserve-consumption-bundle branch September 4, 2026 11:21
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