All contracts are deployed on Arc Testnet (chain 5042002) and verifiable on ArcScan. No admin, no pause, no upgrade path: funds are only ever with the user or the contract.

Addresses

CtrlArcZ — protected transfer

The escrow. Registers per-integrator configs and holds transfers until claimed, cancelled or reclaimed.

SpendPolicyFactory + SpendPolicyAccount

The payer-side shield. The factory clones a policy-bound account per intent; the account enforces the policy and the 2-of-2. Signatures are over keccak256(SpendPolicyAction, account, target, amount, nonce, chainId), bound to the account and chain so they cannot be replayed. Use payStructHash in the SDK to build the exact bytes.

Vault

Holds the owner’s USDC, funds accounts, receives sweeps. Owner-only outflows; the _moveOut seam is where the APS confidential transfer will slot in.
On Arc a USDC ERC-20 transfer moves the recipient’s native balance, so the account and vault implement receive() payable. Without it, funding a contract on Arc would revert; a plain EVM never surfaces this.