perf: optimize event processing and add gRPC instruction parsing

This commit is contained in:
ysq
2025-09-03 15:29:57 +08:00
parent b71a83bf66
commit 7601eb370c
7 changed files with 627 additions and 120 deletions
+1 -2
View File
@@ -282,9 +282,8 @@ impl PooledTransactionPretty {
self.transaction.signature =
Signature::try_from(tx.signature.as_slice()).expect("valid signature");
self.transaction.is_vote = tx.is_vote;
self.transaction.tx = yellowstone_grpc_proto::convert_from::create_tx_with_meta(tx)
.expect("valid tx with meta");
self.transaction.program_received_time_us = get_high_perf_clock();
self.transaction.grpc_tx = tx;
}
}
+7 -7
View File
@@ -2,14 +2,17 @@ use solana_sdk::{pubkey::Pubkey, signature::Signature};
use solana_transaction_status::{TransactionWithStatusMeta, VersionedTransactionWithStatusMeta};
use std::{collections::HashMap, fmt};
use yellowstone_grpc_proto::{
geyser::{SubscribeRequestFilterAccounts, SubscribeRequestFilterTransactions},
geyser::{
SubscribeRequestFilterAccounts, SubscribeRequestFilterTransactions,
SubscribeUpdateTransactionInfo,
},
prost_types::Timestamp,
};
pub type TransactionsFilterMap = HashMap<String, SubscribeRequestFilterTransactions>;
pub type AccountsFilterMap = HashMap<String, SubscribeRequestFilterAccounts>;
#[derive(Clone)]
#[derive(Clone, Debug)]
pub enum EventPretty {
BlockMeta(BlockMetaPretty),
Transaction(TransactionPretty),
@@ -71,8 +74,8 @@ pub struct TransactionPretty {
pub block_time: Option<Timestamp>,
pub signature: Signature,
pub is_vote: bool,
pub tx: TransactionWithStatusMeta,
pub program_received_time_us: i64,
pub grpc_tx: SubscribeUpdateTransactionInfo,
}
impl fmt::Debug for TransactionPretty {
@@ -96,10 +99,7 @@ impl Default for TransactionPretty {
block_time: None,
signature: Signature::default(),
is_vote: false,
tx: TransactionWithStatusMeta::Complete(VersionedTransactionWithStatusMeta {
transaction: solana_sdk::transaction::VersionedTransaction::default(),
meta: solana_transaction_status::TransactionStatusMeta::default(),
}),
grpc_tx: SubscribeUpdateTransactionInfo::default(),
program_received_time_us: 0,
}
}