Skip to main content
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:
  • StorePUT /v1/blobs?epochs=N on the publisher returns the real blob id, which becomes the memory’s walrusRef.
  • VerifyGET /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.