diff options
author | Matt Corallo <git@bluematt.me> | 2019-07-11 15:54:17 -0400 |
---|---|---|
committer | Matt Corallo <git@bluematt.me> | 2019-09-04 15:53:14 -0400 |
commit | 5ce822efbe45513ce3517c1ca731ac6d6a0c3b54 (patch) | |
tree | 1086ceb0eb1b60e075f2d162f3a6be91acf87dc4 /test/functional/mempool_package_onemore.py | |
parent | 68da54987df4d4b76d0696b8139ae2bb32394214 (diff) |
Conservatively accept RBF bumps bumping one tx at the package limits
Accept RBF bumps of single transactions (ie which conflict with one
transaction) even when that transaction is a member of a package
which is currently at the package limit iff the new transaction
does not add any additional mempool dependencies from the original.
This could be made a bit looser in the future and still be safe,
but for now this fixes the case that a transaction which was
accepted by the carve-out rule will not be directly RBF'able.
Diffstat (limited to 'test/functional/mempool_package_onemore.py')
-rwxr-xr-x | test/functional/mempool_package_onemore.py | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/test/functional/mempool_package_onemore.py b/test/functional/mempool_package_onemore.py index 30f851fb8e..0739d7e29b 100755 --- a/test/functional/mempool_package_onemore.py +++ b/test/functional/mempool_package_onemore.py @@ -33,7 +33,7 @@ class MempoolPackagesTest(BitcoinTestFramework): outputs = {} for i in range(num_outputs): outputs[node.getnewaddress()] = send_value - rawtx = node.createrawtransaction(inputs, outputs) + rawtx = node.createrawtransaction(inputs, outputs, 0, True) signedtx = node.signrawtransactionwithwallet(rawtx) txid = node.sendrawtransaction(signedtx['hex']) fulltx = node.getrawtransaction(txid, 1) @@ -75,10 +75,16 @@ class MempoolPackagesTest(BitcoinTestFramework): # ...especially if its > 40k weight assert_raises_rpc_error(-26, "too-long-mempool-chain, too many descendants", self.chain_transaction, self.nodes[0], [chain[0][0]], [1], chain[0][1], fee, 350) # But not if it chains directly off the first transaction - self.chain_transaction(self.nodes[0], [chain[0][0]], [1], chain[0][1], fee, 1) + (replacable_txid, replacable_orig_value) = self.chain_transaction(self.nodes[0], [chain[0][0]], [1], chain[0][1], fee, 1) # and the second chain should work just fine self.chain_transaction(self.nodes[0], [second_chain], [0], second_chain_value, fee, 1) + # Make sure we can RBF the chain which used our carve-out rule + second_tx_outputs = {self.nodes[0].getrawtransaction(replacable_txid, True)["vout"][0]['scriptPubKey']['addresses'][0]: replacable_orig_value - (Decimal(1) / Decimal(100))} + second_tx = self.nodes[0].createrawtransaction([{'txid': chain[0][0], 'vout': 1}], second_tx_outputs) + signed_second_tx = self.nodes[0].signrawtransactionwithwallet(second_tx) + self.nodes[0].sendrawtransaction(signed_second_tx['hex']) + # Finally, check that we added two transactions assert_equal(len(self.nodes[0].getrawmempool(True)), MAX_ANCESTORS + 3) |