mirror of
https://github.com/fdundjer/solana-sniper-bot.git
synced 2025-11-09 20:12:06 +10:00
38 lines
1.4 KiB
TypeScript
38 lines
1.4 KiB
TypeScript
import { BlockhashWithExpiryBlockHeight, Connection, Transaction, VersionedTransaction } from '@solana/web3.js';
|
|
import { TransactionExecutor } from './transaction-executor.interface';
|
|
import { logger } from '../helpers';
|
|
|
|
export class DefaultTransactionExecutor implements TransactionExecutor {
|
|
constructor(private readonly connection: Connection) {}
|
|
|
|
public async executeAndConfirm(
|
|
transaction: Transaction | VersionedTransaction,
|
|
latestBlockhash: BlockhashWithExpiryBlockHeight,
|
|
): Promise<{ confirmed: boolean; signature: string }> {
|
|
logger.debug('Executing transaction...');
|
|
const signature = await this.execute(transaction);
|
|
|
|
logger.debug({ signature }, 'Confirming transaction...');
|
|
return this.confirm(signature, latestBlockhash);
|
|
}
|
|
|
|
private async execute(transaction: Transaction | VersionedTransaction) {
|
|
return this.connection.sendRawTransaction(transaction.serialize(), {
|
|
preflightCommitment: this.connection.commitment,
|
|
});
|
|
}
|
|
|
|
private async confirm(signature: string, latestBlockhash: BlockhashWithExpiryBlockHeight) {
|
|
const confirmation = await this.connection.confirmTransaction(
|
|
{
|
|
signature,
|
|
lastValidBlockHeight: latestBlockhash.lastValidBlockHeight,
|
|
blockhash: latestBlockhash.blockhash,
|
|
},
|
|
this.connection.commitment,
|
|
);
|
|
|
|
return { confirmed: !confirmation.value.err, signature };
|
|
}
|
|
}
|