| 230 | |
| 231 | |
| 232 | class GetHeadersMessage: |
| 233 | command = b'getheaders' |
| 234 | |
| 235 | def __init__(self, version=70015, num_hashes=1, start_block=None, end_block=None): |
| 236 | self.version = version |
| 237 | self.num_hashes = num_hashes |
| 238 | if start_block is None: |
| 239 | raise RuntimeError('a start block is required') |
| 240 | self.start_block = start_block |
| 241 | if end_block is None: |
| 242 | self.end_block = b'\x00' * 32 |
| 243 | else: |
| 244 | self.end_block = end_block |
| 245 | |
| 246 | def serialize(self): |
| 247 | '''Serialize this message to send over the network''' |
| 248 | # protocol version is 4 bytes little-endian |
| 249 | result = int_to_little_endian(self.version, 4) |
| 250 | # number of hashes is a varint |
| 251 | result += encode_varint(self.num_hashes) |
| 252 | # start block is in little-endian |
| 253 | result += self.start_block[::-1] |
| 254 | # end block is also in little-endian |
| 255 | result += self.end_block[::-1] |
| 256 | return result |
| 257 | |
| 258 | |
| 259 | class GetHeadersMessageTest(TestCase): |