ReferenceUnder review
Payment scheme in ETH
Native ETH has no signed-transfer standard, so paying with one signature takes a contract. Here is how we are solving it.
The problem
Most x402 payments use USDC, which supports EIP-3009 transferWithAuthorization: the payer signs a message and anyone can submit it, so the payer pays with one signature and no gas. Native ETH has no such function. To pay in ETH with one signature, a contract has to be involved.
Options
| Option | How it works | Trade-off |
|---|---|---|
| A. Vault + EIP-712 vouchers (proposed) | The agent wallet deposits ETH into a vault contract. Each call signs a voucher (payer, seller, amount, nonce, deadline, request). The facilitator redeems vouchers in batches. | One signature, no gas per call. Needs a deposit first. Gives mandates, the kill switch and escrow a natural home. |
| B. WETH + Permit2 | The agent pays in wrapped ETH with a Permit2 signature. | Works with standard tooling, but it is WETH rather than ETH and needs a one-time approval. |
| C. Plain ETH transfer | The agent sends ETH and puts the transaction hash in the header. | No new contract, but a transaction and gas on every call, plus a wait for confirmation. Breaks the single request. |
Current direction
Option A is proposed, with B as a compatibility path so standard x402 clients can still pay. This page will be updated when the decision is made; see the Changelog.