scripted-diff: Use new create_block height option
What changed, and why it matters
This commit is a purely mechanical update to Bitcoin Core's internal test suite. It changes how test scripts call a helper function named create_block, switching from passing a pre-built coinbase transaction to passing just the block height and letting the helper build the coinbase internally. No production code, consensus rules, or network behavior are modified. There is no security relevance.
No action required. This is a test-only refactor with no security or operational impact.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The commit is a scripted-diff refactor across 22 functional test files. It replaces calls of the form create_block(prevhash, create_coinbase(height), ntime, …) with create_block(prevhash, height=height, ntime=ntime, …). This relies on a previously introduced create_block option that accepts a height keyword argument and constructs the coinbase inside the helper. The change is entirely in test/functional/ and test_framework/blocktools.py. No C++ node code, RPC behavior, wallet logic, or consensus code is touched.
Changed components
test/functional/example_test.pytest/functional/feature_assumeutxo.pytest/functional/feature_assumevalid.pytest/functional/feature_cltv.pytest/functional/feature_csv_activation.pytest/functional/feature_dersig.pytest/functional/feature_notifications.pytest/functional/feature_versionbits_warning.pytest/functional/p2p_eviction.pytest/functional/p2p_ibd_stalling.pytest/functional/p2p_ibd_txrelay.pytest/functional/p2p_invalid_block.pytest/functional/p2p_invalid_tx.pytest/functional/p2p_segwit.pytest/functional/p2p_sendheaders.pytest/functional/p2p_unrequested_blocks.pytest/functional/p2p_v2_encrypted.pytest/functional/rpc_blockchain.pytest/functional/rpc_getchaintips.pytest/functional/rpc_invalidateblock.pytest/functional/test_framework/blocktools.pytest/functional/wallet_resendwallettransactions.pyInspect captured patch +53 / −53
diff --git a/test/functional/example_test.py b/test/functional/example_test.py
index 72955bdf..51fc762a 100755
--- a/test/functional/example_test.py
+++ b/test/functional/example_test.py
@@ -176,7 +176,7 @@ class ExampleTest(BitcoinTestFramework):
# Use the blocktools functionality to manually build a block.
# Calling the generate() rpc is easier, but this allows us to exactly
# control the blocks and transactions.
- block = create_block(self.tip, create_coinbase(height+1), self.block_time)
+ block = create_block(self.tip, height=height+1, ntime=self.block_time)
block.solve()
block_message = msg_block(block)
# Send message is used to send a P2P message to the node over our P2PInterface
diff --git a/test/functional/feature_assumeutxo.py b/test/functional/feature_assumeutxo.py
index 886d104e..e188d39a 100755
--- a/test/functional/feature_assumeutxo.py
+++ b/test/functional/feature_assumeutxo.py
@@ -271,9 +271,9 @@ class AssumeutxoTest(BitcoinTestFramework):
# the main chain headers up to the snapshot height.
parent_block_hash = node0.getblockhash(SNAPSHOT_BASE_HEIGHT - 1)
block_time = node0.getblock(node0.getbestblockhash())['time'] + 1
- fork_block1 = create_block(int(parent_block_hash, 16), create_coinbase(SNAPSHOT_BASE_HEIGHT), block_time)
+ fork_block1 = create_block(int(parent_block_hash, 16), height=SNAPSHOT_BASE_HEIGHT, ntime=block_time)
fork_block1.solve()
- fork_block2 = create_block(fork_block1.hash_int, create_coinbase(SNAPSHOT_BASE_HEIGHT + 1), block_time + 1)
+ fork_block2 = create_block(fork_block1.hash_int, height=SNAPSHOT_BASE_HEIGHT + 1, ntime=block_time + 1)
fork_block2.solve()
node1.submitheader(fork_block1.serialize().hex())
node1.submitheader(fork_block2.serialize().hex())
diff --git a/test/functional/feature_assumevalid.py b/test/functional/feature_assumevalid.py
index 4eaa74b3..7a1fe13c 100755
--- a/test/functional/feature_assumevalid.py
+++ b/test/functional/feature_assumevalid.py
@@ -102,7 +102,7 @@ class AssumeValidTest(BitcoinTestFramework):
# Bury the block 100 deep so the coinbase output is spendable
for _ in range(100):
- block = create_block(self.tip, create_coinbase(height), self.block_time)
+ block = create_block(self.tip, height=height, ntime=self.block_time)
block.solve()
self.blocks.append(block)
self.tip = block.hash_int
@@ -114,7 +114,7 @@ class AssumeValidTest(BitcoinTestFramework):
tx.vin.append(CTxIn(COutPoint(self.block1.vtx[0].txid_int, 0), scriptSig=b""))
tx.vout.append(CTxOut(49 * 100000000, CScript([OP_TRUE])))
- block102 = create_block(self.tip, create_coinbase(height), self.block_time, txlist=[tx])
+ block102 = create_block(self.tip, height=height, ntime=self.block_time, txlist=[tx])
self.block_time += 1
block102.solve()
self.blocks.append(block102)
@@ -124,7 +124,7 @@ class AssumeValidTest(BitcoinTestFramework):
# Bury the assumed valid block 2100 deep
for _ in range(2100):
- block = create_block(self.tip, create_coinbase(height), self.block_time)
+ block = create_block(self.tip, height=height, ntime=self.block_time)
block.solve()
self.blocks.append(block)
self.tip = block.hash_int
@@ -198,7 +198,7 @@ class AssumeValidTest(BitcoinTestFramework):
second_chain_tip, second_chain_time, second_chain_height = int(best_hash, 16), tip_block["time"] + 1, tip_block["height"] + 1
second_chain = []
for _ in range(150):
- block = create_block(second_chain_tip, create_coinbase(second_chain_height), second_chain_time)
+ block = create_block(second_chain_tip, height=second_chain_height, ntime=second_chain_time)
block.solve()
second_chain.append(block)
second_chain_tip, second_chain_time, second_chain_height = block.hash_int, second_chain_time + 1, second_chain_height + 1
@@ -215,7 +215,7 @@ class AssumeValidTest(BitcoinTestFramework):
self.log.info("Send a block not in the assumevalid header chain to node4.")
genesis_hash = self.nodes[4].getbestblockhash()
genesis_time = self.nodes[4].getblock(genesis_hash)['time']
- alt1 = create_block(int(genesis_hash, 16), create_coinbase(1), genesis_time + 2)
+ alt1 = create_block(int(genesis_hash, 16), height=1, ntime=genesis_time + 2)
alt1.solve()
p2p4 = self.nodes[4].add_p2p_connection(BaseNode())
p2p4.send_header_for_blocks(self.blocks[0:103])
diff --git a/test/functional/feature_cltv.py b/test/functional/feature_cltv.py
index 0cc2f458..ee31c3c5 100755
--- a/test/functional/feature_cltv.py
+++ b/test/functional/feature_cltv.py
@@ -121,7 +121,7 @@ class BIP65Test(BitcoinTestFramework):
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, version=3, txlist=invalid_cltv_txs)
+ block = create_block(int(tip, 16), height=CLTV_HEIGHT - 1, ntime=block_time, version=3, txlist=invalid_cltv_txs)
block.solve()
self.test_cltv_info(is_active=False) # Not active as of current tip and next block does not need to obey rules
@@ -132,7 +132,7 @@ class BIP65Test(BitcoinTestFramework):
self.log.info("Test that blocks must now be at least version 4")
tip = block.hash_int
block_time += 1
- block = create_block(tip, create_coinbase(CLTV_HEIGHT), block_time, version=3)
+ block = create_block(tip, height=CLTV_HEIGHT, ntime=block_time, version=3)
block.solve()
with self.nodes[0].assert_debug_log(expected_msgs=[f'{block.hash_hex}, bad-version(0x00000003)']):
diff --git a/test/functional/feature_csv_activation.py b/test/functional/feature_csv_activation.py
index 0850bc50..3f8779b1 100755
--- a/test/functional/feature_csv_activation.py
+++ b/test/functional/feature_csv_activation.py
@@ -170,7 +170,7 @@ class BIP68_112_113Test(BitcoinTestFramework):
return test_blocks
def create_test_block(self, txs):
- block = create_block(self.tip, create_coinbase(self.tipheight + 1), self.last_block_time + 600, txlist=txs)
+ block = create_block(self.tip, height=self.tipheight + 1, ntime=self.last_block_time + 600, txlist=txs)
block.solve()
return block
diff --git a/test/functional/feature_dersig.py b/test/functional/feature_dersig.py
index 01529647..e87dd8c8 100755
--- a/test/functional/feature_dersig.py
+++ b/test/functional/feature_dersig.py
@@ -84,7 +84,7 @@ class BIP66Test(BitcoinTestFramework):
tip = self.nodes[0].getbestblockhash()
block_time = self.nodes[0].getblockheader(tip)['mediantime'] + 1
- block = create_block(int(tip, 16), create_coinbase(DERSIG_HEIGHT - 1), block_time, txlist=[spendtx])
+ block = create_block(int(tip, 16), height=DERSIG_HEIGHT - 1, ntime=block_time, txlist=[spendtx])
block.solve()
assert_equal(self.nodes[0].getblockcount(), DERSIG_HEIGHT - 2)
@@ -97,7 +97,7 @@ class BIP66Test(BitcoinTestFramework):
self.log.info("Test that blocks must now be at least version 3")
tip = block.hash_int
block_time += 1
- block = create_block(tip, create_coinbase(DERSIG_HEIGHT), block_time, version=2)
+ block = create_block(tip, height=DERSIG_HEIGHT, ntime=block_time, version=2)
block.solve()
with self.nodes[0].assert_debug_log(expected_msgs=[f'{block.hash_hex}, bad-version(0x00000002)']):
diff --git a/test/functional/feature_notifications.py b/test/functional/feature_notifications.py
index 09e3c7fc..517af330 100755
--- a/test/functional/feature_notifications.py
+++ b/test/functional/feature_notifications.py
@@ -174,7 +174,7 @@ class NotificationsTest(BitcoinTestFramework):
invalid_blocks = []
for _ in range(7): # invalid chain must be longer than 6 blocks to trigger warning
- block = create_block(int(tip, 16), create_coinbase(height), block_time)
+ block = create_block(int(tip, 16), height=height, ntime=block_time)
# make block invalid by exceeding block subsidy
block.vtx[0].vout[0].nValue += 1
block.hashMerkleRoot = block.calc_merkle_root()
diff --git a/test/functional/feature_versionbits_warning.py b/test/functional/feature_versionbits_warning.py
index 79f512ad..545b9ec9 100755
--- a/test/functional/feature_versionbits_warning.py
+++ b/test/functional/feature_versionbits_warning.py
@@ -45,7 +45,7 @@ class VersionBitsWarningTest(BitcoinTestFramework):
tip = int(tip, 16)
for _ in range(numblocks):
- block = create_block(tip, create_coinbase(height + 1), block_time, version=version)
+ block = create_block(tip, height=height + 1, ntime=block_time, version=version)
block.solve()
peer.send_without_ping(msg_block(block))
block_time += 1
diff --git a/test/functional/p2p_eviction.py b/test/functional/p2p_eviction.py
index c26e46e7..ad0c92e1 100755
--- a/test/functional/p2p_eviction.py
+++ b/test/functional/p2p_eviction.py
@@ -65,7 +65,7 @@ class P2PEvict(BitcoinTestFramework):
best_block = node.getbestblockhash()
tip = int(best_block, 16)
best_block_time = node.getblock(best_block)['time']
- block = create_block(tip, create_coinbase(node.getblockcount() + 1), best_block_time + 1)
+ block = create_block(tip, height=node.getblockcount() + 1, ntime=best_block_time + 1)
block.solve()
block_peer.send_blocks_and_test([block], node, success=True)
protected_peers.add(current_peer)
diff --git a/test/functional/p2p_ibd_stalling.py b/test/functional/p2p_ibd_stalling.py
index 5d80ba90..d58bc3f1 100755
--- a/test/functional/p2p_ibd_stalling.py
+++ b/test/functional/p2p_ibd_stalling.py
@@ -60,7 +60,7 @@ class P2PIBDStallingTest(BitcoinTestFramework):
self.log.info("Prepare blocks without sending them to the node")
block_dict = {}
for _ in range(NUM_BLOCKS):
- blocks.append(create_block(tip, create_coinbase(height), block_time))
+ blocks.append(create_block(tip, height=height, ntime=block_time))
blocks[-1].solve()
tip = blocks[-1].hash_int
block_time += 1
diff --git a/test/functional/p2p_ibd_txrelay.py b/test/functional/p2p_ibd_txrelay.py
index fe70d046..0359013e 100755
--- a/test/functional/p2p_ibd_txrelay.py
+++ b/test/functional/p2p_ibd_txrelay.py
@@ -50,7 +50,7 @@ class P2PIBDTxRelayTest(BitcoinTestFramework):
self.nodes[0].setmocktime(int(time.time()))
self.log.info("Mine one old block so we stay in IBD, then remember its coinbase wtxid")
- block = create_block(int(self.nodes[0].getbestblockhash(), 16), create_coinbase(1), int(time.time()) - 2 * 24 * 60 * 60)
+ block = create_block(int(self.nodes[0].getbestblockhash(), 16), height=1, ntime=int(time.time()) - 2 * 24 * 60 * 60)
block.solve()
self.nodes[0].submitblock(block.serialize().hex())
assert self.nodes[0].getblockchaininfo()['initialblockdownload']
diff --git a/test/functional/p2p_invalid_block.py b/test/functional/p2p_invalid_block.py
index 5e2cbb63..86568f70 100755
--- a/test/functional/p2p_invalid_block.py
+++ b/test/functional/p2p_invalid_block.py
@@ -50,7 +50,7 @@ class InvalidBlockRequestTest(BitcoinTestFramework):
self.log.info("Create a new block with an anyone-can-spend coinbase")
- block = create_block(tip, create_coinbase(height), block_time)
+ block = create_block(tip, height=height, ntime=block_time)
block.solve()
# Save the coinbase for later
block1 = block
@@ -74,7 +74,7 @@ class InvalidBlockRequestTest(BitcoinTestFramework):
tx1 = create_tx_with_script(block1.vtx[0], 0, script_sig=bytes([OP_TRUE]), amount=50 * COIN)
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 = create_block(tip, height=height, ntime=block_time, txlist=[tx1, tx2])
block_time += 1
block2.solve()
orig_hash = block2.hash_int
@@ -121,7 +121,7 @@ class InvalidBlockRequestTest(BitcoinTestFramework):
# Create a block that spends the output of a tx in a previous block.
tx3 = create_tx_with_script(tx2, 0, script_sig=bytes([OP_TRUE]), amount=50 * COIN)
tx3.vin.append(tx3.vin[0]) # Duplicates input
- block4 = create_block(tip, create_coinbase(height), block_time, txlist=[tx3])
+ block4 = create_block(tip, height=height, ntime=block_time, txlist=[tx3])
block4.solve()
self.log.info("Test inflation by duplicating input")
peer.send_blocks_and_test([block4], node, success=False, reject_reason='bad-txns-inputs-duplicate')
@@ -130,7 +130,7 @@ class InvalidBlockRequestTest(BitcoinTestFramework):
t = int(time.time())
node.setmocktime(t)
# Set block time +1 second past max future validity
- block = create_block(tip, create_coinbase(height), t + MAX_FUTURE_BLOCK_TIME + 1)
+ block = create_block(tip, height=height, ntime=t + MAX_FUTURE_BLOCK_TIME + 1)
block.solve()
# Need force_send because the block will get rejected without a getdata otherwise
peer.send_blocks_and_test([block], node, force_send=True, success=False, reject_reason='time-too-new')
diff --git a/test/functional/p2p_invalid_tx.py b/test/functional/p2p_invalid_tx.py
index c5d0cf98..ff4919f6 100755
--- a/test/functional/p2p_invalid_tx.py
+++ b/test/functional/p2p_invalid_tx.py
@@ -56,7 +56,7 @@ class InvalidTxRequestTest(BitcoinTestFramework):
self.log.info("Create a new block with an anyone-can-spend coinbase.")
height = 1
- block = create_block(tip, create_coinbase(height), block_time)
+ block = create_block(tip, height=height, ntime=block_time)
block.solve()
# Save the coinbase for later
block1 = block
@@ -171,7 +171,7 @@ class InvalidTxRequestTest(BitcoinTestFramework):
tip = int(node.getbestblockhash(), 16)
height = node.getblockcount() + 1
- block_A = create_block(tip, create_coinbase(height))
+ block_A = create_block(tip, height=height)
block_A.vtx.extend([tx_withhold, tx_withhold_until_block_A, tx_orphan_include_by_block_A])
block_A.hashMerkleRoot = block_A.calc_merkle_root()
block_A.solve()
@@ -198,7 +198,7 @@ class InvalidTxRequestTest(BitcoinTestFramework):
tip = int(node.getbestblockhash(), 16)
height = node.getblockcount() + 1
- block_B = create_block(tip, create_coinbase(height))
+ block_B = create_block(tip, height=height)
block_B.vtx.extend([tx_withhold_until_block_B, tx_orphan_include_by_block_B])
block_B.hashMerkleRoot = block_B.calc_merkle_root()
block_B.solve()
diff --git a/test/functional/p2p_segwit.py b/test/functional/p2p_segwit.py
index 29e9fc32..3da88749 100755
--- a/test/functional/p2p_segwit.py
+++ b/test/functional/p2p_segwit.py
@@ -230,7 +230,7 @@ class SegWitTest(BitcoinTestFramework):
tip = self.nodes[0].getbestblockhash()
height = self.nodes[0].getblockcount() + 1
block_time = self.nodes[0].getblockheader(tip)["mediantime"] + 1
- block = create_block(int(tip, 16), create_coinbase(height), block_time)
+ block = create_block(int(tip, 16), height=height, ntime=block_time)
return block
def update_witness_block_with_transactions(self, block, tx_list, nonce=0):
diff --git a/test/functional/p2p_sendheaders.py b/test/functional/p2p_sendheaders.py
index 337e9804..161994af 100755
--- a/test/functional/p2p_sendheaders.py
+++ b/test/functional/p2p_sendheaders.py
@@ -243,7 +243,7 @@ class SendHeadersTest(BitcoinTestFramework):
test_node.check_last_headers_announcement(headers=[tip_hash])
self.log.info("Verify getheaders with null locator and invalid hashstop does not return headers.")
- block = create_block(int(tip["hash"], 16), create_coinbase(tip["height"] + 1), tip["mediantime"] + 1)
+ block = create_block(int(tip["hash"], 16), height=tip["height"] + 1, ntime=tip["mediantime"] + 1)
block.solve()
test_node.send_header_for_blocks([block])
test_node.clear_block_announcements()
@@ -283,7 +283,7 @@ class SendHeadersTest(BitcoinTestFramework):
height = self.nodes[0].getblockcount()
last_time = self.nodes[0].getblock(self.nodes[0].getbestblockhash())['time']
block_time = last_time + 1
- new_block = create_block(tip, create_coinbase(height + 1), block_time)
+ new_block = create_block(tip, height=height + 1, ntime=block_time)
new_block.solve()
test_node.send_header_for_blocks([new_block])
test_node.wait_for_getdata([new_block.hash_int])
@@ -320,7 +320,7 @@ class SendHeadersTest(BitcoinTestFramework):
self.log.debug("Part 2.{}.{}: starting...".format(i, j))
blocks = []
for _ in range(i + 1):
- blocks.append(create_block(tip, create_coinbase(height), block_time))
+ blocks.append(create_block(tip, height=height, ntime=block_time))
blocks[-1].solve()
tip = blocks[-1].hash_int
block_time += 1
@@ -438,7 +438,7 @@ class SendHeadersTest(BitcoinTestFramework):
# Create 2 blocks. Send the blocks, then send the headers.
blocks = []
for _ in range(2):
- blocks.append(create_block(tip, create_coinbase(height), block_time))
+ blocks.append(create_block(tip, height=height, ntime=block_time))
blocks[-1].solve()
tip = blocks[-1].hash_int
block_time += 1
@@ -456,7 +456,7 @@ class SendHeadersTest(BitcoinTestFramework):
# This time, direct fetch should work
blocks = []
for _ in range(3):
- blocks.append(create_block(tip, create_coinbase(height), block_time))
+ blocks.append(create_block(tip, height=height, ntime=block_time))
blocks[-1].solve()
tip = blocks[-1].hash_int
block_time += 1
@@ -477,7 +477,7 @@ class SendHeadersTest(BitcoinTestFramework):
# Create extra blocks for later
for _ in range(20):
- blocks.append(create_block(tip, create_coinbase(height), block_time))
+ blocks.append(create_block(tip, height=height, ntime=block_time))
blocks[-1].solve()
tip = blocks[-1].hash_int
block_time += 1
@@ -526,7 +526,7 @@ class SendHeadersTest(BitcoinTestFramework):
blocks = []
# Create two more blocks.
for _ in range(2):
- blocks.append(create_block(tip, create_coinbase(height), block_time))
+ blocks.append(create_block(tip, height=height, ntime=block_time))
blocks[-1].solve()
tip = blocks[-1].hash_int
block_time += 1
@@ -545,7 +545,7 @@ class SendHeadersTest(BitcoinTestFramework):
# Now we test that if we repeatedly don't send connecting headers, we
# don't go into an infinite loop trying to get them to connect.
for _ in range(NUM_HEADERS + 1):
- blocks.append(create_block(tip, create_coinbase(height), block_time))
+ blocks.append(create_block(tip, height=height, ntime=block_time))
blocks[-1].solve()
tip = blocks[-1].hash_int
block_time += 1
diff --git a/test/functional/p2p_unrequested_blocks.py b/test/functional/p2p_unrequested_blocks.py
index 6ce1cd1e..70f39f7b 100755
--- a/test/functional/p2p_unrequested_blocks.py
+++ b/test/functional/p2p_unrequested_blocks.py
@@ -92,7 +92,7 @@ class AcceptBlockTest(BitcoinTestFramework):
blocks_h2 = [] # the height 2 blocks on each node's chain
block_time = int(time.time()) + 1
for i in range(2):
- blocks_h2.append(create_block(tips[i], create_coinbase(2), block_time))
+ blocks_h2.append(create_block(tips[i], height=2, ntime=block_time))
blocks_h2[i].solve()
block_time += 1
test_node.send_and_ping(msg_block(blocks_h2[0]))
@@ -108,7 +108,7 @@ class AcceptBlockTest(BitcoinTestFramework):
self.log.info("First height 2 block accepted by node0; correctly rejected by node1")
# 3. Send another block that builds on genesis.
- block_h1f = create_block(int("0x" + self.nodes[0].getblockhash(0), 0), create_coinbase(1), block_time)
+ block_h1f = create_block(int("0x" + self.nodes[0].getblockhash(0), 0), height=1, ntime=block_time)
block_time += 1
block_h1f.solve()
test_node.send_and_ping(msg_block(block_h1f))
@@ -122,7 +122,7 @@ class AcceptBlockTest(BitcoinTestFramework):
assert_raises_rpc_error(-1, "Block not available (not fully downloaded)", self.nodes[0].getblock, block_h1f.hash_hex)
# 4. Send another two block that build on the fork.
- block_h2f = create_block(block_h1f.hash_int, create_coinbase(2), block_time)
+ block_h2f = create_block(block_h1f.hash_int, height=2, ntime=block_time)
block_time += 1
block_h2f.solve()
test_node.send_and_ping(msg_block(block_h2f))
@@ -141,7 +141,7 @@ class AcceptBlockTest(BitcoinTestFramework):
self.log.info("Second height 2 block accepted, but not reorg'ed to")
# 4b. Now send another block that builds on the forking chain.
- block_h3 = create_block(block_h2f.hash_int, create_coinbase(3), block_h2f.nTime+1)
+ block_h3 = create_block(block_h2f.hash_int, height=3, ntime=block_h2f.nTime+1)
block_h3.solve()
test_node.send_and_ping(msg_block(block_h3))
@@ -164,7 +164,7 @@ class AcceptBlockTest(BitcoinTestFramework):
tip = block_h3
all_blocks = []
for i in range(288):
- next_block = create_block(tip.hash_int, create_coinbase(i + 4), tip.nTime+1)
+ next_block = create_block(tip.hash_int, height=i + 4, ntime=tip.nTime+1)
next_block.solve()
all_blocks.append(next_block)
tip = next_block
@@ -235,15 +235,15 @@ class AcceptBlockTest(BitcoinTestFramework):
# 8. Create a chain which is invalid at a height longer than the
# current chain, but which has more blocks on top of that
- block_289f = create_block(all_blocks[284].hash_int, create_coinbase(289), all_blocks[284].nTime+1)
+ block_289f = create_block(all_blocks[284].hash_int, height=289, ntime=all_blocks[284].nTime+1)
block_289f.solve()
- block_290f = create_block(block_289f.hash_int, create_coinbase(290), block_289f.nTime+1)
+ block_290f = create_block(block_289f.hash_int, height=290, ntime=block_289f.nTime+1)
block_290f.solve()
# block_291 spends a coinbase below maturity!
tx_to_add = create_tx_with_script(block_290f.vtx[0], 0, script_sig=b"42", amount=1)
- block_291 = create_block(block_290f.hash_int, create_coinbase(291), block_290f.nTime+1, txlist=[tx_to_add])
+ block_291 = create_block(block_290f.hash_int, height=291, ntime=block_290f.nTime+1, txlist=[tx_to_add])
block_291.solve()
- block_292 = create_block(block_291.hash_int, create_coinbase(292), block_291.nTime+1)
+ block_292 = create_block(block_291.hash_int, height=292, ntime=block_291.nTime+1)
block_292.solve()
# Now send all the headers on the chain and enough blocks to trigger reorg
@@ -283,7 +283,7 @@ class AcceptBlockTest(BitcoinTestFramework):
assert_equal(self.nodes[0].getblock(block_291.hash_hex)["confirmations"], -1)
# Now send a new header on the invalid chain, indicating we're forked off, and expect to get disconnected
- block_293 = create_block(block_292.hash_int, create_coinbase(293), block_292.nTime+1)
+ block_293 = create_block(block_292.hash_int, height=293, ntime=block_292.nTime+1)
block_293.solve()
headers_message = msg_headers()
headers_message.headers.append(CBlockHeader(block_293))
diff --git a/test/functional/p2p_v2_encrypted.py b/test/functional/p2p_v2_encrypted.py
index 68936903..2d5df19f 100755
--- a/test/functional/p2p_v2_encrypted.py
+++ b/test/functional/p2p_v2_encrypted.py
@@ -38,7 +38,7 @@ class P2PEncrypted(BitcoinTestFramework):
last_block_time = node.getblock(last_block)['time']
for _ in range(number):
# Create some blocks
- block = create_block(tip, create_coinbase(tipheight + 1), last_block_time + 1)
+ block = create_block(tip, height=tipheight + 1, ntime=last_block_time + 1)
block.solve()
test_blocks.append(block)
tip = block.hash_int
@@ -47,7 +47,7 @@ class P2PEncrypted(BitcoinTestFramework):
return test_blocks
def create_test_block(self, txs):
- block = create_block(self.tip, create_coinbase(self.tipheight + 1), self.last_block_time + 600, txlist=txs)
+ block = create_block(self.tip, height=self.tipheight + 1, ntime=self.last_block_time + 600, txlist=txs)
block.solve()
return block
diff --git a/test/functional/rpc_blockchain.py b/test/functional/rpc_blockchain.py
index 9ea8e732..9ae00745 100755
--- a/test/functional/rpc_blockchain.py
+++ b/test/functional/rpc_blockchain.py
@@ -607,7 +607,7 @@ class BlockchainTest(BitcoinTestFramework):
fork_block = node.getblock(fork_hash)
def solve_and_send_block(prevhash, height, time):
- b = create_block(prevhash, create_coinbase(height), time)
+ b = create_block(prevhash, height=height, ntime=time)
b.solve()
peer.send_and_ping(msg_block(b))
return b
diff --git a/test/functional/rpc_getchaintips.py b/test/functional/rpc_getchaintips.py
index 1a284118..cdaacda3 100755
--- a/test/functional/rpc_getchaintips.py
+++ b/test/functional/rpc_getchaintips.py
@@ -73,7 +73,7 @@ class GetChainTipsTest (BitcoinTestFramework):
invalid_block.solve()
block_time += 1
- block2 = create_block(invalid_block.hash_int, create_coinbase(2), block_time, version=4)
+ block2 = create_block(invalid_block.hash_int, height=2, ntime=block_time, version=4)
block2.solve()
self.log.info("Submit headers-only chain")
diff --git a/test/functional/rpc_invalidateblock.py b/test/functional/rpc_invalidateblock.py
index dc55e7fd..5e87ce47 100755
--- a/test/functional/rpc_invalidateblock.py
+++ b/test/functional/rpc_invalidateblock.py
@@ -44,7 +44,7 @@ class InvalidateTest(BitcoinTestFramework):
# affect results since this chain will be invalidated next.
tip = self.nodes[0].getbestblockhash()
block_time = self.nodes[0].getblock(self.nodes[0].getbestblockhash())['time'] + 1
- block = create_block(int(tip, 16), create_coinbase(self.nodes[0].getblockcount()), block_time, version=4)
+ block = create_block(int(tip, 16), height=self.nodes[0].getblockcount(), ntime=block_time, version=4)
block.solve()
self.nodes[0].submitheader(block.serialize().hex())
assert_equal(self.nodes[0].getblockchaininfo()["headers"], self.nodes[0].getblockchaininfo()["blocks"] + 1)
diff --git a/test/functional/test_framework/blocktools.py b/test/functional/test_framework/blocktools.py
index eb1baadf..00e599d9 100644
--- a/test/functional/test_framework/blocktools.py
+++ b/test/functional/test_framework/blocktools.py
@@ -129,7 +129,7 @@ def create_empty_fork(node, fork_length=FORK_LENGTH):
blocks = []
for _ in range(fork_length):
- block = create_block(tip, create_coinbase(height + 1), block_time)
+ block = create_block(tip, height=height + 1, ntime=block_time)
block.solve()
blocks.append(block)
tip = block.hash_int
diff --git a/test/functional/wallet_resendwallettransactions.py b/test/functional/wallet_resendwallettransactions.py
index 7f29e929..89d22f4b 100755
--- a/test/functional/wallet_resendwallettransactions.py
+++ b/test/functional/wallet_resendwallettransactions.py
@@ -58,7 +58,7 @@ class ResendWalletTransactionsTest(BitcoinTestFramework):
# after the last time we tried to broadcast. Use mocktime and give an extra minute to be sure.
block_time = int(time.time()) + 6 * 60
node.setmocktime(block_time)
- block = create_block(int(node.getbestblockhash(), 16), create_coinbase(node.getblockcount() + 1), block_time)
+ block = create_block(int(node.getbestblockhash(), 16), height=node.getblockcount() + 1, ntime=block_time)
block.solve()
node.submitblock(block.serialize().hex())
@@ -126,7 +126,7 @@ class ResendWalletTransactionsTest(BitcoinTestFramework):
# tx must be at least 5 minutes older than the last block to be rebroadcast
block_time = entry_time + 6 * 60
node.setmocktime(block_time)
- block = create_block(int(node.getbestblockhash(), 16), create_coinbase(node.getblockcount() + 1), block_time)
+ block = create_block(int(node.getbestblockhash(), 16), height=node.getblockcount() + 1, ntime=block_time)
block.solve()
node.submitblock(block.serialize().hex())
# Set correct m_best_block_time, which is used in ResubmitWalletTransactions
@@ -173,7 +173,7 @@ class ResendWalletTransactionsTest(BitcoinTestFramework):
self.log.info("Create a block without the transaction")
node1.bumpmocktime(6 * 60)
- block = create_block(int(node1.getbestblockhash(), 16), create_coinbase(node1.getblockcount() + 1), node1.mocktime)
+ block = create_block(int(node1.getbestblockhash(), 16), height=node1.getblockcount() + 1, ntime=node1.mocktime)
block.solve()
node1.submitblock(block.serialize().hex())
node1.syncwithvalidationinterfacequeue()
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.