1

Sending and confirming a transaction works for me only using skipPreflight=false.

As soon as i set skipPreflight=true the transaction does not come through and confirmation fails with:

TransactionExpiredBlockheightExceededError: Signature XXX has expired: block height exceeded.

Code for sending and confirming is

const transaction = new VersionedTransaction(messageV0);
transaction.sign([wallet, ...innerTransaction.signers]);

const signature = await solanaConnection.sendRawTransaction(
  transaction.serialize(),
  {
    // preflightCommitment: COMMITMENT_LEVEL,
    skipPreflight: true, 
  }
);

const confirmStrategy: BlockheightBasedTransactionConfirmationStrategy = {
    blockhash: latestBlockhash.blockhash,
    lastValidBlockHeight: latestBlockhash.lastValidBlockHeight,
    signature: signature
}
const confirmation = await solanaConnection.confirmTransaction(
  confirmStrategy, 
  COMMITMENT_LEVEL
);

Priority fees are the same for both and sufficiently high (i guess? tested with 4M microLamports). Commitment level is processed.

Do nodes prefer transactions that were simulated? I tested it over multiple occasions and every time it fails when skipping preflight.

1 Answer 1

1

This might be a coincidence, or a bug that was fixed with https://github.com/anza-xyz/agave/pull/483 -- you can try setting preflightCommitment to processed until the fix rolls out to get your transactions to land more easily while also setting skipPreflight: true

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.