Skip to content
Merged
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,19 @@ The [Solana Account Archive](/docs/solana/account-archive) is served through the
| getValidityProofV2 | 1200 | 500 |
{/* cu:auto end */}

# Solana: Jito Bundles and Transactions

[Jito bundles](/docs/chains/solana/solana-jito-bundles-and-transactions) are groups of up to 5 signed transactions that execute sequentially and atomically in a single slot on Solana Mainnet. A tip to one of the Jito tip accounts is required for inclusion. These methods are available on paid Alchemy plans only.

{/* cu:auto product="solana-jito" */}
| Method | CU | Throughput CU |
| -------------------------- | --- | ------------- |
| getBundleStatuses | 40 | |
| getInflightBundleStatuses | 40 | |
| getTipAccounts | 40 | |
| sendBundle | 40 | |
{/* cu:auto end */}

# Solana: Yellowstone gRPC

[Yellowstone gRPC](/docs/reference/yellowstone-grpc-overview) is a high-performance streaming service for Solana that delivers real-time blockchain data via gRPC. Pricing is based on **bandwidth:** the amount of data delivered as part of the stream.
Expand Down
51 changes: 51 additions & 0 deletions content/api-reference/solana/solana-jito-bundles-overview.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
---
title: Solana Jito Bundles and Transactions
description: Alchemy's Jito bundle APIs for low-latency, atomic transaction execution on Solana.
subtitle: Alchemy's Jito bundle APIs for low-latency, atomic transaction execution on Solana.
---

<Warning>
Jito bundle methods are available on **paid plans only** (pay-as-you-go and enterprise). Free-tier accounts cannot call these endpoints. [Upgrade your account](https://dashboard.alchemy.com/settings/billing) to enable Jito bundles.
</Warning>

## Background

A **bundle** is a group of up to 5 signed Solana transactions that execute:

* **Sequentially** — in the exact order you list them.
* **Atomically** — within a single slot, all-or-nothing. If any transaction fails, none of them commit to the chain.

Bundles are the standard MEV primitive on Solana today: multi-leg arbitrage, backrunning, atomic setup-and-cleanup, and launch sniping with revert guards all rely on the atomicity a bundle provides.

## How the auction works

Bundles do not go through Solana's normal gossip path. They go to the [Jito Block Engine](https://docs.jito.wtf/lowlatencytxnsend/#how-does-the-system-work), which collects bundles from searchers, simulates them, runs a sealed-bid auction per block, and forwards winners to the current leader when that leader runs `Jito-Solana` (about 95% of Solana stake at time of writing).

Your bid in that auction is the **Jito tip** — a plain SOL transfer to one of the [8 tip accounts](/docs/chains/solana/solana-jito-bundles-and-transactions/solana-jito-bundles-and-transactions/get-tip-accounts) returned by `getTipAccounts`, included in one of your bundle's transactions. The minimum tip is 1,000 lamports; contested MEV opportunities can require substantially higher tips. See Jito's [tip amount guidance](https://docs.jito.wtf/lowlatencytxnsend/#tip-amount) for current recommendations.

## Endpoint

Jito bundle methods are available on **Solana Mainnet only** through the standard Alchemy Solana RPC endpoint:

```text
https://solana-mainnet.g.alchemy.com/v2/{apiKey}
```

Devnet is not supported. These endpoints require a paid Alchemy plan (pay-as-you-go or enterprise); they are not available on the free tier.

## Methods

| Method | Function | CU cost |
| --- | --- | --- |
| [sendBundle](/docs/chains/solana/solana-jito-bundles-and-transactions/solana-jito-bundles-and-transactions/send-bundle) | Submit a bundle of up to 5 signed transactions to the block engine for atomic execution. | 40 |
| [getBundleStatuses](/docs/chains/solana/solana-jito-bundles-and-transactions/solana-jito-bundles-and-transactions/get-bundle-statuses) | Return the on-chain landing status of one or more submitted bundle IDs. | 40 |
| [getTipAccounts](/docs/chains/solana/solana-jito-bundles-and-transactions/solana-jito-bundles-and-transactions/get-tip-accounts) | Retrieve the 8 Jito tip accounts designated to receive bundle tips. | 40 |
| [getInflightBundleStatuses](/docs/chains/solana/solana-jito-bundles-and-transactions/solana-jito-bundles-and-transactions/get-inflight-bundle-statuses) | Query the in-flight status (`Pending`, `Landed`, `Failed`, `Invalid`) of bundles submitted in the last 5 minutes. | 40 |

For deeper background on bundle mechanics, tip strategy, sandwich mitigation via `jitodontfront`, and Jito's own SDKs (Python, JS/TS, Rust, Go), see Jito's [Low Latency Transaction Send docs](https://docs.jito.wtf/lowlatencytxnsend/#bundles-api-v1).

## Related

* [`simulateBundle`](/docs/chains/solana/solana-api-endpoints/simulate-bundle) — simulate a Jito bundle before submitting it, without paying a tip.
* [`sendTransaction`](/docs/chains/solana/solana-api-endpoints/send-transaction) — standard Solana single-transaction submission.
* [MEV Protection](/docs/reference/mev-protection) — Alchemy's built-in MEV protection for standard Solana transactions.
7 changes: 7 additions & 0 deletions content/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -346,6 +346,13 @@ navigation:
- api: Solana Photon API
api-name: solana-photon
flattened: true
- section: Solana Jito Bundles and Transactions
path: >-
api-reference/solana/solana-jito-bundles-overview.mdx
contents:
- api: Solana Jito Bundles and Transactions
api-name: solana-jito
flattened: true
- section: Tutorials
contents:
- link: Hello World Solana Application
Expand Down
32 changes: 32 additions & 0 deletions src/openrpc/alchemy/solana-jito/solana-jito.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# yaml-language-server: $schema=https://meta.open-rpc.org/

$schema: https://meta.open-rpc.org/
openrpc: 1.2.4
info:
title: Alchemy Solana Jito Bundles and Transactions Specification
description: |-
JSON-RPC specification for the [Jito](https://docs.jito.wtf/lowlatencytxnsend/#bundles-api-v1)
low-latency bundle methods on Solana. Bundles are groups of up to 5
transactions that execute sequentially and atomically in a single slot, with
a tip to one of the Jito tip accounts to incentivize inclusion. Available on
Solana Mainnet only.
version: 0.0.0
servers:
- url: https://solana-mainnet.g.alchemy.com/v2
name: Solana Mainnet
x-auth-params:
- name: apiKey
in: path
required: true
schema:
type: string
default: YOUR_API_KEY
description: >-
Jito bundle methods are available on paid Alchemy plans only. [Create
an API key](https://dashboard.alchemy.com/signup) on a paid plan (pay-as-you-go
or enterprise) to call these endpoints.
methods:
- $ref: ../../chains/_components/solana/methods.yaml#/components/methods/sendBundle
- $ref: ../../chains/_components/solana/methods.yaml#/components/methods/getBundleStatuses
- $ref: ../../chains/_components/solana/methods.yaml#/components/methods/getTipAccounts
- $ref: ../../chains/_components/solana/methods.yaml#/components/methods/getInflightBundleStatuses
240 changes: 240 additions & 0 deletions src/openrpc/chains/_components/solana/methods.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1082,6 +1082,246 @@ components:
schema:
$ref: "./transaction.yaml#/components/schemas/SimulatedBundleResult"

sendBundle:
name: sendBundle
summary: Submit a Jito bundle to the block engine.
description: >-
Available on paid Alchemy plans (pay-as-you-go or enterprise); not available on the free tier.


Submits a bundle of signed transactions to the Jito block engine for atomic
processing. Transactions are processed sequentially in the order given; if any
transaction fails, the entire bundle is rejected (all-or-nothing). Returns a
`bundle_id` immediately once the bundle is accepted; this does not guarantee
the bundle lands on-chain. Use [`getBundleStatuses`](/docs/chains/solana/solana-jito-bundles-and-transactions/solana-jito-bundles-and-transactions/get-bundle-statuses)
or [`getInflightBundleStatuses`](/docs/chains/solana/solana-jito-bundles-and-transactions/solana-jito-bundles-and-transactions/get-inflight-bundle-statuses)
to poll the bundle's status.


A tip is required for the bundle to be considered. The tip can be any
instruction (top-level or CPI) that transfers SOL to one of the 8 Jito tip
accounts. Use [`getTipAccounts`](/docs/chains/solana/solana-jito-bundles-and-transactions/solana-jito-bundles-and-transactions/get-tip-accounts)
to retrieve them, and randomize the selection to reduce contention. The
minimum tip is 1,000 lamports; competitive MEV opportunities may require
significantly higher tips.


See Jito's [Low Latency Transaction Send](https://docs.jito.wtf/lowlatencytxnsend/#sendbundle)
docs for background on bundle mechanics.
x-compute-units: 40
params:
- name: Encoded transactions
required: true
description: >-
Fully-signed transactions as base64 (recommended) or base58 (deprecated)
encoded strings. Maximum of 5 transactions.
schema:
type: array
maxItems: 5
items:
type: string
- name: Configuration
required: false
description: Optional configuration object specifying the encoding used for the transactions.
schema:
$ref: "./transaction.yaml#/components/schemas/SendBundleConfig"
examples:
- name: sendBundle example
params:
- name: Encoded transactions
value:
- "AT2AqtlokikUWgGNnSX5xrmdvBjSaiIPxvFz6zc5Abn5Z0CPFW5GO+Y3rXceLnqLgQFnGw0yTk3NtJdFNsbrwwQBAAIEsXPDJ9cMVbpFQYClVM7PGLh8JOfCD6E2vz5VNmBCF+p4Uhyxec67hYm1VqLV7JTSSYaC/fm7KvWtZOSRzEFT2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUpTWpkpIQZNJOhxYNo4fHw1td28kruB5B+oQEEFRI1i3Wzl2VfewCI8oYXParnP78725sKFzYheTEn8v865YQIDABhqaXRvIGJ1bmRsZSAwOiBqaXRvIHRlc3QCAgABDAIAAACghgEAAAAAAA=="
- "AS6fOZuGDsmyYdd+RC0fiFUgNe1BYTOYT+1hkRXHAeroC8R60h3g34EPF5Ys8sGzVBMP9MDSTVgy1/SSTqpCtA4BAAIEsXPDJ9cMVbpFQYClVM7PGLh8JOfCD6E2vz5VNmBCF+p4Uhyxec67hYm1VqLV7JTSSYaC/fm7KvWtZOSRzEFT2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUpTWpkpIQZNJOhxYNo4fHw1td28kruB5B+oQEEFRI1i3Wzl2VfewCI8oYXParnP78725sKFzYheTEn8v865YQIDABhqaXRvIGJ1bmRsZSAxOiBqaXRvIHRlc3QCAgABDAIAAACghgEAAAAAAA=="
- name: Configuration
value:
encoding: base64
result:
name: Bundle ID
value: "2id3YC2jK9G5Wo2phDx4gJVAew8DcY5NAojnVuao8rkxwPYPe8cSwE5GzhEgJA2y8fVjDEo6iR6ykBvDxrTQrtpb"
result:
name: Bundle ID
description: The bundle ID, used to identify the bundle. This is the SHA-256 hash of the bundle's transaction signatures.
schema:
type: string

getBundleStatuses:
name: getBundleStatuses
summary: Get the status of submitted Jito bundles.
description: >-
Available on paid Alchemy plans (pay-as-you-go or enterprise); not available on the free tier.


Returns the status of submitted bundle(s). This function operates similarly
to the Solana RPC method `getSignatureStatuses`. If a `bundle_id` is not
found or has not landed, it returns `null`. If found and processed, it
returns context information including the slot at which the request was
made and results with the `bundle_id(s)` and the transactions along with
their slot and confirmation status.


We use `getSignatureStatuses` with the default value of
`searchTransactionHistory` set to `false` to check transaction statuses
on-chain. This means the RPC call will search only its recent history,
including all recent slots plus up to `MAX_RECENT_BLOCKHASHES` rooted slots
for the transactions. Currently, `MAX_RECENT_BLOCKHASHES` is 300.


See Jito's [getBundleStatuses](https://docs.jito.wtf/lowlatencytxnsend/#getbundlestatuses)
docs for background.
x-compute-units: 40
params:
- name: Bundle IDs
required: true
description: An array of bundle IDs to confirm. Maximum of 5.
schema:
type: array
maxItems: 5
items:
type: string
examples:
- name: getBundleStatuses example
params:
- name: Bundle IDs
value:
- "892b79ed49138bfb3aa5441f0df6e06ef34f9ee8f3976c15b323605bae0cf51d"
result:
name: Bundle statuses
value:
context:
slot: 242806119
value:
- bundle_id: "892b79ed49138bfb3aa5441f0df6e06ef34f9ee8f3976c15b323605bae0cf51d"
transactions:
- "3bC2M9fiACSjkTXZDgeNAuQ4ScTsdKGwR42ytFdhUvikqTmBheUxfsR1fDVsM5ADCMMspuwGkdm1uKbU246x5aE3"
- "8t9hKYEYNbLvNqiSzP96S13XF1C2f1ro271Kdf7bkZ6EpjPLuDff1ywRy4gfaGSTubsM2FeYGDoT64ZwPm1cQUt"
slot: 242804011
confirmation_status: "finalized"
err:
Ok: null
result:
name: Bundle statuses
description: The status of each submitted bundle, or an empty `value` array if none of the requested bundles are found in recent slots.
schema:
$ref: "./transaction.yaml#/components/schemas/BundleStatusesResult"

getTipAccounts:
name: getTipAccounts
summary: Get the Jito tip accounts.
description: >-
Available on paid Alchemy plans (pay-as-you-go or enterprise); not available on the free tier.


Retrieves the tip accounts designated for tip payments for bundles. The
tip accounts have remained constant and can also be found in the
[example response](https://docs.jito.wtf/lowlatencytxnsend/#response-example-tips)
of Jito's docs.


See Jito's [getTipAccounts](https://docs.jito.wtf/lowlatencytxnsend/#gettipaccounts)
docs for background.
x-compute-units: 40
params:
- name: Placeholder
required: false
description: >-
Not read by the server. Included so the JSON-RPC `params` field is
present in the request body. Leave the pre-filled empty object as-is.
schema:
type: object
default: {}
examples:
- name: getTipAccounts example
params:
- name: Placeholder
value: {}
result:
name: Tip accounts
value:
- "96gYZGLnJYVFmbjzopPSU6QiEV5fGqZNyN9nmNhvrZU5"
- "HFqU5x63VTqvQss8hp11i4wVV8bD44PvwucfZ2bU7gRe"
- "Cw8CFyM9FkoMi7K7Crf6HNQqf4uEMzpKw6QNghXLvLkY"
- "ADaUMid9yfUytqMBgopwjb2DTLSokTSzL1zt6iGPaS49"
- "DfXygSm4jCyNCybVYYK6DwvWqjKee8pbDmJGcLWNDXjh"
- "ADuUkR4vqLUMWXxW9gh6D6L8pMSawimctcNZ5pGwDcEt"
- "DttWaMuVvTiduZRnguLF7jNxTgiMBZ1hyAumKUiL2KRL"
- "3AVi9Tg9Uo68tJfuvoKvqKNWKkC5wPdSSdeBnizKZ6jT"
result:
name: Tip accounts
description: The list of 8 Jito tip accounts as base-58 encoded pubkey strings.
schema:
type: array
items:
$ref: "./base-types.yaml#/components/schemas/Pubkey"

getInflightBundleStatuses:
name: getInflightBundleStatuses
summary: Get the in-flight status of Jito bundles from the last 5 minutes.
description: >-
Available on paid Alchemy plans (pay-as-you-go or enterprise); not available on the free tier.


Returns the status of submitted bundles within the last five minutes,
allowing up to five bundle IDs per request.


* **Failed**: Indicates that all regions have marked the bundle as failed, and it has not been forwarded.

* **Pending**: Indicates the bundle has not failed, landed, or been deemed invalid.

* **Landed**: Signifies the bundle has successfully landed on-chain, verified through RPC or the `bundles_landed` table.

* **Invalid**: Means the bundle is no longer in the system.


See Jito's [getInflightBundleStatuses](https://docs.jito.wtf/lowlatencytxnsend/#getinflightbundlestatuses)
docs for background.
x-compute-units: 40
params:
- name: Bundle IDs
required: true
description: An array of bundle IDs to confirm. Maximum of 5.
schema:
type: array
maxItems: 5
items:
type: string
examples:
- name: getInflightBundleStatuses example
params:
- name: Bundle IDs
value:
- "b31e5fae4923f345218403ac1ab242b46a72d4f2a38d131f474255ae88f1ec9a"
- "e3c4d7933cf3210489b17307a14afbab2e4ae3c67c9e7157156f191f047aa6e8"
- "a7abecabd9a165bc73fd92c809da4dc25474e1227e61339f02b35ce91c9965e2"
- "e3934d2f81edbc161c2b8bb352523cc5f74d49e8d4db81b222c553de60a66514"
- "2cd515429ae99487dfac24b170248f6929e4fd849aa7957cccc1daf75f666b54"
result:
name: Inflight bundle statuses
value:
context:
slot: 280999028
value:
- bundle_id: "b31e5fae4923f345218403ac1ab242b46a72d4f2a38d131f474255ae88f1ec9a"
status: "Invalid"
landed_slot: null
- bundle_id: "e3c4d7933cf3210489b17307a14afbab2e4ae3c67c9e7157156f191f047aa6e8"
status: "Invalid"
landed_slot: null
- bundle_id: "a7abecabd9a165bc73fd92c809da4dc25474e1227e61339f02b35ce91c9965e2"
status: "Invalid"
landed_slot: null
- bundle_id: "e3934d2f81edbc161c2b8bb352523cc5f74d49e8d4db81b222c553de60a66514"
status: "Invalid"
landed_slot: null
- bundle_id: "2cd515429ae99487dfac24b170248f6929e4fd849aa7957cccc1daf75f666b54"
status: "Invalid"
landed_slot: null
result:
name: Inflight bundle statuses
description: The in-flight status of each queried bundle.
schema:
$ref: "./transaction.yaml#/components/schemas/InflightBundleStatusesResult"

getSignaturesForAddress:
name: getSignaturesForAddress
description: Returns signatures for confirmed transactions that include the given address.
Expand Down
Loading
Loading