Vault
Your main treasury. Holds USDC and funds disposable accounts. The funding leg
is the one that becomes confidential under Arc Privacy Sector.
Disposable account
A single-purpose address, locked to one merchant, one cap, one expiry. Cloned
per payment at a deterministic address. It stores no payer identity: the owner
is bound only through the CREATE2 salt.
The Machine
The enclave co-signer. Runs policy plus the firewall and vetoes bad spends by
withholding its signature.
The trust model
-
Outbound to a third party (the merchant): the co-signer authorizes each
spend. A spend needs only “The Machine” signature, not a signature from you.
This is safe because the funds are hard-locked to the pre-set
targetand capped bymaxAmount: the co-signer can never steal or redirect, it can only push the exact payment you set up when you created and funded the account. It refuses a spend that fails policy or the firewall, so a bad payment is physically impossible, not merely warned against. -
Return to your own vault: gated on the vault itself. The vault is stored only
as a commitment (
vaultHash); a sweep passes the vault address, the contract checks it against the commitment and requiresmsg.sender == vault, so the vault stays hidden until it sweeps and only it can trigger one. No co-signer signature is involved either way. Afterexpirythe same call is open throughsweepExpired, which is the liveness escape hatch: if the enclave goes dark, the payer still holds the vault key, so funds are never stranded.The sender gate is the point, not an inconvenience.vaultHashis a hash of a 20-byte address on a transparent chain, so it is crackable. Without the gate, whoever cracked it could sweep an expired box and publish the vault-to-box link the payer never chose to reveal. Bind the box to an address you can transact from: your own wallet, or the stealth address for a stealth box.
What a veto stops
Because the target is locked on-chain, a script cannot redirect a payment. The co-signer adds the dynamic layer: it will not sign for a target the firewall flags as a drainer or a poisoning lookalike, an amount over the cap, or an expired window. In whole-wallet mode the same veto can gate every outflow, not just payments.Privacy, honestly
The account surface leaks nothing about you. There is noowner variable and
no owner() getter, so a merchant paid from the ephemeral address cannot read who
funded it from the account; the deployment calldata and the AccountCreated event
carry only ownerHash (indexed), not your address; and the vault is revealed only
at the moment of a sweep, and only to whoever already knows it. That part is fully
delivered now.
What is not yet hidden is the funding transaction. Your wallet to the
ephemeral account is a normal transfer on a transparent chain, so an observer can
still trace you to the ephemeral address through that one transaction. This cannot
be hidden today without confidential transfers. So the honest line is: the account
itself reveals nothing about you, but the residual on-chain link is the funding
transaction, which becomes confidential under Arc Privacy Sector. Full payer
privacy (hiding the funding link and amounts) waits on APS. The security legs
(policy, veto, sweep, one-way valve) are fully real now.
Roadmap: Arc Privacy Sector (APS). APS is Arc’s confidential execution
environment (TEE-based, running alongside the public EVM). When it ships, the
funding leg and account state move into APS and become confidential, and the same
co-signer speaks the same language as Arc’s own privacy backend. The contracts are
architected for this: custody behind an adapter, getter-first reads (not
event-dependent), and clean function-level access boundaries.
Beyond one-off payments
The same account withMODE_PULL expresses recurring, policy-bounded spending:
- Safe allowances / subscriptions. A merchant can pull up to a cap on an
interval, every pull gated by the co-signer. A
perPullMaxfield caps each single pull: a subscription sets it to the per-period amount, so even a misbehaving co-signer cannot drain the whole cumulative cap in one pull. That per-pull cap is the real subscription guarantee. Kill the subscription by sweeping the account; the co-signer stops signing. No infinite-approval drainer. - Agent wallets. Hand an agent a tightly-scoped disposable account; it transacts autonomously but cannot exceed policy, because the enclave vetoes.