IMPORTANT! The documentation is not up to date. We use this toolkit for banx.gg. I'm contributing very active and don't have time to update the documentation. I hope you understand. It's better to look into the code itself.
A small solution to operate solana transactions: create, sign, send, chunk, support ledger etc.
yarn add solana-transactions-executor # npm install solana-transactions-executor or pnpm add solana-transactions-executor
This package is designed to be used on the frontend of your React web3 application to simplify complex transactional interactions. It assumes that you are already using @solana/web3.js and @solana/wallet-adapter-react
const { connection } = useConnection()
const wallet = useWallet()
const isLedger = false
const txnsResults = await new TxnExecutor(
makeBorrowAction,
{ wallet, connection },
{ signAllChunks: isLedger ? 1 : 40, rejectQueueOnFirstPfError: false },
)
.addTxnParams(txnParams)
.on('pfSuccessEach', (results) => {
//? Some action if the transction is successfull. Triggered after each successfull preflight
})
.on('pfSuccessAll', (results) => {
//? Some action if all transactions are successfull. Triggers after all successfull preflights
})
.on('pfError', (error) => {
//? Some action on a failed transaction. Triggers for each transaction error
})
.execute()
const makeBorrowAction: MakeBorrowAction = async (ixnParams, walletAndConnection) => {
const { instructions, signers, additionalResult } = await getIxnsAndSignersByBorrowType({
ixnParams,
type: borrowType,
walletAndConnection,
})
return {
instructions,
signers,
additionalResult,
lookupTables: [new web3.PublicKey(LOOKUP_TABLE)],
}
}
- Create new instance of
TxnExecutor
- Add params for your transaction(s)
- Add event handlers if needed
- Execute transaction(s)
makeActionFn: MakeActionFn<TParams, TResult>
- function that accepts params<TParams>
to build your transaction results<TResult>
walletAndConnection: WalletAndConnection
- Wallet and Connection objects:{wallet, connection}
options?: Partial<ExecutorOptions>
- Additional contructor options
Additional contructor options:
export type ExecutorOptions = {
commitment: Commitment
signAllChunks: number //? Specify how many trasactions you want to sign per chunk using signAllTransactions method (use 1 for ledger because it doesn't support signAllTransactions method)
skipPreflight: boolean //? if you want to skipPreflight on sendTransaction
preflightCommitment: Commitment
rejectQueueOnFirstPfError: boolean //? Stop sending other txns after first preflight error. Mostly relevant for the ledger
chunkCallOfActionFn: boolean //? If true -- call makeActionFn for each chunk (between wallet approve). If false -- call makeActionFn for all txnsParams at once
}
To pass parameters to MakeActionFn<TParams, TResult>
to create a transaction, use the addTxnParam
or addTxnParams
methods. You may chain addTxnParam
calls or pass txn params via array into addTxnParams
. The number of sent transactions will depend on the number of parameters TParams
.
beforeFirstApprove: () => void
- Triggers before first chunk approvebeforeApproveEveryChunk: () => void
- Triggers after beforeFirstApprove and before each chunk approvepfSuccessAll: (result: SendTxnsResult<TResult>) => void
- Triggers if all chunks were successfully sentpfSuccessSome: (result: SendTxnsResult<TResult>) => void
- Triggers if at least one chunk was successfully sentpfSuccessEach: (result: SendTxnsResult<TResult>) => void
- Triggers after successfull send of each chunkpfError: (error: TxnError) => void
- Triggers on any error