-
-
Save zhe-t/60938c69e29276b7a9f098e1b0672c79 to your computer and use it in GitHub Desktop.
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; | |
} |
jito do not need auth key now, so remove authKeypair
when creating searcherClient
, e.g:
update
const c = searcherClient(blockEngineUrl, authKeypair);
to
const c = searcherClient(blockEngineUrl);
Yes, you are exactly right.
@youngqqcn thank you. i sent my bundle . it returns me bundleId . but after that there nothing on terminal why here is my code
export async function sendBundle(bundledTxns: VersionedTransaction[]) { try { console.log('controlled reached') const bundleId = await searcherClient.sendBundle(new JitoBundle(bundledTxns, bundledTxns.length)); console.log(
Bundle ${bundleId} sent.`);
///*
// Assuming onBundleResult returns a Promise<BundleResult>
const result = await new Promise((resolve, reject) => {
searcherClient.onBundleResult(
(result) => {
console.log("Received bundle result:", result);
resolve(result); // Resolve the promise with the result
},
(e: Error) => {
console.error("Error receiving bundle result:", e);
reject(e); // Reject the promise if there's an error
}
);
});
console.log("Result:", result);
//*/
} catch (error) {
const err = error as any;
console.error("Error sending bundle:", err.message);
if (err?.message?.includes("Bundle Dropped, no connected leader up soon")) {
console.error("Error sending bundle: Bundle Dropped, no connected leader up soon.");
} else {
console.error("An unexpected error occurred:", err.message);
}
}
}
`
Did anyone got here txn success with jito using api call. How did you sent the transaction from frontend ?
it's same as be.
Did anyone got here txn success with jito using api call. How did you sent the transaction from frontend ?
Sorry, I didn't understand.
sendBundle
calls the api to get bundleId
, but how it it send on chain from frontend ?
Sorry, I didn't understand.
sendBundle
calls the api to getbundleId
, but how it it send on chain from frontend ?
we implement jito bundle with api request.
so also we can call it as api request.
Only sign tx with wallet in fe is different from be.
@Cool0328 (TG)
bro have you solved this? i encountered the same issue.