# Verify receipts in Rust and in Python **What it shows.** WAI receipts checked offline, twice: once by the reference implementation (`rust/`, on the `wai` crate) and once by a second implementation in plain Python (`python/`, standard library only, sharing no code with the first). A receipt index sits beside each object; it names the object's group receipt, which is signed with Ed25519 and holds the Merkle root the object's BLAKE3 content hash reaches. **Run it.** ```sh wai create my-check --template verify-receipts cd my-check wai hello receipts # writes an object and its receipts in receipts/ python3 python/verify_receipts.py receipts cd rust && cargo run --release -- ../receipts # builds the wai crate from the repository ``` **What you see.** Each verifier prints `ok` for the object, the group that signed it and the key that signed the group. Change one byte of `receipts/*.wai`, or of a file in `receipts/rcpt/`, and each prints `FAIL` with the reason. **Make it yours.** Point either verifier at any directory laid out the same way: an object `.wai`, its index `.wai.receipts`, and the group receipts under `rcpt/`, as WAI's HTTP delivery serves them beside an object. `wai verify ` runs the Rust checks from the command line. **With a coding assistant.** Run `wai setup-agent` in this directory: it writes the instructions an assistant reads and connects it to WAI's tools. **License.** Apache-2.0: the text is in `LICENSE`, and a project `wai create` makes from this example carries it.