diff --git a/cli/src/cli.rs b/cli/src/cli.rs index 1879a29dbf..46c2262f0b 100644 --- a/cli/src/cli.rs +++ b/cli/src/cli.rs @@ -586,6 +586,7 @@ impl CliConfig<'_> { config.commitment = CommitmentConfig::recent(); config.send_transaction_config = RpcSendTransactionConfig { skip_preflight: true, + ..RpcSendTransactionConfig::default() }; config } @@ -1295,6 +1296,7 @@ fn send_and_confirm_transactions_with_spinner( &transaction, RpcSendTransactionConfig { skip_preflight: true, + ..RpcSendTransactionConfig::default() }, ) .ok(); @@ -1465,6 +1467,7 @@ fn process_deploy( config.commitment, RpcSendTransactionConfig { skip_preflight: true, + ..RpcSendTransactionConfig::default() }, ) .map_err(|e| { diff --git a/client/src/rpc_config.rs b/client/src/rpc_config.rs index 1c51169640..ed24156569 100644 --- a/client/src/rpc_config.rs +++ b/client/src/rpc_config.rs @@ -12,12 +12,14 @@ pub struct RpcSignatureStatusConfig { #[serde(rename_all = "camelCase")] pub struct RpcSendTransactionConfig { pub skip_preflight: bool, + pub preflight_commitment: Option, } #[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct RpcSimulateTransactionConfig { pub sig_verify: bool, + pub commitment: Option, } #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] diff --git a/core/src/rpc.rs b/core/src/rpc.rs index 4027cb255c..41c018f643 100644 --- a/core/src/rpc.rs +++ b/core/src/rpc.rs @@ -2137,7 +2137,10 @@ impl RpcSol for RpcSolImpl { .into()); } - if let (Err(err), _log_output) = bank.simulate_transaction(transaction.clone()) { + let preflight_bank = &*meta.bank(config.preflight_commitment); + if let (Err(err), _log_output) = + preflight_bank.simulate_transaction(transaction.clone()) + { // Note: it's possible that the transaction simulation failed but the actual // transaction would succeed, such as when a transaction depends on an earlier // transaction that has yet to reach max confirmations. In these cases the user @@ -2169,7 +2172,7 @@ impl RpcSol for RpcSolImpl { Ok(()) }; - let bank = &*meta.bank(None); + let bank = &*meta.bank(config.commitment); let logs = if result.is_ok() { let (transaction_result, log_messages) = bank.simulate_transaction(transaction); result = transaction_result; diff --git a/docs/src/apps/jsonrpc-api.md b/docs/src/apps/jsonrpc-api.md index a9412be72e..a5aeefe184 100644 --- a/docs/src/apps/jsonrpc-api.md +++ b/docs/src/apps/jsonrpc-api.md @@ -1353,6 +1353,7 @@ Before submitting, the following preflight checks are performed: - `` - fully-signed Transaction, as base-58 encoded string - `` - (optional) Configuration object containing the following field: - `skipPreflight: ` - if true, skip the preflight transaction checks (default: false) + - `preflightCommitment: ` - (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment) level to use for preflight (default: max). #### Results: @@ -1377,6 +1378,7 @@ Simulate sending a transaction - `` - Transaction, as base-58 encoded string. The transaction must have a valid blockhash, but is not required to be signed. - `` - (optional) Configuration object containing the following field: - `sigVerify: ` - if true the transaction signatures will be verified (default: false) + - `commitment: ` - (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment) level to simulate the transaction at (default: max). #### Results: diff --git a/stake-monitor/src/lib.rs b/stake-monitor/src/lib.rs index e3b954e2d5..15fe3138f4 100644 --- a/stake-monitor/src/lib.rs +++ b/stake-monitor/src/lib.rs @@ -494,6 +494,7 @@ mod test { ), RpcSendTransactionConfig { skip_preflight: true, + ..RpcSendTransactionConfig::default() }, ) .unwrap(); @@ -549,6 +550,7 @@ mod test { ), RpcSendTransactionConfig { skip_preflight: true, + ..RpcSendTransactionConfig::default() }, ) .unwrap(); @@ -594,6 +596,7 @@ mod test { ), RpcSendTransactionConfig { skip_preflight: true, + ..RpcSendTransactionConfig::default() }, ) .unwrap(); @@ -632,6 +635,7 @@ mod test { ), RpcSendTransactionConfig { skip_preflight: true, + ..RpcSendTransactionConfig::default() }, ) .unwrap(); diff --git a/tokens/src/thin_client.rs b/tokens/src/thin_client.rs index 86c7635ba7..03403825ab 100644 --- a/tokens/src/thin_client.rs +++ b/tokens/src/thin_client.rs @@ -35,6 +35,7 @@ impl Client for RpcClient { &transaction, RpcSendTransactionConfig { skip_preflight: true, + ..RpcSendTransactionConfig::default() }, ) .map_err(|e| TransportError::Custom(e.to_string()))