UNPKG

@skeet-framework/solana-utils

Version:

Skeet Framework Plugin - Solana Utils

66 lines (63 loc) 1.91 kB
import { Connection, Keypair, TransactionInstruction, TransactionMessage, VersionedTransaction, } from '@solana/web3.js' import { PriorityLevel } from './priorityFee' import { getTestVersionedTxResult } from './getTestVersionedTxResult' export const confirmTransaction = async ( connection: Connection, fromWalletKeyString: string, instructions: TransactionInstruction[], priorityFee: PriorityLevel = PriorityLevel.LOW, ) => { try { const fromWalletKey = fromWalletKeyString.split(',').map(Number) const fromWallet = Keypair.fromSecretKey( new Uint8Array(Array.from(fromWalletKey)), ) let tryCount = 0 // eslint-disable-next-line no-constant-condition while (true) { try { tryCount++ const testVersionedTx = await getTestVersionedTxResult( connection, fromWalletKeyString, instructions, priorityFee, ) const versionedTx = new VersionedTransaction( new TransactionMessage({ instructions, payerKey: fromWallet.publicKey, recentBlockhash: testVersionedTx.latestBlockhashAndContext.value.blockhash, }).compileToV0Message(), ) versionedTx.sign([fromWallet]) const signature = await connection.sendRawTransaction( versionedTx.serialize(), ) await connection.confirmTransaction( { ...testVersionedTx.latestBlockhashAndContext.value, signature, }, 'finalized', ) console.log('finalized signature:', signature) return signature } catch (error) { console.log( `confirmTransaction failed: ${error}\nRetrying ${tryCount} times..`, ) } } } catch (error) { console.log(`confirmTransaction: ${error}`) throw new Error(JSON.stringify(error)) } }