Walrus is Carry’s storage layer. Every memory and every anchored receipt is a real, content-addressed blob — not a hash placeholder — so anyone can resolve it and confirm it exists.
How Carry talks to Walrus
Carry uses the Walrus HTTP API directly through a small client:
- Store —
PUT /v1/blobs?epochs=N on the publisher returns the real blob id, which becomes the memory’s walrusRef.
- Verify —
GET /v1/blobs/{id} on the aggregator. The receipt’s “verified” badge is an independent aggregator GET anyone can repeat.
Public verifiability
Captured memories become public Walrus blobs by default — and that’s deliberate. It means a receipt’s “verified” badge isn’t a label Carry controls; it’s a check anyone can reproduce against any testnet aggregator. That public verifiability is the strongest version of the proof story.
Configuration
Set CARRY_MODE=mock (or omit the Walrus URLs) to use a deterministic in-memory MockWalrus — handy for offline development and tests.
Receipts on Walrus
When an answer is anchored, the canonical receipt JSON is stored to Walrus first; its blob id and blake2b256 digest are then recorded on-chain in the Receipt object. The verifier later re-fetches that blob and re-derives the digest — closing the loop between storage and proof. See The hash chain.