Trust

Sandbox

What the program checks before it moves money, what the protocol does not promise, and who holds which key.

Devnet pilot, unaudited, not frozen on purpose.

Nobody outside the team has audited this program. It stays upgradeable so a fix can ship during the event: freezing a Solana program cannot be undone. That also means whoever holds the upgrade authority can change the program, so that key is shown below, read from the chain with its time.

Who holds what

The payer's phone
A P-256 key created inside the iPhone's Secure Enclave, which cannot be exported. Only that phone can sign its payment notes.
The program's vault
The sandbox tokens sit in a token account owned by the program's vault account. Only the program can move them out, and only to pay a merchant's signed withdrawal from the balance its redeemed notes credited.4oXuRDG3KixQpMYFMrJH6g9yM9YViDDwanzXdtkZWneuOwned by the vault account16.25 sandbox USDCVault token account on Solana Explorer(opens in a new tab)
The settlement server
It relays notes to the program and pays the network fees. It cannot forge a payer's note: the program checks the payer's own signature on chain, so a note the payer never signed fails there. It also signs confirmations and certificates with an Ed25519 key.Phones show Paid on its signed confirmation, and merchants accept its signed certificates offline, so whoever holds the server's Ed25519 key can sign a false confirmation or certificate that phones trust. The chain still decides who actually got paid.Its published Ed25519 key:cce245d81e79e785ddb47967ddf7aeb4f4198aae9d850fc04a0489b4872b7ad4
The upgrade authority
4RaquyuY9zseQTP5cTBoh8bmvMRvUyJzaHeMqKcbSksSOne key, held by one teammate, can upgrade the program today. A 2-of-3 multisig is planned (task 3.46), not done.Authority on Solana Explorer(opens in a new tab)

Read from Solana devnet at slot 509733809, , 0 s before this page loaded.

What the program checks before it moves money

  1. The payer signed this exact note. The instruction right before redeem_note must be Solana's secp256r1 signature check, over exactly the 141 note bytes, with the payer key stored in the allowance account. The program reads it only through the canonical instructions sysvar, so a forged or substituted check fails.
  2. The note is well formed and meant for this deployment. Its prefix, the USD currency and an amount above zero are checked on chain, and so are this program id, the devnet cluster and the configured mint. A note signed for another deployment never settles here.
  3. The accounts are the program's own. The allowance account must be the program's account for the note's allowance id, and the merchant record the one for the note's payee.
  4. Each serial settles once. Every allowance keeps a 256-bit map of used serials. A second note on a used serial fails on chain with the error SerialUsed.
  5. Never more than the cap. The allowance's redeemed total plus this note must stay at or under the cap that was locked in the vault when the allowance opened.
  6. Nothing settles late. The chain clock must be at or before the note's expiry and the allowance's expiry.
  7. Only the named merchants, if any are named. When an allowance lists merchants (earmarks), the note's payee must be one of them.
  8. All or nothing. Only then is the merchant's balance credited and an event logged. A failed check changes nothing.

PAYMENT-V1 section 8(opens in a new tab)redeem.rs(opens in a new tab)wire.rs(opens in a new tab)

What the protocol does not promise

PAYMENT-V1 section 10(opens in a new tab)