Page MenuHomePhabricator

D17691.id52749.diff
No OneTemporary

D17691.id52749.diff

diff --git a/test/functional/abc-minimaldata.py b/test/functional/abc-minimaldata.py
--- a/test/functional/abc-minimaldata.py
+++ b/test/functional/abc-minimaldata.py
@@ -16,7 +16,6 @@
create_block,
create_coinbase,
create_tx_with_script,
- make_conform_to_ctor,
)
from test_framework.messages import (
CBlock,
@@ -73,10 +72,12 @@
block_height = self.block_heights[parent.sha256] + 1
block_time = (parent.nTime + 1) if nTime is None else nTime
- block = create_block(parent.sha256, create_coinbase(block_height), block_time)
- block.vtx.extend(transactions)
- make_conform_to_ctor(block)
- block.hashMerkleRoot = block.calc_merkle_root()
+ block = create_block(
+ parent.sha256,
+ create_coinbase(block_height),
+ block_time,
+ txlist=transactions,
+ )
block.solve()
self.block_heights[block.sha256] = block_height
return block
diff --git a/test/functional/abc-schnorr.py b/test/functional/abc-schnorr.py
--- a/test/functional/abc-schnorr.py
+++ b/test/functional/abc-schnorr.py
@@ -14,7 +14,6 @@
create_block,
create_coinbase,
create_tx_with_script,
- make_conform_to_ctor,
)
from test_framework.key import ECKey
from test_framework.messages import (
@@ -91,10 +90,12 @@
block_height = self.block_heights[parent.sha256] + 1
block_time = (parent.nTime + 1) if nTime is None else nTime
- block = create_block(parent.sha256, create_coinbase(block_height), block_time)
- block.vtx.extend(transactions)
- make_conform_to_ctor(block)
- block.hashMerkleRoot = block.calc_merkle_root()
+ block = create_block(
+ parent.sha256,
+ create_coinbase(block_height),
+ block_time,
+ txlist=transactions,
+ )
block.solve()
self.block_heights[block.sha256] = block_height
return block
diff --git a/test/functional/abc-schnorrmultisig.py b/test/functional/abc-schnorrmultisig.py
--- a/test/functional/abc-schnorrmultisig.py
+++ b/test/functional/abc-schnorrmultisig.py
@@ -17,7 +17,6 @@
create_block,
create_coinbase,
create_tx_with_script,
- make_conform_to_ctor,
)
from test_framework.key import ECKey
from test_framework.messages import (
@@ -88,10 +87,12 @@
block_height = self.block_heights[parent.sha256] + 1
block_time = (parent.nTime + 1) if nTime is None else nTime
- block = create_block(parent.sha256, create_coinbase(block_height), block_time)
- block.vtx.extend(transactions)
- make_conform_to_ctor(block)
- block.hashMerkleRoot = block.calc_merkle_root()
+ block = create_block(
+ parent.sha256,
+ create_coinbase(block_height),
+ block_time,
+ txlist=transactions,
+ )
block.solve()
self.block_heights[block.sha256] = block_height
return block
diff --git a/test/functional/chronik_block_info.py b/test/functional/chronik_block_info.py
--- a/test/functional/chronik_block_info.py
+++ b/test/functional/chronik_block_info.py
@@ -11,12 +11,7 @@
P2SH_OP_TRUE,
SCRIPTSIG_OP_TRUE,
)
-from test_framework.blocktools import (
- COINBASE_MATURITY,
- create_block,
- create_coinbase,
- make_conform_to_ctor,
-)
+from test_framework.blocktools import COINBASE_MATURITY, create_block, create_coinbase
from test_framework.messages import COutPoint, CTransaction, CTxIn, CTxOut
from test_framework.p2p import P2PDataStore
from test_framework.script import OP_RETURN, CScript
@@ -102,11 +97,11 @@
tx2.rehash()
block = create_block(
- int(prev_hash, 16), create_coinbase(102, b"\x03" * 33), 1300000500
+ int(prev_hash, 16),
+ create_coinbase(102, b"\x03" * 33),
+ 1300000500,
+ txlist=[tx, tx2],
)
- block.vtx += [tx, tx2]
- make_conform_to_ctor(block)
- block.hashMerkleRoot = block.calc_merkle_root()
block.solve()
peer.send_blocks_and_test([block], node)
node.syncwithvalidationinterfacequeue()
diff --git a/test/functional/chronik_block_txs.py b/test/functional/chronik_block_txs.py
--- a/test/functional/chronik_block_txs.py
+++ b/test/functional/chronik_block_txs.py
@@ -16,7 +16,6 @@
GENESIS_BLOCK_HASH,
create_block,
create_coinbase,
- make_conform_to_ctor,
)
from test_framework.messages import COutPoint, CTransaction, CTxIn, CTxOut
from test_framework.p2p import P2PDataStore
@@ -126,10 +125,7 @@
tx_coinbase = create_coinbase(102, b"\x03" * 33)
- block = create_block(int(tip, 16), tx_coinbase, 1300000500)
- block.vtx += [tx1, tx2]
- make_conform_to_ctor(block)
- block.hashMerkleRoot = block.calc_merkle_root()
+ block = create_block(int(tip, 16), tx_coinbase, 1300000500, txlist=[tx1, tx2])
block.solve()
peer.send_blocks_and_test([block], node)
node.syncwithvalidationinterfacequeue()
diff --git a/test/functional/chronik_lokad_id_group.py b/test/functional/chronik_lokad_id_group.py
--- a/test/functional/chronik_lokad_id_group.py
+++ b/test/functional/chronik_lokad_id_group.py
@@ -180,9 +180,12 @@
]
tx3_conflict.rehash()
- block = create_block(int(blockhash, 16), create_coinbase(103), mocktime + 100)
- block.vtx += [tx3_conflict]
- block.hashMerkleRoot = block.calc_merkle_root()
+ block = create_block(
+ int(blockhash, 16),
+ create_coinbase(103),
+ mocktime + 100,
+ txlist=[tx3_conflict],
+ )
block.solve()
peer.send_blocks_and_test([block], node)
node.syncwithvalidationinterfacequeue()
diff --git a/test/functional/chronik_mempool_conflicts.py b/test/functional/chronik_mempool_conflicts.py
--- a/test/functional/chronik_mempool_conflicts.py
+++ b/test/functional/chronik_mempool_conflicts.py
@@ -88,9 +88,8 @@
block = create_block(
int(block_hashes[-1], 16),
create_coinbase(block_height, b"\x03" * 33),
+ txlist=[conflict_tx],
)
- block.vtx += [conflict_tx]
- block.hashMerkleRoot = block.calc_merkle_root()
block.solve()
peer.send_blocks_and_test([block], node)
node.syncwithvalidationinterfacequeue()
diff --git a/test/functional/chronik_plugin_groups.py b/test/functional/chronik_plugin_groups.py
--- a/test/functional/chronik_plugin_groups.py
+++ b/test/functional/chronik_plugin_groups.py
@@ -13,12 +13,7 @@
P2SH_OP_TRUE,
SCRIPTSIG_OP_TRUE,
)
-from test_framework.blocktools import (
- COINBASE_MATURITY,
- create_block,
- create_coinbase,
- make_conform_to_ctor,
-)
+from test_framework.blocktools import COINBASE_MATURITY, create_block, create_coinbase
from test_framework.messages import COutPoint, CTransaction, CTxIn, CTxOut
from test_framework.p2p import P2PDataStore
from test_framework.script import OP_RETURN, CScript
@@ -294,10 +289,8 @@
block = create_block(
int(block_hashes[-1], 16),
create_coinbase(block_height, b"\x03" * 33),
+ txlist=[tx1, tx2, tx3] + extra_txs,
)
- block.vtx += [tx1, tx2, tx3] + extra_txs
- make_conform_to_ctor(block)
- block.hashMerkleRoot = block.calc_merkle_root()
block.solve()
peer.send_blocks_and_test([block], node)
diff --git a/test/functional/chronik_script_history.py b/test/functional/chronik_script_history.py
--- a/test/functional/chronik_script_history.py
+++ b/test/functional/chronik_script_history.py
@@ -10,12 +10,7 @@
P2SH_OP_TRUE,
SCRIPTSIG_OP_TRUE,
)
-from test_framework.blocktools import (
- GENESIS_CB_PK,
- create_block,
- create_coinbase,
- make_conform_to_ctor,
-)
+from test_framework.blocktools import GENESIS_CB_PK, create_block, create_coinbase
from test_framework.messages import COutPoint, CTransaction, CTxIn, CTxOut
from test_framework.p2p import P2PDataStore
from test_framework.script import OP_RETURN, CScript
@@ -263,11 +258,13 @@
coinbase_tx = create_coinbase(height)
coinbase_tx.vout[0].scriptPubKey = P2SH_OP_TRUE
coinbase_tx.rehash()
- block = create_block(int(blockhashes[-1], 16), coinbase_tx, mocktime + 1100)
- block.nVersion = 5
- block.vtx += mine_txs
- make_conform_to_ctor(block)
- block.hashMerkleRoot = block.calc_merkle_root()
+ block = create_block(
+ int(blockhashes[-1], 16),
+ coinbase_tx,
+ mocktime + 1100,
+ version=5,
+ txlist=mine_txs,
+ )
block.solve()
peer.send_blocks_and_test([block], node)
diff --git a/test/functional/chronik_script_unconfirmed_txs.py b/test/functional/chronik_script_unconfirmed_txs.py
--- a/test/functional/chronik_script_unconfirmed_txs.py
+++ b/test/functional/chronik_script_unconfirmed_txs.py
@@ -10,12 +10,7 @@
P2SH_OP_TRUE,
SCRIPTSIG_OP_TRUE,
)
-from test_framework.blocktools import (
- GENESIS_CB_PK,
- create_block,
- create_coinbase,
- make_conform_to_ctor,
-)
+from test_framework.blocktools import GENESIS_CB_PK, create_block, create_coinbase
from test_framework.messages import COutPoint, CTransaction, CTxIn, CTxOut
from test_framework.p2p import P2PDataStore
from test_framework.script import OP_RETURN, CScript
@@ -203,10 +198,9 @@
coinbase_tx = create_coinbase(height)
coinbase_tx.vout[0].scriptPubKey = P2SH_OP_TRUE
coinbase_tx.rehash()
- block = create_block(int(blockhashes[-1], 16), coinbase_tx, mocktime + 1100)
- block.vtx += mine_txs
- make_conform_to_ctor(block)
- block.hashMerkleRoot = block.calc_merkle_root()
+ block = create_block(
+ int(blockhashes[-1], 16), coinbase_tx, mocktime + 1100, txlist=mine_txs
+ )
block.solve()
peer.send_blocks_and_test([block], node)
node.syncwithvalidationinterfacequeue()
diff --git a/test/functional/chronik_script_utxos.py b/test/functional/chronik_script_utxos.py
--- a/test/functional/chronik_script_utxos.py
+++ b/test/functional/chronik_script_utxos.py
@@ -225,10 +225,11 @@
# Mining conflicting tx returns the mempool UTXO spent by tx3 to the mempool
block = create_block(
- int(tip, 16), create_coinbase(103, b"\x03" * 33), 1300000500
+ int(tip, 16),
+ create_coinbase(103, b"\x03" * 33),
+ 1300000500,
+ txlist=[tx3_conflict],
)
- block.vtx += [tx3_conflict]
- block.hashMerkleRoot = block.calc_merkle_root()
block.solve()
peer.send_blocks_and_test([block], node)
node.syncwithvalidationinterfacequeue()
diff --git a/test/functional/chronik_scripthash.py b/test/functional/chronik_scripthash.py
--- a/test/functional/chronik_scripthash.py
+++ b/test/functional/chronik_scripthash.py
@@ -15,7 +15,6 @@
GENESIS_CB_SCRIPT_PUBKEY,
GENESIS_CB_TXID,
create_block,
- make_conform_to_ctor,
)
from test_framework.hash import hex_be_sha256
from test_framework.messages import XEC, CTransaction, FromHex, ToHex
@@ -368,10 +367,9 @@
replacement_tx = wallet.create_self_transfer(utxo_to_spend=utxo_to_spend1)
assert replacement_tx["txid"] != mempool_tx_to_be_replaced["txid"]
- block = create_block(tmpl=self.node.getblocktemplate())
- block.vtx.append(replacement_tx["tx"])
- make_conform_to_ctor(block)
- block.hashMerkleRoot = block.calc_merkle_root()
+ block = create_block(
+ tmpl=self.node.getblocktemplate(), txlist=[replacement_tx["tx"]]
+ )
block.solve()
self.node.submitblock(ToHex(block))
@@ -416,10 +414,7 @@
replacement_tx.vout[out_idx].scriptPubKey = b"\x21\x03" + 32 * b"\xee" + b"\xac"
replacement_tx.rehash()
- block = create_block(tmpl=self.node.getblocktemplate())
- block.vtx.append(replacement_tx)
- make_conform_to_ctor(block)
- block.hashMerkleRoot = block.calc_merkle_root()
+ block = create_block(tmpl=self.node.getblocktemplate(), txlist=[replacement_tx])
block.solve()
self.node.submitblock(ToHex(block))
diff --git a/test/functional/chronik_shutdown.py b/test/functional/chronik_shutdown.py
--- a/test/functional/chronik_shutdown.py
+++ b/test/functional/chronik_shutdown.py
@@ -10,12 +10,7 @@
in a segfault.
"""
-from test_framework.blocktools import (
- GENESIS_BLOCK_HASH,
- create_block,
- create_coinbase,
- make_conform_to_ctor,
-)
+from test_framework.blocktools import GENESIS_BLOCK_HASH, create_block, create_coinbase
from test_framework.messages import COutPoint, CTransaction, CTxIn, CTxOut, msg_block
from test_framework.p2p import P2PDataStore
from test_framework.script import OP_TRUE, CScript
@@ -46,24 +41,25 @@
coinbase_tx.vout[0].scriptPubKey = CScript([OP_TRUE])
coinbase_tx.rehash()
coinbase_txs.append(coinbase_tx)
- block = create_block(int(last_block_hash, 16), coinbase_tx, mocktime + i)
+ txs = []
if i > 101:
txid = coinbase_txs[i - 101].sha256
fan_tx = CTransaction()
fan_tx.vin = [CTxIn(COutPoint(txid, 0))]
fan_tx.vout = [CTxOut(1000, CScript([OP_TRUE]))] * 8000
fan_tx.rehash()
- block.vtx.append(fan_tx)
- for i in range(0, 7997, 3):
+ txs.append(fan_tx)
+ for j in range(0, 7997, 3):
tx = CTransaction()
tx.vin = [
- CTxIn(COutPoint(fan_tx.sha256, j)) for j in range(i, i + 3)
+ CTxIn(COutPoint(fan_tx.sha256, k)) for k in range(j, j + 3)
]
tx.vout = [CTxOut(1000, CScript([OP_TRUE]))]
tx.rehash()
- block.vtx.append(tx)
- make_conform_to_ctor(block)
- block.hashMerkleRoot = block.calc_merkle_root()
+ txs.append(tx)
+ block = create_block(
+ int(last_block_hash, 16), coinbase_tx, mocktime + i, txlist=txs
+ )
block.solve()
last_block_hash = block.hash
peer.send_message(msg_block(block))
diff --git a/test/functional/chronik_spent_by.py b/test/functional/chronik_spent_by.py
--- a/test/functional/chronik_spent_by.py
+++ b/test/functional/chronik_spent_by.py
@@ -10,12 +10,7 @@
ADDRESS_ECREG_UNSPENDABLE,
SCRIPTSIG_OP_TRUE,
)
-from test_framework.blocktools import (
- COINBASE_MATURITY,
- create_block,
- create_coinbase,
- make_conform_to_ctor,
-)
+from test_framework.blocktools import COINBASE_MATURITY, create_block, create_coinbase
from test_framework.hash import hash160
from test_framework.messages import COutPoint, CTransaction, CTxIn, CTxOut
from test_framework.p2p import P2PDataStore
@@ -162,11 +157,11 @@
# Block mines tx, tx2 and tx3_conflict
block = create_block(
- int(tip, 16), create_coinbase(102, b"\x03" * 33), 1300000500
+ int(tip, 16),
+ create_coinbase(102, b"\x03" * 33),
+ 1300000500,
+ txlist=[tx, tx2, tx3_conflict],
)
- block.vtx += [tx, tx2, tx3_conflict]
- make_conform_to_ctor(block)
- block.hashMerkleRoot = block.calc_merkle_root()
block.solve()
peer.send_blocks_and_test([block], node)
node.syncwithvalidationinterfacequeue()
diff --git a/test/functional/chronik_token_alp.py b/test/functional/chronik_token_alp.py
--- a/test/functional/chronik_token_alp.py
+++ b/test/functional/chronik_token_alp.py
@@ -11,12 +11,7 @@
P2SH_OP_TRUE,
SCRIPTSIG_OP_TRUE,
)
-from test_framework.blocktools import (
- COINBASE_MATURITY,
- create_block,
- create_coinbase,
- make_conform_to_ctor,
-)
+from test_framework.blocktools import COINBASE_MATURITY, create_block, create_coinbase
from test_framework.chronik.alp import (
alp_burn,
alp_genesis,
@@ -573,17 +568,15 @@
int(block_hashes[-1], 16),
create_coinbase(block_height, b"\x03" * 33),
1300000500,
+ txlist=[
+ genesis.tx,
+ mint.tx,
+ send.tx,
+ genesis2.tx,
+ multi.tx,
+ all_things.tx,
+ ],
)
- block.vtx += [
- genesis.tx,
- mint.tx,
- send.tx,
- genesis2.tx,
- multi.tx,
- all_things.tx,
- ]
- make_conform_to_ctor(block)
- block.hashMerkleRoot = block.calc_merkle_root()
block.solve()
peer.send_blocks_and_test([block], node)
node.syncwithvalidationinterfacequeue()
@@ -610,9 +603,8 @@
int(prev_hash, 16),
create_coinbase(block_height + block_idx, b"\x03" * 33),
1300000500 + block_idx,
+ txlist=[mined_tx.tx],
)
- block.vtx += [mined_tx.tx]
- block.hashMerkleRoot = block.calc_merkle_root()
block.solve()
prev_hash = block.hash
peer.send_blocks_and_test([block], node)
@@ -628,9 +620,8 @@
int(prev_hash, 16),
create_coinbase(block_height + len(txs), b"\x03" * 33),
1300000500 + len(txs),
+ txlist=[all_things.tx],
)
- block.vtx += [all_things.tx]
- block.hashMerkleRoot = block.calc_merkle_root()
block.solve()
peer.send_blocks_and_test([block], node)
node.syncwithvalidationinterfacequeue()
@@ -659,9 +650,8 @@
int(block_hashes[-1], 16),
create_coinbase(block_height, b"\x03" * 33),
1300000500,
+ txlist=[conflict_tx],
)
- block.vtx += [conflict_tx]
- block.hashMerkleRoot = block.calc_merkle_root()
block.solve()
peer.send_blocks_and_test([block], node)
node.syncwithvalidationinterfacequeue()
diff --git a/test/functional/chronik_token_slp_mint_vault.py b/test/functional/chronik_token_slp_mint_vault.py
--- a/test/functional/chronik_token_slp_mint_vault.py
+++ b/test/functional/chronik_token_slp_mint_vault.py
@@ -11,12 +11,7 @@
P2SH_OP_TRUE,
SCRIPTSIG_OP_TRUE,
)
-from test_framework.blocktools import (
- COINBASE_MATURITY,
- create_block,
- create_coinbase,
- make_conform_to_ctor,
-)
+from test_framework.blocktools import COINBASE_MATURITY, create_block, create_coinbase
from test_framework.chronik.slp import slp_genesis, slp_mint_vault, slp_send
from test_framework.chronik.token_tx import TokenTx
from test_framework.hash import hash160
@@ -194,9 +189,8 @@
int(block_hashes[-1], 16),
create_coinbase(block_height, b"\x03" * 33),
1300000500,
+ txlist=[genesis.tx],
)
- block.vtx += [genesis.tx]
- block.hashMerkleRoot = block.calc_merkle_root()
block.solve()
peer.send_blocks_and_test([block], node)
node.syncwithvalidationinterfacequeue()
@@ -308,10 +302,8 @@
int(block_hashes[-1], 16),
create_coinbase(block_height, b"\x03" * 33),
1300000500,
+ txlist=[genesis.tx, mint2.tx],
)
- block.vtx += [genesis.tx, mint2.tx]
- make_conform_to_ctor(block)
- block.hashMerkleRoot = block.calc_merkle_root()
block.solve()
peer.send_blocks_and_test([block], node)
node.syncwithvalidationinterfacequeue()
diff --git a/test/functional/chronik_tx.py b/test/functional/chronik_tx.py
--- a/test/functional/chronik_tx.py
+++ b/test/functional/chronik_tx.py
@@ -193,10 +193,11 @@
conflict_tx = CTransaction(tx2)
conflict_tx.nLockTime = 13
block = create_block(
- int(txblockhash, 16), create_coinbase(103, b"\x03" * 33), 1333333500
+ int(txblockhash, 16),
+ create_coinbase(103, b"\x03" * 33),
+ 1333333500,
+ txlist=[conflict_tx],
)
- block.vtx += [conflict_tx]
- block.hashMerkleRoot = block.calc_merkle_root()
block.solve()
peer.send_blocks_and_test([block], node)
node.syncwithvalidationinterfacequeue()
diff --git a/test/functional/chronik_ws_script.py b/test/functional/chronik_ws_script.py
--- a/test/functional/chronik_ws_script.py
+++ b/test/functional/chronik_ws_script.py
@@ -9,12 +9,7 @@
SCRIPTSIG_OP_TRUE,
)
from test_framework.avatools import can_find_inv_in_poll, get_ava_p2p_interface
-from test_framework.blocktools import (
- COINBASE_MATURITY,
- create_block,
- create_coinbase,
- make_conform_to_ctor,
-)
+from test_framework.blocktools import COINBASE_MATURITY, create_block, create_coinbase
from test_framework.hash import hash160
from test_framework.messages import COutPoint, CTransaction, CTxIn, CTxOut
from test_framework.p2p import P2PDataStore
@@ -170,11 +165,11 @@
# Mine tx, tx2 and tx3_conflict
height = 102
block = create_block(
- int(tip, 16), create_coinbase(height, b"\x03" * 33), 1300000500
+ int(tip, 16),
+ create_coinbase(height, b"\x03" * 33),
+ 1300000500,
+ txlist=[tx, tx2, tx3_conflict],
)
- block.vtx += [tx, tx2, tx3_conflict]
- make_conform_to_ctor(block)
- block.hashMerkleRoot = block.calc_merkle_root()
block.solve()
peer.send_blocks_and_test([block], node)
node.syncwithvalidationinterfacequeue()
diff --git a/test/functional/feature_assumevalid.py b/test/functional/feature_assumevalid.py
--- a/test/functional/feature_assumevalid.py
+++ b/test/functional/feature_assumevalid.py
@@ -123,10 +123,10 @@
pad_tx(tx)
tx.calc_sha256()
- block102 = create_block(self.tip, create_coinbase(height), self.block_time)
+ block102 = create_block(
+ self.tip, create_coinbase(height), self.block_time, txlist=[tx]
+ )
self.block_time += 1
- block102.vtx.extend([tx])
- block102.hashMerkleRoot = block102.calc_merkle_root()
block102.solve()
self.blocks.append(block102)
self.tip = block102.sha256
@@ -135,8 +135,9 @@
# Bury the assumed valid block 2100 deep
for _ in range(2100):
- block = create_block(self.tip, create_coinbase(height), self.block_time)
- block.nVersion = 4
+ block = create_block(
+ self.tip, create_coinbase(height), self.block_time, version=4
+ )
block.solve()
self.blocks.append(block)
self.tip = block.sha256
diff --git a/test/functional/feature_bip68_sequence.py b/test/functional/feature_bip68_sequence.py
--- a/test/functional/feature_bip68_sequence.py
+++ b/test/functional/feature_bip68_sequence.py
@@ -491,9 +491,9 @@
)
# make a block that violates bip68; ensure that the tip updates
- block = create_block(tmpl=self.nodes[0].getblocktemplate())
- block.vtx.extend(sorted([tx1, tx2, tx3], key=lambda tx: tx.get_id()))
- block.hashMerkleRoot = block.calc_merkle_root()
+ block = create_block(
+ tmpl=self.nodes[0].getblocktemplate(), txlist=[tx1, tx2, tx3]
+ )
block.solve()
assert_equal(None, self.nodes[0].submitblock(ToHex(block)))
diff --git a/test/functional/feature_block.py b/test/functional/feature_block.py
--- a/test/functional/feature_block.py
+++ b/test/functional/feature_block.py
@@ -1264,12 +1264,13 @@
# all but one satoshi to fees
coinbase.vout[0].nValue += spend.vout[0].nValue - 1
coinbase.rehash()
- block = create_block(base_block_hash, coinbase, block_time, version=version)
# spend 1 satoshi
tx = self.create_tx(spend, 0, 1, script)
self.sign_tx(tx, spend)
- self.add_transactions_to_block(block, [tx])
- block.hashMerkleRoot = block.calc_merkle_root()
+ tx.rehash()
+ block = create_block(
+ base_block_hash, coinbase, block_time, version=version, txlist=[tx]
+ )
# Block is created. Find a valid nonce.
block.solve()
self.tip = block
diff --git a/test/functional/feature_cltv.py b/test/functional/feature_cltv.py
--- a/test/functional/feature_cltv.py
+++ b/test/functional/feature_cltv.py
@@ -96,13 +96,13 @@
tip = self.nodes[0].getbestblockhash()
block_time = self.nodes[0].getblockheader(tip)["mediantime"] + 1
- block = create_block(int(tip, 16), create_coinbase(CLTV_HEIGHT - 1), block_time)
- block.nVersion = 3
- block.vtx.append(fundtx)
- # include the -1 CLTV in block
- block.vtx.append(spendtx)
- make_conform_to_ctor(block)
- block.hashMerkleRoot = block.calc_merkle_root()
+ block = create_block(
+ int(tip, 16),
+ create_coinbase(CLTV_HEIGHT - 1),
+ block_time,
+ version=3,
+ txlist=[fundtx, spendtx],
+ )
block.solve()
peer.send_and_ping(msg_block(block))
@@ -112,8 +112,7 @@
self.log.info("Test that blocks must now be at least version 4")
tip = block.sha256
block_time += 1
- block = create_block(tip, create_coinbase(CLTV_HEIGHT), block_time)
- block.nVersion = 3
+ block = create_block(tip, create_coinbase(CLTV_HEIGHT), block_time, version=3)
block.solve()
with self.nodes[0].assert_debug_log(
@@ -164,10 +163,13 @@
tip = block.hash
block_time += 1
- block = create_block(block.sha256, create_coinbase(CLTV_HEIGHT + 1), block_time)
- block.nVersion = 4
- block.vtx.append(spendtx)
- block.hashMerkleRoot = block.calc_merkle_root()
+ block = create_block(
+ block.sha256,
+ create_coinbase(CLTV_HEIGHT + 1),
+ block_time,
+ version=4,
+ txlist=[spendtx],
+ )
block.solve()
with self.nodes[0].assert_debug_log(
diff --git a/test/functional/feature_csv_activation.py b/test/functional/feature_csv_activation.py
--- a/test/functional/feature_csv_activation.py
+++ b/test/functional/feature_csv_activation.py
@@ -173,12 +173,12 @@
def create_test_block(self, txs, version=536870912):
block = create_block(
- self.tip, create_coinbase(self.tipheight + 1), self.last_block_time + 600
+ self.tip,
+ create_coinbase(self.tipheight + 1),
+ self.last_block_time + 600,
+ version=version,
+ txlist=txs,
)
- block.nVersion = version
- block.vtx.extend(txs)
- make_conform_to_ctor(block)
- block.hashMerkleRoot = block.calc_merkle_root()
block.solve()
return block
diff --git a/test/functional/feature_dersig.py b/test/functional/feature_dersig.py
--- a/test/functional/feature_dersig.py
+++ b/test/functional/feature_dersig.py
@@ -59,8 +59,9 @@
self.log.info("Test that blocks must now be at least version 3")
tip = self.nodes[0].getbestblockhash()
block_time = self.nodes[0].getblockheader(tip)["mediantime"] + 1
- block = create_block(int(tip, 16), create_coinbase(DERSIG_HEIGHT), block_time)
- block.nVersion = 2
+ block = create_block(
+ int(tip, 16), create_coinbase(DERSIG_HEIGHT), block_time, version=2
+ )
block.solve()
with self.nodes[0].assert_debug_log(
diff --git a/test/functional/feature_tx_version.py b/test/functional/feature_tx_version.py
--- a/test/functional/feature_tx_version.py
+++ b/test/functional/feature_tx_version.py
@@ -14,7 +14,6 @@
create_block,
create_coinbase,
create_tx_with_script,
- make_conform_to_ctor,
)
from test_framework.messages import CBlock, FromHex
from test_framework.p2p import P2PDataStore
@@ -132,11 +131,7 @@
coinbase.nVersion = coinbase_version
coinbase.rehash()
- block = create_block(prev_block.sha256, coinbase, block_time)
- if txs:
- block.vtx += txs
- make_conform_to_ctor(block)
- block.hashMerkleRoot = block.calc_merkle_root()
+ block = create_block(prev_block.sha256, coinbase, block_time, txlist=txs)
block.solve()
self.block_heights[block.sha256] = height
return block
diff --git a/test/functional/interface_zmq.py b/test/functional/interface_zmq.py
--- a/test/functional/interface_zmq.py
+++ b/test/functional/interface_zmq.py
@@ -7,11 +7,7 @@
from time import sleep
from test_framework.address import ADDRESS_ECREG_P2SH_OP_TRUE, ADDRESS_ECREG_UNSPENDABLE
-from test_framework.blocktools import (
- create_block,
- create_coinbase,
- make_conform_to_ctor,
-)
+from test_framework.blocktools import create_block, create_coinbase
from test_framework.messages import CTransaction, FromHex, hash256
from test_framework.test_framework import BitcoinTestFramework
from test_framework.util import assert_equal, assert_raises_rpc_error
@@ -519,17 +515,16 @@
)
raw_tx = self.nodes[0].getrawtransaction(orig_txid)
+ txs_to_add = [
+ FromHex(CTransaction(), tx_hex)
+ for tx_hex in [raw_tx]
+ + [self.nodes[0].getrawtransaction(txid) for txid in more_tx]
+ ]
block = create_block(
int(self.nodes[0].getbestblockhash(), 16),
create_coinbase(self.nodes[0].getblockcount() + 1),
+ txlist=txs_to_add,
)
- tx = FromHex(CTransaction(), raw_tx)
- block.vtx.append(tx)
- for txid in more_tx:
- tx = FromHex(CTransaction(), self.nodes[0].getrawtransaction(txid))
- block.vtx.append(tx)
- make_conform_to_ctor(block)
- block.hashMerkleRoot = block.calc_merkle_root()
block.solve()
assert_equal(self.nodes[0].submitblock(block.serialize().hex()), None)
tip = self.nodes[0].getbestblockhash()
diff --git a/test/functional/p2p_invalid_block.py b/test/functional/p2p_invalid_block.py
--- a/test/functional/p2p_invalid_block.py
+++ b/test/functional/p2p_invalid_block.py
@@ -25,6 +25,7 @@
)
from test_framework.messages import COIN
from test_framework.p2p import P2PDataStore
+from test_framework.script import OP_TRUE
from test_framework.test_framework import BitcoinTestFramework
from test_framework.util import assert_equal
@@ -74,18 +75,14 @@
# src/consensus/merkle.cpp.
self.log.info("Test merkle root malleability.")
- block2 = create_block(tip, create_coinbase(height), block_time)
- block_time += 1
-
- # b'0x51' is OP_TRUE
tx1 = create_tx_with_script(block1.vtx[0], 0, script_sig=b"", amount=50 * COIN)
- tx2 = create_tx_with_script(tx1, 0, script_sig=b"\x51", amount=50 * COIN)
-
- block2.vtx.extend([tx1, tx2])
- block2.vtx = [block2.vtx[0]] + sorted(
- block2.vtx[1:], key=lambda tx: tx.get_id()
+ tx2 = create_tx_with_script(
+ tx1, 0, script_sig=bytes([OP_TRUE]), amount=50 * COIN
+ )
+ block2 = create_block(
+ tip, create_coinbase(height), block_time, txlist=[tx1, tx2]
)
- block2.hashMerkleRoot = block2.calc_merkle_root()
+ block_time += 1
block2.solve()
orig_hash = block2.sha256
block2_orig = copy.deepcopy(block2)
@@ -115,12 +112,10 @@
self.log.info("Test very broken block.")
- block3 = create_block(tip, create_coinbase(height), block_time)
+ block3 = create_block(
+ tip, create_coinbase(height, nValue=100_000_000), block_time
+ )
block_time += 1
- block3.vtx[0].vout[0].nValue = 100 * COIN # Too high!
- block3.vtx[0].sha256 = None
- block3.vtx[0].calc_sha256()
- block3.hashMerkleRoot = block3.calc_merkle_root()
block3.solve()
peer.send_blocks_and_test(
@@ -143,15 +138,13 @@
# Complete testing of CVE-2018-17144, by checking for the inflation bug.
# Create a block that spends the output of a tx in a previous block.
- block4 = create_block(tip, create_coinbase(height), block_time)
- tx3 = create_tx_with_script(tx2, 0, script_sig=b"\x51", amount=50 * COIN)
-
+ tx3 = create_tx_with_script(
+ tx2, 0, script_sig=bytes([OP_TRUE]), amount=50 * COIN
+ )
# Duplicates input
tx3.vin.append(tx3.vin[0])
tx3.rehash()
- block4.vtx.append(tx3)
- make_conform_to_ctor(block4)
- block4.hashMerkleRoot = block4.calc_merkle_root()
+ block4 = create_block(tip, create_coinbase(height), block_time, txlist=[tx3])
block4.solve()
self.log.info("Test inflation by duplicating input")
peer.send_blocks_and_test(
@@ -168,7 +161,6 @@
block = create_block(
tip, create_coinbase(height), t + MAX_FUTURE_BLOCK_TIME + 1
)
- block.hashMerkleRoot = block.calc_merkle_root()
block.solve()
# Need force_send because the block will get rejected without a getdata
# otherwise
diff --git a/test/functional/p2p_net_deadlock.py b/test/functional/p2p_net_deadlock.py
--- a/test/functional/p2p_net_deadlock.py
+++ b/test/functional/p2p_net_deadlock.py
@@ -11,7 +11,7 @@
import threading
-from test_framework.blocktools import create_block, make_conform_to_ctor
+from test_framework.blocktools import create_block
from test_framework.messages import ToHex
from test_framework.test_framework import BitcoinTestFramework
from test_framework.txtools import pad_tx
@@ -35,10 +35,7 @@
for tx in txs:
pad_tx(tx, 999_990)
- block = create_block(tmpl=node0.getblocktemplate())
- block.vtx += txs
- make_conform_to_ctor(block)
- block.hashMerkleRoot = block.calc_merkle_root()
+ block = create_block(tmpl=node0.getblocktemplate(), txlist=txs)
block.solve()
hex_block = ToHex(block)
assert_greater_than(len(hex_block) // 2, 4_000_000)
diff --git a/test/functional/p2p_unrequested_blocks.py b/test/functional/p2p_unrequested_blocks.py
--- a/test/functional/p2p_unrequested_blocks.py
+++ b/test/functional/p2p_unrequested_blocks.py
@@ -275,14 +275,16 @@
block_289f.sha256, create_coinbase(290), block_289f.nTime + 1
)
block_290f.solve()
- block_291 = create_block(
- block_290f.sha256, create_coinbase(291), block_290f.nTime + 1
- )
# block_291 spends a coinbase below maturity!
- block_291.vtx.append(
- create_tx_with_script(block_290f.vtx[0], 0, script_sig=b"42", amount=1)
+ tx_to_add = create_tx_with_script(
+ block_290f.vtx[0], 0, script_sig=b"42", amount=1
+ )
+ block_291 = create_block(
+ block_290f.sha256,
+ create_coinbase(291),
+ block_290f.nTime + 1,
+ txlist=[tx_to_add],
)
- block_291.hashMerkleRoot = block_291.calc_merkle_root()
block_291.solve()
block_292 = create_block(
block_291.sha256, create_coinbase(292), block_291.nTime + 1
diff --git a/test/functional/setup_scripts/chronik-client_lokad_id.py b/test/functional/setup_scripts/chronik-client_lokad_id.py
--- a/test/functional/setup_scripts/chronik-client_lokad_id.py
+++ b/test/functional/setup_scripts/chronik-client_lokad_id.py
@@ -171,9 +171,12 @@
]
tx3_conflict.rehash()
- block = create_block(int(blockhash, 16), create_coinbase(103), mocktime + 100)
- block.vtx += [tx3_conflict]
- block.hashMerkleRoot = block.calc_merkle_root()
+ block = create_block(
+ int(blockhash, 16),
+ create_coinbase(103),
+ mocktime + 100,
+ txlist=[tx3_conflict],
+ )
block.solve()
peer.send_blocks_and_test([block], node)
diff --git a/test/functional/setup_scripts/chronik-client_mempool_conflicts.py b/test/functional/setup_scripts/chronik-client_mempool_conflicts.py
--- a/test/functional/setup_scripts/chronik-client_mempool_conflicts.py
+++ b/test/functional/setup_scripts/chronik-client_mempool_conflicts.py
@@ -103,9 +103,8 @@
block = create_block(
int(block_hashes[-1], 16),
create_coinbase(block_height, b"\x03" * 33),
+ txlist=[conflict_tx],
)
- block.vtx += [conflict_tx]
- block.hashMerkleRoot = block.calc_merkle_root()
block.solve()
peer.send_blocks_and_test([block], node)
yield True
diff --git a/test/functional/setup_scripts/chronik-client_plugin_groups.py b/test/functional/setup_scripts/chronik-client_plugin_groups.py
--- a/test/functional/setup_scripts/chronik-client_plugin_groups.py
+++ b/test/functional/setup_scripts/chronik-client_plugin_groups.py
@@ -17,12 +17,7 @@
P2SH_OP_TRUE,
SCRIPTSIG_OP_TRUE,
)
-from test_framework.blocktools import (
- COINBASE_MATURITY,
- create_block,
- create_coinbase,
- make_conform_to_ctor,
-)
+from test_framework.blocktools import COINBASE_MATURITY, create_block, create_coinbase
from test_framework.messages import COutPoint, CTransaction, CTxIn, CTxOut
from test_framework.p2p import P2PDataStore
from test_framework.script import OP_RETURN, CScript
@@ -325,10 +320,8 @@
block = create_block(
int(block_hashes[-1], 16),
create_coinbase(block_height, b"\x03" * 33),
+ txlist=[tx1, tx2, tx3] + extra_txs,
)
- block.vtx += [tx1, tx2, tx3] + extra_txs
- make_conform_to_ctor(block)
- block.hashMerkleRoot = block.calc_merkle_root()
block.solve()
peer.send_blocks_and_test([block], node)
diff --git a/test/functional/setup_scripts/chronik-client_token_alp.py b/test/functional/setup_scripts/chronik-client_token_alp.py
--- a/test/functional/setup_scripts/chronik-client_token_alp.py
+++ b/test/functional/setup_scripts/chronik-client_token_alp.py
@@ -16,12 +16,7 @@
P2SH_OP_TRUE,
SCRIPTSIG_OP_TRUE,
)
-from test_framework.blocktools import (
- COINBASE_MATURITY,
- create_block,
- create_coinbase,
- make_conform_to_ctor,
-)
+from test_framework.blocktools import COINBASE_MATURITY, create_block, create_coinbase
from test_framework.chronik.alp import (
alp_burn,
alp_genesis,
@@ -290,17 +285,15 @@
int(block_hashes[-1], 16),
create_coinbase(block_height, b"\x03" * 33),
1300000500,
+ txlist=[
+ alp_genesis_tx,
+ alp_send_tx,
+ alp_mint_tx,
+ another_alp_genesis_tx,
+ multi_tx,
+ mega_tx,
+ ],
)
- block.vtx += [
- alp_genesis_tx,
- alp_send_tx,
- alp_mint_tx,
- another_alp_genesis_tx,
- multi_tx,
- mega_tx,
- ]
- make_conform_to_ctor(block)
- block.hashMerkleRoot = block.calc_merkle_root()
block.solve()
peer.send_blocks_and_test([block], node)
assert_equal(node.getblockcount(), 102)
diff --git a/test/functional/setup_scripts/chronik-client_token_slp_mint_vault.py b/test/functional/setup_scripts/chronik-client_token_slp_mint_vault.py
--- a/test/functional/setup_scripts/chronik-client_token_slp_mint_vault.py
+++ b/test/functional/setup_scripts/chronik-client_token_slp_mint_vault.py
@@ -154,9 +154,8 @@
int(block_hashes[-1], 16),
create_coinbase(block_height, b"\x03" * 33),
1300000500,
+ txlist=[slp_vault_genesis_tx],
)
- block.vtx += [slp_vault_genesis_tx]
- block.hashMerkleRoot = block.calc_merkle_root()
block.solve()
peer.send_blocks_and_test([block], node)
assert_equal(node.getblockcount(), 103)
diff --git a/test/functional/test_framework/blocktools.py b/test/functional/test_framework/blocktools.py
--- a/test/functional/test_framework/blocktools.py
+++ b/test/functional/test_framework/blocktools.py
@@ -61,6 +61,7 @@
*,
version: Optional[int] = None,
tmpl: Optional[dict] = None,
+ txlist: Optional[list] = None,
) -> CBlock:
"""Create a block (with regtest difficulty)."""
block = CBlock()
@@ -75,6 +76,9 @@
# difficulty retargeting is disabled in REGTEST chainparams
block.nBits = 0x207FFFFF
block.vtx.append(coinbase or create_coinbase(height=tmpl["height"]))
+ if txlist:
+ block.vtx.extend(txlist)
+ make_conform_to_ctor(block)
block.hashMerkleRoot = block.calc_merkle_root()
block.calc_sha256()
return block

File Metadata

Mime Type
text/plain
Expires
Tue, May 20, 22:59 (4 h, 53 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5866118
Default Alt Text
D17691.id52749.diff (40 KB)

Event Timeline