import {Connection} from '../connection'; import {Transaction} from '../transaction'; import type {ConfirmOptions} from '../connection'; import type {Signer} from '../keypair'; import type {TransactionSignature} from '../transaction'; /** * Sign, send and confirm a transaction. * * If `commitment` option is not specified, defaults to 'max' commitment. * * @param {Connection} connection * @param {Transaction} transaction * @param {Array} signers * @param {ConfirmOptions} [options] * @returns {Promise} */ export async function sendAndConfirmTransaction( connection: Connection, transaction: Transaction, signers: Array, options?: ConfirmOptions, ): Promise { const sendOptions = options && { skipPreflight: options.skipPreflight, preflightCommitment: options.preflightCommitment || options.commitment, }; const signature = await connection.sendTransaction( transaction, signers, sendOptions, ); const status = ( await connection.confirmTransaction( signature, options && options.commitment, ) ).value; if (status.err) { throw new Error( `Transaction ${signature} failed (${JSON.stringify(status)})`, ); } return signature; }