diff --git a/rpc/src/rpc.rs b/rpc/src/rpc.rs index 78869d4ad9..2d34a97d18 100644 --- a/rpc/src/rpc.rs +++ b/rpc/src/rpc.rs @@ -3602,8 +3602,11 @@ pub mod rpc_full { let (wire_transaction, unsanitized_tx) = decode_and_deserialize::(data, binary_encoding)?; - let preflight_commitment = - preflight_commitment.map(|commitment| CommitmentConfig { commitment }); + let preflight_commitment = if skip_preflight { + Some(CommitmentConfig::processed()) + } else { + preflight_commitment.map(|commitment| CommitmentConfig { commitment }) + }; let preflight_bank = &*meta.get_bank_with_config(RpcContextConfig { commitment: preflight_commitment, min_context_slot, @@ -3619,7 +3622,7 @@ pub mod rpc_full { let durable_nonce_info = transaction .get_durable_nonce() .map(|&pubkey| (pubkey, *transaction.message().recent_blockhash())); - if durable_nonce_info.is_some() { + if durable_nonce_info.is_some() || (skip_preflight && last_valid_block_height == 0) { // While it uses a defined constant, this last_valid_block_height value is chosen arbitrarily. // It provides a fallback timeout for durable-nonce transaction retries in case of // malicious packing of the retry queue. Durable-nonce transactions are otherwise