Check a receipt
Check a receipt.
Paste a receipt, upload one, or try the example. Each step runs for real. You don't need an account, and you don't have to take our word for it.
What a check proves
That this receipt is the one that was written, and that it still matches. The four steps run on whatever you paste.
What it does not prove
It does not say the credit was a good idea, or that the customer was treated fairly. It says the record was not quietly changed.
-
Leaf recomputed Not checked yet
The receipt is hashed again and compared with the hash on the file.
-
Chain link Not checked yet
The previous hash has to match the receipt before this one.
-
Merkle path Not checked yet
The path of sibling hashes has to fold to the batch root.
-
On-chain anchor Not checked yet
The anchor memo has to equal that Merkle root.
$500.00 USD
A support agent recommended a $500 customer credit, and a person approved it.
- Request
- Issue a $500 customer credit so this person stays
- Decision
- Approved by Example owner, on the phone
- Action
- Issued the $500 customer credit
- Outcome
- Customer stayed. Ticket not reopened. Estimated retained value $2,400.00.
- Agent
- support-agent · v1 · Example owner
- Rule
- A customer credit over $100 needs a person. Rule v3.
- Amount
- $500.00
- Time
- Hash
-
5034…2ea4
- Anchor
-
9d94…605f
The latest anchor is read from the status check. Status
How it works under the hood
- Canonical JSON. Object keys are sorted, and empty values are dropped.
- SHA-256 leaf. The hash covers the receipt, not its id.
- Sorted-pair Merkle fold. Sibling hashes are ordered, then hashed, up to one root.
- Solana Memo anchor. That root is what the Memo program records.
The leaf and the Merkle fold are the two lines below.
sha256Hex(JSON.stringify(canonicalize(receipt without receipt_id, batch_id)))
sorted-pair fold: hashPair(a,b)=sha256Hex(a<=b?a+b:b+a); odd nodes duplicated; empty tree -> null
The latest anchor is read from the status check. Status
How the Bond works on-chain