Appearance
Settlement
Textile introduces no new cryptography. A firm quote settles through audited contracts that Textile deploys and operates itself: the UniswapX LimitOrderReactor, vendored verbatim at a pinned commit so it stays exactly as audited.
| Contract | What it does |
|---|---|
| UniswapX LimitOrderReactor (v2.1.0), deployed by Textile | Validates and executes the signed quote. Same audited source as Uniswap's, running at Textile's own addresses. |
| Permit2 | Uniswap's signature-based token transfer system, in production across the EVM ecosystem since 2022. The maker's commitment is an EIP-712 message. Nothing moves without it, and each nonce can execute only once. This is the canonical singleton every chain shares, not a Textile deployment. |
| solmate | The utility library UniswapX builds on. |
Deployed addresses are in the address book. Textile's own contracts are Solidity 0.8.30 on OpenZeppelin v5.
Textile does not route through Uniswap
Reusing UniswapX's audited code is not the same as sending trades to Uniswap. Textile runs its own reactors: same source, pinned commit, deployed at Textile-controlled addresses you can check in the address book and diff against the pinned upstream commit.
An order names its reactor in the signed payload, so it is only executable by the Textile reactor it was signed for. Concretely:
- No order reaches Uniswap's reactors, the UniswapX order flow, or Uniswap's filler network.
- No leg of a swap touches an AMM. Nothing is priced against a pool, routed through the Universal Router, or swapped on Uniswap v2/v3/v4.
- Price comes from Textile's own market makers answering RFQ and filling from their own wallets. It is a maker quote, not a pool curve.
- Uniswap earns no fee and has no role in the trade. The only fee is Textile's per-chain taker fee, set by
SellFirstFeeController.
The one contract Textile shares with everyone else is Permit2 (0x000000000022D473030F116dDEE9F6B43aC78BA3), the same singleton address on every chain. It is ecosystem-wide transfer infrastructure, not a routing hop.
What happens when you broadcast
One transaction does all of it:
- The reactor verifies the maker signatures on every order in the quote.
- Permit2 pulls the maker's funds.
- The fee controller takes the protocol fee, in the sell token. Never in the native gas token.
- Your output lands in your wallet.
If any step fails the whole transaction reverts and nothing moves. There is no half-settled state.
The fee is set per chain by an on-chain SellFirstFeeController and is already inside the rate you were quoted. See Fees.
Non-custodial by construction
There is no pooled balance to redirect and no custodian in the middle. A maker funds quotes from their own wallet. Your tokens move only when your signed swap executes.
Textile never signs, never holds keys, and never broadcasts for you. Every write path in the API hands you an unsigned transaction or an EIP-712 payload to sign. Your wallet stays yours.
Limits worth knowing
A signed quote lives until its deadline. Expiry is the only thing that retires it, so a quote you decided not to take stays executable until then. Cancelling releases the maker's inventory but does not un-sign the order.
A bundled quote is several independently signed orders in one executeBatch. Each carries its own deadline, so the bundle stops being settleable in full when the earliest one passes.
Next
- Address book for the deployed contracts
- Protocol overview for what a firm quote is
- v2 API to call RFQ yourself