scripted-diff: Use named arguments in feature_block
-BEGIN VERIFY SCRIPT-
sed -i --regexp-extended -e "s/sync_blocks\((.*?), (True|False), (1.?), /sync_blocks(\1, success=\2, reject_code=\3, reject_reason=/g" ./test/functional/feature_block.py
-END VERIFY SCRIPT-
Github-Pull: #14101
Rebased-From: b4d3309673
This commit is contained in:
parent
96dc936862
commit
73e538cf6a
1 changed files with 38 additions and 38 deletions
|
@ -169,7 +169,7 @@ class FullBlockTest(BitcoinTestFramework):
|
||||||
self.log.info("Reject a block where the miner creates too much coinbase reward")
|
self.log.info("Reject a block where the miner creates too much coinbase reward")
|
||||||
self.move_tip(6)
|
self.move_tip(6)
|
||||||
b9 = self.next_block(9, spend=out[4], additional_coinbase_value=1)
|
b9 = self.next_block(9, spend=out[4], additional_coinbase_value=1)
|
||||||
self.sync_blocks([b9], False, 16, b'bad-cb-amount', reconnect=True)
|
self.sync_blocks([b9], success=False, reject_code=16, reject_reason=b'bad-cb-amount', reconnect=True)
|
||||||
|
|
||||||
# Create a fork that ends in a block with too much fee (the one that causes the reorg)
|
# Create a fork that ends in a block with too much fee (the one that causes the reorg)
|
||||||
# genesis -> b1 (0) -> b2 (1) -> b5 (2) -> b6 (3)
|
# genesis -> b1 (0) -> b2 (1) -> b5 (2) -> b6 (3)
|
||||||
|
@ -181,7 +181,7 @@ class FullBlockTest(BitcoinTestFramework):
|
||||||
self.sync_blocks([b10], False)
|
self.sync_blocks([b10], False)
|
||||||
|
|
||||||
b11 = self.next_block(11, spend=out[4], additional_coinbase_value=1)
|
b11 = self.next_block(11, spend=out[4], additional_coinbase_value=1)
|
||||||
self.sync_blocks([b11], False, 16, b'bad-cb-amount', reconnect=True)
|
self.sync_blocks([b11], success=False, reject_code=16, reject_reason=b'bad-cb-amount', reconnect=True)
|
||||||
|
|
||||||
# Try again, but with a valid fork first
|
# Try again, but with a valid fork first
|
||||||
# genesis -> b1 (0) -> b2 (1) -> b5 (2) -> b6 (3)
|
# genesis -> b1 (0) -> b2 (1) -> b5 (2) -> b6 (3)
|
||||||
|
@ -194,7 +194,7 @@ class FullBlockTest(BitcoinTestFramework):
|
||||||
b13 = self.next_block(13, spend=out[4])
|
b13 = self.next_block(13, spend=out[4])
|
||||||
self.save_spendable_output()
|
self.save_spendable_output()
|
||||||
b14 = self.next_block(14, spend=out[5], additional_coinbase_value=1)
|
b14 = self.next_block(14, spend=out[5], additional_coinbase_value=1)
|
||||||
self.sync_blocks([b12, b13, b14], False, 16, b'bad-cb-amount', reconnect=True)
|
self.sync_blocks([b12, b13, b14], success=False, reject_code=16, reject_reason=b'bad-cb-amount', reconnect=True)
|
||||||
|
|
||||||
# New tip should be b13.
|
# New tip should be b13.
|
||||||
assert_equal(node.getbestblockhash(), b13.hash)
|
assert_equal(node.getbestblockhash(), b13.hash)
|
||||||
|
@ -213,7 +213,7 @@ class FullBlockTest(BitcoinTestFramework):
|
||||||
self.log.info("Reject a block with too many checksigs")
|
self.log.info("Reject a block with too many checksigs")
|
||||||
too_many_checksigs = CScript([OP_CHECKSIG] * (MAX_BLOCK_SIGOPS))
|
too_many_checksigs = CScript([OP_CHECKSIG] * (MAX_BLOCK_SIGOPS))
|
||||||
b16 = self.next_block(16, spend=out[6], script=too_many_checksigs)
|
b16 = self.next_block(16, spend=out[6], script=too_many_checksigs)
|
||||||
self.sync_blocks([b16], False, 16, b'bad-blk-sigops', reconnect=True)
|
self.sync_blocks([b16], success=False, reject_code=16, reject_reason=b'bad-blk-sigops', reconnect=True)
|
||||||
|
|
||||||
# Attempt to spend a transaction created on a different fork
|
# Attempt to spend a transaction created on a different fork
|
||||||
# genesis -> b1 (0) -> b2 (1) -> b5 (2) -> b6 (3)
|
# genesis -> b1 (0) -> b2 (1) -> b5 (2) -> b6 (3)
|
||||||
|
@ -222,7 +222,7 @@ class FullBlockTest(BitcoinTestFramework):
|
||||||
self.log.info("Reject a block with a spend from a re-org'ed out tx")
|
self.log.info("Reject a block with a spend from a re-org'ed out tx")
|
||||||
self.move_tip(15)
|
self.move_tip(15)
|
||||||
b17 = self.next_block(17, spend=txout_b3)
|
b17 = self.next_block(17, spend=txout_b3)
|
||||||
self.sync_blocks([b17], False, 16, b'bad-txns-inputs-missingorspent', reconnect=True)
|
self.sync_blocks([b17], success=False, reject_code=16, reject_reason=b'bad-txns-inputs-missingorspent', reconnect=True)
|
||||||
|
|
||||||
# Attempt to spend a transaction created on a different fork (on a fork this time)
|
# Attempt to spend a transaction created on a different fork (on a fork this time)
|
||||||
# genesis -> b1 (0) -> b2 (1) -> b5 (2) -> b6 (3)
|
# genesis -> b1 (0) -> b2 (1) -> b5 (2) -> b6 (3)
|
||||||
|
@ -235,7 +235,7 @@ class FullBlockTest(BitcoinTestFramework):
|
||||||
self.sync_blocks([b18], False)
|
self.sync_blocks([b18], False)
|
||||||
|
|
||||||
b19 = self.next_block(19, spend=out[6])
|
b19 = self.next_block(19, spend=out[6])
|
||||||
self.sync_blocks([b19], False, 16, b'bad-txns-inputs-missingorspent', reconnect=True)
|
self.sync_blocks([b19], success=False, reject_code=16, reject_reason=b'bad-txns-inputs-missingorspent', reconnect=True)
|
||||||
|
|
||||||
# Attempt to spend a coinbase at depth too low
|
# Attempt to spend a coinbase at depth too low
|
||||||
# genesis -> b1 (0) -> b2 (1) -> b5 (2) -> b6 (3)
|
# genesis -> b1 (0) -> b2 (1) -> b5 (2) -> b6 (3)
|
||||||
|
@ -244,7 +244,7 @@ class FullBlockTest(BitcoinTestFramework):
|
||||||
self.log.info("Reject a block spending an immature coinbase.")
|
self.log.info("Reject a block spending an immature coinbase.")
|
||||||
self.move_tip(15)
|
self.move_tip(15)
|
||||||
b20 = self.next_block(20, spend=out[7])
|
b20 = self.next_block(20, spend=out[7])
|
||||||
self.sync_blocks([b20], False, 16, b'bad-txns-premature-spend-of-coinbase')
|
self.sync_blocks([b20], success=False, reject_code=16, reject_reason=b'bad-txns-premature-spend-of-coinbase')
|
||||||
|
|
||||||
# Attempt to spend a coinbase at depth too low (on a fork this time)
|
# Attempt to spend a coinbase at depth too low (on a fork this time)
|
||||||
# genesis -> b1 (0) -> b2 (1) -> b5 (2) -> b6 (3)
|
# genesis -> b1 (0) -> b2 (1) -> b5 (2) -> b6 (3)
|
||||||
|
@ -257,7 +257,7 @@ class FullBlockTest(BitcoinTestFramework):
|
||||||
self.sync_blocks([b21], False)
|
self.sync_blocks([b21], False)
|
||||||
|
|
||||||
b22 = self.next_block(22, spend=out[5])
|
b22 = self.next_block(22, spend=out[5])
|
||||||
self.sync_blocks([b22], False, 16, b'bad-txns-premature-spend-of-coinbase')
|
self.sync_blocks([b22], success=False, reject_code=16, reject_reason=b'bad-txns-premature-spend-of-coinbase')
|
||||||
|
|
||||||
# Create a block on either side of MAX_BLOCK_BASE_SIZE and make sure its accepted/rejected
|
# Create a block on either side of MAX_BLOCK_BASE_SIZE and make sure its accepted/rejected
|
||||||
# genesis -> b1 (0) -> b2 (1) -> b5 (2) -> b6 (3)
|
# genesis -> b1 (0) -> b2 (1) -> b5 (2) -> b6 (3)
|
||||||
|
@ -286,7 +286,7 @@ class FullBlockTest(BitcoinTestFramework):
|
||||||
tx.vout = [CTxOut(0, script_output)]
|
tx.vout = [CTxOut(0, script_output)]
|
||||||
b24 = self.update_block(24, [tx])
|
b24 = self.update_block(24, [tx])
|
||||||
assert_equal(len(b24.serialize()), MAX_BLOCK_BASE_SIZE + 1)
|
assert_equal(len(b24.serialize()), MAX_BLOCK_BASE_SIZE + 1)
|
||||||
self.sync_blocks([b24], False, 16, b'bad-blk-length', reconnect=True)
|
self.sync_blocks([b24], success=False, reject_code=16, reject_reason=b'bad-blk-length', reconnect=True)
|
||||||
|
|
||||||
b25 = self.next_block(25, spend=out[7])
|
b25 = self.next_block(25, spend=out[7])
|
||||||
self.sync_blocks([b25], False)
|
self.sync_blocks([b25], False)
|
||||||
|
@ -304,7 +304,7 @@ class FullBlockTest(BitcoinTestFramework):
|
||||||
# update_block causes the merkle root to get updated, even with no new
|
# update_block causes the merkle root to get updated, even with no new
|
||||||
# transactions, and updates the required state.
|
# transactions, and updates the required state.
|
||||||
b26 = self.update_block(26, [])
|
b26 = self.update_block(26, [])
|
||||||
self.sync_blocks([b26], False, 16, b'bad-cb-length', reconnect=True)
|
self.sync_blocks([b26], success=False, reject_code=16, reject_reason=b'bad-cb-length', reconnect=True)
|
||||||
|
|
||||||
# Extend the b26 chain to make sure bitcoind isn't accepting b26
|
# Extend the b26 chain to make sure bitcoind isn't accepting b26
|
||||||
b27 = self.next_block(27, spend=out[7])
|
b27 = self.next_block(27, spend=out[7])
|
||||||
|
@ -316,7 +316,7 @@ class FullBlockTest(BitcoinTestFramework):
|
||||||
b28.vtx[0].vin[0].scriptSig = b'\x00' * 101
|
b28.vtx[0].vin[0].scriptSig = b'\x00' * 101
|
||||||
b28.vtx[0].rehash()
|
b28.vtx[0].rehash()
|
||||||
b28 = self.update_block(28, [])
|
b28 = self.update_block(28, [])
|
||||||
self.sync_blocks([b28], False, 16, b'bad-cb-length', reconnect=True)
|
self.sync_blocks([b28], success=False, reject_code=16, reject_reason=b'bad-cb-length', reconnect=True)
|
||||||
|
|
||||||
# Extend the b28 chain to make sure bitcoind isn't accepting b28
|
# Extend the b28 chain to make sure bitcoind isn't accepting b28
|
||||||
b29 = self.next_block(29, spend=out[7])
|
b29 = self.next_block(29, spend=out[7])
|
||||||
|
@ -352,7 +352,7 @@ class FullBlockTest(BitcoinTestFramework):
|
||||||
too_many_multisigs = CScript([OP_CHECKMULTISIG] * (MAX_BLOCK_SIGOPS // 20))
|
too_many_multisigs = CScript([OP_CHECKMULTISIG] * (MAX_BLOCK_SIGOPS // 20))
|
||||||
b32 = self.next_block(32, spend=out[9], script=too_many_multisigs)
|
b32 = self.next_block(32, spend=out[9], script=too_many_multisigs)
|
||||||
assert_equal(get_legacy_sigopcount_block(b32), MAX_BLOCK_SIGOPS + 1)
|
assert_equal(get_legacy_sigopcount_block(b32), MAX_BLOCK_SIGOPS + 1)
|
||||||
self.sync_blocks([b32], False, 16, b'bad-blk-sigops', reconnect=True)
|
self.sync_blocks([b32], success=False, reject_code=16, reject_reason=b'bad-blk-sigops', reconnect=True)
|
||||||
|
|
||||||
# CHECKMULTISIGVERIFY
|
# CHECKMULTISIGVERIFY
|
||||||
self.log.info("Accept a block with the max number of OP_CHECKMULTISIGVERIFY sigops")
|
self.log.info("Accept a block with the max number of OP_CHECKMULTISIGVERIFY sigops")
|
||||||
|
@ -365,7 +365,7 @@ class FullBlockTest(BitcoinTestFramework):
|
||||||
self.log.info("Reject a block with too many OP_CHECKMULTISIGVERIFY sigops")
|
self.log.info("Reject a block with too many OP_CHECKMULTISIGVERIFY sigops")
|
||||||
too_many_multisigs = CScript([OP_CHECKMULTISIGVERIFY] * (MAX_BLOCK_SIGOPS // 20))
|
too_many_multisigs = CScript([OP_CHECKMULTISIGVERIFY] * (MAX_BLOCK_SIGOPS // 20))
|
||||||
b34 = self.next_block(34, spend=out[10], script=too_many_multisigs)
|
b34 = self.next_block(34, spend=out[10], script=too_many_multisigs)
|
||||||
self.sync_blocks([b34], False, 16, b'bad-blk-sigops', reconnect=True)
|
self.sync_blocks([b34], success=False, reject_code=16, reject_reason=b'bad-blk-sigops', reconnect=True)
|
||||||
|
|
||||||
# CHECKSIGVERIFY
|
# CHECKSIGVERIFY
|
||||||
self.log.info("Accept a block with the max number of OP_CHECKSIGVERIFY sigops")
|
self.log.info("Accept a block with the max number of OP_CHECKSIGVERIFY sigops")
|
||||||
|
@ -378,7 +378,7 @@ class FullBlockTest(BitcoinTestFramework):
|
||||||
self.log.info("Reject a block with too many OP_CHECKSIGVERIFY sigops")
|
self.log.info("Reject a block with too many OP_CHECKSIGVERIFY sigops")
|
||||||
too_many_checksigs = CScript([OP_CHECKSIGVERIFY] * (MAX_BLOCK_SIGOPS))
|
too_many_checksigs = CScript([OP_CHECKSIGVERIFY] * (MAX_BLOCK_SIGOPS))
|
||||||
b36 = self.next_block(36, spend=out[11], script=too_many_checksigs)
|
b36 = self.next_block(36, spend=out[11], script=too_many_checksigs)
|
||||||
self.sync_blocks([b36], False, 16, b'bad-blk-sigops', reconnect=True)
|
self.sync_blocks([b36], success=False, reject_code=16, reject_reason=b'bad-blk-sigops', reconnect=True)
|
||||||
|
|
||||||
# Check spending of a transaction in a block which failed to connect
|
# Check spending of a transaction in a block which failed to connect
|
||||||
#
|
#
|
||||||
|
@ -395,12 +395,12 @@ class FullBlockTest(BitcoinTestFramework):
|
||||||
txout_b37 = b37.vtx[1]
|
txout_b37 = b37.vtx[1]
|
||||||
tx = self.create_and_sign_transaction(out[11], 0)
|
tx = self.create_and_sign_transaction(out[11], 0)
|
||||||
b37 = self.update_block(37, [tx])
|
b37 = self.update_block(37, [tx])
|
||||||
self.sync_blocks([b37], False, 16, b'bad-txns-inputs-missingorspent', reconnect=True)
|
self.sync_blocks([b37], success=False, reject_code=16, reject_reason=b'bad-txns-inputs-missingorspent', reconnect=True)
|
||||||
|
|
||||||
# attempt to spend b37's first non-coinbase tx, at which point b37 was still considered valid
|
# attempt to spend b37's first non-coinbase tx, at which point b37 was still considered valid
|
||||||
self.move_tip(35)
|
self.move_tip(35)
|
||||||
b38 = self.next_block(38, spend=txout_b37)
|
b38 = self.next_block(38, spend=txout_b37)
|
||||||
self.sync_blocks([b38], False, 16, b'bad-txns-inputs-missingorspent', reconnect=True)
|
self.sync_blocks([b38], success=False, reject_code=16, reject_reason=b'bad-txns-inputs-missingorspent', reconnect=True)
|
||||||
|
|
||||||
# Check P2SH SigOp counting
|
# Check P2SH SigOp counting
|
||||||
#
|
#
|
||||||
|
@ -492,7 +492,7 @@ class FullBlockTest(BitcoinTestFramework):
|
||||||
tx.rehash()
|
tx.rehash()
|
||||||
new_txs.append(tx)
|
new_txs.append(tx)
|
||||||
self.update_block(40, new_txs)
|
self.update_block(40, new_txs)
|
||||||
self.sync_blocks([b40], False, 16, b'bad-blk-sigops', reconnect=True)
|
self.sync_blocks([b40], success=False, reject_code=16, reject_reason=b'bad-blk-sigops', reconnect=True)
|
||||||
|
|
||||||
# same as b40, but one less sigop
|
# same as b40, but one less sigop
|
||||||
self.log.info("Accept a block with the max number of P2SH sigops")
|
self.log.info("Accept a block with the max number of P2SH sigops")
|
||||||
|
@ -555,7 +555,7 @@ class FullBlockTest(BitcoinTestFramework):
|
||||||
self.block_heights[b45.sha256] = self.block_heights[self.tip.sha256] + 1
|
self.block_heights[b45.sha256] = self.block_heights[self.tip.sha256] + 1
|
||||||
self.tip = b45
|
self.tip = b45
|
||||||
self.blocks[45] = b45
|
self.blocks[45] = b45
|
||||||
self.sync_blocks([b45], False, 16, b'bad-cb-missing', reconnect=True)
|
self.sync_blocks([b45], success=False, reject_code=16, reject_reason=b'bad-cb-missing', reconnect=True)
|
||||||
|
|
||||||
self.log.info("Reject a block with no transactions")
|
self.log.info("Reject a block with no transactions")
|
||||||
self.move_tip(44)
|
self.move_tip(44)
|
||||||
|
@ -570,7 +570,7 @@ class FullBlockTest(BitcoinTestFramework):
|
||||||
self.tip = b46
|
self.tip = b46
|
||||||
assert 46 not in self.blocks
|
assert 46 not in self.blocks
|
||||||
self.blocks[46] = b46
|
self.blocks[46] = b46
|
||||||
self.sync_blocks([b46], False, 16, b'bad-blk-length', reconnect=True)
|
self.sync_blocks([b46], success=False, reject_code=16, reject_reason=b'bad-blk-length', reconnect=True)
|
||||||
|
|
||||||
self.log.info("Reject a block with invalid work")
|
self.log.info("Reject a block with invalid work")
|
||||||
self.move_tip(44)
|
self.move_tip(44)
|
||||||
|
@ -593,7 +593,7 @@ class FullBlockTest(BitcoinTestFramework):
|
||||||
b49 = self.next_block(49)
|
b49 = self.next_block(49)
|
||||||
b49.hashMerkleRoot += 1
|
b49.hashMerkleRoot += 1
|
||||||
b49.solve()
|
b49.solve()
|
||||||
self.sync_blocks([b49], False, 16, b'bad-txnmrklroot', reconnect=True)
|
self.sync_blocks([b49], success=False, reject_code=16, reject_reason=b'bad-txnmrklroot', reconnect=True)
|
||||||
|
|
||||||
self.log.info("Reject a block with incorrect POW limit")
|
self.log.info("Reject a block with incorrect POW limit")
|
||||||
self.move_tip(44)
|
self.move_tip(44)
|
||||||
|
@ -607,7 +607,7 @@ class FullBlockTest(BitcoinTestFramework):
|
||||||
b51 = self.next_block(51)
|
b51 = self.next_block(51)
|
||||||
cb2 = create_coinbase(51, self.coinbase_pubkey)
|
cb2 = create_coinbase(51, self.coinbase_pubkey)
|
||||||
b51 = self.update_block(51, [cb2])
|
b51 = self.update_block(51, [cb2])
|
||||||
self.sync_blocks([b51], False, 16, b'bad-cb-multiple', reconnect=True)
|
self.sync_blocks([b51], success=False, reject_code=16, reject_reason=b'bad-cb-multiple', reconnect=True)
|
||||||
|
|
||||||
self.log.info("Reject a block with duplicate transactions")
|
self.log.info("Reject a block with duplicate transactions")
|
||||||
# Note: txns have to be in the right position in the merkle tree to trigger this error
|
# Note: txns have to be in the right position in the merkle tree to trigger this error
|
||||||
|
@ -615,7 +615,7 @@ class FullBlockTest(BitcoinTestFramework):
|
||||||
b52 = self.next_block(52, spend=out[15])
|
b52 = self.next_block(52, spend=out[15])
|
||||||
tx = self.create_tx(b52.vtx[1], 0, 1)
|
tx = self.create_tx(b52.vtx[1], 0, 1)
|
||||||
b52 = self.update_block(52, [tx, tx])
|
b52 = self.update_block(52, [tx, tx])
|
||||||
self.sync_blocks([b52], False, 16, b'bad-txns-duplicate', reconnect=True)
|
self.sync_blocks([b52], success=False, reject_code=16, reject_reason=b'bad-txns-duplicate', reconnect=True)
|
||||||
|
|
||||||
# Test block timestamps
|
# Test block timestamps
|
||||||
# -> b31 (8) -> b33 (9) -> b35 (10) -> b39 (11) -> b42 (12) -> b43 (13) -> b53 (14) -> b55 (15)
|
# -> b31 (8) -> b33 (9) -> b35 (10) -> b39 (11) -> b42 (12) -> b43 (13) -> b53 (14) -> b55 (15)
|
||||||
|
@ -682,7 +682,7 @@ class FullBlockTest(BitcoinTestFramework):
|
||||||
assert_equal(len(b56.vtx), 3)
|
assert_equal(len(b56.vtx), 3)
|
||||||
b56 = self.update_block(56, [tx1])
|
b56 = self.update_block(56, [tx1])
|
||||||
assert_equal(b56.hash, b57.hash)
|
assert_equal(b56.hash, b57.hash)
|
||||||
self.sync_blocks([b56], False, 16, b'bad-txns-duplicate', reconnect=True)
|
self.sync_blocks([b56], success=False, reject_code=16, reject_reason=b'bad-txns-duplicate', reconnect=True)
|
||||||
|
|
||||||
# b57p2 - a good block with 6 tx'es, don't submit until end
|
# b57p2 - a good block with 6 tx'es, don't submit until end
|
||||||
self.move_tip(55)
|
self.move_tip(55)
|
||||||
|
@ -702,7 +702,7 @@ class FullBlockTest(BitcoinTestFramework):
|
||||||
assert_equal(b56p2.hash, b57p2.hash)
|
assert_equal(b56p2.hash, b57p2.hash)
|
||||||
assert_equal(len(b56p2.vtx), 6)
|
assert_equal(len(b56p2.vtx), 6)
|
||||||
b56p2 = self.update_block("b56p2", [tx3, tx4])
|
b56p2 = self.update_block("b56p2", [tx3, tx4])
|
||||||
self.sync_blocks([b56p2], False, 16, b'bad-txns-duplicate', reconnect=True)
|
self.sync_blocks([b56p2], success=False, reject_code=16, reject_reason=b'bad-txns-duplicate', reconnect=True)
|
||||||
|
|
||||||
self.move_tip("57p2")
|
self.move_tip("57p2")
|
||||||
self.sync_blocks([b57p2], True)
|
self.sync_blocks([b57p2], True)
|
||||||
|
@ -727,7 +727,7 @@ class FullBlockTest(BitcoinTestFramework):
|
||||||
tx.vout.append(CTxOut(0, b""))
|
tx.vout.append(CTxOut(0, b""))
|
||||||
tx.calc_sha256()
|
tx.calc_sha256()
|
||||||
b58 = self.update_block(58, [tx])
|
b58 = self.update_block(58, [tx])
|
||||||
self.sync_blocks([b58], False, 16, b'bad-txns-inputs-missingorspent', reconnect=True)
|
self.sync_blocks([b58], success=False, reject_code=16, reject_reason=b'bad-txns-inputs-missingorspent', reconnect=True)
|
||||||
|
|
||||||
# tx with output value > input value
|
# tx with output value > input value
|
||||||
self.log.info("Reject a block with a transaction with outputs > inputs")
|
self.log.info("Reject a block with a transaction with outputs > inputs")
|
||||||
|
@ -735,7 +735,7 @@ class FullBlockTest(BitcoinTestFramework):
|
||||||
b59 = self.next_block(59)
|
b59 = self.next_block(59)
|
||||||
tx = self.create_and_sign_transaction(out[17], 51 * COIN)
|
tx = self.create_and_sign_transaction(out[17], 51 * COIN)
|
||||||
b59 = self.update_block(59, [tx])
|
b59 = self.update_block(59, [tx])
|
||||||
self.sync_blocks([b59], False, 16, b'bad-txns-in-belowout', reconnect=True)
|
self.sync_blocks([b59], success=False, reject_code=16, reject_reason=b'bad-txns-in-belowout', reconnect=True)
|
||||||
|
|
||||||
# reset to good chain
|
# reset to good chain
|
||||||
self.move_tip(57)
|
self.move_tip(57)
|
||||||
|
@ -759,7 +759,7 @@ class FullBlockTest(BitcoinTestFramework):
|
||||||
b61.vtx[0].rehash()
|
b61.vtx[0].rehash()
|
||||||
b61 = self.update_block(61, [])
|
b61 = self.update_block(61, [])
|
||||||
assert_equal(b60.vtx[0].serialize(), b61.vtx[0].serialize())
|
assert_equal(b60.vtx[0].serialize(), b61.vtx[0].serialize())
|
||||||
self.sync_blocks([b61], False, 16, b'bad-txns-BIP30', reconnect=True)
|
self.sync_blocks([b61], success=False, reject_code=16, reject_reason=b'bad-txns-BIP30', reconnect=True)
|
||||||
|
|
||||||
# Test tx.isFinal is properly rejected (not an exhaustive tx.isFinal test, that should be in data-driven transaction tests)
|
# Test tx.isFinal is properly rejected (not an exhaustive tx.isFinal test, that should be in data-driven transaction tests)
|
||||||
#
|
#
|
||||||
|
@ -776,7 +776,7 @@ class FullBlockTest(BitcoinTestFramework):
|
||||||
assert(tx.vin[0].nSequence < 0xffffffff)
|
assert(tx.vin[0].nSequence < 0xffffffff)
|
||||||
tx.calc_sha256()
|
tx.calc_sha256()
|
||||||
b62 = self.update_block(62, [tx])
|
b62 = self.update_block(62, [tx])
|
||||||
self.sync_blocks([b62], False, 16, b'bad-txns-nonfinal')
|
self.sync_blocks([b62], success=False, reject_code=16, reject_reason=b'bad-txns-nonfinal')
|
||||||
|
|
||||||
# Test a non-final coinbase is also rejected
|
# Test a non-final coinbase is also rejected
|
||||||
#
|
#
|
||||||
|
@ -790,7 +790,7 @@ class FullBlockTest(BitcoinTestFramework):
|
||||||
b63.vtx[0].vin[0].nSequence = 0xDEADBEEF
|
b63.vtx[0].vin[0].nSequence = 0xDEADBEEF
|
||||||
b63.vtx[0].rehash()
|
b63.vtx[0].rehash()
|
||||||
b63 = self.update_block(63, [])
|
b63 = self.update_block(63, [])
|
||||||
self.sync_blocks([b63], False, 16, b'bad-txns-nonfinal')
|
self.sync_blocks([b63], success=False, reject_code=16, reject_reason=b'bad-txns-nonfinal')
|
||||||
|
|
||||||
# This checks that a block with a bloated VARINT between the block_header and the array of tx such that
|
# This checks that a block with a bloated VARINT between the block_header and the array of tx such that
|
||||||
# the block is > MAX_BLOCK_BASE_SIZE with the bloated varint, but <= MAX_BLOCK_BASE_SIZE without the bloated varint,
|
# the block is > MAX_BLOCK_BASE_SIZE with the bloated varint, but <= MAX_BLOCK_BASE_SIZE without the bloated varint,
|
||||||
|
@ -824,7 +824,7 @@ class FullBlockTest(BitcoinTestFramework):
|
||||||
tx.vin.append(CTxIn(COutPoint(b64a.vtx[1].sha256, 0)))
|
tx.vin.append(CTxIn(COutPoint(b64a.vtx[1].sha256, 0)))
|
||||||
b64a = self.update_block("64a", [tx])
|
b64a = self.update_block("64a", [tx])
|
||||||
assert_equal(len(b64a.serialize()), MAX_BLOCK_BASE_SIZE + 8)
|
assert_equal(len(b64a.serialize()), MAX_BLOCK_BASE_SIZE + 8)
|
||||||
self.sync_blocks([b64a], False, 1, b'error parsing message')
|
self.sync_blocks([b64a], success=False, reject_code=1, reject_reason=b'error parsing message')
|
||||||
|
|
||||||
# bitcoind doesn't disconnect us for sending a bloated block, but if we subsequently
|
# bitcoind doesn't disconnect us for sending a bloated block, but if we subsequently
|
||||||
# resend the header message, it won't send us the getdata message again. Just
|
# resend the header message, it won't send us the getdata message again. Just
|
||||||
|
@ -866,7 +866,7 @@ class FullBlockTest(BitcoinTestFramework):
|
||||||
tx1 = self.create_and_sign_transaction(out[20], out[20].vout[0].nValue)
|
tx1 = self.create_and_sign_transaction(out[20], out[20].vout[0].nValue)
|
||||||
tx2 = self.create_and_sign_transaction(tx1, 1)
|
tx2 = self.create_and_sign_transaction(tx1, 1)
|
||||||
b66 = self.update_block(66, [tx2, tx1])
|
b66 = self.update_block(66, [tx2, tx1])
|
||||||
self.sync_blocks([b66], False, 16, b'bad-txns-inputs-missingorspent', reconnect=True)
|
self.sync_blocks([b66], success=False, reject_code=16, reject_reason=b'bad-txns-inputs-missingorspent', reconnect=True)
|
||||||
|
|
||||||
# Attempt to double-spend a transaction created in a block
|
# Attempt to double-spend a transaction created in a block
|
||||||
#
|
#
|
||||||
|
@ -881,7 +881,7 @@ class FullBlockTest(BitcoinTestFramework):
|
||||||
tx2 = self.create_and_sign_transaction(tx1, 1)
|
tx2 = self.create_and_sign_transaction(tx1, 1)
|
||||||
tx3 = self.create_and_sign_transaction(tx1, 2)
|
tx3 = self.create_and_sign_transaction(tx1, 2)
|
||||||
b67 = self.update_block(67, [tx1, tx2, tx3])
|
b67 = self.update_block(67, [tx1, tx2, tx3])
|
||||||
self.sync_blocks([b67], False, 16, b'bad-txns-inputs-missingorspent', reconnect=True)
|
self.sync_blocks([b67], success=False, reject_code=16, reject_reason=b'bad-txns-inputs-missingorspent', reconnect=True)
|
||||||
|
|
||||||
# More tests of block subsidy
|
# More tests of block subsidy
|
||||||
#
|
#
|
||||||
|
@ -900,7 +900,7 @@ class FullBlockTest(BitcoinTestFramework):
|
||||||
b68 = self.next_block(68, additional_coinbase_value=10)
|
b68 = self.next_block(68, additional_coinbase_value=10)
|
||||||
tx = self.create_and_sign_transaction(out[20], out[20].vout[0].nValue - 9)
|
tx = self.create_and_sign_transaction(out[20], out[20].vout[0].nValue - 9)
|
||||||
b68 = self.update_block(68, [tx])
|
b68 = self.update_block(68, [tx])
|
||||||
self.sync_blocks([b68], False, 16, b'bad-cb-amount', reconnect=True)
|
self.sync_blocks([b68], success=False, reject_code=16, reject_reason=b'bad-cb-amount', reconnect=True)
|
||||||
|
|
||||||
self.log.info("Accept a block claiming the correct subsidy in the coinbase transaction")
|
self.log.info("Accept a block claiming the correct subsidy in the coinbase transaction")
|
||||||
self.move_tip(65)
|
self.move_tip(65)
|
||||||
|
@ -924,7 +924,7 @@ class FullBlockTest(BitcoinTestFramework):
|
||||||
tx.vin.append(CTxIn(COutPoint(bogus_tx.sha256, 0), b"", 0xffffffff))
|
tx.vin.append(CTxIn(COutPoint(bogus_tx.sha256, 0), b"", 0xffffffff))
|
||||||
tx.vout.append(CTxOut(1, b""))
|
tx.vout.append(CTxOut(1, b""))
|
||||||
b70 = self.update_block(70, [tx])
|
b70 = self.update_block(70, [tx])
|
||||||
self.sync_blocks([b70], False, 16, b'bad-txns-inputs-missingorspent', reconnect=True)
|
self.sync_blocks([b70], success=False, reject_code=16, reject_reason=b'bad-txns-inputs-missingorspent', reconnect=True)
|
||||||
|
|
||||||
# Test accepting an invalid block which has the same hash as a valid one (via merkle tree tricks)
|
# Test accepting an invalid block which has the same hash as a valid one (via merkle tree tricks)
|
||||||
#
|
#
|
||||||
|
@ -949,7 +949,7 @@ class FullBlockTest(BitcoinTestFramework):
|
||||||
assert_equal(b72.sha256, b71.sha256)
|
assert_equal(b72.sha256, b71.sha256)
|
||||||
|
|
||||||
self.move_tip(71)
|
self.move_tip(71)
|
||||||
self.sync_blocks([b71], False, 16, b'bad-txns-duplicate', reconnect=True)
|
self.sync_blocks([b71], success=False, reject_code=16, reject_reason=b'bad-txns-duplicate', reconnect=True)
|
||||||
|
|
||||||
self.move_tip(72)
|
self.move_tip(72)
|
||||||
self.sync_blocks([b72], True)
|
self.sync_blocks([b72], True)
|
||||||
|
@ -987,7 +987,7 @@ class FullBlockTest(BitcoinTestFramework):
|
||||||
tx = self.create_and_sign_transaction(out[22], 1, CScript(a))
|
tx = self.create_and_sign_transaction(out[22], 1, CScript(a))
|
||||||
b73 = self.update_block(73, [tx])
|
b73 = self.update_block(73, [tx])
|
||||||
assert_equal(get_legacy_sigopcount_block(b73), MAX_BLOCK_SIGOPS + 1)
|
assert_equal(get_legacy_sigopcount_block(b73), MAX_BLOCK_SIGOPS + 1)
|
||||||
self.sync_blocks([b73], False, 16, b'bad-blk-sigops', reconnect=True)
|
self.sync_blocks([b73], success=False, reject_code=16, reject_reason=b'bad-blk-sigops', reconnect=True)
|
||||||
|
|
||||||
# b74/75 - if we push an invalid script element, all prevous sigops are counted,
|
# b74/75 - if we push an invalid script element, all prevous sigops are counted,
|
||||||
# but sigops after the element are not counted.
|
# but sigops after the element are not counted.
|
||||||
|
@ -1011,7 +1011,7 @@ class FullBlockTest(BitcoinTestFramework):
|
||||||
a[MAX_BLOCK_SIGOPS + 4] = 0xff
|
a[MAX_BLOCK_SIGOPS + 4] = 0xff
|
||||||
tx = self.create_and_sign_transaction(out[22], 1, CScript(a))
|
tx = self.create_and_sign_transaction(out[22], 1, CScript(a))
|
||||||
b74 = self.update_block(74, [tx])
|
b74 = self.update_block(74, [tx])
|
||||||
self.sync_blocks([b74], False, 16, b'bad-blk-sigops', reconnect=True)
|
self.sync_blocks([b74], success=False, reject_code=16, reject_reason=b'bad-blk-sigops', reconnect=True)
|
||||||
|
|
||||||
self.move_tip(72)
|
self.move_tip(72)
|
||||||
b75 = self.next_block(75)
|
b75 = self.next_block(75)
|
||||||
|
@ -1160,7 +1160,7 @@ class FullBlockTest(BitcoinTestFramework):
|
||||||
b89a = self.next_block("89a", spend=out[32])
|
b89a = self.next_block("89a", spend=out[32])
|
||||||
tx = self.create_tx(tx1, 0, 0, CScript([OP_TRUE]))
|
tx = self.create_tx(tx1, 0, 0, CScript([OP_TRUE]))
|
||||||
b89a = self.update_block("89a", [tx])
|
b89a = self.update_block("89a", [tx])
|
||||||
self.sync_blocks([b89a], False, 16, b'bad-txns-inputs-missingorspent', reconnect=True)
|
self.sync_blocks([b89a], success=False, reject_code=16, reject_reason=b'bad-txns-inputs-missingorspent', reconnect=True)
|
||||||
|
|
||||||
self.log.info("Test a re-org of one week's worth of blocks (1088 blocks)")
|
self.log.info("Test a re-org of one week's worth of blocks (1088 blocks)")
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue