tessera vcr

Network is live nodes receipts witnesses provenance links view graph →

Cryptographic proof that an AI agent did what it claims

Your agent hires a stranger's agent to run a model. Something comes back. Was it the specialist model, or the cheapest available? Did it even run? VCR is the receipt — a 21-field cryptographic proof of what model ran, what went in, what came out, when, and who signed it. Verifiable by anyone without contacting the provider.

See the live network Read the spec GitHub

The receipt

21 fields, deterministically serialised. The receipt_id is SHA-256 of the canonical binary encoding — change any field and the hash breaks. Signed with Ed25519 by the provider.

FieldTypePurpose
schema_versionuint16Spec version for forward compatibility
model_idbytes32SHA-256 of model identifier
verification_key_idbytes32Key to retrieve proving circuit/enclave attestation
input_hashbytes32SHA-256 of input data (data stays private)
output_hashbytes32SHA-256 of output data
proofbytesZK proof or TEE attestation document
public_inputsbytesPublic inputs to the verification circuit
proving_backendstringe.g. ezkl-halo2, tee-nitro-v1
timestampuint64Unix seconds when computation completed
parent_receiptsParentRef[]SHA-256 links to receipts this built on
provenance_depthuint16Longest chain of parent references
providerbytes32Ed25519 public key of the operator
original_priceuint64Price in smallest currency unit
currencystringe.g. USD-cents
royalty_termsstructprovider_royalty, parent_royalty (bps), cascade flag
transfer_countuint16How many times this receipt has been transferred
signaturebytesEd25519 over SHA-256(canonical_bytes)
signature_schemestringed25519
extensionsExtension[]Future-proof key-value pairs

Canonical serialisation

Every field is encoded as BE32(length) || value. Lists are prefixed with BE32(count). The encoding is deterministic — Python and Rust produce byte-identical output. The receipt_id is simply SHA-256(canonical_bytes).

encode_field(data) = BE32(len(data)) || data
uint16  → BE16 (2 bytes) → encode_field
uint64  → BE64 (8 bytes) → encode_field
string  → UTF-8 bytes    → encode_field
bytes32 → 32 raw bytes   → encode_field
list    → BE32(count) || item₀.canonical() || item₁.canonical() || ...

Five checks, all local

A verifier runs five checks against the receipt alone. No network calls, no trusted third party.

1.Integrity — recompute SHA-256 from all canonical fields, compare to receipt_id
2.Signature — verify Ed25519 signature against provider public key
3.Proof — validate proving backend output (ZK circuit or TEE attestation)
4.Output binding — SHA-256(actual_output) must equal output_hash
5.Provenance — each parent_receipt hash must match a valid receipt

Transparency logs

Transfers are appended to Merkle trees maintained by independent log servers. Domain-separated hashing prevents second-preimage attacks.

leaf_hash = SHA-256(0x00 || canonical_bytes || BE64(log_timestamp))
node_hash = SHA-256(0x01 || left_child || right_child)
root      = recursive construction, odd leaves duplicated

Any entry can be proven to exist in the tree with an inclusion proof — a list of sibling hashes and directions that reconstructs the root:

verify(leaf, path, root):
  current = leaf
  for (sibling, direction) in path:
    if direction == left:
      current = H(0x01 || sibling || current)
    else:
      current = H(0x01 || current || sibling)
  return current == root

Double-spend detection

Each log tracks ownership(receipt_id) → current_owner_key. A transfer is only accepted if from_key matches the current owner. Attempting to transfer a receipt you don't own returns 409 Conflict.

Cross-log witnessing

Log servers countersign each other's checkpoints. A checkpoint is 69 bytes:

"tessera-checkpoint-v1" (21B) || BE64(log_size) || root (32B) || BE64(timestamp)

Each peer verifies the operator's Ed25519 signature, checks for rollback (log_size must never decrease), and countersigns. The network currently requires 2-of-3 witnesses before publishing a checkpoint.

log1
Nuremberg 🇩🇪
log2
Helsinki 🇫🇮
log3
Helsinki 🇫🇮

3 seed nodes on separate infrastructure. Anyone can run a log node and join the witness network.


Provenance DAGs

Receipts reference their parents through SHA-256 hash links. Each parent reference carries a relationship type: input, reference, or aggregation. Change any ancestor and every descendant's hash breaks — the chain is tamper-evident from root to leaf.

Agent A
legal-risk-v2
depth 0
Agent B
summarise-v3
depth 1 (input)
Agent C
translate-v2
depth 2 (reference)

Agent B's receipt references Agent A's receipt_id. Agent C references B. The full supply chain is independently verifiable.


Trust without tokens

No staking, no deposits, no blockchain. Trust is computed from verifiable work history.

Trust quotient

trust_quotient = effective_stake / transaction_value

effective_stake = (direct_value + royalty_npv + dependency_value)
                  × counterparty_diversity

An operator's effective stake combines the total value of their verified receipts, projected royalty income from downstream work, and how many other receipts depend on theirs. Counterparty diversity (EigenTrust-family scoring) prevents sybil gaming — trading with yourself converges your score toward zero.

Agent Alpha
TQ: 42200+ receipts
Agent Beta
TQ: 2385 receipts
Sybil attacker
TQ: 0.350 self-trades

Royalty cascades

When a receipt is resold, royalties flow back through the provenance chain. Terms are baked into the canonical hash at creation — they can't be changed after the fact.

provider_cut  = sale_price × (provider_royalty / 10000)
parent_cut    = sale_price × (parent_royalty / 10000)
                split equally among parent_receipts
                if cascade=true, recurse into each parent

Early, high-quality work earns from everything built on top of it. The incentive is to produce foundational work, not to race to the bottom on price.


What this runs on

Cryptography
SHA-256 hashing
Ed25519 signatures
Merkle inclusion proofs
Proving backends
ZK: ezkl (Halo2)
TEE: AWS Nitro Enclaves
Backend-agnostic by design
Log server
Rust (axum + SQLite WAL)
Append-only Merkle tree
Docker: 24MB image
Network
3 seed nodes (Hetzner)
2-of-3 witness threshold
~$20/month total infra

No blockchain. No token. No consensus mechanism. Transparency logs with cross-log witnessing. The same model as Certificate Transparency (RFC 6962), adapted for compute receipts. If a log lies, witnesses catch it. If a log disappears, the Merkle proofs are self-contained.


Try it

Submit a receipt to the live network

pip install requests cryptography
curl -sL https://raw.githubusercontent.com/Henry-Shelton/tesseravcr/main/tessera-network/join_network.py | python3 -

Generates an Ed25519 keypair, creates a receipt, submits a transfer, gets a Merkle proof back. View source — 120 lines, no magic.

Run your own log node

curl -fsSL https://raw.githubusercontent.com/Henry-Shelton/tesseravcr/main/tessera-rust/tessera-log-server/deploy/setup.sh | sudo bash

Docker + Caddy on any VPS. Your node witnesses checkpoints from peers automatically. Full guide

Query the API

# Health check
curl https://log1.tesseravcr.org/v1/health

# Latest checkpoint (signed Merkle root)
curl https://log1.tesseravcr.org/v1/checkpoint

# Get an entry with provenance links
curl https://log1.tesseravcr.org/v1/entry/28

# Merkle inclusion proof for entry 28
curl https://log1.tesseravcr.org/v1/proof/28

# Full receipt with transfer history
curl https://log1.tesseravcr.org/v1/receipt/<receipt_id_hex>
See the live network → Full specification Source code

Status

ComponentStatusDetails
SpecComplete21 fields, canonical serialisation, test vectors
Python referenceCompleteReceipt, transfer, settlement, stake computation
Rust implementationCompleteByte-identical to Python. 52 tests.
Log serverLiveMerkle tree, proofs, witnessing, double-spend detection
Seed networkLive3 nodes, 2-of-3 witnessing, provenance DAGs persisted
SDK wrappersPlannedLangGraph, CrewAI integration (Phase 3A)
Trust enforcementTestedComputed in tests, not yet enforced at runtime
Payment railsDeferredIOUs sufficient for demo. Real money adds compliance.