move merkle tests, output proof.yaml, update format

This commit is contained in:
protolambda 2021-09-27 18:07:59 +02:00
parent e7317e2283
commit bd8c978965
No known key found for this signature in database
GPG Key ID: EC89FDBB2B4C7623
5 changed files with 46 additions and 41 deletions

View File

@ -8,12 +8,14 @@ from eth2spec.test.helpers.merkle import build_proof
@with_phases([ALTAIR]) @with_phases([ALTAIR])
@spec_state_test @spec_state_test
def test_next_sync_committee_tree(spec, state): def test_next_sync_committee_merkle_proof(spec, state):
yield "state", state yield "state", state
yield "leaf", state.next_sync_committee.hash_tree_root()
yield "leaf_index", "meta", spec.NEXT_SYNC_COMMITTEE_INDEX
next_sync_committee_branch = build_proof(state.get_backing(), spec.NEXT_SYNC_COMMITTEE_INDEX) next_sync_committee_branch = build_proof(state.get_backing(), spec.NEXT_SYNC_COMMITTEE_INDEX)
yield "proof", next_sync_committee_branch yield "proof", {
"leaf": "0x" + state.next_sync_committee.hash_tree_root().hex(),
"leaf_index": spec.NEXT_SYNC_COMMITTEE_INDEX,
"branch": ['0x' + root.hex() for root in next_sync_committee_branch]
}
assert spec.is_valid_merkle_branch( assert spec.is_valid_merkle_branch(
leaf=state.next_sync_committee.hash_tree_root(), leaf=state.next_sync_committee.hash_tree_root(),
branch=next_sync_committee_branch, branch=next_sync_committee_branch,
@ -25,12 +27,15 @@ def test_next_sync_committee_tree(spec, state):
@with_phases([ALTAIR]) @with_phases([ALTAIR])
@spec_state_test @spec_state_test
def test_finality_root_tree(spec, state): def test_finality_root_merkle_proof(spec, state):
yield "state", state yield "state", state
yield "leaf", state.finalized_checkpoint.root
yield "leaf_index", "meta", spec.FINALIZED_ROOT_INDEX
finality_branch = build_proof(state.get_backing(), spec.FINALIZED_ROOT_INDEX) finality_branch = build_proof(state.get_backing(), spec.FINALIZED_ROOT_INDEX)
yield "proof", finality_branch yield "proof", {
"leaf": "0x" + state.finalized_checkpoint.root.hex(),
"leaf_index": spec.FINALIZED_ROOT_INDEX,
"branch": ['0x' + root.hex() for root in finality_branch]
}
assert spec.is_valid_merkle_branch( assert spec.is_valid_merkle_branch(
leaf=state.finalized_checkpoint.root, leaf=state.finalized_checkpoint.root,
branch=finality_branch, branch=finality_branch,

View File

@ -3,34 +3,6 @@
This series of tests provides reference test vectors for validating correct This series of tests provides reference test vectors for validating correct
generation and verification of merkle proofs based on static data. generation and verification of merkle proofs based on static data.
## Test case format Handlers:
- `single_proof`: see [Single leaf proof test format](./single_proof.md)
### `meta.yaml` - Different types of merkle proofs may be supported in the future.
```yaml
leaf_index: int -- Generalized leaf index, verifying against the proof.
proof_count: int -- Amount of proof elements.
```
### `state.ssz_snappy`
An SSZ-snappy encoded `BeaconState` object from which other data is generated.
### `leaf.ssz_snappy`
An SSZ-snappy encoded `Bytes32` reflecting the merkle root of `leaf_index` at
the given `state`.
### `proof_<index>.ssz_snappy`
A series of files, with `<index>` in range `[0, proof_count)`. Each file is an
SSZ-snappy encoded `Bytes32` and represents one element of the merkle proof for
`leaf_index` at the given `state`.
## Condition
A test-runner can implement the following assertions:
- Check that `is_valid_merkle_branch` confirms `leaf` at `leaf_index` to verify
against `has_tree_root(state)` and `proof`.
- If the implementation supports generating merkle proofs, check that the
self-generated proof matches the `proof` provided with the test.

View File

@ -0,0 +1,28 @@
# Single leaf merkle proof tests
This series of tests provides reference test vectors for validating correct
generation and verification of merkle proofs based on static data.
## Test case format
### `state.ssz_snappy`
An SSZ-snappy encoded `BeaconState` object from which other data is generated.
### `proof.yaml`
A proof of the leaf value (a merkle root) at generalized-index `leaf_index` in the given `state`.
```yaml
leaf: Bytes32 # string, hex encoded, with 0x prefix
leaf_index: int # integer, decimal
branch: list of Bytes32 # list, each element is a string, hex encoded, with 0x prefix
```
## Condition
A test-runner can implement the following assertions:
- Check that `is_valid_merkle_branch` confirms `leaf` at `leaf_index` to verify
against `has_tree_root(state)` and `proof`.
- If the implementation supports generating merkle proofs, check that the
self-generated proof matches the `proof` provided with the test.

View File

@ -3,8 +3,8 @@ from eth2spec.gen_helpers.gen_from_tests.gen import run_state_test_generators
if __name__ == "__main__": if __name__ == "__main__":
altair_mods = {key: 'eth2spec.test.altair.unittests.test_' + key for key in [ altair_mods = {key: 'eth2spec.test.altair.merkle.test_' + key for key in [
'helpers', 'single_proof',
]} ]}
all_mods = { all_mods = {