Lock SOL into an on-chain escrow, sign voucher messages while offline, settle them later — replay-protected, expiry-bounded, fully self-custody. Every transaction below is a real call on devnet.
Devnet when it asks to approve transactions. Need SOL? Use faucet.solana.com.(your_pubkey, seed). Real create_escrow tx, real lamports moved."MORA" | escrow | nonce | payee | amount) and Phantom's signMessage Ed25519-signs it. No RPC call — purely offline.settle ix. Contract validates the previous ix was Ed25519 over the canonical bytes, transfers lamports to the receiver, creates a Receipt PDA. Replay of the same nonce fails on init.close_escrow reclaims rent + remainder. Whole protocol is three on-chain instructions.