@@ -874,7 +874,7 @@ def run_test(self):
874874 # \-> b67 (20)
875875 #
876876 #
877- self .log .info ("Reject a block with a transaction double spending a transaction creted in the same block" )
877+ self .log .info ("Reject a block with a transaction double spending a transaction created in the same block" )
878878 self .move_tip (65 )
879879 b67 = self .next_block (67 )
880880 tx1 = self .create_and_sign_transaction (out [20 ], out [20 ].vout [0 ].nValue )
@@ -1169,7 +1169,7 @@ def run_test(self):
11691169 blocks = []
11701170 spend = out [32 ]
11711171 for i in range (89 , LARGE_REORG_SIZE + 89 ):
1172- b = self .next_block (i , spend )
1172+ b = self .next_block (i , spend , version = 4 )
11731173 tx = CTransaction ()
11741174 script_length = MAX_BLOCK_BASE_SIZE - len (b .serialize ()) - 69
11751175 script_output = CScript ([b'\x00 ' * script_length ])
@@ -1188,20 +1188,32 @@ def run_test(self):
11881188 self .move_tip (88 )
11891189 blocks2 = []
11901190 for i in range (89 , LARGE_REORG_SIZE + 89 ):
1191- blocks2 .append (self .next_block ("alt" + str (i )))
1191+ blocks2 .append (self .next_block ("alt" + str (i ), version = 4 ))
11921192 self .sync_blocks (blocks2 , False , force_send = True )
11931193
11941194 # extend alt chain to trigger re-org
1195- block = self .next_block ("alt" + str (chain1_tip + 1 ))
1195+ block = self .next_block ("alt" + str (chain1_tip + 1 ), version = 4 )
11961196 self .sync_blocks ([block ], True , timeout = 480 )
11971197
11981198 # ... and re-org back to the first chain
11991199 self .move_tip (chain1_tip )
1200- block = self .next_block (chain1_tip + 1 )
1200+ block = self .next_block (chain1_tip + 1 , version = 4 )
12011201 self .sync_blocks ([block ], False , force_send = True )
1202- block = self .next_block (chain1_tip + 2 )
1202+ block = self .next_block (chain1_tip + 2 , version = 4 )
12031203 self .sync_blocks ([block ], True , timeout = 480 )
12041204
1205+ self .log .info ("Reject a block with an invalid block header version" )
1206+ b_v1 = self .next_block ('b_v1' , version = 1 )
1207+ self .sync_blocks ([b_v1 ], success = False , force_send = True , reject_reason = 'bad-version(0x00000001)' )
1208+
1209+ self .move_tip (chain1_tip + 2 )
1210+ b_cb34 = self .next_block ('b_cb34' , version = 4 )
1211+ b_cb34 .vtx [0 ].vin [0 ].scriptSig = b_cb34 .vtx [0 ].vin [0 ].scriptSig [:- 1 ]
1212+ b_cb34 .vtx [0 ].rehash ()
1213+ b_cb34 .hashMerkleRoot = b_cb34 .calc_merkle_root ()
1214+ b_cb34 .solve ()
1215+ self .sync_blocks ([b_cb34 ], success = False , reject_reason = 'bad-cb-height' , reconnect = True )
1216+
12051217 # Helper methods
12061218 ################
12071219
@@ -1229,7 +1241,7 @@ def create_and_sign_transaction(self, spend_tx, value, script=CScript([OP_TRUE])
12291241 tx .rehash ()
12301242 return tx
12311243
1232- def next_block (self , number , spend = None , additional_coinbase_value = 0 , script = CScript ([OP_TRUE ]), solve = True ):
1244+ def next_block (self , number , spend = None , additional_coinbase_value = 0 , script = CScript ([OP_TRUE ]), solve = True , * , version = 1 ):
12331245 if self .tip is None :
12341246 base_block_hash = self .genesis_hash
12351247 block_time = int (time .time ()) + 1
@@ -1242,11 +1254,11 @@ def next_block(self, number, spend=None, additional_coinbase_value=0, script=CSc
12421254 coinbase .vout [0 ].nValue += additional_coinbase_value
12431255 coinbase .rehash ()
12441256 if spend is None :
1245- block = create_block (base_block_hash , coinbase , block_time )
1257+ block = create_block (base_block_hash , coinbase , block_time , version = version )
12461258 else :
12471259 coinbase .vout [0 ].nValue += spend .vout [0 ].nValue - 1 # all but one satoshi to fees
12481260 coinbase .rehash ()
1249- block = create_block (base_block_hash , coinbase , block_time )
1261+ block = create_block (base_block_hash , coinbase , block_time , version = version )
12501262 tx = self .create_tx (spend , 0 , 1 , script ) # spend 1 satoshi
12511263 self .sign_tx (tx , spend )
12521264 self .add_transactions_to_block (block , [tx ])
0 commit comments