diff --git a/lib/proto/service.proto b/lib/proto/service.proto index 0e16896..e34737d 100644 --- a/lib/proto/service.proto +++ b/lib/proto/service.proto @@ -66,6 +66,10 @@ message Coinsupply { int64 total = 6; } +message RawMempool { + string ID = 1; +} + message TransparentAddress { string address = 1; } @@ -91,4 +95,5 @@ service CompactTxStreamer { // Misc rpc GetLightdInfo(Empty) returns (LightdInfo) {} rpc GetCoinsupply(Empty) returns (Coinsupply) {} + rpc GetRawMempool(Empty) returns (RawMempool) {} } diff --git a/lib/src/commands.rs b/lib/src/commands.rs index 06d79f3..51f5a8a 100644 --- a/lib/src/commands.rs +++ b/lib/src/commands.rs @@ -223,6 +223,27 @@ impl Command for CoinsupplyCommand { } } +struct RawMempoolCommand {} +impl Command for RawMempoolCommand { + fn help(&self) -> String { + let mut h = vec![]; + h.push("Get info about the actual raw of Hush"); + h.push("Usage:"); + h.push("rawmempool"); + h.push(""); + + h.join("\n") + } + + fn short_help(&self) -> String { + "Get the RawMemPool info".to_string() + } + + fn exec(&self, _args: &[&str], lightclient: &LightClient) -> String { + lightclient.do_rawmempool() + } +} + struct BalanceCommand {} impl Command for BalanceCommand { fn help(&self) -> String { @@ -856,6 +877,7 @@ pub fn get_commands() -> Box>> { map.insert("export".to_string(), Box::new(ExportCommand{})); map.insert("info".to_string(), Box::new(InfoCommand{})); map.insert("coinsupply".to_string(), Box::new(CoinsupplyCommand{})); + map.insert("rawmempool".to_string(), Box::new(RawMempoolCommand{})); map.insert("send".to_string(), Box::new(SendCommand{})); map.insert("save".to_string(), Box::new(SaveCommand{})); map.insert("quit".to_string(), Box::new(QuitCommand{})); diff --git a/lib/src/grpcconnector.rs b/lib/src/grpcconnector.rs index 942b2e0..b61a638 100644 --- a/lib/src/grpcconnector.rs +++ b/lib/src/grpcconnector.rs @@ -3,7 +3,7 @@ use std::sync::Arc; use zcash_primitives::transaction::{TxId}; use crate::grpc_client::{ChainSpec, BlockId, BlockRange, RawTransaction, - TransparentAddressBlockFilter, TxFilter, Empty, LightdInfo, Coinsupply}; + TransparentAddressBlockFilter, TxFilter, Empty, LightdInfo, Coinsupply, RawMempool}; use tonic::transport::{Channel, ClientTlsConfig}; use tokio_rustls::{rustls::ClientConfig}; use tonic::{Request}; @@ -95,6 +95,23 @@ pub fn get_coinsupply(uri: http::Uri, no_cert: bool) -> Result Result> { + let mut client = get_client(uri, no_cert).await?; + + let request = Request::new(Empty {}); + + let response = client.get_raw_mempool(request).await?; + + Ok(response.into_inner()) +} +pub fn get_rawmempool(uri: http::Uri, no_cert: bool) -> Result { + let mut rt = tokio::runtime::Runtime::new().map_err(|e| e.to_string())?; + + rt.block_on(get_rawmempool_info(&uri, no_cert)).map_err( |e| e.to_string()) + // tokio::runtime::current_thread::Runtime::new().unwrap().block_on(runner) +} + + async fn get_block_range(uri: &http::Uri, start_height: u64, end_height: u64, no_cert: bool, mut c: F) -> Result<(), Box> where F : FnMut(&[u8], u64) { diff --git a/lib/src/lightclient.rs b/lib/src/lightclient.rs index 4729ce5..83a8728 100644 --- a/lib/src/lightclient.rs +++ b/lib/src/lightclient.rs @@ -652,6 +652,19 @@ impl LightClient { } } + pub fn do_rawmempool(&self) -> String { + match get_rawmempool(self.get_server_uri(), self.config.no_cert_verification) { + Ok(i) => { + let o = object!{ + "ID" => i.id + + }; + o.pretty(2) + }, + Err(e) => e + } + } + pub fn do_seed_phrase(&self) -> Result { if !self.wallet.read().unwrap().is_unlocked_for_spending() { error!("Wallet is locked");