One WAI envelope, one Merkle leaf, one Ed25519 signature.
A live publisher emits a single WAI envelope into a fresh group. The Merkle tree is one node — the leaf itself — and the per-group signature binds (track_alias, group_id, root_hash, leaf_count, joules_total, signer_pubkey) under RFC 8032 Pure Ed25519. parent_receipt_hash is null because this is the chain head for this publisher key.
57 41 49 31 // "WAI1" magic (WAI SPEC.md §2)
5e 00 00 00 // manifest length (u32 LE)
{"wai":"1.0","media":"audio","intent":"replicate","model_requirement":{"capability":"wai.audio.opus","fallback":null},"conditioning":{"kind":"opus"}}
a0 0f 00 00 // payload length (u32 LE)
// 4000 B opus frame stream (20 ms frames @ 48 kHz) (loading) Verifier algorithm — six numbered steps (§3)
- 1. Parse and shape-check. Reject if
sigis not 64 bytes, ifsigner_pubkeyis not a valid Ed25519 verifying key, or if any required §2.4 field is missing. - 2. Verify the Ed25519 signature over the canonical signing payload (§2.3) per RFC 8032 Pure Ed25519. On success, the receipt's
root_hashbecomes the verified root. - 3. Check parent linkage. If a previous receipt is known for this
signer_pubkey, recompute its BLAKE3 and compare toparent_receipt_hash. - 4. Recompute the BLAKE3 content hash (§2.1) over the received WAI envelope bytes and compare to the object receipt's
content_hash. - 5. Walk the Merkle inclusion proof (§2.2 domains) and compare the resulting hash to the verified root.
- 6. Accept. The object's bytes are bound to
signer_pubkeyat(track_alias, group_id, object_id)with the publisher's declaredjoules_microandorigin.