Skip to content

Commit 64b7a5e

Browse files
author
Gabriel Comte
committed
Add rpc call getblockstats
1 parent d9a1dd0 commit 64b7a5e

File tree

3 files changed

+75
-0
lines changed

3 files changed

+75
-0
lines changed

client/src/client.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -462,6 +462,10 @@ pub trait RpcApi: Sized {
462462
self.call("getblockhash", &[height.into()])
463463
}
464464

465+
fn get_block_stats(&self, height: u64) -> Result<json::GetBlockStatsResult> {
466+
self.call("getblockstats", &[height.into()])
467+
}
468+
465469
fn get_raw_transaction(
466470
&self,
467471
txid: &bitcoin::Txid,

integration_test/src/main.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ fn main() {
147147
test_get_block_hash(&cl);
148148
test_get_block(&cl);
149149
test_get_block_header_get_block_header_info(&cl);
150+
test_get_block_stats(&cl);
150151
test_get_address_info(&cl);
151152
test_set_label(&cl);
152153
test_send_to_address(&cl);
@@ -316,6 +317,16 @@ fn test_get_block_header_get_block_header_info(cl: &Client) {
316317
assert!(info.previous_block_hash.is_some());
317318
}
318319

320+
fn test_get_block_stats(cl: &Client) {
321+
let tip = cl.get_block_count().unwrap();
322+
let tip_hash = cl.get_best_block_hash().unwrap();
323+
let header = cl.get_block_header(&tip_hash).unwrap();
324+
let stats = cl.get_block_stats(tip).unwrap();
325+
assert_eq!(header.block_hash(), stats.block_hash);
326+
assert_eq!(header.time, stats.time as u32);
327+
assert_eq!(tip, stats.height);
328+
}
329+
319330
fn test_get_address_info(cl: &Client) {
320331
let addr = cl.get_new_address(None, Some(json::AddressType::Legacy)).unwrap();
321332
let info = cl.get_address_info(&addr).unwrap();

json/src/lib.rs

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,66 @@ pub struct GetBlockHeaderResult {
225225
pub next_block_hash: Option<bitcoin::BlockHash>,
226226
}
227227

228+
#[derive(Clone, PartialEq, Debug, Deserialize, Serialize)]
229+
pub struct GetBlockStatsResult {
230+
#[serde(rename = "avgfee")]
231+
pub avg_fee: u32,
232+
#[serde(rename = "avgfeerate")]
233+
pub avg_fee_rate: u32,
234+
#[serde(rename = "avgtxsize")]
235+
pub avg_tx_size: u32,
236+
#[serde(rename = "blockhash")]
237+
pub block_hash: bitcoin::BlockHash,
238+
#[serde(rename = "feerate_percentiles")]
239+
pub fee_rate_percentiles: FeeRatePercentiles,
240+
pub height: u64,
241+
pub ins: usize,
242+
#[serde(rename = "maxfee")]
243+
pub max_fee: u64,
244+
#[serde(rename = "maxfeerate")]
245+
pub max_fee_rate: u32,
246+
#[serde(rename = "maxtxsize")]
247+
pub max_tx_size: u32,
248+
#[serde(rename = "medianfee")]
249+
pub median_fee: u32,
250+
#[serde(rename = "mediantime")]
251+
pub median_time: u32,
252+
#[serde(rename = "mediantxsize")]
253+
pub median_tx_size: u32,
254+
#[serde(rename = "minfee")]
255+
pub min_fee: u32,
256+
#[serde(rename = "minfeerate")]
257+
pub min_fee_rate: u32,
258+
#[serde(rename = "mintxsize")]
259+
pub min_tx_size: u32,
260+
pub outs: usize,
261+
pub subsidy: u32,
262+
#[serde(rename = "swtotal_size")]
263+
pub sw_total_size: usize,
264+
#[serde(rename = "swtotal_weight")]
265+
pub sw_total_weight: usize,
266+
#[serde(rename = "swtxs")]
267+
pub sw_txs: usize,
268+
pub time: u32,
269+
pub total_out: usize,
270+
pub total_size: usize,
271+
pub total_weight: usize,
272+
#[serde(rename = "totalfee")]
273+
pub total_fee: u64,
274+
pub txs: usize,
275+
pub utxo_increase: i32,
276+
pub utxo_size_inc: i32,
277+
}
278+
279+
#[derive(Clone, PartialEq, Debug, Deserialize, Serialize)]
280+
pub struct FeeRatePercentiles {
281+
pub fr_10th: u32,
282+
pub fr_25th: u32,
283+
pub fr_50th: u32,
284+
pub fr_75th: u32,
285+
pub fr_90th: u32,
286+
}
287+
228288
#[derive(Clone, PartialEq, Debug, Deserialize, Serialize)]
229289
#[serde(rename_all = "camelCase")]
230290
pub struct GetMiningInfoResult {

0 commit comments

Comments
 (0)