@@ -84,6 +84,9 @@ def test_diamond(self):
8484 raw_after = self .nodes [0 ].getrawmempool (verbose = True )
8585 assert_equal (raw_before [txid_a ], raw_after [txid_a ])
8686 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 })
8790
8891 self .log .info ("Test priority while txs are not in mempool" )
8992 self .restart_node (0 , extra_args = ["-nopersistmempool" ])
@@ -92,14 +95,22 @@ def test_diamond(self):
9295 self .nodes [0 ].prioritisetransaction (txid = txid_b , fee_delta = int (fee_delta_b * COIN ))
9396 self .nodes [0 ].prioritisetransaction (txid = txid_c , fee_delta = int (fee_delta_c_1 * COIN ))
9497 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 })
95101 for t in [tx_o_a ["hex" ], tx_o_b ["hex" ], tx_o_c ["hex" ], tx_o_d ["hex" ]]:
96102 self .nodes [0 ].sendrawtransaction (t )
97103 raw_after = self .nodes [0 ].getrawmempool (verbose = True )
98104 assert_equal (raw_before [txid_a ], raw_after [txid_a ])
99105 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 })
100109
101110 # Clear mempool
102111 self .generate (self .nodes [0 ], 1 )
112+ # Prioritisation for transactions is automatically deleted after they are mined.
113+ assert_equal (self .nodes [0 ].getprioritisedtransactions (), {})
103114
104115 # Use default extra_args
105116 self .restart_node (0 )
@@ -115,6 +126,10 @@ def run_test(self):
115126 # Test `prioritisetransaction` invalid extra parameters
116127 assert_raises_rpc_error (- 1 , "prioritisetransaction" , self .nodes [0 ].prioritisetransaction , '' , 0 , 0 , 0 )
117128
129+ # Test `getprioritisedtransactions` invalid parameters
130+ assert_raises_rpc_error (- 1 , "getprioritisedtransactions" ,
131+ self .nodes [0 ].getprioritisedtransactions , True )
132+
118133 # Test `prioritisetransaction` invalid `txid`
119134 assert_raises_rpc_error (- 8 , "txid must be of length 64 (not 3, for 'foo')" , self .nodes [0 ].prioritisetransaction , txid = 'foo' , fee_delta = 0 )
120135 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):
168183 # add a fee delta to something in the cheapest bucket and make sure it gets mined
169184 # also check that a different entry in the cheapest bucket is NOT mined
170185 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 })
171187
172188 self .generate (self .nodes [0 ], 1 )
173189
@@ -187,6 +203,7 @@ def run_test(self):
187203 # Add a prioritisation before a tx is in the mempool (de-prioritising a
188204 # high-fee transaction so that it's now low fee).
189205 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 })
190207
191208 # Add everything back to mempool
192209 self .nodes [0 ].invalidateblock (self .nodes [0 ].getbestblockhash ())
@@ -206,6 +223,7 @@ def run_test(self):
206223 mempool = self .nodes [0 ].getrawmempool ()
207224 self .log .info ("Assert that de-prioritised transaction is still in mempool" )
208225 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 })
209227 for x in txids [2 ]:
210228 if (x != high_fee_tx ):
211229 assert x not in mempool
@@ -223,17 +241,23 @@ def run_test(self):
223241 # to be the minimum for a 1000-byte transaction and check that it is
224242 # accepted.
225243 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 })
226245
227246 self .log .info ("Assert that prioritised free transaction is accepted to mempool" )
228247 assert_equal (self .nodes [0 ].sendrawtransaction (tx_hex ), tx_id )
229248 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 })
230250
231251 # Test that calling prioritisetransaction is sufficient to trigger
232252 # getblocktemplate to (eventually) return a new block.
233253 mock_time = int (time .time ())
234254 self .nodes [0 ].setmocktime (mock_time )
235255 template = self .nodes [0 ].getblocktemplate ({'rules' : ['segwit' ]})
236256 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+
237261 self .nodes [0 ].setmocktime (mock_time + 10 )
238262 new_template = self .nodes [0 ].getblocktemplate ({'rules' : ['segwit' ]})
239263
0 commit comments