CrossPermit.
Drag to turn
Scroll
0x659C6F027FC4F6b2fF7A18dF1e3C3ec78a99de1B
one address · 3 chains · one signature
00 / For the desk that runs other people's money

One mandate.
Every venue the fund trades.

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.

Signatures per mandate
armed per hour · 3 chains · testnet

Custody.

3ch
←client: MERIDIAN→

Mandate armed

The capital stays in the client's own wallet the whole time.

01 / The cost of a mandate today

Four chains.
Four signatures. Four chances to be wrong.

Wallet sessions to onboard one client

Four approvals, four audit lines, four chances to sign the wrong spender.

Transactions to close the exposure

A counterparty goes bad and the desk is queuing in four gas markets while it does.

With CrossPermit, either way

One message to grant. One to revoke. Neither waits on a second chain.

CrossPermitTimes the client is ever asked to sign
EIP-712 · merkle rootChains that message covers
Universal RouterERC-20 approvals the router holds

Onboarding is a link and a signature. The desk is trading the same afternoon.

Sign up
02 / Why the signature travels

The same contract, at the same address, everywhere.

The 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.

Base Sepolia

84532
Universal Router · permit2 := CrossPermit0x73ed10744987B65fAf6BD6FFdF1039Cb7eF97002live

Optimism Sepolia

11155420
Universal Router · permit2 := CrossPermit0x2E03912851a0e442C77Ce00506aA7664E45560Aclive

Ethereum Sepolia

11155111
Universal Router · permit2 := CrossPermit0x7B68d6740C5C66967271966E62fd1A3E01743E3clive
Read live off all three deployments
DOMAIN_SEPARATOR()0x4ce820a58ffb00fe1b6cb52f083bdd1cfd176732c34db34a84517668750aa5e4
Byte-identical onEthereum · Base · Optimism Sepolia
Lifecycle8 stages · 72 checks · 0 failed

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.

03 / From cold contact to allocated capital

Four moves. One of them is theirs.

Add the client

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

CLIENTMeridian Capital · USDC · 3 chainsCAP / EXPIRY250,000 · 720h

Send the link

A one-client invitation carrying the mandate, not a request for keys. Revocable before it is ever opened.

INVITATION/c/9f4c1a2e…b7STATEawaiting signature

They sign once

Their wallet opens on a page that has already rendered every per-chain bundle in plain language. They read it before they sign it.

SIGNED1 message → 3 chainsTHEY KEEPcustody, and the right to revoke

You allocate

The capital arrives on the desk with its bounds attached. Uniswap v4, Aave v4, tokenized equity — inside the mandate, never past it.

DESKv4 pools · Aave v4 · NVDAonBOUND BYthe allowance they signed
04 / What the desk can do with it

Yield, liquidity, and equities — against live venues.

Aave v4 · Core Hub / MAIN Spoke

Supply APY

mainnet fork
Supply APR3.976%
Supply APY4.056%
Utilisation90.16%
10,000 USDC · 30 days10,032.65 USDC
Uniswap v4 · PoolManager

Fee capture

live testnets
Pool fee0.30%
1,000,000 in996,999 out
Settled throughV4_SWAP → SETTLE_ALL → transferFrom
Router ERC-20 approval0 — it spent the mandate
Liquidity

Uniswap v4 pools

seeded pools, one per chain

A real PoolManager per chain, paid out of the mandate on the path any dApp uses.

Yield

Aave v4 spokes

APY, MAIN spoke

Hub-and-spoke: utilisation is read at the Hub, where the liquidity sits, not at the market.

Equities

Tokenized desk

Ondo, read live

Every fill bounded three ways: minimum out, oracle staleness window, deviation band.

05 / What the client keeps

Bounded

Amount, spender and expiry live inside the message they signed. Nothing can raise them afterwards.

Revocable

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.

Non-custodial

The relayer pays gas and nothing else. It cannot change recipient, amount or spender.

Audited

Every grant, spend and revocation lands in the control-plane event ledger.

Three testnets are live now. Add a client and send the link.

Enter the deskRead the code