Skip to content

Commit

Permalink
rpc: simulate tx: add jsonParsed support for inner instructions
Browse files Browse the repository at this point in the history
  • Loading branch information
buffalojoec committed Dec 6, 2023
1 parent 4d25e6a commit c24d74f
Show file tree
Hide file tree
Showing 6 changed files with 16 additions and 12 deletions.
2 changes: 1 addition & 1 deletion banks-server/src/banks_server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ fn simulate_transaction(
units_consumed,
return_data,
inner_instructions,
} = bank.simulate_transaction_unchecked(sanitized_transaction, false);
} = bank.simulate_transaction_unchecked(&sanitized_transaction, false);

let simulation_details = TransactionSimulationDetails {
logs,
Expand Down
2 changes: 1 addition & 1 deletion programs/sbf/tests/programs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -737,7 +737,7 @@ fn test_return_data_and_log_data_syscall() {
let transaction = Transaction::new(&[&mint_keypair], message, blockhash);
let sanitized_tx = SanitizedTransaction::from_transaction_for_tests(transaction);

let result = bank.simulate_transaction(sanitized_tx, false);
let result = bank.simulate_transaction(&sanitized_tx, false);

assert!(result.result.is_ok());

Expand Down
6 changes: 3 additions & 3 deletions rpc-client-api/src/response.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ use {
transaction::{Result, TransactionError},
},
solana_transaction_status::{
ConfirmedTransactionStatusWithSignature, InnerInstructions, TransactionConfirmationStatus,
UiConfirmedBlock, UiTransactionReturnData,
ConfirmedTransactionStatusWithSignature, TransactionConfirmationStatus, UiConfirmedBlock,
UiInnerInstructions, UiTransactionReturnData,
},
std::{collections::HashMap, fmt, net::SocketAddr, str::FromStr},
thiserror::Error,
Expand Down Expand Up @@ -423,7 +423,7 @@ pub struct RpcSimulateTransactionResult {
pub accounts: Option<Vec<Option<UiAccount>>>,
pub units_consumed: Option<u64>,
pub return_data: Option<UiTransactionReturnData>,
pub inner_instructions: Option<Vec<InnerInstructions>>,
pub inner_instructions: Option<Vec<UiInnerInstructions>>,
}

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
Expand Down
10 changes: 7 additions & 3 deletions rpc/src/rpc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3265,6 +3265,7 @@ pub mod rpc_full {
use {
super::*,
solana_sdk::message::{SanitizedVersionedMessage, VersionedMessage},
solana_transaction_status::UiInnerInstructions,
};
#[rpc]
pub trait Full {
Expand Down Expand Up @@ -3676,7 +3677,7 @@ pub mod rpc_full {
units_consumed,
return_data,
inner_instructions: _, // Always `None` due to `enable_cpi_recording = false`
} = preflight_bank.simulate_transaction(transaction, false)
} = preflight_bank.simulate_transaction(&transaction, false)
{
match err {
TransactionError::BlockhashNotFound => {
Expand Down Expand Up @@ -3755,7 +3756,6 @@ pub mod rpc_full {
if sig_verify {
verify_transaction(&transaction, &bank.feature_set)?;
}
let number_of_accounts = transaction.message().account_keys().len();

let TransactionSimulationResult {
result,
Expand All @@ -3764,7 +3764,10 @@ pub mod rpc_full {
units_consumed,
return_data,
inner_instructions,
} = bank.simulate_transaction(transaction, enable_cpi_recording);
} = bank.simulate_transaction(&transaction, enable_cpi_recording);

let account_keys = transaction.message().account_keys();
let number_of_accounts = account_keys.len();

let accounts = if let Some(config_accounts) = config_accounts {
let accounts_encoding = config_accounts
Expand Down Expand Up @@ -3821,6 +3824,7 @@ pub mod rpc_full {
.collect(),
})
.filter(|i| !i.instructions.is_empty())
.map(|converted| UiInnerInstructions::parse(converted, &account_keys))
.collect()
});

Expand Down
6 changes: 3 additions & 3 deletions runtime/src/bank.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4318,7 +4318,7 @@ impl Bank {
/// Run transactions against a frozen bank without committing the results
pub fn simulate_transaction(
&self,
transaction: SanitizedTransaction,
transaction: &SanitizedTransaction,
enable_cpi_recording: bool,
) -> TransactionSimulationResult {
assert!(self.is_frozen(), "simulation bank must be frozen");
Expand All @@ -4330,13 +4330,13 @@ impl Bank {
/// is frozen, enabling use in single-Bank test frameworks
pub fn simulate_transaction_unchecked(
&self,
transaction: SanitizedTransaction,
transaction: &SanitizedTransaction,
enable_cpi_recording: bool,
) -> TransactionSimulationResult {
let account_keys = transaction.message().account_keys();
let number_of_accounts = account_keys.len();
let account_overrides = self.get_account_overrides_for_simulation(&account_keys);
let batch = self.prepare_unlocked_batch_from_single_tx(&transaction);
let batch = self.prepare_unlocked_batch_from_single_tx(transaction);
let mut timings = ExecuteTimings::default();

let LoadAndExecuteTransactionsOutput {
Expand Down
2 changes: 1 addition & 1 deletion transaction-status/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@ pub struct UiInnerInstructions {
}

impl UiInnerInstructions {
fn parse(inner_instructions: InnerInstructions, account_keys: &AccountKeys) -> Self {
pub fn parse(inner_instructions: InnerInstructions, account_keys: &AccountKeys) -> Self {
Self {
index: inner_instructions.index,
instructions: inner_instructions
Expand Down

0 comments on commit c24d74f

Please sign in to comment.