UNPKG

@solsdk/tokenflow_sdk

Version:

A simple SDK for interacting with tokenflow

85 lines (82 loc) 3.24 kB
import { ComputeBudgetProgram, SendTransactionError, TransactionMessage, VersionedTransaction } from '@solana/web3.js'; import { Keypair } from '@nealireverse_dev/utils'; const DEFAULT_COMMITMENT = "finalized"; const DEFAULT_FINALITY = "finalized"; const calculateWithSlippageBuy = (amount, basisPoints) => { return amount + (amount * basisPoints) / 10000n; }; const calculateWithSlippageSell = (amount, basisPoints) => { return amount - (amount * basisPoints) / 10000n; }; async function sendTx(connection, instructions, payer, signers, priorityFees, commitment = DEFAULT_COMMITMENT, finality = DEFAULT_FINALITY) { const ixs = [...instructions]; if (priorityFees) { const modifyComputeUnits = ComputeBudgetProgram.setComputeUnitLimit({ units: priorityFees.unitLimit, }); const addPriorityFee = ComputeBudgetProgram.setComputeUnitPrice({ microLamports: priorityFees.unitPrice, }); ixs.push(modifyComputeUnits); ixs.push(addPriorityFee); } const versionedTx = await buildVersionedTx(connection, payer, ixs, commitment); const getSigners = signers?.map(signer => Keypair.from({ keypair: signer })) versionedTx.sign(getSigners); try { const sig = await connection.sendTransaction(versionedTx, { skipPreflight: false, }); console.log("sig:", `https://solscan.io/tx/${sig}`); let txResult = await getTxDetails(connection, sig, commitment, finality); if (!txResult) { return { success: false, error: "Transaction failed", }; } return { success: true, signature: sig, results: txResult, }; } catch (e) { if (e instanceof SendTransactionError) { let ste = e; console.log('SendTransactionError raw', e.message); console.log("SendTransactionError" + await ste.getLogs(connection)); } else { console.error(e); } return { error: e, success: false, }; } } const buildVersionedTx = async (connection, payer, instructions, commitment = DEFAULT_COMMITMENT) => { const blockHash = (await connection.getLatestBlockhash(commitment)) .blockhash; let messageV0 = new TransactionMessage({ payerKey: payer, recentBlockhash: blockHash, instructions, }).compileToV0Message(); return new VersionedTransaction(messageV0); }; const getTxDetails = async (connection, sig, commitment = DEFAULT_COMMITMENT, finality = DEFAULT_FINALITY) => { const latestBlockHash = await connection.getLatestBlockhash(); await connection.confirmTransaction({ blockhash: latestBlockHash.blockhash, lastValidBlockHeight: latestBlockHash.lastValidBlockHeight, signature: sig, }, commitment); return connection.getTransaction(sig, { maxSupportedTransactionVersion: 0, commitment: finality, }); }; export { DEFAULT_COMMITMENT, DEFAULT_FINALITY, buildVersionedTx, calculateWithSlippageBuy, calculateWithSlippageSell, getTxDetails, sendTx }; //# sourceMappingURL=util.mjs.map