@@ -81,7 +81,7 @@ def run_test(self):
8181
8282 self .log .info ("Running tests" )
8383 dest_address = peer_node .getnewaddress ()
84- for mode in ["default" , "fee_rate" ]:
84+ for mode in ["default" , "fee_rate" , "new_outputs" ]:
8585 test_simple_bumpfee_succeeds (self , mode , rbf_node , peer_node , dest_address )
8686 self .test_invalid_parameters (rbf_node , peer_node , dest_address )
8787 test_segwit_bumpfee_succeeds (self , rbf_node , dest_address )
@@ -157,6 +157,14 @@ def test_invalid_parameters(self, rbf_node, peer_node, dest_address):
157157 assert_raises_rpc_error (- 8 , 'Invalid estimate_mode parameter, must be one of: "unset", "economical", "conservative"' ,
158158 rbf_node .bumpfee , rbfid , {"estimate_mode" : mode })
159159
160+ self .log .info ("Test invalid outputs values" )
161+ assert_raises_rpc_error (- 8 , "Invalid parameter, output argument cannot be an empty array" ,
162+ rbf_node .bumpfee , rbfid , {"outputs" : []})
163+ assert_raises_rpc_error (- 8 , "Invalid parameter, duplicated address: " + dest_address ,
164+ rbf_node .bumpfee , rbfid , {"outputs" : [{dest_address : 0.1 }, {dest_address : 0.2 }]})
165+ assert_raises_rpc_error (- 8 , "Invalid parameter, duplicate key: data" ,
166+ rbf_node .bumpfee , rbfid , {"outputs" : [{"data" : "deadbeef" }, {"data" : "deadbeef" }]})
167+
160168 self .clear_mempool ()
161169
162170
@@ -169,6 +177,10 @@ def test_simple_bumpfee_succeeds(self, mode, rbf_node, peer_node, dest_address):
169177 if mode == "fee_rate" :
170178 bumped_psbt = rbf_node .psbtbumpfee (rbfid , {"fee_rate" : str (NORMAL )})
171179 bumped_tx = rbf_node .bumpfee (rbfid , {"fee_rate" : NORMAL })
180+ elif mode == "new_outputs" :
181+ new_address = peer_node .getnewaddress ()
182+ bumped_psbt = rbf_node .psbtbumpfee (rbfid , {"outputs" : {new_address : 0.0003 }})
183+ bumped_tx = rbf_node .bumpfee (rbfid , {"outputs" : {new_address : 0.0003 }})
172184 else :
173185 bumped_psbt = rbf_node .psbtbumpfee (rbfid )
174186 bumped_tx = rbf_node .bumpfee (rbfid )
@@ -192,6 +204,10 @@ def test_simple_bumpfee_succeeds(self, mode, rbf_node, peer_node, dest_address):
192204 bumpedwtx = rbf_node .gettransaction (bumped_tx ["txid" ])
193205 assert_equal (oldwtx ["replaced_by_txid" ], bumped_tx ["txid" ])
194206 assert_equal (bumpedwtx ["replaces_txid" ], rbfid )
207+ # if this is a new_outputs test, check that outputs were indeed replaced
208+ if mode == "new_outputs" :
209+ assert len (bumpedwtx ["details" ]) == 1
210+ assert bumpedwtx ["details" ][0 ]["address" ] == new_address
195211 self .clear_mempool ()
196212
197213
@@ -628,12 +644,14 @@ def get_change_address(tx):
628644 self .clear_mempool ()
629645
630646
631- def spend_one_input (node , dest_address , change_size = Decimal ("0.00049000" )):
647+ def spend_one_input (node , dest_address , change_size = Decimal ("0.00049000" ), data = None ):
632648 tx_input = dict (
633649 sequence = MAX_BIP125_RBF_SEQUENCE , ** next (u for u in node .listunspent () if u ["amount" ] == Decimal ("0.00100000" )))
634650 destinations = {dest_address : Decimal ("0.00050000" )}
635651 if change_size > 0 :
636652 destinations [node .getrawchangeaddress ()] = change_size
653+ if data :
654+ destinations ['data' ] = data
637655 rawtx = node .createrawtransaction ([tx_input ], destinations )
638656 signedtx = node .signrawtransactionwithwallet (rawtx )
639657 txid = node .sendrawtransaction (signedtx ["hex" ])
0 commit comments