A buy, step by step
1
The LP funds the escrow
The LP deposits USDC into the escrow contract. For each payment rail they set terms: currency, minimum rate, and a hash of the account that receives payments.
2
The user opens an order
The user picks an offer and signs
signal_intent. The orchestrator checks the rate and limits, then locks that amount of the LP’s USDC for this order. The order gets a pay-by time and a settle-by time.3
The user pays
Only after the lock is confirmed does the app show the LP’s payment details and a reference derived from the order ID. The user pays the LP in their payment app.
4
The phone proves the payment
The user signs in to their payment account inside the app. The phone captures the transfer record over TLS and proves, in zero knowledge, that it matches this order: amount, currency, payee, payer, reference and a final status. A verifier checks the proof and signs a claim.
5
The escrow releases
fulfill_intent checks the claim’s signature, rebuilds the order context from on-chain data, and spends the payment’s nullifier. The escrow then releases the USDC to the user.