Transaction orchestration for Solana

Run every lane at once.

Gallop turns multi-step Solana workflows into dependency graphs, reads the accounts each transaction locks, and hands every independent lane to its own rider. Nothing waits that does not have to.

StatusDeveloper Preview
RuntimeSealevel-aware
NetworkSolana
LicenseMIT
desk-runLive engine · demo execution
QUEUEDSIMULATEDSENTCONFIRMEDFINALIZED
Gallop horse mascot
The problem

Solana executes in parallel. Most bots still send one transaction at a time.

The runtime can process transactions side by side when they do not lock the same accounts. Scripts rarely take advantage of it: they await each confirmation in turn, pay everything from one wallet and bundle by hand.

One wallet, one queue

swap→deposit→buy-1→buy-2→pay→stake

Six transactions, six round trips. Every transaction write-locks the same fee payer, so even unrelated steps cannot run together, and one failure stalls the rest of the queue.

Gallop

rider-1  swap ──► deposit     bundle
rider-2  buy-1 ─── buy-2       bundle · pool:sol-bonk
rider-3  pay                   solo
rider-4  stake                 solo

Gallop reads dependencies and account locks. Steps that must stay together are bundled; everything else gets its own rider and lands in the same window.

How it works

Graph. Lock. Simulate. Gallop.

You describe the steps and the accounts they touch. Gallop works out which steps can move at the same time and how each lane should land.

01

Graph

Declare each transaction as a unit, with the steps it depends on.

02

Lock

Gallop compares writable and read-only accounts and finds every lock conflict.

03

Simulate

Each unit is simulated to check errors, measure compute and size the CU limit.

04

Gallop

Independent lanes get their own rider. Linked steps travel as one Jito-sized bundle.

Account locks

Parallelism is decided by accounts, not by order.

Two transactions can run side by side only if neither writes an account the other touches. Hover a unit to see who it collides with. The matrix is computed by the same engine the Playground uses.

lock matrix
WRITEREADCONFLICT
result

The fee payer is write-locked by every transaction it pays for. Pay six independent transactions from one wallet and they serialize on that single account. That is why Gallop assigns one rider per lane. Riders and fee payers →

Lane explorer

Every unit, from simulated to finalized.

Units move through Solana's commitment levels and every transition is emitted as an event. A bundle is all-or-nothing: fail one unit and watch its bundle drop while the other lanes carry on.

graph: desk-run
QUEUEDREADYSENTCONFIRMEDFINALIZEDFAILEDDemo data
unitswap-usdc
event streamDemo
Fees and bundles

Pay for the compute you request. Not a lamport more.

The priority fee is charged on the compute unit limit a transaction asks for, not on what it uses. Gallop sets each limit from simulation plus a margin, prices it, and adds a tip only where a lane travels as a bundle.

  • Base fee: 5,000 lamports per signature
  • Priority fee: CU limit × price in micro-lamports ÷ 1,000,000
  • Up to 5 transactions per Jito bundle, landed in order or not at all
  • Transactions above 1,232 bytes are flagged before they are signed
fee calculatorReal formula
Simulation

Know before you sign.

Gallop simulates every unit against the cluster before anything is signed, decodes program errors and logs, and uses the measured compute to size each transaction.

  • Catch instruction errors with the program logs that explain them
  • Measure compute per unit and set limits from real numbers
  • Flag oversized transactions and suggest address lookup tables
  • Detect lock conflicts and dependency cycles before sending
gallop-cliExample output
desk-run.tsPlanned API
import { Gallop } from "@gallop/sdk";

const gallop = new Gallop({ cluster: "mainnet-beta", rpc: RPC_URL });
const graph = gallop.graph({ name: "desk-run" });

graph.add("swap-usdc", swapIx, { writable: [opsSol, opsUsdc, pool] });
graph.add("deposit-usdc", depositIx, { writable: [opsUsdc, vault] });

// deposit-usdc must land after swap-usdc
graph.dependsOn("deposit-usdc", "swap-usdc");

const plan = await graph.plan({ riders: "per-lane" });
console.log(plan.lanes);   // [{ id: "A", strategy: "BUNDLE", ... }]
SDK

Describe the work. Gallop finds the lanes.

Add units with their instructions and the accounts they lock, declare what depends on what, and ask for a plan. Lanes, riders, bundles and compute limits come back as plain data you can inspect before anything is signed.

Architecture

Plan offchain. Land onchain.

Graph analysis does not need a program. Planning offchain is cheaper, faster to change and easier to inspect. The cluster does what it is good at: executing, ordering and finalizing.

OFFCHAIN
GALLOP SDK / CLI
GRAPH BUILDER
LOCK ANALYZER
SIMULATOR
LANE PLANNER
RIDER 1
RIDER 2
RIDER 3
ONCHAIN
RPC sendTransaction
JITO BLOCK ENGINE
SOLANA
Token

$GALLOP

$GALLOP is the community token of the Gallop project on Solana.

It is not required to use the software. The engine, SDK and CLI work without it, and the token has no function inside the Gallop codebase today. Nothing here is financial advice.

mint addressSolana
TBA
Ticker
$GALLOP
Network
Solana
Pair
TBA
Only trust the address shown on this page. View on Solscan →

Stop queueing what could run together.

Describe the workflow. Let Gallop find the lanes.

gallop. Gallop horse mascot