Scrip

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

kindSweep, Settle or Sponsor
recipient · payerThe 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 · paidThe net inflow that triggered a sweep, the rate applied, the slice converted. For an intake: what was paid, 100%, what was paid.
asset · amount_rawThe mint and the raw units received. Raw, so a rebase never reads as a sale.
priceThe Pyth feed, price, exponent, confidence and publish time the sweep was verified against. Optional for an intake.
reason_hashsha256 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_30dThe 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.