mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-09-11 21:20:39 +02:00
rpc: add verbosity option to estimatesmartfee options
Add a verbosity option to the existing estimatesmartfee options object. The default verbosity remains 1. When verbosity is at least 2 include mempool_health_statistics in the response. The array reports the mined blocks tracked by the mempool fee rate estimator in most-recent-first order, with each entry containing: - block_height - block_weight: total non-coinbase transaction weight in the block - mempool_txs_weight: weight of transactions removed from our mempool for that block Expose these stats through the fee rate estimator manager so RPC users can inspect the block coverage data used by the mempool health check.
This commit is contained in:
@@ -493,7 +493,14 @@ class EstimateFeeTest(BitcoinTestFramework):
|
||||
utxos = [self.wallet.get_utxo(confirmed_only=True) for _ in range(num_txs)]
|
||||
insane_feerate = Decimal("0.01")
|
||||
self.send_transactions(utxos, insane_feerate, target_vsize)
|
||||
estimate_after_spike = node0.estimatesmartfee(1, "economical", {"fee_rate_estimator": "none"})
|
||||
estimate_after_spike = node0.estimatesmartfee(1, "economical", {"verbosity": 2, "fee_rate_estimator": "none"})
|
||||
assert_equal(len(estimate_after_spike["mempool_health_statistics"]), 6)
|
||||
current_height = node0.getchaintips()[0]['height']
|
||||
for block_stat in estimate_after_spike["mempool_health_statistics"]:
|
||||
assert_equal(block_stat['block_height'], current_height)
|
||||
current_height -= 1
|
||||
assert block_stat['block_weight']
|
||||
assert block_stat['mempool_txs_weight']
|
||||
verify_estimate_response(estimate_after_spike, high_feerate, [])
|
||||
assert_equal(estimate_after_spike["estimator"], "block_policy")
|
||||
mempool_policy_estimate = node0.estimatesmartfee(1, "economical", {"fee_rate_estimator": "mempool_policy"})
|
||||
|
||||
@@ -30,6 +30,8 @@ class EstimateFeeTest(BitcoinTestFramework):
|
||||
assert_raises_rpc_error(-3, "JSON value of type number is not of expected type string", self.nodes[0].estimatesmartfee, 1, 1)
|
||||
# wrong type for estimatesmartfee(options.fee_rate_estimator)
|
||||
assert_raises_rpc_error(-3, "JSON value of type number for field fee_rate_estimator is not of expected type string", self.nodes[0].estimatesmartfee, 1, 'ECONOMICAL', {'fee_rate_estimator': 1})
|
||||
# wrong type for estimatesmartfee(options.verbosity)
|
||||
assert_raises_rpc_error(-3, "JSON value of type string for field verbosity is not of expected type number", self.nodes[0].estimatesmartfee, 1, 'ECONOMICAL', {'verbosity': 'foo'})
|
||||
# wrong type for estimaterawfee(threshold)
|
||||
assert_raises_rpc_error(-3, "JSON value of type string is not of expected type number", self.nodes[0].estimaterawfee, 1, 'foo')
|
||||
|
||||
@@ -38,6 +40,7 @@ class EstimateFeeTest(BitcoinTestFramework):
|
||||
assert_raises_rpc_error(-3, "Unexpected key block_policy_only", self.nodes[0].estimatesmartfee, 1, 'ECONOMICAL', {'block_policy_only': True})
|
||||
# extra params
|
||||
assert_raises_rpc_error(-1, "estimatesmartfee", self.nodes[0].estimatesmartfee, 1, 'ECONOMICAL', {}, 1)
|
||||
assert_raises_rpc_error(-1, "estimatesmartfee", self.nodes[0].estimatesmartfee, 1, 'ECONOMICAL', {'verbosity': 1}, 1)
|
||||
assert_raises_rpc_error(-1, "estimaterawfee", self.nodes[0].estimaterawfee, 1, 1, 1)
|
||||
|
||||
# max value of 1008 per src/policy/fees/block_policy_estimator.h
|
||||
@@ -52,6 +55,7 @@ class EstimateFeeTest(BitcoinTestFramework):
|
||||
self.nodes[0].estimatesmartfee(1, 'ECONOMICAL', {"fee_rate_estimator": "block_policy"})
|
||||
self.nodes[0].estimatesmartfee(1, 'ECONOMICAL', {"fee_rate_estimator": "mempool_policy"})
|
||||
self.nodes[0].estimatesmartfee(1, 'ECONOMICAL', {"fee_rate_estimator": "foo"})
|
||||
self.nodes[0].estimatesmartfee(1, 'ECONOMICAL', {'verbosity': 1, 'fee_rate_estimator': "none"})
|
||||
|
||||
self.nodes[0].estimaterawfee(1)
|
||||
self.nodes[0].estimaterawfee(1, None)
|
||||
|
||||
Reference in New Issue
Block a user