Docs
Receipts.
A permanent on-chain account, about 350 bytes, written in the same transaction as the conversion. Anyone can open it, forever.
What one carries
| kind | Sweep, Settle or Sponsor |
|---|---|
| recipient · payer | The recipient’s address; the payer for an intake. A sweep has no payer: senders are attributed off chain from the account’s transfer history, and labelled as such. |
| basis · rate · paid | The net inflow that triggered a sweep, the rate applied, the slice converted. For an intake: what was paid, 100%, what was paid. |
| asset · amount_raw | The mint and the raw units received. Raw, so a rebase never reads as a sale. |
| price | The Pyth feed, price, exponent, confidence and publish time the sweep was verified against. Optional for an intake. |
| reason_hash | sha256 of the reason, which travels as an SPL Memo in the same transaction. The page shows the memo only if it hashes to this. |
| measured_7d · measured_30d | The recipient’s total raw balance of the asset at 7 and 30 days, written by measure_receipt, which anyone may call. |
Where it lives
["receipt", book, release_id] for a sweep; ["receipt", payout, release_id] for an intake. Derivable by anyone who knows both, which is the point: a receipt nobody but us can find is not a public record.
The page
/receipt/<signature> is built from one signature and nothing else: the transaction names the accounts it touched, the one owned by the program with the Receipt discriminator is the receipt, and the memo in the same transaction is the reason. No session, no database. It renders identically from a cold RPC with our servers off.
Who pays for it
Rent is about 0.003 SOL, permanent. On a sweep the keeper advances it and is repaid from the owner’s float; on an intake the payer pays it, shown on the pay page as “network and permanent receipt”. Owners pay for their own permanent records, transparently.