diff --git a/Cargo.toml b/Cargo.toml index fac42c4..d3cc11d 100755 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-streamer-sdk" -version = "0.4.3" +version = "0.4.4" edition = "2021" authors = ["William ", "sgxiang ", "wei <1415121722@qq.com>"] repository = "https://github.com/0xfnzero/solana-streamer" diff --git a/README_CN.md b/README_CN.md index 88413c7..e2e61b7 100644 --- a/README_CN.md +++ b/README_CN.md @@ -46,14 +46,14 @@ git clone https://github.com/0xfnzero/solana-streamer ```toml # 添加到您的 Cargo.toml -solana-streamer-sdk = { path = "./solana-streamer", version = "0.4.3" } +solana-streamer-sdk = { path = "./solana-streamer", version = "0.4.4" } ``` ### 使用 crates.io ```toml # 添加到您的 Cargo.toml -solana-streamer-sdk = "0.4.3" +solana-streamer-sdk = "0.4.4" ``` ## 配置系统 diff --git a/src/streaming/event_parser/core/account_event_parser.rs b/src/streaming/event_parser/core/account_event_parser.rs index 87cad9d..0734d3d 100644 --- a/src/streaming/event_parser/core/account_event_parser.rs +++ b/src/streaming/event_parser/core/account_event_parser.rs @@ -288,32 +288,41 @@ impl AccountEventParser { ) -> Option> { use solana_program::program_pack::Pack; use spl_token::state::Mint; - if let Ok(mint) = Mint::unpack_from_slice(&account.data) { - let mut event = TokenInfoEvent { - metadata, - pubkey: account.pubkey, - executable: account.executable, - lamports: account.lamports, - owner: account.owner, - rent_epoch: account.rent_epoch, - supply: mint.supply, - decimals: mint.decimals, - }; - event.set_handle_us(elapsed_micros_since(account.recv_us)); - return Some(Box::new(event)); + match Mint::unpack_from_slice(&account.data) { + Ok(mint) => { + let mut event = TokenInfoEvent { + metadata, + pubkey: account.pubkey, + executable: account.executable, + lamports: account.lamports, + owner: account.owner, + rent_epoch: account.rent_epoch, + supply: mint.supply, + decimals: mint.decimals, + }; + event.set_handle_us(elapsed_micros_since(account.recv_us)); + return Some(Box::new(event)); + } + Err(_) => { + let mut event = TokenAccountEvent { + metadata, + pubkey: account.pubkey, + executable: account.executable, + lamports: account.lamports, + owner: account.owner, + rent_epoch: account.rent_epoch, + amount: None, + }; + match Account::unpack(&account.data) { + Ok(info) => { + event.amount = Some(info.amount); + } + Err(_) => {} + } + event.set_handle_us(elapsed_micros_since(account.recv_us)); + return Some(Box::new(event)); + } } - let info = Account::unpack(&account.data); - let mut event = TokenAccountEvent { - metadata, - pubkey: account.pubkey, - executable: account.executable, - lamports: account.lamports, - owner: account.owner, - rent_epoch: account.rent_epoch, - amount: if let Ok(info) = info { Some(info.amount) } else { None }, - }; - event.set_handle_us(elapsed_micros_since(account.recv_us)); - return Some(Box::new(event)); } pub fn parse_nonce_account_event(