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.