FAQ
Is TxEngine really free?
Yes. Early-access tokens are free with 1 tx/sec. We’ll announce options if higher throughput becomes available.
How do I enable Jito routing?
Append jito=1 to the Sender URL and include your own Jito tip instruction in the transaction. TxEngine does not add or redirect tips, and no tip goes to any LumLabs wallet.
Do you calculate priority fees or blockhash for me?
Not by default. Use your own or a public RPC — or email hello@lumlabs.io to request LumLabs RPC quota.
Is TxEngine really free?
Yes. Early-access tokens are free with 1 tx/sec. We’ll announce options if higher throughput becomes available.
How do I enable Jito routing?
Append jito=1 to the Sender URL and include your own Jito tip instruction in the transaction. TxEngine does not add or redirect tips, and no tip goes to any LumLabs wallet.
Do you calculate priority fees or blockhash for me?
Not by default. Use your own or a public RPC — or email hello@lumlabs.io to request LumLabs RPC quota.
JavaScript (Node, @solana/web3.js)
const { Connection, Keypair, Transaction, SystemProgram, PublicKey, sendAndConfirmTransaction, ComputeBudgetProgram } = require('@solana/web3.js'); const bs58 = require('bs58'); const axios = require('axios'); // Load your wallet keypair from environment variable that you use to send the transactions from const SECRET_KEY = process.env.SECRET_KEY; if (!SECRET_KEY) { throw new Error('SECRET_KEY environment variable is required'); } const sender = Keypair.fromSecretKey(bs58.decode(SECRET_KEY)); // Set up clients const rpcClient = new Connection("https://api.mainnet-beta.solana.com", 'confirmed'); // For RPC calls, you can use any RPC endpoint // TXENGINE_HOST and TXENGINE_TOKEN are from the Telegram bot // if you're specifying jito=1 the TxEngine will also duplicate the transaction to Jito, // but it's required to tip Jito to make it work. // if you don't need Jito you can specify jito=0 or just leave it empty const txEngineEndpoint = `https://${process.env.TXENGINE_HOST}?token=${process.env.TXENGINE_TOKEN}&jito=1`; // Create a custom connection for the transaction engine const txEngineConnection = new Connection(txEngineEndpoint, 'confirmed'); async function sendTransaction() { try { // Get latest blockhash using RPC client const { blockhash } = await rpcClient.getLatestBlockhash(); console.log(`Got blockhash: ${blockhash}`); // Create transfer instruction for sending 0.000001 SOL const receiverPubkey = new PublicKey("SOME_RECIPIENT_PUBLIC_KEY"); // Replace with actual recipient const transaction = new Transaction(); transaction.recentBlockhash = blockhash; transaction.feePayer = sender.publicKey; // Add priority fee transaction.add( ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 1000, }) ); // Add transfer instruction transaction.add( SystemProgram.transfer({ fromPubkey: sender.publicKey, toPubkey: receiverPubkey, lamports: 1000, // 0.000001 SOL }) ); // Sign the transaction transaction.sign(sender); // Send transaction via transaction engine console.log(`Sending transaction at ${new Date().toISOString()}`); console.log(`Using transaction engine: ${txEngineEndpoint}`); const signature = await txEngineConnection.sendRawTransaction(transaction.serialize()); console.log(`Transaction sent at ${new Date().toISOString()}`); console.log(`🎉 SUCCESS! Transaction signature: ${signature}`); return signature; } catch (error) { console.error(`Error: ${error.message}`); throw error; } } // Run the script sendTransaction() .then(signature => { console.log('Transaction completed successfully'); process.exit(0); }) .catch(error => { console.error('Transaction failed:', error); process.exit(1); });
Python (solana-py + solders)
import os from solders.keypair import Keypair from solana.rpc.api import Client from solders.system_program import TransferParams, transfer from solders.message import Message from solders.transaction import Transaction from solders.hash import Hash from solders.pubkey import Pubkey import requests from datetime import datetime # Load your wallet keypair from environment variable that you use to send the transactions from SECRET = os.environ["SECRET_KEY"] sender = Keypair.from_base58_string(SECRET) # Set up clients rpc_client = Client("https://api.mainnet-beta.solana.com") # For RPC calls, you can use any RPC endpoint # TXENGINE_HOST and TXENGINE_TOKEN are from the Telegram bot # if you're specifying jito=1 the TxEngine will also duplicate the transaction to Jito, # but it's required to tip Jito to make it work. # if you don't need Jito you can specify jito=0 or just leave it empty tx_engine_endpoint = f"https://{os.environ['TXENGINE_HOST']}?token={os.environ['TXENGINE_TOKEN']}&jito=1" tx_engine_client = Client(endpoint=tx_engine_endpoint, timeout=10) # For sending transactions try: # Get latest blockhash using RPC client blockhash_response = rpc_client.get_latest_blockhash() blockhash = blockhash_response.value.blockhash print(f"Got blockhash: {blockhash}") # Create transfer instruction for sending 0.000001 SOL receiver_pubkey = Pubkey.from_string("SOME_RECEIVER_PUBLIC_KEY") # Replace with actual recipient ixns = [transfer(TransferParams( from_pubkey=sender.pubkey(), to_pubkey=receiver_pubkey, lamports=1000 # 0.000001 SOL ))] # Create message and transaction msg = Message(ixns, sender.pubkey()) tx = Transaction([sender], msg, blockhash) # Send transaction via transaction engine print(f"Sending transaction at {datetime.now()}") print(f"Using transaction engine: {tx_engine_endpoint}") sig = tx_engine_client.send_transaction(tx) print(f"Transaction sent at {datetime.now()}") print(f"🎉 SUCCESS! Transaction signature: {sig.value}") except Exception as e: print(f"Error: {e}") raise
JavaScript (Node, @solana/web3.js)
const { Connection, Keypair, Transaction, SystemProgram, PublicKey, sendAndConfirmTransaction, ComputeBudgetProgram } = require('@solana/web3.js'); const bs58 = require('bs58'); const axios = require('axios'); // Load your wallet keypair from environment variable that you use to send the transactions from const SECRET_KEY = process.env.SECRET_KEY; if (!SECRET_KEY) { throw new Error('SECRET_KEY environment variable is required'); } const sender = Keypair.fromSecretKey(bs58.decode(SECRET_KEY)); // Set up clients const rpcClient = new Connection("https://api.mainnet-beta.solana.com", 'confirmed'); // For RPC calls, you can use any RPC endpoint // TXENGINE_HOST and TXENGINE_TOKEN are from the Telegram bot // if you're specifying jito=1 the TxEngine will also duplicate the transaction to Jito, // but it's required to tip Jito to make it work. // if you don't need Jito you can specify jito=0 or just leave it empty const txEngineEndpoint = `https://${process.env.TXENGINE_HOST}?token=${process.env.TXENGINE_TOKEN}&jito=1`; // Create a custom connection for the transaction engine const txEngineConnection = new Connection(txEngineEndpoint, 'confirmed'); async function sendTransaction() { try { // Get latest blockhash using RPC client const { blockhash } = await rpcClient.getLatestBlockhash(); console.log(`Got blockhash: ${blockhash}`); // Create transfer instruction for sending 0.000001 SOL const receiverPubkey = new PublicKey("SOME_RECIPIENT_PUBLIC_KEY"); // Replace with actual recipient const transaction = new Transaction(); transaction.recentBlockhash = blockhash; transaction.feePayer = sender.publicKey; // Add priority fee transaction.add( ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 1000, }) ); // Add transfer instruction transaction.add( SystemProgram.transfer({ fromPubkey: sender.publicKey, toPubkey: receiverPubkey, lamports: 1000, // 0.000001 SOL }) ); // Sign the transaction transaction.sign(sender); // Send transaction via transaction engine console.log(`Sending transaction at ${new Date().toISOString()}`); console.log(`Using transaction engine: ${txEngineEndpoint}`); const signature = await txEngineConnection.sendRawTransaction(transaction.serialize()); console.log(`Transaction sent at ${new Date().toISOString()}`); console.log(`🎉 SUCCESS! Transaction signature: ${signature}`); return signature; } catch (error) { console.error(`Error: ${error.message}`); throw error; } } // Run the script sendTransaction() .then(signature => { console.log('Transaction completed successfully'); process.exit(0); }) .catch(error => { console.error('Transaction failed:', error); process.exit(1); });
Python (solana-py + solders)
import os from solders.keypair import Keypair from solana.rpc.api import Client from solders.system_program import TransferParams, transfer from solders.message import Message from solders.transaction import Transaction from solders.hash import Hash from solders.pubkey import Pubkey import requests from datetime import datetime # Load your wallet keypair from environment variable that you use to send the transactions from SECRET = os.environ["SECRET_KEY"] sender = Keypair.from_base58_string(SECRET) # Set up clients rpc_client = Client("https://api.mainnet-beta.solana.com") # For RPC calls, you can use any RPC endpoint # TXENGINE_HOST and TXENGINE_TOKEN are from the Telegram bot # if you're specifying jito=1 the TxEngine will also duplicate the transaction to Jito, # but it's required to tip Jito to make it work. # if you don't need Jito you can specify jito=0 or just leave it empty tx_engine_endpoint = f"https://{os.environ['TXENGINE_HOST']}?token={os.environ['TXENGINE_TOKEN']}&jito=1" tx_engine_client = Client(endpoint=tx_engine_endpoint, timeout=10) # For sending transactions try: # Get latest blockhash using RPC client blockhash_response = rpc_client.get_latest_blockhash() blockhash = blockhash_response.value.blockhash print(f"Got blockhash: {blockhash}") # Create transfer instruction for sending 0.000001 SOL receiver_pubkey = Pubkey.from_string("SOME_RECEIVER_PUBLIC_KEY") # Replace with actual recipient ixns = [transfer(TransferParams( from_pubkey=sender.pubkey(), to_pubkey=receiver_pubkey, lamports=1000 # 0.000001 SOL ))] # Create message and transaction msg = Message(ixns, sender.pubkey()) tx = Transaction([sender], msg, blockhash) # Send transaction via transaction engine print(f"Sending transaction at {datetime.now()}") print(f"Using transaction engine: {tx_engine_endpoint}") sig = tx_engine_client.send_transaction(tx) print(f"Transaction sent at {datetime.now()}") print(f"🎉 SUCCESS! Transaction signature: {sig.value}") except Exception as e: print(f"Error: {e}") raise
How It Works
Basic counters and status via the Telegram bot — coming soon. (Higher-throughput tiers may arrive later.)
Observe & iterate
04
TxEngine applies stake-weighted prioritization and submits through our protected path for predictable confirms.
Fast-lane execution
03
POST the base64 transaction to the Sender endpoint with your token. Add jito=1 to enable Jito routing; omit to use the default path or use just SWQoS.
Send to TxEngine
02
Use your own or public RPC to fetch a recent blockhash, set a priority fee, and (optionally) add a Jito tip instruction. Sign and serialize to base64. Or contact us for LumLabs RPC quota: hello@lumlabs.io.
Build & sign locally
01
Zero cost at 1 TPS — perfect for bots, infra keep-alives, and critical paths.
Deterministic performance — priority enforcement keeps throughput steady even at peak.
Global gateways — geo-distributed ingress for low latency.
Fair-use limits — sensible throttling to protect the lane.
Jito-ready — opt-in via jito=1; you supply tips directly in the transaction.
Key Benefits
Integration Notes
No default RPC: we don’t calculate priority fees or recent blockhash. Use your own or public RPC, or email: hello@lumlabs.io for LumLabs RPC quota.
Jito: append &jito=1 to the Sender URL. You must include your own Jito tip in the transaction; TxEngine doesn’t add or redirect tips, and no tips go to any LumLabs wallet.
Jito: append &jito=1 to the Sender URL.
You must include your own Jito tip in the transaction; TxEngine doesn’t add or redirect tips, and no tips go to any LumLabs wallet.
Body: { "transactions": ["BASE64_TX", "..."] }
(array of base64-serialized txs).
Auth & Endpoint: get both
in the Telegram bot.
Query auth param: token=
What TxEngine Does?
Build & sign locally, then POST the base64 tx to TxEngine.
Simple
sender flow
Optional
Jito routing
Add jito=1 to your request; include your own Jito tips in the transaction.
Priority
pathing (SWQoS)
Stake-weighted fast lane that bypasses public RPC queues.
Free tier
Stake-weighted fast lane that bypasses public RPC queues.
Use your own or a public RPC to fetch a recent blockhash and compute priority fees. If you want quota from LumLabs RPC, email: hello@lumlabs.io.
© 2025 LumLabs
© 2025 LumLabs
© 2025 LumLabs
© 2025 LumLabs
TxEngine — Free Priority Sending for Solana
Stake-weighted transaction delivery with optional
Jito routing. Point high-priority transactions to TxEngine and keep confirmations steady during congestion.
Priority sending with SWQoS + optional Jito routing.
No tips to LumLabs required.
Instant. Free. Up to 3 tx/sec.


TxEngine — Free Priority Sending for Solana
TxEngine — Free Priority Sending for Solana
Stake-weighted transaction delivery with optional
Jito routing. Point high-priority transactions to TxEngine and keep confirmations steady during congestion.
Priority sending with SWQoS + optional Jito routing. No tips to LumLabs required.
Instant. Free. Up to 3 tx/sec.


What TxEngine Does?
What TxEngine Does?
Simple
sender flow
Simple
sender flow
Build & sign locally, then POST the base64 tx to TxEngine.
Build & sign locally, then POST the base64 tx to TxEngine.
Stake-weighted fast lane that bypasses public RPC queues.
Stake-weighted fast lane that bypasses public RPC queues.
Priority
pathing (SWQoS)
Priority
pathing (SWQoS)
Free tier
Free tier
1 transaction per second per token during early access.
1 transaction per second per token during early access.
Optional
Jito routing
Optional
Jito routing
Add jito=1 to your request; include your own Jito tips
in the transaction.
Add jito=1 to your request; include your own Jito tips
in the transaction.
Use your own or a public RPC to fetch a recent blockhash and compute priority fees. If you want quota from LumLabs RPC, email: hello@lumlabs.io.
Use your own or a public RPC to fetch a recent blockhash and compute priority fees. If you want quota from LumLabs RPC, email: hello@lumlabs.io.
Key Benefits
Key Benefits
Zero cost at 1 TPS — perfect for bots, infra keep-alives, and critical paths.
Zero cost at 1 TPS — perfect for bots, infra keep-alives, and critical paths.
Deterministic performance — priority enforcement keeps throughput steady even at peak.
Deterministic performance — priority enforcement keeps throughput steady even at peak.
Global gateways — geo-distributed ingress for low latency.
Global gateways — geo-distributed ingress for low latency.
Fair-use limits — sensible throttling to protect the lane.
Fair-use limits — sensible throttling to protect the lane.
Jito-ready — opt-in via jito=1; you supply tips directly in the transaction.
Jito-ready — opt-in via jito=1; you supply tips directly in the transaction.
How It Works
How It Works
Basic counters and status via the Telegram bot — coming soon. (Higher-throughput tiers may arrive later.)
Basic counters and status via the Telegram bot — coming soon. (Higher-throughput tiers may arrive later.)
Observe & iterate
Observe & iterate
TxEngine applies stake-weighted prioritization and submits through our protected path for predictable confirms.
TxEngine applies stake-weighted prioritization and submits through our protected path for predictable confirms.
Fast-lane execution
Fast-lane execution
POST the base64 transaction to the Sender endpoint with your token. Add jito=1 to enable Jito routing; omit to use the default path or use just SWQoS.
POST the base64 transaction to the Sender endpoint with your token. Add jito=1 to enable Jito routing; omit to use the default path or use just SWQoS.
Send to TxEngine
Send to TxEngine
Use your own or public RPC to fetch a recent blockhash, set
a priority fee, and (optionally) add a Jito tip instruction. Sign and serialize to base64. Or contact us for LumLabs RPC quota: hello@lumlabs.io.
Use your own or public RPC to fetch a recent blockhash, set
a priority fee, and (optionally) add a Jito tip instruction. Sign and serialize to base64. Or contact us for LumLabs RPC quota: hello@lumlabs.io.
Build & sign locally
Build & sign locally
01
02
03
04
JavaScript (Node, @solana/web3.js)
const { Connection, Keypair, Transaction, SystemProgram, PublicKey, sendAndConfirmTransaction, ComputeBudgetProgram } = require('@solana/web3.js'); const bs58 = require('bs58'); const axios = require('axios'); // Load your wallet keypair from environment variable that you use to send the transactions from const SECRET_KEY = process.env.SECRET_KEY; if (!SECRET_KEY) { throw new Error('SECRET_KEY environment variable is required'); } const sender = Keypair.fromSecretKey(bs58.decode(SECRET_KEY)); // Set up clients const rpcClient = new Connection("https://api.mainnet-beta.solana.com", 'confirmed'); // For RPC calls, you can use any RPC endpoint // TXENGINE_HOST and TXENGINE_TOKEN are from the Telegram bot // if you're specifying jito=1 the TxEngine will also duplicate the transaction to Jito, // but it's required to tip Jito to make it work. // if you don't need Jito you can specify jito=0 or just leave it empty const txEngineEndpoint = `https://${process.env.TXENGINE_HOST}?token=${process.env.TXENGINE_TOKEN}&jito=1`; // Create a custom connection for the transaction engine const txEngineConnection = new Connection(txEngineEndpoint, 'confirmed'); async function sendTransaction() { try { // Get latest blockhash using RPC client const { blockhash } = await rpcClient.getLatestBlockhash(); console.log(`Got blockhash: ${blockhash}`); // Create transfer instruction for sending 0.000001 SOL const receiverPubkey = new PublicKey("SOME_RECIPIENT_PUBLIC_KEY"); // Replace with actual recipient const transaction = new Transaction(); transaction.recentBlockhash = blockhash; transaction.feePayer = sender.publicKey; // Add priority fee transaction.add( ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 1000, }) ); // Add transfer instruction transaction.add( SystemProgram.transfer({ fromPubkey: sender.publicKey, toPubkey: receiverPubkey, lamports: 1000, // 0.000001 SOL }) ); // Sign the transaction transaction.sign(sender); // Send transaction via transaction engine console.log(`Sending transaction at ${new Date().toISOString()}`); console.log(`Using transaction engine: ${txEngineEndpoint}`); const signature = await txEngineConnection.sendRawTransaction(transaction.serialize()); console.log(`Transaction sent at ${new Date().toISOString()}`); console.log(`🎉 SUCCESS! Transaction signature: ${signature}`); return signature; } catch (error) { console.error(`Error: ${error.message}`); throw error; } } // Run the script sendTransaction() .then(signature => { console.log('Transaction completed successfully'); process.exit(0); }) .catch(error => { console.error('Transaction failed:', error); process.exit(1); });
JavaScript (Node, @solana/web3.js)
const { Connection, Keypair, Transaction, SystemProgram, PublicKey, sendAndConfirmTransaction, ComputeBudgetProgram } = require('@solana/web3.js'); const bs58 = require('bs58'); const axios = require('axios'); // Load your wallet keypair from environment variable that you use to send the transactions from const SECRET_KEY = process.env.SECRET_KEY; if (!SECRET_KEY) { throw new Error('SECRET_KEY environment variable is required'); } const sender = Keypair.fromSecretKey(bs58.decode(SECRET_KEY)); // Set up clients const rpcClient = new Connection("https://api.mainnet-beta.solana.com", 'confirmed'); // For RPC calls, you can use any RPC endpoint // TXENGINE_HOST and TXENGINE_TOKEN are from the Telegram bot // if you're specifying jito=1 the TxEngine will also duplicate the transaction to Jito, // but it's required to tip Jito to make it work. // if you don't need Jito you can specify jito=0 or just leave it empty const txEngineEndpoint = `https://${process.env.TXENGINE_HOST}?token=${process.env.TXENGINE_TOKEN}&jito=1`; // Create a custom connection for the transaction engine const txEngineConnection = new Connection(txEngineEndpoint, 'confirmed'); async function sendTransaction() { try { // Get latest blockhash using RPC client const { blockhash } = await rpcClient.getLatestBlockhash(); console.log(`Got blockhash: ${blockhash}`); // Create transfer instruction for sending 0.000001 SOL const receiverPubkey = new PublicKey("SOME_RECIPIENT_PUBLIC_KEY"); // Replace with actual recipient const transaction = new Transaction(); transaction.recentBlockhash = blockhash; transaction.feePayer = sender.publicKey; // Add priority fee transaction.add( ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 1000, }) ); // Add transfer instruction transaction.add( SystemProgram.transfer({ fromPubkey: sender.publicKey, toPubkey: receiverPubkey, lamports: 1000, // 0.000001 SOL }) ); // Sign the transaction transaction.sign(sender); // Send transaction via transaction engine console.log(`Sending transaction at ${new Date().toISOString()}`); console.log(`Using transaction engine: ${txEngineEndpoint}`); const signature = await txEngineConnection.sendRawTransaction(transaction.serialize()); console.log(`Transaction sent at ${new Date().toISOString()}`); console.log(`🎉 SUCCESS! Transaction signature: ${signature}`); return signature; } catch (error) { console.error(`Error: ${error.message}`); throw error; } } // Run the script sendTransaction() .then(signature => { console.log('Transaction completed successfully'); process.exit(0); }) .catch(error => { console.error('Transaction failed:', error); process.exit(1); });
const { Connection, Keypair, Transaction, SystemProgram, PublicKey, sendAndConfirmTransaction, ComputeBudgetProgram } = require('@solana/web3.js'); const bs58 = require('bs58'); const axios = require('axios'); // Load your wallet keypair from environment variable that you use to send the transactions from const SECRET_KEY = process.env.SECRET_KEY; if (!SECRET_KEY) { throw new Error('SECRET_KEY environment variable is required'); } const sender = Keypair.fromSecretKey(bs58.decode(SECRET_KEY)); // Set up clients const rpcClient = new Connection("https://api.mainnet-beta.solana.com", 'confirmed'); // For RPC calls, you can use any RPC endpoint // TXENGINE_HOST and TXENGINE_TOKEN are from the Telegram bot // if you're specifying jito=1 the TxEngine will also duplicate the transaction to Jito, // but it's required to tip Jito to make it work. // if you don't need Jito you can specify jito=0 or just leave it empty const txEngineEndpoint = `https://${process.env.TXENGINE_HOST}?token=${process.env.TXENGINE_TOKEN}&jito=1`; // Create a custom connection for the transaction engine const txEngineConnection = new Connection(txEngineEndpoint, 'confirmed'); async function sendTransaction() { try { // Get latest blockhash using RPC client const { blockhash } = await rpcClient.getLatestBlockhash(); console.log(`Got blockhash: ${blockhash}`); // Create transfer instruction for sending 0.000001 SOL const receiverPubkey = new PublicKey("SOME_RECIPIENT_PUBLIC_KEY"); // Replace with actual recipient const transaction = new Transaction(); transaction.recentBlockhash = blockhash; transaction.feePayer = sender.publicKey; // Add priority fee transaction.add( ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 1000, }) ); // Add transfer instruction transaction.add( SystemProgram.transfer({ fromPubkey: sender.publicKey, toPubkey: receiverPubkey, lamports: 1000, // 0.000001 SOL }) ); // Sign the transaction transaction.sign(sender); // Send transaction via transaction engine console.log(`Sending transaction at ${new Date().toISOString()}`); console.log(`Using transaction engine: ${txEngineEndpoint}`); const signature = await txEngineConnection.sendRawTransaction(transaction.serialize()); console.log(`Transaction sent at ${new Date().toISOString()}`); console.log(`🎉 SUCCESS! Transaction signature: ${signature}`); return signature; } catch (error) { console.error(`Error: ${error.message}`); throw error; } } // Run the script sendTransaction() .then(signature => { console.log('Transaction completed successfully'); process.exit(0); }) .catch(error => { console.error('Transaction failed:', error); process.exit(1); });
Python (solana-py + solders)
const { Connection, Keypair, Transaction, SystemProgram, PublicKey, sendAndConfirmTransaction, ComputeBudgetProgram } = require('@solana/web3.js'); const bs58 = require('bs58'); const axios = require('axios'); // Load your wallet keypair from environment variable that you use to send the transactions from const SECRET_KEY = process.env.SECRET_KEY; if (!SECRET_KEY) { throw new Error('SECRET_KEY environment variable is required'); } const sender = Keypair.fromSecretKey(bs58.decode(SECRET_KEY)); // Set up clients const rpcClient = new Connection("https://api.mainnet-beta.solana.com", 'confirmed'); // For RPC calls, you can use any RPC endpoint // TXENGINE_HOST and TXENGINE_TOKEN are from the Telegram bot // if you're specifying jito=1 the TxEngine will also duplicate the transaction to Jito, // but it's required to tip Jito to make it work. // if you don't need Jito you can specify jito=0 or just leave it empty const txEngineEndpoint = `https://${process.env.TXENGINE_HOST}?token=${process.env.TXENGINE_TOKEN}&jito=1`; // Create a custom connection for the transaction engine const txEngineConnection = new Connection(txEngineEndpoint, 'confirmed'); async function sendTransaction() { try { // Get latest blockhash using RPC client const { blockhash } = await rpcClient.getLatestBlockhash(); console.log(`Got blockhash: ${blockhash}`); // Create transfer instruction for sending 0.000001 SOL const receiverPubkey = new PublicKey("SOME_RECIPIENT_PUBLIC_KEY"); // Replace with actual recipient const transaction = new Transaction(); transaction.recentBlockhash = blockhash; transaction.feePayer = sender.publicKey; // Add priority fee transaction.add( ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 1000, }) ); // Add transfer instruction transaction.add( SystemProgram.transfer({ fromPubkey: sender.publicKey, toPubkey: receiverPubkey, lamports: 1000, // 0.000001 SOL }) ); // Sign the transaction transaction.sign(sender); // Send transaction via transaction engine console.log(`Sending transaction at ${new Date().toISOString()}`); console.log(`Using transaction engine: ${txEngineEndpoint}`); const signature = await txEngineConnection.sendRawTransaction(transaction.serialize()); console.log(`Transaction sent at ${new Date().toISOString()}`); console.log(`🎉 SUCCESS! Transaction signature: ${signature}`); return signature; } catch (error) { console.error(`Error: ${error.message}`); throw error; } } // Run the script sendTransaction() .then(signature => { console.log('Transaction completed successfully'); process.exit(0); }) .catch(error => { console.error('Transaction failed:', error); process.exit(1); });
Python (solana-py + solders)
Integration Notes
Integration Notes
No default RPC: we don’t calculate priority fees or recent blockhash. Use your own or public RPC, or email: hello@lumlabs.io for LumLabs RPC quota.
No default RPC: we don’t calculate priority fees or recent blockhash. Use your own or public RPC, or email: hello@lumlabs.io for LumLabs RPC quota.
Jito: append &jito=1 to the Sender URL. You must include your own Jito tip in the transaction; TxEngine doesn’t add or redirect tips, and no tips go to any LumLabs wallet.
Jito: append &jito=1 to the Sender URL. You must include your own Jito tip in the transaction; TxEngine doesn’t add or redirect tips, and no tips go to any LumLabs wallet.
Body: { "transactions": ["BASE64_TX", "..."] } (array of base64-serialized txs).
Body: { "transactions": ["BASE64_TX", "..."] } (array of base64-serialized txs).
Auth & Endpoint: get both in the Telegram bot.
Auth & Endpoint: get both in the Telegram bot.
Query auth param: token=
Query auth param: token=
JavaScript (Node, @solana/web3.js)
const { Connection, Keypair, Transaction, SystemProgram, PublicKey, sendAndConfirmTransaction, ComputeBudgetProgram } = require('@solana/web3.js'); const bs58 = require('bs58'); const axios = require('axios'); // Load your wallet keypair from environment variable that you use to send the transactions from const SECRET_KEY = process.env.SECRET_KEY; if (!SECRET_KEY) { throw new Error('SECRET_KEY environment variable is required'); } const sender = Keypair.fromSecretKey(bs58.decode(SECRET_KEY)); // Set up clients const rpcClient = new Connection("https://api.mainnet-beta.solana.com", 'confirmed'); // For RPC calls, you can use any RPC endpoint // TXENGINE_HOST and TXENGINE_TOKEN are from the Telegram bot // if you're specifying jito=1 the TxEngine will also duplicate the transaction to Jito, // but it's required to tip Jito to make it work. // if you don't need Jito you can specify jito=0 or just leave it empty const txEngineEndpoint = `https://${process.env.TXENGINE_HOST}?token=${process.env.TXENGINE_TOKEN}&jito=1`; // Create a custom connection for the transaction engine const txEngineConnection = new Connection(txEngineEndpoint, 'confirmed'); async function sendTransaction() { try { // Get latest blockhash using RPC client const { blockhash } = await rpcClient.getLatestBlockhash(); console.log(`Got blockhash: ${blockhash}`); // Create transfer instruction for sending 0.000001 SOL const receiverPubkey = new PublicKey("SOME_RECIPIENT_PUBLIC_KEY"); // Replace with actual recipient const transaction = new Transaction(); transaction.recentBlockhash = blockhash; transaction.feePayer = sender.publicKey; // Add priority fee transaction.add( ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 1000, }) ); // Add transfer instruction transaction.add( SystemProgram.transfer({ fromPubkey: sender.publicKey, toPubkey: receiverPubkey, lamports: 1000, // 0.000001 SOL }) ); // Sign the transaction transaction.sign(sender); // Send transaction via transaction engine console.log(`Sending transaction at ${new Date().toISOString()}`); console.log(`Using transaction engine: ${txEngineEndpoint}`); const signature = await txEngineConnection.sendRawTransaction(transaction.serialize()); console.log(`Transaction sent at ${new Date().toISOString()}`); console.log(`🎉 SUCCESS! Transaction signature: ${signature}`); return signature; } catch (error) { console.error(`Error: ${error.message}`); throw error; } } // Run the script sendTransaction() .then(signature => { console.log('Transaction completed successfully'); process.exit(0); }) .catch(error => { console.error('Transaction failed:', error); process.exit(1); });
Python (solana-py + solders)
FAQ
FAQ
Is TxEngine really free?
Is TxEngine really free?
How do I enable Jito routing?
How do I enable Jito routing?
Do you calculate priority fees or blockhash for me?
Do you calculate priority fees or blockhash for me?
© 2025 LumLabs
