Ethereum
USDC on L1 by signed authorization; the operator pays the gas.
What runs on Ethereum
- Payments move test USDC with EIP-3009 transferWithAuthorization. The sender's wallet signs the transfer and the operator's treasury submits it and pays the gas, so no Dial wallet ever holds a gas token.
- The authorization nonce is keccak256 of the payment id, so every transfer on-chain maps back to one payment on the ledger.
- Money for someone not on Dial yet waits in a wallet the operator holds on this chain and moves out by the same signed transfer.
- Pay pages (/@handle) give an EIP-681 link with the token and chain id, so any EVM wallet opens a filled-in transfer.
Try it
Test money only. Ethereum is switched on here, so this settles on Ethereum Sepolia.
Text it
1 · Text hi and reply with a name. That's the signup.
Text hisend @handle $1 on ethereumOn a laptop? Scan to open it on your phone
Swap @handle for anyone on Dial, or for a phone number. The operator texts back a 6-digit code; reply with it, and the receipt links the transaction. Your first payment on Ethereum opens a wallet there with a small drop of test money.
Watch it settle
No payment on Ethereum Sepolia yet.
The newest payment on Ethereum Sepolia, from the ledger. Checks again every 30 seconds.
From an agent
send_payment {"to":"@handle","amountUsd":"1","chain":"ethereum"}The tool returns awaiting_approval, and the person who pays approves it by text. Setup is on /agents.
ethereum:0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238@11155111/transfer?address=<wallet>&uint256=1000000Every pay page (/@handle) shows this link with the person's own address in place of <wallet>.
Built for Ethereum
What Ethereum lets the operator do beyond sending money, each with a demo you can use here. The demos only read: they send no texts and move no money.
Names
Pay or withdraw to a name instead of an address.
- Text "withdraw $5 to vitalik.eth" and the operator resolves the ENS name through the ENS Universal Resolver on Ethereum Sepolia.
- The name resolves once, when the payment is created. The payment keeps that address, settlement never resolves again, and the confirmation shows the name next to the address.
Name lookup
The address a name points to right now. Nothing is sent.
On the ledger
Read from the ledger on every visit. A chain is marked Live only once a payment has settled on it.
Code
- EVM adapter
src/lib/settlement/evm.ts - EVM adapter tests
tests/settlement/evm.test.ts - Tests on a local chain
tests/settlement/evm.anvil.test.ts - Chain registry
src/lib/settlement/registry.ts - Pay links
src/lib/pay-links.ts