Product note
The address book
Save the addresses you send to, set what each one can receive, and sign every change from your wallet.
Moving money out of a wallet usually means pasting an address and hoping. One wrong character and it is gone.
opcode now keeps an address book. Check an address once, save it, then pick it from a list.
What it is
One book of labelled addresses on your account. Each entry has a label, an address, and a scope. It lives with the account rather than the browser, so it is there on any device you sign into.
Withdrawals go to a saved address. The withdraw screen has no field to paste into, so an address you have not saved cannot receive a withdrawal. Until you save one, the control reads "No saved addresses".
Scope decides what an address can receive
You set a scope when you save the address: withdrawals, trades, or both. It is enforced strictly. An address saved for withdrawals cannot receive a trade. An address saved for trades cannot receive a withdrawal.
What kind of transfer it is comes from the order itself, not from the app saying so. A withdrawal is a USDC to USDC order, and that is what the scope is checked against.
So a cold wallet you only ever withdraw to can be saved for withdrawals alone, and nothing else will route to it.
A trade can land in another wallet
Pick a recipient for a trade and that address becomes the receiver of the order you sign. The token you bought settles on-chain to that wallet, in the same transaction that fills the order. There is no second transfer afterwards.
The picker opens with "My wallet" first, so sending to yourself stays the default.
Every change is signed from your wallet
Saving an address takes more than a click.
A confirmation opens first. It is titled "Confirm address", badged "External address", and it reads: "You are saving an address that is not your wallet. Check every character before you save it." The address is set in mono with the first eight and last eight characters highlighted. A checkbox reads "I checked this address is correct." The "Confirm and continue" button stays disabled until you tick it.
If you have MFA enrolled, opcode asks for it again before the signature.
Then your wallet signs. The server issues a short-lived challenge, valid for 300 seconds. You sign an EIP-712 message covering the owner, the operation, the address, the scope, the label, and that challenge. The label and the scope sit inside the signature, so neither can be edited later without breaking it. The signature is stored with the entry.
Removing an address is signed the same way.
Why it is built like this
Sessions get stolen. Signing keys are harder to take. Because saving an address needs a signature from your wallet key, a stolen session on its own cannot add a payout address or point an existing one somewhere else.
That signature is then checked again every time funds are about to move: by the app before it will offer an entry, by the API when it quotes, by the API again when the order is submitted, and by the settlement service on its own. Four checks. An entry that does not verify against your wallet is hidden rather than offered, and the list says so: "Some saved addresses could not be verified for this wallet and are hidden."
That makes the book tamper-evident, not private. Labels and addresses sit on our servers in plain text, and we can read them. What the signature gives you is that nothing gets into the book, or changes inside it, without your key.
Using it
Open the account menu and choose Address book.
Saving one takes a label, like "Cold wallet", the address, and what it is for. Addresses are validated against the EIP-55 checksum. A label is required. The same address cannot be saved twice. Your own wallet cannot be saved either, since it is always available.
When you send, the picker is titled "Send to" and its search box matches on label or address. Each row can copy the address, show or hide it, or remove it. Every address in the book is an Ethereum mainnet address.
Check an address carefully once. After that you pick it from a list.
The beta post walks the rest of the flow, from your first quote to Ethereum settlement.
Start at app.opcode.fi.