Skip to content

Instantly share code, notes, and snippets.

@zhe-t
Last active June 3, 2025 07:05
Show Gist options
  • Save zhe-t/60938c69e29276b7a9f098e1b0672c79 to your computer and use it in GitHub Desktop.
Save zhe-t/60938c69e29276b7a9f098e1b0672c79 to your computer and use it in GitHub Desktop.
Smart send a transaction using Jito dedicated endpoint
import { Connection, SendOptions } from '@solana/web3.js';
export type JitoRegion = 'mainnet' | 'amsterdam' | 'frankfurt' | 'ny' | 'tokyo';
export const JitoEndpoints = {
mainnet: 'https://mainnet.block-engine.jito.wtf/api/v1/transactions',
amsterdam: 'https://amsterdam.mainnet.block-engine.jito.wtf/api/v1/transactions',
frankfurt: 'https://frankfurt.mainnet.block-engine.jito.wtf/api/v1/transactions',
ny: 'https://ny.mainnet.block-engine.jito.wtf/api/v1/transactions',
tokyo: 'https://tokyo.mainnet.block-engine.jito.wtf/api/v1/transactions',
};
export function getJitoEndpoint(region: JitoRegion) {
return JitoEndpoints[region];
}
/**
* Send a transaction using Jito. This only supports sending a single transaction on mainnet only.
* See https://jito-labs.gitbook.io/mev/searcher-resources/json-rpc-api-reference/transactions-endpoint/sendtransaction.
* @param args.serialisedTx - A single transaction to be sent, in serialised form
* @param args.region - The region of the Jito endpoint to use
*/
export async function sendTxUsingJito({
serializedTx,
region = 'mainnet'
}: {
serializedTx: Uint8Array | Buffer | number[];
region: JitoRegion;
}) {
let rpcEndpoint = getJitoEndpoint(region);
let encodedTx = bs58.encode(serializedTx);
let payload = {
jsonrpc: "2.0",
id: 1,
method: "sendTransaction",
params: [encodedTx]
};
let res = await fetch(`${rpcEndpoint}?bundleOnly=true`, {
method: 'POST',
body: JSON.stringify(payload),
headers: { 'Content-Type': 'application/json' }
});
let json = await res.json();
if (json.error) {
throw new Error(json.error.message);
}
return json;
}
@yanCode
Copy link

yanCode commented Jun 3, 2025

@soggyfeet3 I did a quick check on marginfi, i think you mean this project: https://github.com/mrgnlabs/mrgn-ts
i saw where you have the error ๐Ÿ’ธ Bundle tip:undefined SOL

if (broadcastType === "BUNDLE") {
    console.log(
      `๐Ÿ’ธ Bundle tip: ${maxCapUi ? Math.min(processOpts.bundleTipUi ?? 0, maxCapUi) : processOpts.bundleTipUi} SOL`
    );
  } 

it seems both maxCapUi and bundleTipUi are all undefined. but from the static logic (without running), I found there are many parts in the whole project can call this part. I need to know which part exactly calls this logic. then I can find the reason why these two values are undefined

@soggyfeet3
Copy link

@yanCode thats not my issue anymore I resolved that part by downgrading marginfi to 4.04. My main issue now is Iโ€™m trying to use Jupiter quote/swaps an I get a unit8array or getting over the solana transaction size limit of 1232. I also see ppl using a custom on chain program and their transactions succeeds.

you have discord or telegram we can chat there and if you got time can assist me!

@winer328
Copy link

winer328 commented Jun 3, 2025

anyone know how to fix this

MEV opportunity found! Potential Profit: 0.000307478 SOL

Executing flash loan swaps with Jito...
Creating MarginFi account...
------ Transaction Details ๐Ÿ‘‡ ------
๐Ÿ“ Executing 1 transaction
๐Ÿ“ก Broadcast type: BUNDLE
๐Ÿ’ธ Bundle tip: undefined SOL
Error: API bundle failed: Bundle must tip at least 1000 lamports

I'm very familiar with MEV project and made some profits from it.
If you need help, please let me know @cool0328 in telegram.

@yanCode
Copy link

yanCode commented Jun 3, 2025

@yanCode thats not my issue anymore I resolved that part by downgrading marginfi to 4.04. My main issue now is Iโ€™m trying to use Jupiter quote/swaps an I get a unit8array or getting over the solana transaction size limit of 1232. I also see ppl using a custom on chain program and their transactions succeeds.

you have discord or telegram we can chat there and if you got time can assist me!
one solution i know to bypass the transaction limit is to split the oversize transaction to many, jito bundle can submit up to 5 transactions together.
but if the transaction is returned by Jupiter quote/swaps, i don't think it should be oversize. because itself can execute the swap transaction if we don't send it via jito bundle.
I also see ppl using a custom on chain program, well, it sounds intertesting to me.
my telgram is @tszsy

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment