Skip to main content

Overview

A calldata request goes through four stages before it comes back to you. None of them involve a contract of ours.

1. The catalogue

Every instrument is a row: protocol, chain, underlying token, yield token, decimals, and a recipe naming its protocol shape. Listing a new market means adding a row — no deployment, no on-chain registration, no upgrade. A row whose recipe is null is visible to the data endpoints but not executable; asking for its calldata returns 501.

2. Recipes

A recipe knows how one protocol shape is entered and exited. Three are served today: Because the account is the caller, the exit paths need no third-party authorisation: Comet’s allow manager dance only exists for a contract acting on someone’s behalf, and no contract acts on yours here. Recipes read the market at the pinned quote block, so share prices, exchange rates and available liquidity come from the same block the bundle is simulated against.

3. Swap legs

Ask to deposit USDC into a market whose underlying is EURC and the bundle grows a swap in front of the deposit; withdraw from it into USDC and the swap lands after the withdrawal. Routes are pinned per underlying — a venue (Uniswap V3 or V4) and a fee tier — and an unpinned token is refused rather than routed through whatever pool happens to exist. Two guards sit on the quote:
  • Par check. A USD-stable pair priced more than 100 bps below par is refused.
  • Impact check. Any other swap is compared against a reference quote at a thousandth of the size; more than 100 bps of impact is refused.
A bundle with a swap carries expiresAt, a minOut floor written into the calldata, and a leftovers entry bounding the dust the exact-output swap can leave behind. A bundle without one carries none of those: there is nothing to expire.

4. The simulation pass

This is the part that makes a bundle worth signing. Every bundle is executed with eth_simulateV1 at quoteBlock — all calls, in order, in one block, as the requesting account — through a wallet-neutral executor: a bytecode shim state-overridden onto the account so the batch runs exactly as a smart account would run it, with no assumption about which wallet you use, and no router, paymaster or 4337 machinery in the way.
  • The account’s token balances are overridden to satisfy requires, so a bundle can be built for an account that has not been funded yet. That is what assumedBalances: true means — the calls work; whether the account holds the tokens is still yours to check.
  • expectedOut is the account’s output-token balance after minus before. It is a measurement, not a model.
  • A bundle that reverts, or that produces no output tokens, is never returned. You get a 400.
  • Bundles are bounded: at most 32 calls, 128 KiB of calldata, and every call on one chain.
The simulation proves the calls work at quoteBlock. It cannot prove they will land — state moves, and an EOA sending calls one at a time gives up the atomicity the simulation assumed. Rebuild rather than replay a stale bundle.

5. Signing and sending

The bundle is an EIP-5792-shaped batch of {to, value, data}. A smart account wraps it into one user operation — atomic, with its own nonce and its own paymaster — which is the execution the simulation actually modelled. An EOA sends the calls in order and waits for each receipt. 1Tx does not sign, bundle, sponsor or relay. See the execution model for the wallet and gas rules in full.

Cross-chain deposits

A cross-chain deposit is two bundles on two chains, with Circle’s attestation between them. Two properties follow from destinationCaller being your own account: nobody else can redeem the burn, and no relayer is needed. 1Tx never holds the funds in flight and cannot strand them. Build the destination bundle after the mint, not at proposal time — its size depends on the fee Circle actually charged, and its simulation is pinned to a block where the funds exist.

Levered loops

A loop is the same envelope, with the turns hard-coded: borrow, swap, re-supply, repeated until the requested leverage is reached, all in one batch. Because the whole thing is simulated atomically, the position it reports — collateral, debt, health factor, depeg buffer — is read back from the simulated block rather than projected. See the Loops API.

What 1Tx never does

Never custodies

No contract of ours appears in any bundle. Approvals go to the protocol, not to us.

Never signs

Keys stay in your wallet. We return calls; you decide whether they are sent.

Never sponsors gas

Your bundler and your ERC-20 paymaster, paid in USDC out of your own account.

Never relays

Cross-chain redemption is callable only by your account.

Next steps

Instruments

How an instrument is identified and what its id encodes

Atomic Bundles

What atomicity buys you, and where it stops

Execution Model

Smart accounts, USDC gas, CCTP

Calldata API

Parameters, response fields, errors