SearchersSubmit bundles

Submit bundles

Bid tips to place your transactions directly behind a streamed bundle.

SubmitBundles is a bidirectional stream. You send bids, and Inertia answers every bid with a BundleUpdate. The call needs the intake permission.

Open the stream first

Inertia holds a streamed bundle for bidding when it matches your orderflow subscription while your bid stream is open. Open SubmitBundles before you subscribe, and keep it open.

Every held bundle gets its own 50 ms auction. The 50 ms start right before Inertia streams the bundle to you, and your network latency counts against them. Some streamed bundles are not up for auction. A bid on one of them returns NOT_HELD.

Place a bid

A bid is a Bundle message:

  • signature is the signature of the streamed bundle you bid on.
  • transactions holds your own signed transactions in the same wire format as the stream. Leave out the streamed transactions. Inertia puts them in front of yours.

The streamed bundle and your transactions together may hold at most 5 transactions. You can send several bids in one Bundles message.

Tip

Your tip is the sum of all System Program transfers from your transactions to an Inertia tip account. You pay it only if the bundle lands.

in1KQyYPQnUQ9uReh7fzgFDKQZr8mq25JJeDB2eJYYr
in2kLfsh5LZJiDMPETRkvmNPZMSiua44AJfqs1TUkJA
in3CjqEzBtkGGi7hCaYLeBqj6C6MXFack9jyH37xeRF
in4fmpuNUuManQiKzuXuBwnfXYh3NaWURtvTm6bMRnc
in5Af14mrr7xXdaZCpjnhQfgY95wHcHgpqD9JtAHvSm
in6zq3HpnFvGSfHWXC4fs56aqh6wVBU89oNnYKueKjG
in7hD8ei3YeyCkyFB7K265gCJ3fMDGZrgC2XLAVF3vp
in8RrQByaVGZNGzrMvRC4Vbmq1iAyvnn8ThAQKRJH5x
in9BDFiz3As4RHDgDMtE1X9kesp51X7XJeFRMLJrNNc
inXxoQFSm3Z3WUohBphrT55tCAbBT8nPJaqViTbfhUo

Only transfers to the accounts above count. A transfer to a Jito tip account adds nothing to your bid.

Checks

Inertia checks every transaction in a bid with the same rules as the validator:

  • All signatures verify.
  • The transaction uses at most 64 accounts and lists each account once.
  • It keeps sysvars and built-in programs read-only.
  • Its compute budget instructions are valid.
  • It uses a recent blockhash or a valid durable nonce.
  • Its address lookup tables exist and are active.
  • The bid contains no vote transactions.
  • Each transaction in the bid uses its own nonce.

A transaction that already passed through the orderflow fails with DUPLICATE. Your own transactions stay usable for a new bid after you were outbid.

Auction

  • The highest tip wins. On equal tips, the earlier bid wins.
  • When a higher bid arrives, the previous leader gets Outbid with the new tip. Your own earlier bid gets it too.
  • A bid that does not beat the current leader gets Outbid right away, with the winning tip.
  • To raise your bid, sign a new transaction with the higher tip and send it as a new bid.

When the auction closes, Inertia sends the winning bundle to the validator, with the streamed transactions first and yours after them. The validator executes the bundle as a whole or not at all. You receive Sent with your tip. 10 ms later, Inertia also forwards the streamed transactions on their own as a fallback.

Updates

Every BundleUpdate carries three fields:

  • signature is the streamed bundle you bid on.
  • bid_signature is the signature of the first transaction in your bid.
  • update is one of Sent, Outbid or Rejected.
UpdateMeaning
SentYour bid won, and Inertia sent the bundle to the validator. tip is your tip.
OutbidAnother bid tips more. tip is the winning tip.
RejectedInertia dropped your bid. reason and detail say why.

Read the updates continuously. When your client falls behind, the node drops updates.

Rejection reasons

ReasonMeaning
NOT_HELDThe bundle is unknown, not up for auction, or its auction already closed.
BUNDLE_SIZEThe bid has no transactions, or more than 5 together with the streamed bundle.
INVALIDA transaction does not parse.
UNVERIFIEDA signature does not verify.
DUPLICATEA transaction already passed through the orderflow.
NO_TIPNo transaction transfers to a tip account.
REJECTEDA transaction broke a validator rule. detail names the rule.
DROPPEDThe bid queue of the node was full. Send the bid again.
UNDELIVERABLEYour bid won, but no validator accepted the bundle.

For REJECTED, detail holds one of these rules:

DetailMeaning
account_countThe transaction uses more than 64 accounts.
duplicate_accountThe transaction lists an account twice.
writes_reservedThe transaction writes to a sysvar or a built-in program.
tip_programThe transaction references the Jito Tip Payment or Tip Distribution program.
blocklistedThe transaction touches a blocked account.
compute_budgetA compute budget instruction is invalid or repeated.
precompileA precompile instruction is too short for its signatures.
invalid_nonceThe durable nonce instruction is invalid.
bundle_voteThe bid contains a vote transaction.
nonce_conflictTwo transactions use the same nonce.
lookup_tableAn address lookup table is deactivated.
lookup_unresolvedThe node cannot load an address lookup table.
expired_blockhashThe blockhash expired.
tracked_poolThe transaction touches a pool that Inertia locks at the moment.