The flow
1
The Machine checks first
Ask the co-signer to authorize the spend on the predicted address, before
anything is created. A veto here means nothing is deployed and no funds ever move.
2
Create the disposable address
owner,
so it can be funded before it exists and no one can front-run its slot.3
Fund it
Move USDC into the disposable address. In production this leg is confidential
(Arc Privacy Sector); today it is a plain transfer.
On Arc a USDC ERC-20 transfer moves native balance, so the account and vault
implement
receive(). This is handled by the deployed contracts.4
Pay
You sign the same struct hash the co-signer signed (nonce 0), then submit both
signatures. The funds can only reach the locked The merchant receives USDC from a zero-history address. Your vault stays private.
target, so anyone may submit.One call
For a straightforward push payment you can skip the manual steps withsettlePrivatePayment, which reads the account, runs the co-signer, signs and
submits:
Recovery and refunds
The disposable address is a one-way valve: funds can only go to the locked merchant or back to your vault.- Enclave down / abandoned: after
expiry, anyone may callsweepExpiredto return the balance to the vault. No co-signer needed. - Refund: the merchant refunds to the disposable address;
sweepExpiredsweeps it home. - Cancel early: the owner can
sweepToVault(account)any time.
Next
- Run the guard server-side: The co-signer.
- Understand the model: Payer-side shield.