From 08a9cdf2c3935fc24e14fa43aec1d5665eccee51 Mon Sep 17 00:00:00 2001 From: Alexander Polakov Date: Tue, 30 Jan 2024 00:02:19 +0400 Subject: [PATCH] chore: cleanup after rebase --- Cargo.lock | 3 +- common/src/lib.rs | 2 -- parse/Cargo.toml | 3 +- parse/src/lib.rs | 77 ++++++----------------------------------------- parse/src/log.rs | 31 +++++++++++++++++++ 5 files changed, 42 insertions(+), 74 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7ba00eb5..1263f043 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2017,10 +2017,9 @@ dependencies = [ "base64 0.21.7", "hex", "neon-proxy-common", + "serde", "serde_json", "solana-rpc-client", - "solana-sdk", - "solana-transaction-status", "test-log", "thiserror", "tracing", diff --git a/common/src/lib.rs b/common/src/lib.rs index 4c988258..3d79abea 100644 --- a/common/src/lib.rs +++ b/common/src/lib.rs @@ -1,5 +1,3 @@ -pub use ethnum; -pub use evm_loader; pub mod types; // ===== Reexports ===== diff --git a/parse/Cargo.toml b/parse/Cargo.toml index 7ddcd6f9..37180d18 100644 --- a/parse/Cargo.toml +++ b/parse/Cargo.toml @@ -8,8 +8,6 @@ edition = "2021" [dependencies] thiserror = "1" base64 = "0.21" -solana-transaction-status = "1.16" -solana-sdk = "1.16" tracing = "0.1" hex = "0.4" @@ -19,3 +17,4 @@ common = { path = "../common", package = "neon-proxy-common" } solana-rpc-client = "1.16" test-log = { version = "0.2", default-features = false, features = ["trace"] } serde_json = "1" +serde = { version = "1", features = ["derive"] } diff --git a/parse/src/lib.rs b/parse/src/lib.rs index 9bdeaf91..52690d64 100644 --- a/parse/src/lib.rs +++ b/parse/src/lib.rs @@ -1,9 +1,8 @@ -use common::types::NeonTxInfo; -use solana_sdk::signature::Signature; -use solana_transaction_status::option_serializer::OptionSerializer; -use solana_transaction_status::EncodedConfirmedTransactionWithStatusMeta; use thiserror::Error; +use common::solana_sdk::signature::Signature; +use common::types::{NeonTxInfo, SolanaTransaction}; + mod log; mod transaction; @@ -30,13 +29,8 @@ struct SolTxMetaInfo { pub ident: SolTxSigSlotInfo, } -pub fn parse( - transaction: EncodedConfirmedTransactionWithStatusMeta, -) -> Result, Error> { - let EncodedConfirmedTransactionWithStatusMeta { - slot, transaction, .. - } = transaction; - let tx = transaction.transaction.decode().ok_or(Error::Solana)?; +pub fn parse(transaction: SolanaTransaction) -> Result, Error> { + let SolanaTransaction { slot, tx, .. } = transaction; let sig_slot_info = SolTxSigSlotInfo { signature: tx.signatures[0], block_slot: slot, @@ -48,63 +42,10 @@ pub fn parse( let neon_tx = transaction::parse(&ix.data)?; tracing::info!("neon tx {:?}", neon_tx); } - let _log_info = if let Some(OptionSerializer::Some(msgs)) = - transaction.meta.map(|meta| meta.log_messages) - { - match log::parse(msgs) { - Ok(log) => log, - Err(err) => panic!("log parsing error {:?}", err), - } - } else { - todo!("no logs?") + let log_info = match log::parse(transaction.log_messages) { + Ok(log) => log, + Err(err) => panic!("log parsing error {:?}", err), }; - tracing::info!("log info {:?}", _log_info); + tracing::info!("log info {:?}", log_info); Ok(Vec::new()) } - -#[cfg(test)] -mod tests { - use solana_rpc_client::rpc_client::RpcClient; - use solana_sdk::signature::Signature; - use solana_transaction_status::UiTransactionEncoding; - - use super::*; - use std::str::FromStr; - use test_log::test; - - // use this to retrieve some transaction from network and store it locally - #[allow(unused)] - fn get_transaction_net(signature: &str) -> EncodedConfirmedTransactionWithStatusMeta { - use std::path::PathBuf; - let client = RpcClient::new("https://api.mainnet-beta.solana.com".to_string()); - let signature = Signature::from_str(signature).unwrap(); - let tx = client - .get_transaction(&signature, UiTransactionEncoding::Base64) - .unwrap(); - let mut path = PathBuf::from_str("./tests/data").unwrap(); - path.push(format!("{}.json", signature)); - std::fs::write(path, serde_json::to_vec(&tx).unwrap()).unwrap(); - tx - } - - fn get_transaction(signature: &str) -> EncodedConfirmedTransactionWithStatusMeta { - use std::path::PathBuf; - let mut path = PathBuf::from_str("./tests/data").unwrap(); - path.push(format!("{}.json", signature)); - let buf = std::fs::read_to_string(&path).unwrap(); - let tx: EncodedConfirmedTransactionWithStatusMeta = serde_json::from_str(&buf).unwrap(); - tx - } - - #[test] - pub fn parse_4y() { - let tx = get_transaction("4YcHMcHwXkpqTfuqafaJigL9SKoYcRhUD9LimTHKjbkhJeLSpdjdsJCirjTqrM7VZC4RBrDJZdrjW5ZAUbqHqhq5"); - parse(tx).unwrap(); - } - - #[test] - pub fn parse_2y() { - let tx = get_transaction("2yUjfHPDAEiMnZPFgj4YgEMa9yQ91zjoCx82i6JuZpnWJjXS3UMKNHnvZCCsjdicg5nfTq2CCUfvcpQkiKL6yCss"); - parse(tx).unwrap(); - } -} diff --git a/parse/src/log.rs b/parse/src/log.rs index cc5e6e5f..5c1de61a 100644 --- a/parse/src/log.rs +++ b/parse/src/log.rs @@ -376,3 +376,34 @@ pub fn parse(lines: impl IntoIterator>) -> Result, + } + + #[derive(Debug, Deserialize)] + struct DumbTx { + meta: Meta, + } + + #[test] + fn parse_logs() { + let path = "tests/data/"; + for entry in std::fs::read_dir(path).unwrap() { + let entry = entry.unwrap(); + if entry.metadata().unwrap().is_file() { + let buf = std::fs::read(entry.path()).unwrap(); + let tx: DumbTx = serde_json::from_slice(&buf).unwrap(); + println!("Parsing: {:?}", entry.path()); + super::parse(tx.meta.log_messages).unwrap(); + } + } + } +}