From 687119b2bd7e222c6a0b8957c62407d62d2426f0 Mon Sep 17 00:00:00 2001 From: deadmanoz Date: Mon, 15 Dec 2025 13:42:36 +0800 Subject: [PATCH 1/2] fix(types): use f64 for GetChainTxStats tx_rate field Bitcoin Core has always returned txrate as a double since the RPC was added in v0.15 (PR #9733). --- types/src/model/blockchain.rs | 2 +- types/src/v17/blockchain/into.rs | 3 +-- types/src/v17/blockchain/mod.rs | 2 +- types/src/v19/blockchain/into.rs | 3 +-- types/src/v19/blockchain/mod.rs | 2 +- 5 files changed, 5 insertions(+), 7 deletions(-) diff --git a/types/src/model/blockchain.rs b/types/src/model/blockchain.rs index 852dab49..42602db9 100644 --- a/types/src/model/blockchain.rs +++ b/types/src/model/blockchain.rs @@ -417,7 +417,7 @@ pub struct GetChainTxStats { /// The elapsed time in the window in seconds. Only returned if "window_block_count" is > 0. pub window_interval: Option, /// The average rate of transactions per second in the window. Only returned if "window_interval" is > 0. - pub tx_rate: Option, + pub tx_rate: Option, } /// Models the result of JSON-RPC method `getdeploymentinfo`. diff --git a/types/src/v17/blockchain/into.rs b/types/src/v17/blockchain/into.rs index c9bdf839..0bad48c8 100644 --- a/types/src/v17/blockchain/into.rs +++ b/types/src/v17/blockchain/into.rs @@ -315,7 +315,6 @@ impl GetChainTxStats { self.window_tx_count.map(|h| crate::to_u32(h, "window_tx_count")).transpose()?; let window_interval = self.window_interval.map(|h| crate::to_u32(h, "window_interval")).transpose()?; - let tx_rate = self.tx_rate.map(|h| crate::to_u32(h, "tx_rate")).transpose()?; Ok(model::GetChainTxStats { time: crate::to_u32(self.time, "time")?, @@ -325,7 +324,7 @@ impl GetChainTxStats { window_block_count: crate::to_u32(self.window_block_count, "window_block_count")?, window_tx_count, window_interval, - tx_rate, + tx_rate: self.tx_rate, }) } } diff --git a/types/src/v17/blockchain/mod.rs b/types/src/v17/blockchain/mod.rs index cdebb87d..cb50a7cb 100644 --- a/types/src/v17/blockchain/mod.rs +++ b/types/src/v17/blockchain/mod.rs @@ -438,7 +438,7 @@ pub struct GetChainTxStats { pub window_interval: Option, /// The average rate of transactions per second in the window. Only returned if "window_interval" is > 0. #[serde(rename = "txrate")] - pub tx_rate: Option, + pub tx_rate: Option, } /// Result of JSON-RPC method `getdifficulty`. diff --git a/types/src/v19/blockchain/into.rs b/types/src/v19/blockchain/into.rs index 6dca9877..092fceb5 100644 --- a/types/src/v19/blockchain/into.rs +++ b/types/src/v19/blockchain/into.rs @@ -81,7 +81,6 @@ impl GetChainTxStats { self.window_tx_count.map(|h| crate::to_u32(h, "window_tx_count")).transpose()?; let window_interval = self.window_interval.map(|h| crate::to_u32(h, "window_interval")).transpose()?; - let tx_rate = self.tx_rate.map(|h| crate::to_u32(h, "tx_rate")).transpose()?; Ok(model::GetChainTxStats { time: crate::to_u32(self.time, "time")?, @@ -91,7 +90,7 @@ impl GetChainTxStats { window_block_count: crate::to_u32(self.window_block_count, "window_block_count")?, window_tx_count, window_interval, - tx_rate, + tx_rate: self.tx_rate, }) } } diff --git a/types/src/v19/blockchain/mod.rs b/types/src/v19/blockchain/mod.rs index ac757941..2418911a 100644 --- a/types/src/v19/blockchain/mod.rs +++ b/types/src/v19/blockchain/mod.rs @@ -186,7 +186,7 @@ pub struct GetChainTxStats { pub window_interval: Option, /// The average rate of transactions per second in the window. Only returned if "window_interval" is > 0. #[serde(rename = "txrate")] - pub tx_rate: Option, + pub tx_rate: Option, } /// Result of JSON-RPC method `getmempoolancestors` with verbose set to `false`. From 7ba414221263306aa94db0885b22661f9aa9b4b3 Mon Sep 17 00:00:00 2001 From: deadmanoz Date: Thu, 18 Dec 2025 13:49:04 +0800 Subject: [PATCH 2/2] test: add tx_rate assertion to get_chain_tx_stats Change to a Default wallet and fund/mine so we get transactions for `GetChainTxStats` to report meaningful data. --- integration_test/tests/blockchain.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/integration_test/tests/blockchain.rs b/integration_test/tests/blockchain.rs index cfe97f85..eac27c39 100644 --- a/integration_test/tests/blockchain.rs +++ b/integration_test/tests/blockchain.rs @@ -218,11 +218,15 @@ fn blockchain__get_chain_tips__modelled() { #[test] fn blockchain__get_chain_tx_stats__modelled() { - let node = Node::with_wallet(Wallet::None, &[]); + let node = Node::with_wallet(Wallet::Default, &[]); + node.fund_wallet(); + let (_address, _tx) = node.create_mined_transaction(); let json: GetChainTxStats = node.client.get_chain_tx_stats().expect("getchaintxstats"); let model: Result = json.into_model(); - model.unwrap(); + let chain_tx_stats = model.unwrap(); + + assert!(chain_tx_stats.tx_rate.unwrap() > 0.0); } #[test]