@@ -84,6 +84,9 @@ def test_diamond(self):
84
84
raw_after = self .nodes [0 ].getrawmempool (verbose = True )
85
85
assert_equal (raw_before [txid_a ], raw_after [txid_a ])
86
86
assert_equal (raw_before , raw_after )
87
+ prioritisation_map_in_mempool = self .nodes [0 ].getprioritisedtransactions ()
88
+ assert_equal (prioritisation_map_in_mempool [txid_b ], {"fee_delta" : fee_delta_b * COIN , "in_mempool" : True })
89
+ assert_equal (prioritisation_map_in_mempool [txid_c ], {"fee_delta" : (fee_delta_c_1 + fee_delta_c_2 )* COIN , "in_mempool" : True })
87
90
88
91
self .log .info ("Test priority while txs are not in mempool" )
89
92
self .restart_node (0 , extra_args = ["-nopersistmempool" ])
@@ -92,14 +95,22 @@ def test_diamond(self):
92
95
self .nodes [0 ].prioritisetransaction (txid = txid_b , fee_delta = int (fee_delta_b * COIN ))
93
96
self .nodes [0 ].prioritisetransaction (txid = txid_c , fee_delta = int (fee_delta_c_1 * COIN ))
94
97
self .nodes [0 ].prioritisetransaction (txid = txid_c , fee_delta = int (fee_delta_c_2 * COIN ))
98
+ prioritisation_map_not_in_mempool = self .nodes [0 ].getprioritisedtransactions ()
99
+ assert_equal (prioritisation_map_not_in_mempool [txid_b ], {"fee_delta" : fee_delta_b * COIN , "in_mempool" : False })
100
+ assert_equal (prioritisation_map_not_in_mempool [txid_c ], {"fee_delta" : (fee_delta_c_1 + fee_delta_c_2 )* COIN , "in_mempool" : False })
95
101
for t in [tx_o_a ["hex" ], tx_o_b ["hex" ], tx_o_c ["hex" ], tx_o_d ["hex" ]]:
96
102
self .nodes [0 ].sendrawtransaction (t )
97
103
raw_after = self .nodes [0 ].getrawmempool (verbose = True )
98
104
assert_equal (raw_before [txid_a ], raw_after [txid_a ])
99
105
assert_equal (raw_before , raw_after )
106
+ prioritisation_map_in_mempool = self .nodes [0 ].getprioritisedtransactions ()
107
+ assert_equal (prioritisation_map_in_mempool [txid_b ], {"fee_delta" : fee_delta_b * COIN , "in_mempool" : True })
108
+ assert_equal (prioritisation_map_in_mempool [txid_c ], {"fee_delta" : (fee_delta_c_1 + fee_delta_c_2 )* COIN , "in_mempool" : True })
100
109
101
110
# Clear mempool
102
111
self .generate (self .nodes [0 ], 1 )
112
+ # Prioritisation for transactions is automatically deleted after they are mined.
113
+ assert_equal (self .nodes [0 ].getprioritisedtransactions (), {})
103
114
104
115
# Use default extra_args
105
116
self .restart_node (0 )
@@ -115,6 +126,10 @@ def run_test(self):
115
126
# Test `prioritisetransaction` invalid extra parameters
116
127
assert_raises_rpc_error (- 1 , "prioritisetransaction" , self .nodes [0 ].prioritisetransaction , '' , 0 , 0 , 0 )
117
128
129
+ # Test `getprioritisedtransactions` invalid parameters
130
+ assert_raises_rpc_error (- 1 , "getprioritisedtransactions" ,
131
+ self .nodes [0 ].getprioritisedtransactions , True )
132
+
118
133
# Test `prioritisetransaction` invalid `txid`
119
134
assert_raises_rpc_error (- 8 , "txid must be of length 64 (not 3, for 'foo')" , self .nodes [0 ].prioritisetransaction , txid = 'foo' , fee_delta = 0 )
120
135
assert_raises_rpc_error (- 8 , "txid must be hexadecimal string (not 'Zd1d4e24ed99057e84c3f80fd8fbec79ed9e1acee37da269356ecea000000000')" , self .nodes [0 ].prioritisetransaction , txid = 'Zd1d4e24ed99057e84c3f80fd8fbec79ed9e1acee37da269356ecea000000000' , fee_delta = 0 )
@@ -168,6 +183,7 @@ def run_test(self):
168
183
# add a fee delta to something in the cheapest bucket and make sure it gets mined
169
184
# also check that a different entry in the cheapest bucket is NOT mined
170
185
self .nodes [0 ].prioritisetransaction (txid = txids [0 ][0 ], fee_delta = int (3 * base_fee * COIN ))
186
+ assert_equal (self .nodes [0 ].getprioritisedtransactions ()[txids [0 ][0 ]], { "fee_delta" : 3 * base_fee * COIN , "in_mempool" : True })
171
187
172
188
self .generate (self .nodes [0 ], 1 )
173
189
@@ -187,6 +203,7 @@ def run_test(self):
187
203
# Add a prioritisation before a tx is in the mempool (de-prioritising a
188
204
# high-fee transaction so that it's now low fee).
189
205
self .nodes [0 ].prioritisetransaction (txid = high_fee_tx , fee_delta = - int (2 * base_fee * COIN ))
206
+ assert_equal (self .nodes [0 ].getprioritisedtransactions ()[high_fee_tx ], { "fee_delta" : - 2 * base_fee * COIN , "in_mempool" : False })
190
207
191
208
# Add everything back to mempool
192
209
self .nodes [0 ].invalidateblock (self .nodes [0 ].getbestblockhash ())
@@ -206,6 +223,7 @@ def run_test(self):
206
223
mempool = self .nodes [0 ].getrawmempool ()
207
224
self .log .info ("Assert that de-prioritised transaction is still in mempool" )
208
225
assert high_fee_tx in mempool
226
+ assert_equal (self .nodes [0 ].getprioritisedtransactions ()[high_fee_tx ], { "fee_delta" : - 2 * base_fee * COIN , "in_mempool" : True })
209
227
for x in txids [2 ]:
210
228
if (x != high_fee_tx ):
211
229
assert x not in mempool
@@ -223,17 +241,23 @@ def run_test(self):
223
241
# to be the minimum for a 1000-byte transaction and check that it is
224
242
# accepted.
225
243
self .nodes [0 ].prioritisetransaction (txid = tx_id , fee_delta = int (self .relayfee * COIN ))
244
+ assert_equal (self .nodes [0 ].getprioritisedtransactions ()[tx_id ], { "fee_delta" : self .relayfee * COIN , "in_mempool" : False })
226
245
227
246
self .log .info ("Assert that prioritised free transaction is accepted to mempool" )
228
247
assert_equal (self .nodes [0 ].sendrawtransaction (tx_hex ), tx_id )
229
248
assert tx_id in self .nodes [0 ].getrawmempool ()
249
+ assert_equal (self .nodes [0 ].getprioritisedtransactions ()[tx_id ], { "fee_delta" : self .relayfee * COIN , "in_mempool" : True })
230
250
231
251
# Test that calling prioritisetransaction is sufficient to trigger
232
252
# getblocktemplate to (eventually) return a new block.
233
253
mock_time = int (time .time ())
234
254
self .nodes [0 ].setmocktime (mock_time )
235
255
template = self .nodes [0 ].getblocktemplate ({'rules' : ['segwit' ]})
236
256
self .nodes [0 ].prioritisetransaction (txid = tx_id , fee_delta = - int (self .relayfee * COIN ))
257
+
258
+ assert tx_id in self .nodes [0 ].getprioritisedtransactions ()
259
+ assert_equal (self .nodes [0 ].getprioritisedtransactions ()[tx_id ]["fee_delta" ], 0 )
260
+
237
261
self .nodes [0 ].setmocktime (mock_time + 10 )
238
262
new_template = self .nodes [0 ].getblocktemplate ({'rules' : ['segwit' ]})
239
263
0 commit comments