- An on-chain intent (the public part) created by calling
BridgeIntentV2.createIntenton the source chain. This is the solver-facing offer: “I’m offering X of tokenA for Y of tokenB delivered on chain Z, plus a reward of R.” - An encrypted recipient bundle (the confidential part) stored on the relayer. This contains the actual recipient addresses and per-recipient amounts, encrypted to the relayer’s ECIES public key.
1. Create the on-chain intent
The on-chain call publishes the solver-facing parameters plus an encrypted blob that only the relayer can decrypt (the on-chain recovery anchor, see privacy guarantees).tokenA to the bridge contract for amountIn + reward.
2. Store the encrypted recipient bundle
After the on-chain intent is mined, tell the relayer who should actually receive the funds on the destination chain. This information is encrypted; the relayer stores it and only reveals it (re-encrypted) to the solver that wins the bid.POST /store-recipients for the full request shape.
How solvers see your intent
Once both steps are done, the relayer does the following:- Batches your
intentIdwith other live intents that share the same token pair + chain pair. - Broadcasts to all solvers in plaintext: rate, token pair, total batch size, available fees. No sender, no per-intent recipient, no per-intent amount.
- Waits for a solver to bid to fill some portion of the batch.
- On bid win, re-encrypts the recipient bundle to the winning solver’s keypair and hands it over.
- Solver delivers to the stealth address(es) on the destination chain.
intentId until settlement.
Planned SDK surface
createIntent, then encrypts the recipient list and posts to /store-recipients.
Submitting a batch
For payroll, refunds, or any N-recipient flow, submit many intents in a loop today:An atomic batched-intent contract path is planned so the whole batch can land in a single on-chain transaction and share a single signature. Today, each recipient = one
createIntent call.Validation errors
createIntent can revert for on-chain reasons (insufficient allowance, bad addresses, zero amount, past deadline). /store-recipients can reject if the intent ID doesn’t exist on-chain, the chain ID is wrong, or the encrypted payload can’t be decoded.
Typical client-side handling:
Recommended auction durations
The_auctionDuration arg on createIntent sets how long solvers have to bid before the bridge finalizes the winner.
A longer auction gives more solvers a chance to bid (better rates). A shorter one ships faster but may get no bid if solvers are idle.
Track intents to settlement
Polling, subscriptions, and webhooks.