From a4a6a821250eed1ed55d8987fee1e6923a7cc8dd Mon Sep 17 00:00:00 2001 From: Dodecahedr0x Date: Sun, 9 Feb 2025 17:14:09 -0700 Subject: [PATCH] feat: use history for statuses --- crates/core/src/rpc/full.rs | 12 +++--------- crates/core/src/simnet/mod.rs | 22 +++++++++++++++++++--- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/crates/core/src/rpc/full.rs b/crates/core/src/rpc/full.rs index 4cd7471..5ccfbb2 100644 --- a/crates/core/src/rpc/full.rs +++ b/crates/core/src/rpc/full.rs @@ -235,18 +235,12 @@ impl Full for SurfpoolFullRpc { .map(|signature| { signature .map(|signature| { - state_reader.svm.get_transaction(&signature).map(|tx| { - tx.clone().ok().map(|_tx| TransactionStatus { - slot: 0, - confirmations: Some(5), - status: Ok(()), - err: None, - confirmation_status: Some(TransactionConfirmationStatus::Finalized), - }) + state_reader.history.get(&signature).map(|tx| { + tx.clone() + .into_status(state_reader.epoch_info.absolute_slot) }) }) .flatten() - .flatten() }) .collect::>>(); let rpc_client = state_reader.rpc_client.clone(); diff --git a/crates/core/src/simnet/mod.rs b/crates/core/src/simnet/mod.rs index 8fb095c..0c49f13 100644 --- a/crates/core/src/simnet/mod.rs +++ b/crates/core/src/simnet/mod.rs @@ -15,9 +15,10 @@ use solana_sdk::{ }; use solana_transaction_status::{ option_serializer::OptionSerializer, EncodedConfirmedTransactionWithStatusMeta, - EncodedTransaction, EncodedTransactionWithStatusMeta, UiCompiledInstruction, - UiInnerInstructions, UiInstruction, UiMessage, UiRawMessage, UiReturnDataEncoding, - UiTransaction, UiTransactionReturnData, UiTransactionStatusMeta, + EncodedTransaction, EncodedTransactionWithStatusMeta, TransactionConfirmationStatus, + TransactionStatus, UiCompiledInstruction, UiInnerInstructions, UiInstruction, UiMessage, + UiRawMessage, UiReturnDataEncoding, UiTransaction, UiTransactionReturnData, + UiTransactionStatusMeta, }; use std::{ collections::HashMap, @@ -44,6 +45,21 @@ pub struct TransactionWithStatusMeta( Option, ); +impl TransactionWithStatusMeta { + pub fn into_status(&self, current_slot: u64) -> TransactionStatus { + TransactionStatus { + slot: self.0, + confirmations: Some((current_slot - self.0) as usize), + status: match self.3.clone() { + Some(err) => Err(err), + None => Ok(()), + }, + err: self.3.clone(), + confirmation_status: Some(TransactionConfirmationStatus::Finalized), + } + } +} + impl Into for TransactionWithStatusMeta { fn into(self) -> EncodedConfirmedTransactionWithStatusMeta { let slot = self.0;