# src/util/send-and-confirm-raw-transaction.js

    // @flow

    import {Connection} from '../connection';
    import type {TransactionSignature} from '../transaction';
    import type {ConfirmOptions} from '../connection';

    /**
     * Send and confirm a raw transaction
     *
     * If `commitment` option is not specified, defaults to 'max' commitment.
     *
     * @param {Connection} connection
     * @param {Buffer} rawTransaction
     * @param {ConfirmOptions} [options]
     * @returns {Promise<TransactionSignature>}
     */
    export async function sendAndConfirmRawTransaction(
      connection: Connection,
      rawTransaction: Buffer,
      options?: ConfirmOptions,
    ): Promise<TransactionSignature> {
      const sendOptions = options && {
        skipPreflight: options.skipPreflight,
        preflightCommitment: options.preflightCommitment || options.commitment,
      };

      const signature = await connection.sendRawTransaction(
        rawTransaction,
        sendOptions,
      );

      const status = (
        await connection.confirmTransaction(
          signature,
          options && options.commitment,
        )
      ).value;

      if (status.err) {
        throw new Error(
          `Raw transaction ${signature} failed (${JSON.stringify(status)})`,
        );
      }

      return signature;
    }