Merge 7794d9d93f into merged_master (Bitcoin PR bitcoin/bitcoin#27735)

This commit is contained in:
Byron Hambly 2025-06-24 14:38:22 +02:00
commit c862d3cdba
3 changed files with 33 additions and 15 deletions

View file

@ -28,9 +28,6 @@ assert CUSTOM_DESCENDANT_LIMIT >= CUSTOM_ANCESTOR_LIMIT
class MempoolPackagesTest(BitcoinTestFramework):
def add_options(self, parser):
self.add_wallet_options(parser)
def set_test_params(self):
self.num_nodes = 2
self.extra_args = [
@ -49,10 +46,6 @@ class MempoolPackagesTest(BitcoinTestFramework):
self.wallet = MiniWallet(self.nodes[0])
self.wallet.rescan_utxos()
if self.is_specified_wallet_compiled():
self.nodes[0].createwallet("watch_wallet", disable_private_keys=True)
self.nodes[0].importaddress(self.wallet.get_address())
peer_inv_store = self.nodes[0].add_p2p_connection(P2PTxInvStore()) # keep track of invs
# DEFAULT_ANCESTOR_LIMIT transactions off a confirmed tx should be fine
@ -65,13 +58,6 @@ class MempoolPackagesTest(BitcoinTestFramework):
ancestor_vsize += t["tx"].get_vsize()
ancestor_fees += t["fee"]
self.wallet.sendrawtransaction(from_node=self.nodes[0], tx_hex=t["hex"])
# Check that listunspent ancestor{count, size, fees} yield the correct results
if self.is_specified_wallet_compiled():
wallet_unspent = self.nodes[0].listunspent(minconf=0)
this_unspent = next(utxo_info for utxo_info in wallet_unspent if utxo_info["txid"] == t["txid"])
assert_equal(this_unspent['ancestorcount'], i + 1)
assert_equal(this_unspent['ancestorsize'], ancestor_vsize)
assert_equal(this_unspent['ancestorfees'], ancestor_fees) # ELEMENTS
# Wait until mempool transactions have passed initial broadcast (sent inv and received getdata)
# Otherwise, getrawmempool may be inconsistent with getmempoolentry if unbroadcast changes in between

View file

@ -297,7 +297,7 @@ BASE_SCRIPTS = [
'rpc_invalidateblock.py',
'feature_utxo_set_hash.py',
'feature_rbf.py',
'mempool_packages.py --descriptors', # ELEMENTS: specify descriptors until it's default
'mempool_packages.py',
'mempool_package_onemore.py',
'mempool_package_limits.py',
# ELEMENTS: no versionbits in use

View file

@ -8,6 +8,9 @@ from itertools import product
from test_framework.blocktools import COINBASE_MATURITY
from test_framework.descriptors import descsum_create
from test_framework.messages import (
DEFAULT_ANCESTOR_LIMIT,
)
from test_framework.test_framework import BitcoinTestFramework
from test_framework.util import (
assert_array_result,
@ -17,6 +20,7 @@ from test_framework.util import (
find_vout_for_address,
)
from test_framework.wallet_util import test_address
from test_framework.wallet import MiniWallet
NOT_A_NUMBER_OR_STRING = "Amount is not a number or string"
OUT_OF_RANGE = "Amount out of range"
@ -800,6 +804,34 @@ class WalletTest(BitcoinTestFramework):
# zeroconf_wallet.sendtoaddress(zeroconf_wallet.getnewaddress(), Decimal('0.5'))
self.test_chain_listunspent()
def test_chain_listunspent(self):
if not self.options.descriptors:
return
self.wallet = MiniWallet(self.nodes[0])
self.nodes[0].get_wallet_rpc(self.default_wallet_name).sendtoaddress(self.wallet.get_address(), "5")
self.generate(self.wallet, 1, sync_fun=self.no_op)
self.nodes[0].createwallet("watch_wallet", disable_private_keys=True)
watch_wallet = self.nodes[0].get_wallet_rpc("watch_wallet")
watch_wallet.importaddress(self.wallet.get_address())
# DEFAULT_ANCESTOR_LIMIT transactions off a confirmed tx should be fine
chain = self.wallet.create_self_transfer_chain(chain_length=DEFAULT_ANCESTOR_LIMIT)
ancestor_vsize = 0
ancestor_fees = Decimal(0)
for i, t in enumerate(chain):
ancestor_vsize += t["tx"].get_vsize()
ancestor_fees += t["fee"]
self.wallet.sendrawtransaction(from_node=self.nodes[0], tx_hex=t["hex"])
# Check that listunspent ancestor{count, size, fees} yield the correct results
wallet_unspent = watch_wallet.listunspent(minconf=0)
this_unspent = next(utxo_info for utxo_info in wallet_unspent if utxo_info["txid"] == t["txid"])
assert_equal(this_unspent['ancestorcount'], i + 1)
assert_equal(this_unspent['ancestorsize'], ancestor_vsize)
assert_equal(this_unspent['ancestorfees'], ancestor_fees) # ELEMENTS
if __name__ == '__main__':
WalletTest().main()