2020-03-11 20:54:42 +01:00
#!/usr/bin/env python3
2023-08-16 19:27:31 +02:00
# Copyright (c) 2018-2020 The Bitcoin Core developers
2020-03-11 20:54:42 +01:00
# Distributed under the MIT software license, see the accompanying
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
""" Test the estimatefee RPCs.
Test the following RPCs :
- estimatesmartfee
- estimaterawfee
"""
from test_framework . test_framework import BitcoinTestFramework
from test_framework . util import assert_raises_rpc_error
class EstimateFeeTest ( BitcoinTestFramework ) :
def set_test_params ( self ) :
self . num_nodes = 1
def run_test ( self ) :
# missing required params
assert_raises_rpc_error ( - 1 , " estimatesmartfee " , self . nodes [ 0 ] . estimatesmartfee )
assert_raises_rpc_error ( - 1 , " estimaterawfee " , self . nodes [ 0 ] . estimaterawfee )
# wrong type for conf_target
assert_raises_rpc_error ( - 3 , " Expected type number, got string " , self . nodes [ 0 ] . estimatesmartfee , ' foo ' )
assert_raises_rpc_error ( - 3 , " Expected type number, got string " , self . nodes [ 0 ] . estimaterawfee , ' foo ' )
# wrong type for estimatesmartfee(estimate_mode)
assert_raises_rpc_error ( - 3 , " Expected type string, got number " , self . nodes [ 0 ] . estimatesmartfee , 1 , 1 )
Merge #20305: wallet: introduce fee_rate sat/vB param/option
05e82d86b09d914ebce05dbc92a7299cb026847b wallet: override minfee checks (fOverrideFeeRate) for fee_rate (Jon Atack)
9a670b4f07a6140de809d73cbd7f3e614eb6ea74 wallet: update sendtoaddress, send RPC examples with fee_rate (Jon Atack)
be481b72e24fb6834bd674cd8daee67c6938b42d wallet: use MIN_RELAY_TX_FEE in bumpfee help (Jon Atack)
449b730579566459e350703611629e63e54657ed wallet: provide valid values if invalid estimate mode passed (Jon Atack)
6da3afbaee5809ebf6d88efaa3958c505c2d71c7 wallet: update remaining rpcwallet fee rate units to BTC/kvB (Jon Atack)
173b5b5fe07d45be5a1e5bc7a5df996f20ab1e85 wallet: update fee rate units, use sat/vB for fee_rate error messages (Jon Atack)
7f9835a05abf3e168ad93e7195cbaa4bf61b9b07 wallet: remove fee rates from conf_target helps (Jon Atack)
b7994c01e9a3251536fe6538a22f614774eec82d wallet: add fee_rate unit warnings to bumpfee (Jon Atack)
410e471fa42d3db04e8879c71f8c824dcc151a83 wallet: remove redundant bumpfee fee_rate checks (Jon Atack)
a0d495747320c79b27a83c216dcc526ac8df8f24 wallet: introduce fee_rate (sat/vB) param/option (Jon Atack)
e21212f01b7c41eba13b0479b252053cf482bc1f wallet: remove unneeded WALLET_BTC_KB_TO_SAT_B constant (Jon Atack)
6112cf20d43b0be34fe0edce2ac3e6b27cae1bbe wallet: add CFeeRate ctor doxygen documentation (Jon Atack)
3f7279161347543ce4e997d78ea89a4043491145 wallet: fix bug in RPC send options (Jon Atack)
Pull request description:
This PR builds on #11413 and #20220 to address #19543.
- replace overloading the conf_target and estimate_mode params with `fee_rate` in sat/vB in the sendtoaddress, sendmany, send, fundrawtransaction, walletcreatefundedpsbt, and bumpfee RPCs
- allow non-actionable conf_target value of `0` and estimate_mode value of `""` to be passed to use `fee_rate` as a positional argument, in addition to as a named argument
- fix a bug in the experimental send RPC described in https://github.com/bitcoin/bitcoin/pull/20220#discussion_r513789526 where args were not being passed correctly into the options values
- update the feerate error message units for these RPCs from BTC/kB to sat/vB
- update the test coverage, help docs, doxygen docs, and some of the RPC examples
- other changes to address the excellent review feedback
See this wallet meeting log for more context: http://www.erisian.com.au/bitcoin-core-dev/log-2020-11-06.html#l-309
ACKs for top commit:
achow101:
re-ACK 05e82d8
MarcoFalke:
review ACK 05e82d86b0 did not test and found a few style nits, which can be fixed later 🍯
Xekyo:
tACK 05e82d86b09d914ebce05dbc92a7299cb026847b
Sjors:
utACK 05e82d86b09d914ebce05dbc92a7299cb026847b
Tree-SHA512: a4ee5f184ada53f1840b2923d25873bda88c5a2ae48e67eeea2417a0b35154798cfdb3c147b05dd56bd6608a784e1b91623bb985ee2ab9ef2baaec22206d0a9c
2020-11-17 13:49:04 +01:00
assert_raises_rpc_error ( - 8 , ' Invalid estimate_mode parameter, must be one of: " unset " , " economical " , " conservative " ' , self . nodes [ 0 ] . estimatesmartfee , 1 , ' foo ' )
2020-03-11 20:54:42 +01:00
# wrong type for estimaterawfee(threshold)
assert_raises_rpc_error ( - 3 , " Expected type number, got string " , self . nodes [ 0 ] . estimaterawfee , 1 , ' foo ' )
# extra params
assert_raises_rpc_error ( - 1 , " estimatesmartfee " , self . nodes [ 0 ] . estimatesmartfee , 1 , ' ECONOMICAL ' , 1 )
assert_raises_rpc_error ( - 1 , " estimaterawfee " , self . nodes [ 0 ] . estimaterawfee , 1 , 1 , 1 )
2023-09-21 17:50:08 +02:00
# max value of 1008 per src/policy/fees.h
assert_raises_rpc_error ( - 8 , " Invalid conf_target, must be between 1 and 1008 " , self . nodes [ 0 ] . estimaterawfee , 1009 )
2020-03-11 20:54:42 +01:00
# valid calls
self . nodes [ 0 ] . estimatesmartfee ( 1 )
# self.nodes[0].estimatesmartfee(1, None)
self . nodes [ 0 ] . estimatesmartfee ( 1 , ' ECONOMICAL ' )
2020-12-07 13:54:49 +01:00
self . nodes [ 0 ] . estimatesmartfee ( 1 , ' unset ' )
self . nodes [ 0 ] . estimatesmartfee ( 1 , ' conservative ' )
2020-03-11 20:54:42 +01:00
self . nodes [ 0 ] . estimaterawfee ( 1 )
self . nodes [ 0 ] . estimaterawfee ( 1 , None )
self . nodes [ 0 ] . estimaterawfee ( 1 , 1 )
if __name__ == ' __main__ ' :
EstimateFeeTest ( ) . main ( )