test: switch MiniWallet padding unit from weight to vsize
The weight unit is merely a consensus rule detail and is largely irrelevant for fee-rate calculations and mempool policy rules (e.g. for package relay and TRUC limits), so there doesn't seem to be any value of using a granularity that we can't even guarantee to reach exactly anyway. Switch to the more natural unit of vsize instead, which simplifies both the padding implementation and the current tests that take use of this padding. The rather annoying multiplications by `WITNESS_SCALE_FACTOR` can then be removed and weird-looking magic numbers like `4004` can be replaced by numbers that are more connected to actual policy limit constants from the codebase, e.g. `1001` for exceeding `TRUC_CHILD_MAX_VSIZE` by one.
This commit is contained in:
1 parent
d812cf1189
commit
c16ae71768
6 files changed
+61
-72
No files matched your search
@@ -6,7 +6,6 @@ from decimal import Decimal
|
||||
|
||||
from test_framework.messages import (
|
||||
MAX_BIP125_RBF_SEQUENCE,
|
||||
WITNESS_SCALE_FACTOR,
|
||||
)
|
||||
from test_framework.test_framework import BitcoinTestFramework
|
||||
from test_framework.util import (
|
||||
@@ -55,14 +54,14 @@ class MempoolTRUC(BitcoinTestFramework):
|
||||
def test_truc_max_vsize(self):
|
||||
node = self.nodes[0]
|
||||
self.log.info("Test TRUC-specific maximum transaction vsize")
|
||||
tx_v3_heavy = self.wallet.create_self_transfer(target_weight=(TRUC_MAX_VSIZE + 1) * WITNESS_SCALE_FACTOR, version=3)
|
||||
tx_v3_heavy = self.wallet.create_self_transfer(target_vsize=TRUC_MAX_VSIZE + 1, version=3)
|
||||
assert_greater_than_or_equal(tx_v3_heavy["tx"].get_vsize(), TRUC_MAX_VSIZE)
|
||||
expected_error_heavy = f"TRUC-violation, version=3 tx {tx_v3_heavy['txid']} (wtxid={tx_v3_heavy['wtxid']}) is too big"
|
||||
assert_raises_rpc_error(-26, expected_error_heavy, node.sendrawtransaction, tx_v3_heavy["hex"])
|
||||
self.check_mempool([])
|
||||
|
||||
# Ensure we are hitting the TRUC-specific limit and not something else
|
||||
tx_v2_heavy = self.wallet.send_self_transfer(from_node=node, target_weight=(TRUC_MAX_VSIZE + 1) * WITNESS_SCALE_FACTOR, version=2)
|
||||
tx_v2_heavy = self.wallet.send_self_transfer(from_node=node, target_vsize=TRUC_MAX_VSIZE + 1, version=2)
|
||||
self.check_mempool([tx_v2_heavy["txid"]])
|
||||
|
||||
@cleanup(extra_args=["-datacarriersize=1000"])
|
||||
@@ -73,7 +72,7 @@ class MempoolTRUC(BitcoinTestFramework):
|
||||
self.check_mempool([tx_v3_parent_normal["txid"]])
|
||||
tx_v3_child_heavy = self.wallet.create_self_transfer(
|
||||
utxo_to_spend=tx_v3_parent_normal["new_utxo"],
|
||||
target_weight=4004,
|
||||
target_vsize=1001,
|
||||
version=3
|
||||
)
|
||||
assert_greater_than_or_equal(tx_v3_child_heavy["tx"].get_vsize(), 1000)
|
||||
@@ -88,7 +87,7 @@ class MempoolTRUC(BitcoinTestFramework):
|
||||
from_node=node,
|
||||
fee_rate=DEFAULT_FEE,
|
||||
utxo_to_spend=tx_v3_parent_normal["new_utxo"],
|
||||
target_weight=3987,
|
||||
target_vsize=997,
|
||||
version=3
|
||||
)
|
||||
assert_greater_than_or_equal(1000, tx_v3_child_almost_heavy["tx"].get_vsize())
|
||||
@@ -98,7 +97,7 @@ class MempoolTRUC(BitcoinTestFramework):
|
||||
from_node=node,
|
||||
fee_rate=DEFAULT_FEE * 2,
|
||||
utxo_to_spend=tx_v3_parent_normal["new_utxo"],
|
||||
target_weight=3500,
|
||||
target_vsize=875,
|
||||
version=3
|
||||
)
|
||||
assert_greater_than_or_equal(tx_v3_child_almost_heavy["tx"].get_vsize() + tx_v3_child_almost_heavy_rbf["tx"].get_vsize(), 1000)
|
||||
@@ -199,7 +198,7 @@ class MempoolTRUC(BitcoinTestFramework):
|
||||
self.check_mempool([])
|
||||
tx_v2_from_v3 = self.wallet.send_self_transfer(from_node=node, utxo_to_spend=tx_v3_block["new_utxo"], version=2)
|
||||
tx_v3_from_v2 = self.wallet.send_self_transfer(from_node=node, utxo_to_spend=tx_v2_block["new_utxo"], version=3)
|
||||
tx_v3_child_large = self.wallet.send_self_transfer(from_node=node, utxo_to_spend=tx_v3_block2["new_utxo"], target_weight=5000, version=3)
|
||||
tx_v3_child_large = self.wallet.send_self_transfer(from_node=node, utxo_to_spend=tx_v3_block2["new_utxo"], target_vsize=1250, version=3)
|
||||
assert_greater_than(node.getmempoolentry(tx_v3_child_large["txid"])["vsize"], 1000)
|
||||
self.check_mempool([tx_v2_from_v3["txid"], tx_v3_from_v2["txid"], tx_v3_child_large["txid"]])
|
||||
node.invalidateblock(block[0])
|
||||
@@ -217,16 +216,16 @@ class MempoolTRUC(BitcoinTestFramework):
|
||||
"""
|
||||
node = self.nodes[0]
|
||||
self.log.info("Test that a decreased limitdescendantsize also applies to TRUC child")
|
||||
parent_target_weight = 9990 * WITNESS_SCALE_FACTOR
|
||||
child_target_weight = 500 * WITNESS_SCALE_FACTOR
|
||||
parent_target_vsize = 9990
|
||||
child_target_vsize = 500
|
||||
tx_v3_parent_large1 = self.wallet.send_self_transfer(
|
||||
from_node=node,
|
||||
target_weight=parent_target_weight,
|
||||
target_vsize=parent_target_vsize,
|
||||
version=3
|
||||
)
|
||||
tx_v3_child_large1 = self.wallet.create_self_transfer(
|
||||
utxo_to_spend=tx_v3_parent_large1["new_utxo"],
|
||||
target_weight=child_target_weight,
|
||||
target_vsize=child_target_vsize,
|
||||
version=3
|
||||
)
|
||||
|
||||
@@ -244,12 +243,12 @@ class MempoolTRUC(BitcoinTestFramework):
|
||||
self.restart_node(0, extra_args=["-limitancestorsize=10", "-datacarriersize=40000"])
|
||||
tx_v3_parent_large2 = self.wallet.send_self_transfer(
|
||||
from_node=node,
|
||||
target_weight=parent_target_weight,
|
||||
target_vsize=parent_target_vsize,
|
||||
version=3
|
||||
)
|
||||
tx_v3_child_large2 = self.wallet.create_self_transfer(
|
||||
utxo_to_spend=tx_v3_parent_large2["new_utxo"],
|
||||
target_weight=child_target_weight,
|
||||
target_vsize=child_target_vsize,
|
||||
version=3
|
||||
)
|
||||
|
||||
@@ -267,12 +266,12 @@ class MempoolTRUC(BitcoinTestFramework):
|
||||
node = self.nodes[0]
|
||||
tx_v3_parent_normal = self.wallet.create_self_transfer(
|
||||
fee_rate=0,
|
||||
target_weight=4004,
|
||||
target_vsize=1001,
|
||||
version=3
|
||||
)
|
||||
tx_v3_parent_2_normal = self.wallet.create_self_transfer(
|
||||
fee_rate=0,
|
||||
target_weight=4004,
|
||||
target_vsize=1001,
|
||||
version=3
|
||||
)
|
||||
tx_v3_child_multiparent = self.wallet.create_self_transfer_multi(
|
||||
@@ -282,7 +281,7 @@ class MempoolTRUC(BitcoinTestFramework):
|
||||
)
|
||||
tx_v3_child_heavy = self.wallet.create_self_transfer_multi(
|
||||
utxos_to_spend=[tx_v3_parent_normal["new_utxo"]],
|
||||
target_weight=4004,
|
||||
target_vsize=1001,
|
||||
fee_per_output=10000,
|
||||
version=3
|
||||
)
|
||||
@@ -294,7 +293,7 @@ class MempoolTRUC(BitcoinTestFramework):
|
||||
|
||||
self.check_mempool([])
|
||||
result = node.submitpackage([tx_v3_parent_normal["hex"], tx_v3_child_heavy["hex"]])
|
||||
# tx_v3_child_heavy is heavy based on weight, not sigops.
|
||||
# tx_v3_child_heavy is heavy based on vsize, not sigops.
|
||||
assert_equal(result['package_msg'], f"TRUC-violation, version=3 child tx {tx_v3_child_heavy['txid']} (wtxid={tx_v3_child_heavy['wtxid']}) is too big: {tx_v3_child_heavy['tx'].get_vsize()} > 1000 virtual bytes")
|
||||
self.check_mempool([])
|
||||
|
||||
@@ -416,7 +415,7 @@ class MempoolTRUC(BitcoinTestFramework):
|
||||
node = self.nodes[0]
|
||||
tx_v3_parent = self.wallet.create_self_transfer(
|
||||
fee_rate=0,
|
||||
target_weight=4004,
|
||||
target_vsize=1001,
|
||||
version=3
|
||||
)
|
||||
tx_v2_child = self.wallet.create_self_transfer_multi(
|
||||
|
||||
Reference in new issue
Block a user