|
10 | 10 |
|
11 | 11 | from eth.tools.rlp import (
|
12 | 12 | assert_mined_block_unchanged,
|
| 13 | + assert_headers_eq, |
13 | 14 | )
|
14 | 15 | from eth.tools._utils.normalization import (
|
15 | 16 | normalize_blockchain_fixtures,
|
|
24 | 25 | should_run_slow_tests,
|
25 | 26 | verify_state,
|
26 | 27 | )
|
| 28 | +from eth.vm.header import HeaderSedes |
27 | 29 |
|
28 | 30 |
|
29 | 31 | ROOT_PROJECT_DIR = Path(__file__).parents[3]
|
@@ -325,15 +327,22 @@ def test_blockchain_fixtures(fixture_data, fixture):
|
325 | 327 | except ValueError as e:
|
326 | 328 | raise AssertionError(f"could not load chain for {fixture_data}") from e
|
327 | 329 |
|
328 |
| - # TODO: find out if this is supposed to pass? |
329 |
| - # if 'genesisRLP' in fixture: |
330 |
| - # assert rlp.encode(genesis_header) == fixture['genesisRLP'] |
331 |
| - |
332 | 330 | genesis_fields = genesis_fields_from_fixture(fixture)
|
333 | 331 |
|
334 | 332 | genesis_block = chain.get_canonical_block_by_number(0)
|
335 | 333 | genesis_header = genesis_block.header
|
336 | 334 |
|
| 335 | + # Validate the genesis header RLP against the generated header |
| 336 | + if 'genesisRLP' in fixture: |
| 337 | + # Super hacky, but better than nothing: extract the header, then re-decode it |
| 338 | + fixture_decoded_block = rlp.decode(fixture['genesisRLP']) |
| 339 | + fixture_encoded_header = rlp.encode(fixture_decoded_block[0]) |
| 340 | + fixture_header = rlp.decode(fixture_encoded_header, sedes=HeaderSedes) |
| 341 | + # Error message with pretty output if header doesn't match |
| 342 | + assert_headers_eq(fixture_header, genesis_header) |
| 343 | + # Last gut check that transactions & receipts are valid, too |
| 344 | + assert rlp.encode(genesis_block) == fixture['genesisRLP'] |
| 345 | + |
337 | 346 | assert_imported_genesis_header_unchanged(genesis_fields, genesis_header)
|
338 | 347 |
|
339 | 348 | # 1 - mine the genesis block
|
|
0 commit comments