feat(dlv): the 0x0026 bundle consumes the generic proof, and a trader can build one - #766
Merged
Merged
Conversation
… 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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
The
0x0026cut: the reserve-consumption bundle consumes the generic proof artifact, and a trader can build one the production verifier accepts.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 byeconomic_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
exact_vault_state_ccbowner_authority_evidenceAnchorPresentationV3fields 4–9 areAuthorityEvidenceV1fields 1–6, verified through the same resolver at the same position — the bytes that were checked, not a second format and not a re-fetcheconomic_proof_addrComposedVaultStatenow carries the authority evidence so a consumer takes the authenticated bytes rather than fetching an object that could differ.Proof
verify_transition_provenancefunds exactly one credit for the curve's outputV_n's reserves; an artifact proving another generation selecting nothingV_nagreement, vault-and-generation selection0x0026suitemake lintexit 0; frontend type-check 0, lint 0, jest 1101 passed;ci/production_safety_checks.shPASS (pinned 1.98.0, incl. TLA+);scripts/ci_scan.shPASS — all on tree stamp8072a355fb88, identical before and after every runOne 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.
DlvSettlestill advances the device head with noAdmissionPlanand no acceptance fence. The bundle is built and accepted by the verifier; attaching it to a real settle is the next cut.