Add the client
Name, mandate size, expiry, chains. Nothing has been asked of the client yet.


The client signs one EIP-712 message. That arms a capped, dated, revocable trading mandate on every chain the desk operates on. Custody never moves.
The capital stays in the client's own wallet the whole time.
Four approvals, four audit lines, four chances to sign the wrong spender.
A counterparty goes bad and the desk is queuing in four gas markets while it does.
One message to grant. One to revoke. Neither waits on a second chain.
Onboarding is a link and a signature. The desk is trading the same afternoon.
Sign upThe ERC-2470 singleton factory: identical init code, identical salt, identical address. That is what makes a signature portable — the EIP-712 domain pins chainId = 1 and still names the verifying contract.
Optimism Sepolia was added after the fact — a chain CrossPermit had never touched. It landed at the same address and returned the same domain separator, with no coordination at all.
Name, mandate size, expiry, chains. Nothing has been asked of the client yet.
A one-client invitation carrying the mandate, not a request for keys. Revocable before it is ever opened.
Their wallet opens on a page that has already rendered every per-chain bundle in plain language. They read it before they sign it.
The capital arrives on the desk with its bounds attached. Uniswap v4, Aave v4, tokenized equity — inside the mandate, never past it.
A real PoolManager per chain, paid out of the mandate on the path any dApp uses.
Hub-and-spoke: utilisation is read at the Hub, where the liquidity sits, not at the market.
Every fill bounded three ways: minimum out, oracle staleness window, deviation band.
Amount, spender and expiry live inside the message they signed. Nothing can raise them afterwards.
One signature LOCKs the desk everywhere — proved by a spend that reverts, not by a flag. Today that signature is sent from the lifecycle script: the dashboard withdraws the invitation, it has no revoke button yet.
The relayer pays gas and nothing else. It cannot change recipient, amount or spender.
Every grant, spend and revocation lands in the control-plane event ledger.
Three testnets are live now. Add a client and send the link.