subcoin_rpc_bitcoind/
mempool.rs1use crate::error::Error;
6use crate::types::{GetMempoolEntry, GetMempoolInfo};
7use bitcoin::Txid;
8use jsonrpsee::proc_macros::rpc;
9use std::collections::HashMap;
10
11#[rpc(client, server)]
13pub trait MempoolApi {
14 #[method(name = "getrawmempool", blocking)]
19 fn get_raw_mempool(
20 &self,
21 verbose: Option<bool>,
22 mempool_sequence: Option<bool>,
23 ) -> Result<serde_json::Value, Error>;
24
25 #[method(name = "getmempoolinfo", blocking)]
27 fn get_mempool_info(&self) -> Result<GetMempoolInfo, Error>;
28
29 #[method(name = "getmempoolentry", blocking)]
31 fn get_mempool_entry(&self, txid: Txid) -> Result<GetMempoolEntry, Error>;
32}
33
34pub struct MempoolRpc {
38 }
40
41impl MempoolRpc {
42 pub fn new() -> Self {
44 Self {}
45 }
46}
47
48impl Default for MempoolRpc {
49 fn default() -> Self {
50 Self::new()
51 }
52}
53
54#[async_trait::async_trait]
55impl MempoolApiServer for MempoolRpc {
56 fn get_raw_mempool(
57 &self,
58 verbose: Option<bool>,
59 _mempool_sequence: Option<bool>,
60 ) -> Result<serde_json::Value, Error> {
61 if verbose.unwrap_or(false) {
63 let entries: HashMap<Txid, GetMempoolEntry> = HashMap::new();
65 Ok(serde_json::to_value(entries)?)
66 } else {
67 let txids: Vec<Txid> = vec![];
69 Ok(serde_json::to_value(txids)?)
70 }
71 }
72
73 fn get_mempool_info(&self) -> Result<GetMempoolInfo, Error> {
74 Ok(GetMempoolInfo {
76 loaded: true,
77 size: 0,
78 bytes: 0,
79 usage: 0,
80 total_fee: 0.0,
81 maxmempool: 300_000_000, mempoolminfee: 0.00001, minrelaytxfee: 0.00001,
84 incrementalrelayfee: 0.00001,
85 unbroadcastcount: 0,
86 fullrbf: false,
87 })
88 }
89
90 fn get_mempool_entry(&self, _txid: Txid) -> Result<GetMempoolEntry, Error> {
91 Err(Error::TransactionNotFound)
93 }
94}