Skip to content
29 changes: 18 additions & 11 deletions crates/core/src/rpc/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -206,18 +206,25 @@ pub fn transform_tx_metadata_to_ui_accounts(
meta.inner_instructions
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should this method take ownership of meta and transform the data, instead of cloning?
So

pub fn transform_tx_metadata_to_ui_accounts(
    meta: TransactionMetadata,
) 

and then use into_iter()
?

.iter()
.enumerate()
.map(|(i, ixs)| {
InnerInstructions {
index: i as u8,
instructions: ixs
.iter()
.map(|ix| InnerInstruction {
instruction: ix.instruction.clone(),
stack_height: Some(ix.stack_height as u32),
})
.collect(),
.filter_map(|(i, ixs)| {
let instructions: Vec<InnerInstruction> = ixs
.iter()
.map(|ix| InnerInstruction {
instruction: ix.instruction.clone(),
stack_height: Some(ix.stack_height as u32),
})
.collect();
if instructions.is_empty() {
None
} else {
Some(
InnerInstructions {
index: i as u8,
instructions,
}
.into(),
)
}
.into()
})
.collect()
}
Expand Down
18 changes: 14 additions & 4 deletions crates/core/src/surfnet/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -221,14 +221,24 @@ impl GetTransactionResult {
tx: EncodedConfirmedTransactionWithStatusMeta,
latest_absolute_slot: u64,
) -> Self {
let is_finalized = latest_absolute_slot >= tx.slot + FINALIZATION_SLOT_THRESHOLD;
let (confirmation_status, confirmations) = if is_finalized {
(
Some(solana_transaction_status::TransactionConfirmationStatus::Finalized),
None,
)
} else {
(
Some(solana_transaction_status::TransactionConfirmationStatus::Confirmed),
Some((latest_absolute_slot - tx.slot) as usize),
)
};
let status = TransactionStatus {
slot: tx.slot,
confirmations: Some((latest_absolute_slot - tx.slot) as usize),
confirmations,
status: tx.transaction.clone().meta.map_or(Ok(()), |m| m.status),
err: tx.transaction.clone().meta.and_then(|m| m.err),
confirmation_status: Some(
solana_transaction_status::TransactionConfirmationStatus::Confirmed,
),
confirmation_status,
};

Self::FoundTransaction(signature, tx, status)
Expand Down
51 changes: 34 additions & 17 deletions crates/core/src/surfnet/svm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -989,16 +989,27 @@ impl SurfnetSvm {
status: err.map(|e| Err(e)).unwrap_or(Ok(())),
inner_instructions,
log_messages: OptionSerializer::Some(meta.logs.clone()),
return_data,
return_data: if return_data.is_none() {
OptionSerializer::None
} else {
OptionSerializer::Some(UiTransactionReturnData {
program_id: meta.return_data.program_id.to_string(),
data: (
base64::engine::general_purpose::STANDARD
.encode(&meta.return_data.data),
UiReturnDataEncoding::Base64,
),
})
},
compute_units_consumed: OptionSerializer::Some(
meta.compute_units_consumed,
),
pre_token_balances: OptionSerializer::None, // todo
post_token_balances: OptionSerializer::None, // todo
rewards: OptionSerializer::None, // todo
loaded_addresses: OptionSerializer::None, // todo
pre_balances: vec![],
post_balances: vec![],
pre_token_balances: OptionSerializer::Some(vec![]),
post_token_balances: OptionSerializer::Some(vec![]),
rewards: OptionSerializer::Some(vec![]),
loaded_addresses: OptionSerializer::None,
pre_balances: vec![], // TODO: track real balances
post_balances: vec![], // TODO: track real balances
fee: 0,
}),
version: Some(get_transaction_version(&tx)),
Expand Down Expand Up @@ -1196,17 +1207,23 @@ fn to_ui_inner_instructions(
meta.inner_instructions
.iter()
.enumerate()
.map(|(i, inner_ixs)| UiInnerInstructions {
index: i as u8,
instructions: inner_ixs
.iter()
.map(|ix| {
UiInstruction::Compiled(UiCompiledInstruction::from(
&ix.instruction,
Some(ix.stack_height as u32),
))
.filter_map(|(i, inner_ixs)| {
if inner_ixs.is_empty() {
None
} else {
Some(UiInnerInstructions {
index: i as u8,
instructions: inner_ixs
.iter()
.map(|ix| {
UiInstruction::Compiled(UiCompiledInstruction::from(
&ix.instruction,
Some(ix.stack_height as u32),
))
})
.collect(),
})
.collect(),
}
})
.collect(),
)
Expand Down
24 changes: 14 additions & 10 deletions crates/core/src/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -117,17 +117,21 @@ impl From<TransactionWithStatusMeta> for EncodedConfirmedTransactionWithStatusMe
),
),
log_messages: OptionSerializer::Some(meta.logs),
pre_token_balances: OptionSerializer::None,
post_token_balances: OptionSerializer::None,
rewards: OptionSerializer::None,
pre_token_balances: OptionSerializer::Some(vec![]),
post_token_balances: OptionSerializer::Some(vec![]),
rewards: OptionSerializer::Some(vec![]),
loaded_addresses: OptionSerializer::None,
return_data: OptionSerializer::Some(UiTransactionReturnData {
program_id: meta.return_data.program_id.to_string(),
data: (
BASE64_STANDARD.encode(meta.return_data.data),
UiReturnDataEncoding::Base64,
),
}),
return_data: if meta.return_data.data.is_empty() {
OptionSerializer::None
} else {
OptionSerializer::Some(UiTransactionReturnData {
program_id: meta.return_data.program_id.to_string(),
data: (
BASE64_STANDARD.encode(meta.return_data.data),
UiReturnDataEncoding::Base64,
),
})
},
compute_units_consumed: OptionSerializer::Some(meta.compute_units_consumed),
}),
version: Some(tx.version()),
Expand Down