javascript
Send a transaction using JavaScript with @solana/web3.js.
Using Connection
bash
npm install @solana/web3.js@1 bs58javascript
import { Connection, Keypair, PublicKey, SystemProgram, Transaction } from "@solana/web3.js";
import bs58 from "bs58";
// Your Solana RPC: blockhash and confirmations
const RPC_URL = "https://api.mainnet-beta.solana.com";
// BlockSprint: sending only
const ENDPOINT = "https://fra.blocksprint.io/api/v1/YOUR_API_KEY";
const TIP_ADDRESS = new PublicKey("Sp1x2AqpQckPLaWnWCJUNg8k6qQexfaEWcSRKf5JcDV");
const rpc = new Connection(RPC_URL, "confirmed");
const blocksprint = new Connection(ENDPOINT);
// Your funded wallet and the recipient
const wallet = Keypair.fromSecretKey(bs58.decode(process.env.PAYER_SECRET_BASE58));
const recipient = new PublicKey(process.env.RECIPIENT);
// Create transaction
const transaction = new Transaction();
// Add your instruction
transaction.add(
SystemProgram.transfer({
fromPubkey: wallet.publicKey,
toPubkey: recipient,
lamports: 1_000_000,
})
);
// Add tip instruction (0.001 SOL minimum)
transaction.add(
SystemProgram.transfer({
fromPubkey: wallet.publicKey,
toPubkey: TIP_ADDRESS,
lamports: 1_000_000,
})
);
// Get recent blockhash from your RPC
const { blockhash } = await rpc.getLatestBlockhash();
transaction.recentBlockhash = blockhash;
transaction.feePayer = wallet.publicKey;
// Sign and send through BlockSprint (web3.js sends base64)
transaction.sign(wallet);
const signature = await blocksprint.sendRawTransaction(
transaction.serialize(),
{
skipPreflight: true,
maxRetries: 0,
}
);
console.log("Signature:", signature);
// The signature means "accepted", not "landed": check it with rpc.getSignatureStatuses([signature])Using Fetch (Raw JSON-RPC)
javascript
const ENDPOINT = "https://fra.blocksprint.io/api/v1/YOUR_API_KEY";
// serializedTransaction: Uint8Array/Buffer, e.g. signedTransaction.serialize()
async function sendTransaction(serializedTransaction) {
const base64 = Buffer.from(serializedTransaction).toString("base64");
const response = await fetch(ENDPOINT, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
jsonrpc: "2.0",
id: 1,
method: "sendTransaction",
params: [
base64,
{
encoding: "base64",
skipPreflight: true,
maxRetries: 0,
},
],
}),
});
// Errors come back as JSON-RPC errors with an HTTP 4xx/5xx status
const result = await response.json();
if (result.error) {
throw new Error(`${result.error.code}: ${result.error.message}`);
}
return result.result; // signature
}
// Usage
// const signature = await sendTransaction(signedTransaction.serialize());With Priority Fee
javascript
import { ComputeBudgetProgram, Transaction } from "@solana/web3.js";
const transaction = new Transaction();
// Set priority fee (micro-lamports per compute unit)
transaction.add(
ComputeBudgetProgram.setComputeUnitPrice({
microLamports: 1_000_000,
})
);
// Set compute limit
transaction.add(
ComputeBudgetProgram.setComputeUnitLimit({
units: 200_000,
})
);
// Your instruction
transaction.add(yourInstruction);
// Tip instruction (see "Rotating Tip Addresses")
transaction.add(tipInstruction);Rotating Tip Addresses
javascript
import { PublicKey, SystemProgram } from "@solana/web3.js";
// BlockSprint tip addresses
const TIP_ADDRESSES = [
"Sp1x2AqpQckPLaWnWCJUNg8k6qQexfaEWcSRKf5JcDV",
"Sp4JHSh9cksfzXbgK7Pq2ovtn8LirLQydaJKTsiNT77",
"Sp1xMS2cbw83SZDNr4AGqkBYYLjb3LvVnmDSrTMaHkr",
"SpagSJmnh8E9cGT5Y431xPPaS2c1xLREGGCWN9yDeUf",
"SpWrza9E63MQuHeGnnfzmtLVCs3pBdjyKPXUABPo9nq",
"SpXyoqMHJEhsNQ9fHh3DTGGzrGroZ5zfDtJwFvN4kXi",
"Spv2g3L837bVeHwkyb18LhA5P1bvJbkvaZbxcZXbwC2",
"SpDUe5MyFGG97SmdBQMWNPbx2Et9bZt2TCbZm3TujgX",
"SpKZ28tFzQ13kVjHhsyDEiQfkPGjA7Wmk185KcEDyuh",
"SpxPqegfoR3QkBN7guRUiU6QfhtTW1CnKSTSSapumqm",
];
function getRandomTipAddress() {
const index = Math.floor(Math.random() * TIP_ADDRESSES.length);
return new PublicKey(TIP_ADDRESSES[index]);
}
// Use in transaction: a top-level System Program transfer
transaction.add(
SystemProgram.transfer({
fromPubkey: wallet.publicKey,
toPubkey: getRandomTipAddress(),
lamports: 1_000_000,
})
);INFO
Transaction V1: @solana/web3.js 1.x builds legacy and v0 transactions. To build V1, use @solana/kit 8.0.0 or later; see Transaction V1.
