Skip to main content

Documentation Index

Fetch the complete documentation index at: https://enfinitos.mintlify.app/llms.txt

Use this file to discover all available pages before exploring further.

A proof pack is the unit of audit. Every governed action — a delivery event, a rights state transition, a policy change, a metering projection, a settlement reconciliation — eventually appears, signed, in a proof pack.

Shape

{
  "header": {
    "tenantId": "tnt_...",
    "sequence": 42,
    "previousPackHash": "0a1b2c…",
    "issuedAt": "2026-05-14T10:00:00.000Z",
    "verificationKeyId": "vk_2026_v1",
    "schemaVersion": "proof-pack/v1"
  },
  "body": {
    "campaignId": "cmp_...",
    "events": [ /* events ordered by sequence */ ],
    "meteringProjection": { /* re-projectable from events */ },
    "settlementReconciliation": { /* re-runnable from projection */ }
  },
  "signature": "ed25519:..."
}

Canonical-JSON serialisation

The signature is computed over the canonical-JSON serialisation of { header, body }. Canonical means:
  • Object keys sorted lexicographically.
  • No whitespace between tokens.
  • Integers serialised without trailing .0.
  • Floats serialised in their shortest round-trip form.
  • Strings serialised with the minimum-escape set per RFC 8785.
The auditor library reproduces this serialisation deterministically across TypeScript, Python, and Rust.

Chain semantics

header.previousPackHash is the SHA-256 of the previous pack’s serialised signed bytes. Sequence 0 uses a hash of 32 zero bytes. A break in the chain means: there is no pack with the expected hash. The auditor reports the first break by sequence.

Schema versioning

header.schemaVersion identifies the proof-pack schema. Schema changes follow strict semver — a backwards-incompatible change bumps the major version. The auditor refuses to verify a pack whose schema version it doesn’t recognise.

Embedded events

The events array is ordered by sequence within the pack. Each event is itself signed (a sub-signature with the same verification key); this makes events independently verifiable when extracted from a pack for a regulator request.

Where to find a sample

The conformance vector set under packages/sdks/auditor-ts/__tests__/vectors/ in the open-source auditor repo includes worked examples — valid packs, intentionally-broken packs, chain-break scenarios — used as fixtures by all three language ports (sdk-auditor-ts, sdk-auditor-py, sdk-auditor-rs).