diff --git a/cli/src/cli.rs b/cli/src/cli.rs index c8f07d5581..dd8a5730f6 100644 --- a/cli/src/cli.rs +++ b/cli/src/cli.rs @@ -1290,6 +1290,7 @@ fn send_and_confirm_transactions_with_spinner( &transaction, RpcSendTransactionConfig { skip_preflight: true, + ..RpcSendTransactionConfig::default() }, ) .ok(); @@ -1442,6 +1443,7 @@ fn process_deploy( &finalize_tx, RpcSendTransactionConfig { skip_preflight: true, + ..RpcSendTransactionConfig::default() }, ) .map_err(|e| { diff --git a/client/src/rpc_config.rs b/client/src/rpc_config.rs index 6c75f1ad84..4c11b2170d 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 8a635439ef..393f7764d4 100644 --- a/core/src/rpc.rs +++ b/core/src/rpc.rs @@ -2101,7 +2101,9 @@ impl RpcSol for RpcSolImpl { .into()); } - if let (Err(err), _log_output) = run_transaction_simulation(&bank, transaction.clone()) + let preflight_bank = &*meta.bank(config.preflight_commitment)?; + if let (Err(err), _log_output) = + run_transaction_simulation(&preflight_bank, 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 @@ -2134,7 +2136,7 @@ impl RpcSol for RpcSolImpl { Ok(()) }; - let bank = &*meta.bank(None)?; + let bank = &*meta.bank(config.commitment)?; let logs = if result.is_ok() { let sim_result = run_transaction_simulation(&bank, transaction); result = sim_result.0; diff --git a/docs/src/apps/jsonrpc-api.md b/docs/src/apps/jsonrpc-api.md index 5c2d35a627..43cc08cf4b 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 d4ee6a6fb2..b267c17ade 100644 --- a/stake-monitor/src/lib.rs +++ b/stake-monitor/src/lib.rs @@ -493,6 +493,7 @@ mod test { ), RpcSendTransactionConfig { skip_preflight: true, + ..RpcSendTransactionConfig::default() }, ) .unwrap(); @@ -548,6 +549,7 @@ mod test { ), RpcSendTransactionConfig { skip_preflight: true, + ..RpcSendTransactionConfig::default() }, ) .unwrap(); @@ -593,6 +595,7 @@ mod test { ), RpcSendTransactionConfig { skip_preflight: true, + ..RpcSendTransactionConfig::default() }, ) .unwrap(); @@ -631,6 +634,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 3482dbb7a7..bb87cce926 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()))