Field note
EIP-3009: A Signed USDC Deposit, With a Public On-Ramp
Depositing USDC normally means approving a contract and then asking that contract to transfer the tokens. EIP-3009 lets a holder sign a transfer authorization instead. The target vault uses USDC's receiveWithAuthorization path so deposit can consume that signed authorization without a standing allowance.
The caller is part of the safety rule
receiveWithAuthorization requires the caller to be the payment recipient. For a vault deposit, the recipient is the vault contract, and the vault calls USDC while processing the user's deposit. The signed message binds the funding address, recipient, amount, validity interval, and nonce.
That payee-only call rule prevents a third party who sees the authorization from front-running it through another entry point. The authorization is intended to be received by the named vault, not used as a bearer cheque by any relayer.
The privacy seam
The deposit transaction remains public on Ethereum. Observers see the USDC funding address and amount, and gas funding may add more linkage. EIP-3009 changes authorization and transaction shape; it is not a shielding primitive.
The vault's privacy begins after deposit. A deposit leg enters the commitment set, and later private use is separated from the public commitment by the commitment/nullifier construction. Withdrawal is another public edge. The intended claim is therefore post-deposit transaction privacy, not anonymous funding or cash-out.
Why this belongs in the architecture
The L1 contract has only three functions: deposit, settle an epoch, and withdraw. Binding the deposit proof to the exact authorization and checking every consumed queue index inside the circuit keeps the public edge small and enumerable.
It also keeps the product statement honest. A wallet may recommend fresh funding addresses or relayed gas as ordinary L1 hygiene, but those techniques sit outside the protocol guarantee. The architecture cannot turn a public ERC-20 transfer into a hidden one by changing the copy around it.
EIP-3009 solves a concrete authorization and front-running problem at the on-ramp. Commitments and nullifiers solve a different linkage problem inside the vault. Keeping those claims separate is the security property.
Read UTXOs and private resources → · Inspect the privacy policy →