@@ -81,7 +81,7 @@ def run_test(self):
81
81
82
82
self .log .info ("Running tests" )
83
83
dest_address = peer_node .getnewaddress ()
84
- for mode in ["default" , "fee_rate" ]:
84
+ for mode in ["default" , "fee_rate" , "new_outputs" ]:
85
85
test_simple_bumpfee_succeeds (self , mode , rbf_node , peer_node , dest_address )
86
86
self .test_invalid_parameters (rbf_node , peer_node , dest_address )
87
87
test_segwit_bumpfee_succeeds (self , rbf_node , dest_address )
@@ -157,6 +157,14 @@ def test_invalid_parameters(self, rbf_node, peer_node, dest_address):
157
157
assert_raises_rpc_error (- 8 , 'Invalid estimate_mode parameter, must be one of: "unset", "economical", "conservative"' ,
158
158
rbf_node .bumpfee , rbfid , {"estimate_mode" : mode })
159
159
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
+
160
168
self .clear_mempool ()
161
169
162
170
@@ -169,6 +177,10 @@ def test_simple_bumpfee_succeeds(self, mode, rbf_node, peer_node, dest_address):
169
177
if mode == "fee_rate" :
170
178
bumped_psbt = rbf_node .psbtbumpfee (rbfid , {"fee_rate" : str (NORMAL )})
171
179
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 }})
172
184
else :
173
185
bumped_psbt = rbf_node .psbtbumpfee (rbfid )
174
186
bumped_tx = rbf_node .bumpfee (rbfid )
@@ -192,6 +204,10 @@ def test_simple_bumpfee_succeeds(self, mode, rbf_node, peer_node, dest_address):
192
204
bumpedwtx = rbf_node .gettransaction (bumped_tx ["txid" ])
193
205
assert_equal (oldwtx ["replaced_by_txid" ], bumped_tx ["txid" ])
194
206
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
195
211
self .clear_mempool ()
196
212
197
213
@@ -628,12 +644,14 @@ def get_change_address(tx):
628
644
self .clear_mempool ()
629
645
630
646
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 ):
632
648
tx_input = dict (
633
649
sequence = MAX_BIP125_RBF_SEQUENCE , ** next (u for u in node .listunspent () if u ["amount" ] == Decimal ("0.00100000" )))
634
650
destinations = {dest_address : Decimal ("0.00050000" )}
635
651
if change_size > 0 :
636
652
destinations [node .getrawchangeaddress ()] = change_size
653
+ if data :
654
+ destinations ['data' ] = data
637
655
rawtx = node .createrawtransaction ([tx_input ], destinations )
638
656
signedtx = node .signrawtransactionwithwallet (rawtx )
639
657
txid = node .sendrawtransaction (signedtx ["hex" ])
0 commit comments