Mint
What “mint” means on EDMA
Trade: minting an EMT (Event/Milestone Token) — a non-transferable receipt that says a gate passed. It is the switch that later lets money flip Locked EDSD → Unlocked EDSD.
Tokens: minting a PoV-backed unit (e.g., Energy 1 MWh, Carbon 1 tCO₂e, hourly attributes) — a transferable/retirable asset bound to a dossier.
Mint does not move cash and it never burns fees. Money moves (and burns happen) at Settle/Release, not at Mint. Rule stays: No EMT, no funds.
A. Trade — EMT mint
Purpose (plain): record that a milestone really happened, in a way the settlement contract can trust.
Inputs to the Gate (single call): order_id, stage, schema_id (the checklist name); PoV hash (canonical dossier); Role-signed attestations (e.g., Inspector, Terminal/Carrier, DC/3PL), each referencing the same PoV hash; Uniqueness key for One-Claim (e.g., {BL, seal, containers_subset}); Funding precondition for post-production gates (must-fund before shipping: required Locked EDSD present)
What the Gate checks: Checklist match (files & fields for this stage); Role-diverse quorum, active keys, freshness windows; Equality: all counted signatures bind to the same PoV hash; One-Claim reserve (free → reserve now; taken → revert); Funding present (where required); No revocation on counted attestations
Atomic flow (one transaction):
PASS → One-Claim RESERVE succeeds
Mint EMT for {order, stage, sublot} with pov_hash, claim_id
One-Claim FINALIZE (locks uniqueness)
Emit EMTMinted (human-readable proof for explorer/receipts)
What does not happen at mint: No flip of funds (that’s Settle/Release); No protocol fee charge; no EDM burn; No off-platform cash-out enablement
Typical failure codes:
E_PENDING_FUNDS · E_SEAL_MISMATCH · E_LOT_LIST_MISMATCH · E_TEMP_OUT_OF_RANGE · E_QUORUM_MISSING · E_STALE_ATTEST · E_ONECLAIM_TAKEN.
API (balanced):
POST /v1/trade/proof/{order_id}/{stage} → { pass|fail, reason, gate_pass_id? };
POST /v1/trade/release/{order_id}/{stage} consumes gate_pass_id
(handled in Settle)Webhooks:
pov.gate.pass · pov.gate.fail · oneclaim.finalized · trade.milestone.passed
(EMT minted)Ledger impact: a new EMT entry with
pov_hash / claim_id.
No fee line; no burn line.
B. Tokens — asset mint
Purpose (plain): create an evidence-bound, listable unit (e.g., 1 MWh, 1 tCO₂e, hourly attribute) that can later settle or retire.
Inputs to the Gate: schema_id, token category (Energy/Carbon/Hourly), quantity (fixed); PoV hash for the dossier (
device/time window, method/region/vintage, project/serial, etc.
); Role-signed attestations (registry/oracle, metrology/sensor OEM, auditor
); Uniqueness key for One-Claim (e.g., {program, project_id, vintage, unit_serial
} or {device_id, start_ts, end_ts, quantity_Wh
})Checks & flow: identical pattern to Trade: PASS → One-Claim RESERVE → TokenMinted → One-Claim FINALIZE (all atomic). The token stores pov_hash, claim_id, method/region/vintage (or device window), and attestor refs.
What does not happen at mint: No protocol fee charge; no EDM burn; No settlement or retirement (that’s Settle / Retire)
API:
POST /v1/tokens/mint (via Gate) → { token_id, pov_hash, claim_id };
Later:POST /v1/tokens/settle
or /retire (see next tx types)Webhooks:
tokens.token.minted · oneclaim.finalized
Ledger impact: token appears with PoV/One-Claim metadata; no fee/burn yet.
Security & invariants
PoV-first. No mint without a Gate PASS bound to a canonical PoV hash.
Atomic uniqueness. One-Claim reserve→finalize is inside the same tx as mint; duplicates can’t leak.
Append-only lineage. Corrections mint new EMTs/tokens with replaces: old_claim_id; we never erase history.
No money early. Mint never flips Locked EDSD or burns; settlement/release does.
Idempotent. The same (order, stage, sublot) or token_id won’t mint twice; replays are safe.
Operator checklist
Keep stage/token schemas human-readable; list exactly what “pass” means.
Use registered attestors; verify their keys are active.
Ensure every attestation references the same PoV hash.
For Trade post-production gates, fund before you mint (or expect E_PENDING_FUNDS).
If you see a fail, fix that field (seal photo, lot list, temp range) and resubmit; Mint pauses only this claim.
Quick comparison
Mint of…
Moves cash?
Fee/Burn?
One-Claim
Event
EMT (Trade)
No (cash moves at Release)
No
Yes (atomic)
EMTMinted
Token (Tokens)
No (cash moves at Settle)
No
Yes (atomic)
TokenMinted
Plain recap
Last updated