diff --git a/test/functional/interface_rest.py b/test/functional/interface_rest.py --- a/test/functional/interface_rest.py +++ b/test/functional/interface_rest.py @@ -21,6 +21,8 @@ hex_str_to_bytes, ) +from test_framework.messages import BLOCK_HEADER_SIZE + class ReqType(Enum): JSON = 1 @@ -234,20 +236,24 @@ # Check binary format response = self.test_rest_request( "/block/{}".format(bb_hash), req_type=ReqType.BIN, ret_type=RetType.OBJ) - assert_greater_than(int(response.getheader('content-length')), 80) + assert_greater_than(int(response.getheader( + 'content-length')), BLOCK_HEADER_SIZE) response_bytes = response.read() # Compare with block header response_header = self.test_rest_request( "/headers/1/{}".format(bb_hash), req_type=ReqType.BIN, ret_type=RetType.OBJ) - assert_equal(int(response_header.getheader('content-length')), 80) + assert_equal(int(response_header.getheader( + 'content-length')), BLOCK_HEADER_SIZE) response_header_bytes = response_header.read() - assert_equal(response_bytes[0:80], response_header_bytes) + assert_equal( + response_bytes[0:BLOCK_HEADER_SIZE], response_header_bytes) # Check block hex format response_hex = self.test_rest_request( "/block/{}".format(bb_hash), req_type=ReqType.HEX, ret_type=RetType.OBJ) - assert_greater_than(int(response_hex.getheader('content-length')), 160) + assert_greater_than(int(response_hex.getheader( + 'content-length')), BLOCK_HEADER_SIZE * 2) response_hex_bytes = response_hex.read().strip(b'\n') assert_equal(binascii.hexlify(response_bytes), response_hex_bytes) @@ -255,10 +261,11 @@ response_header_hex = self.test_rest_request( "/headers/1/{}".format(bb_hash), req_type=ReqType.HEX, ret_type=RetType.OBJ) assert_greater_than( - int(response_header_hex.getheader('content-length')), 160) - response_header_hex_bytes = response_header_hex.read(160) + int(response_header_hex.getheader('content-length')), BLOCK_HEADER_SIZE * 2) + response_header_hex_bytes = response_header_hex.read( + BLOCK_HEADER_SIZE * 2) assert_equal(binascii.hexlify( - response_bytes[:80]), response_header_hex_bytes) + response_bytes[:BLOCK_HEADER_SIZE]), response_header_hex_bytes) # Check json format block_json_obj = self.test_rest_request("/block/{}".format(bb_hash)) diff --git a/test/functional/mining_basic.py b/test/functional/mining_basic.py --- a/test/functional/mining_basic.py +++ b/test/functional/mining_basic.py @@ -18,6 +18,7 @@ from test_framework.messages import ( CBlock, CBlockHeader, + BLOCK_HEADER_SIZE, ) from test_framework.mininode import ( P2PDataStore, @@ -168,10 +169,9 @@ self.log.info("getblocktemplate: Test bad tx count") # The tx count is immediately after the block header - TX_COUNT_OFFSET = 80 bad_block_sn = bytearray(block.serialize()) - assert_equal(bad_block_sn[TX_COUNT_OFFSET], 1) - bad_block_sn[TX_COUNT_OFFSET] += 1 + assert_equal(bad_block_sn[BLOCK_HEADER_SIZE], 1) + bad_block_sn[BLOCK_HEADER_SIZE] += 1 assert_raises_rpc_error(-22, "Block decode failed", node.getblocktemplate, { 'data': bad_block_sn.hex(), 'mode': 'proposal'}) @@ -204,11 +204,11 @@ self.log.info('submitheader tests') assert_raises_rpc_error(-22, 'Block header decode failed', - lambda: node.submitheader(hexdata='xx' * 80)) + lambda: node.submitheader(hexdata='xx' * BLOCK_HEADER_SIZE)) assert_raises_rpc_error(-22, 'Block header decode failed', - lambda: node.submitheader(hexdata='ff' * 78)) + lambda: node.submitheader(hexdata='ff' * (BLOCK_HEADER_SIZE - 2))) assert_raises_rpc_error(-25, 'Must submit previous header', - lambda: node.submitheader(hexdata='ff' * 80)) + lambda: node.submitheader(hexdata=super(CBlock, bad_block).serialize().hex())) block.nTime += 1 block.solve() diff --git a/test/functional/test_framework/messages.py b/test/functional/test_framework/messages.py --- a/test/functional/test_framework/messages.py +++ b/test/functional/test_framework/messages.py @@ -28,7 +28,8 @@ import time from test_framework.siphash import siphash256 -from test_framework.util import hex_str_to_bytes +from test_framework.util import hex_str_to_bytes, assert_equal + MIN_VERSION_SUPPORTED = 60001 # past bip-31 for ping/pong @@ -507,6 +508,10 @@ self.nTime, self.nBits, self.nNonce) +BLOCK_HEADER_SIZE = len(CBlockHeader().serialize()) +assert_equal(BLOCK_HEADER_SIZE, 80) + + class CBlock(CBlockHeader): __slots__ = ("vtx",)