Skip to main content
A fast fill lands in seconds. The venue’s solver pays the user on the destination from its own liquidity right away, instead of waiting for the source chain to finalise. BRDG aggregates every venue with a fast lane and ranks them by what the user receives, like the ordinary quote. There are two kinds of fast lane:
  • Gasless. The user signs one EIP-712 message and a relayer sends the source transaction and pays its gas. The gas is charged in the token you send and is already taken off every quoted amount. Relay’s relayer submits Relay fast fills. Across fast fills are sponsored by BRDG: BRDG’s relayer submits the deposit to Across’s SpokePoolPeriphery, and the user’s signed USDC covers that gas plus the platform fee in the same transaction. The quote shows this as one Fast fill fee line, and BRDG refuses any amount where that fee would exceed 5%.
  • Sent by the user. Mayan Swift is a solver fill too, usually about 3 seconds, but the user sends the source transaction and pays its gas. BRDG offers it only when the wallet can: see the gas check.
A fast fill is never private. Fast fill and privacy: true cannot be combined.

How BRDG aggregates fast fills

  1. POST /fastfill/quote asks only the venues with a fast lane: Relay, Across and Mayan. Every other venue is left out silently.
  2. Each venue quotes its fast form only: Relay its gasless permit order where the token has one, otherwise its ordinary solver fill sent by the user (native tokens, and every Solana source); Across the sponsored deposit; Mayan its Swift route (never its slower CCTP or Wormhole routes). A venue that has no fast form for the pair answers no_route.
  3. BRDG reads the sender’s native balance on the source chain once, and refuses any row the user sends (Mayan, or Relay without a permit) that the wallet cannot pay gas for.
  4. The answers are ranked by what the user receives, exactly as in POST /bridge/quote. best is the winner, and rejected lists every venue that did not quote, with its reason.

The gas check

A row the user sends needs gas on the source chain. BRDG compares sender’s native balance with the venue’s own gas estimate for that route (on Solana, the rent the swap accounts need). If the balance is short, the row is refused with insufficient_gas and appears in rejected. If the venue gives no estimate, any balance at all passes. If the balance cannot be read, nothing is refused and the wallet itself refuses a send it cannot afford. Gasless rows are never checked.

Supported

Hyperliquid

toChain: "hypercore" works on the fast lane, with both kinds of Hyperliquid route ranked together exactly as in POST /bridge/quote:
  • Direct. The venue credits the Hyperliquid account straight from the source chain. Relay and Mayan Swift both do, and a direct Relay row needs no gas from the user where the token has a permit.
  • Through Arbitrum. The venue delivers USDC to Arbitrum and BRDG’s relayer credits the account. The row carries postStep: { kind: "hypercore_deposit", chain: "arbitrum", vm: "evm" }, and your user signs nothing after the source step - whether that step was a signature or a transaction. The relayer charges its gas plus 10 cents, capped at $1, already inside the quoted output.
The Hyperliquid minimum applies here as everywhere: a row that would credit less than 1 USDC, or less than 5.10 USDC into an account with no history, is listed in rejected with code: "below_min" and the amount it would have delivered. A hypercore source quotes but no venue serves it fast yet, so the table comes back empty with emptyReason: "no_fast_fill_route" and Relay’s own reason in rejected. Use POST /bridge/quote to bridge out of Hyperliquid.

How it works

1

Quote

POST /fastfill/quote asks only the venues with a fast fill lane and ranks them by what the user receives.
2

Build

POST /fastfill/build returns steps for the winner. On the gasless lane the last step is { vm: "sign", scheme: "eip712", payload }: sign payload.domain, payload.types, payload.primaryType and payload.message with the wallet in payload.owner, using eth_signTypedData_v4. Do not sign payload.venueSubmit; it is the venue’s own handle. Any other step (an approve, a Relay order without a permit, or a Mayan order, as vm: "evm" or vm: "svm") is an ordinary transaction: send it and wait for it to be mined. A Solana step arrives already signed by Mayan’s own keys, so add the wallet’s signature without changing the blockhash or adding instructions.
3

Submit

A signature goes to POST /fastfill/transfers/{id}/submit with { signature }. BRDG checks that it belongs to owner and covers exactly the built message, then hands it to the venue. A transaction goes to POST /bridge/transfers/{id}/submit with the step’s own step (approve or main).
4

Track

GET /bridge/transfers/{id}, like any transfer. If the submit answered txHash: null, the relayer holds the signature and has not broadcast yet; BRDG keeps tracking it and fills in sourceTxHash when the venue reports it.

Script

This script sends 10 USDC from Base to Arbitrum on whichever fast lane wins. On the gasless lane it spends no ETH; if Mayan wins, the wallet sends one transaction. It uses the TypeScript project; save it as src/fast-fill.ts and run npx tsx src/fast-fill.ts.
src/fast-fill.ts

Errors

Fees and referrals

The platform fee works exactly as it does on POST /bridge/quote and is already inside every output amount. Both referral fields are accepted here too: A fast fill the venue relays is gasless: the user signs a message and the venue’s relayer sends the source transaction, so there is nothing of the user’s for an integrator payout to ride in. Those rows come back with referralFeeAmountAtomic: "0" and fees.referral: null, rather than quoting a share that would never be paid. A fast fill the user sends (Mayan Swift, and Relay on native and Solana sources) pays your share in that transaction like any other transfer.

Endpoints used