mirror of
https://github.com/status-im/eth2.0-specs.git
synced 2025-02-09 09:14:32 +00:00
Add Merkle proof test
This commit is contained in:
parent
51343f54fe
commit
1bac25a623
@ -0,0 +1,46 @@
|
||||
from eth2spec.test.context import (
|
||||
spec_state_test,
|
||||
with_deneb_and_later,
|
||||
with_test_suite_name,
|
||||
)
|
||||
from eth2spec.test.helpers.block import (
|
||||
build_empty_block_for_next_slot,
|
||||
sign_block
|
||||
)
|
||||
from eth2spec.test.helpers.execution_payload import (
|
||||
compute_el_block_hash,
|
||||
)
|
||||
from eth2spec.test.helpers.sharding import (
|
||||
get_sample_opaque_tx,
|
||||
)
|
||||
|
||||
|
||||
@with_test_suite_name("BeaconBlockBody")
|
||||
@with_deneb_and_later
|
||||
@spec_state_test
|
||||
def test_blob_kzg_commitment_merkle_proof(spec, state):
|
||||
opaque_tx, blobs, blob_kzg_commitments, proofs = get_sample_opaque_tx(spec, blob_count=1)
|
||||
block = build_empty_block_for_next_slot(spec, state)
|
||||
block.body.blob_kzg_commitments = blob_kzg_commitments
|
||||
block.body.execution_payload.transactions = [opaque_tx]
|
||||
block.body.execution_payload.block_hash = compute_el_block_hash(spec, block.body.execution_payload)
|
||||
signed_block = sign_block(spec, state, block, proposer_index=0)
|
||||
blob_sidecars = spec.get_blob_sidecars(signed_block, blobs, proofs)
|
||||
blob_index = 0
|
||||
blob_sidecar = blob_sidecars[blob_index]
|
||||
|
||||
yield "object", block.body
|
||||
commitment_inclusion_proof = blob_sidecar.commitment_inclusion_proof
|
||||
gindex = spec.get_generalized_index(spec.BeaconBlockBody, 'blob_kzg_commitments', blob_index)
|
||||
yield "proof", {
|
||||
"leaf": "0x" + blob_sidecar.kzg_commitment.hash_tree_root().hex(),
|
||||
"leaf_index": gindex,
|
||||
"branch": ['0x' + root.hex() for root in commitment_inclusion_proof]
|
||||
}
|
||||
assert spec.is_valid_merkle_branch(
|
||||
leaf=blob_sidecar.kzg_commitment.hash_tree_root(),
|
||||
branch=blob_sidecar.commitment_inclusion_proof,
|
||||
depth=spec.floorlog2(gindex),
|
||||
index=spec.get_subtree_index(gindex),
|
||||
root=blob_sidecar.signed_block_header.message.body_root,
|
||||
)
|
4
tests/formats/merkle_proof/README.md
Normal file
4
tests/formats/merkle_proof/README.md
Normal file
@ -0,0 +1,4 @@
|
||||
# Merkle proof tests
|
||||
|
||||
Handlers:
|
||||
- `single_merkle_proof`: see [Single leaf merkle proof test format](../light_client/single_merkle_proof.md)
|
5
tests/generators/merkle_proof/README.md
Normal file
5
tests/generators/merkle_proof/README.md
Normal file
@ -0,0 +1,5 @@
|
||||
# Merkle proof tests
|
||||
|
||||
The purpose of this test-generator is to provide test-vectors for validating the correct implementation of the Merkle proof verification.
|
||||
|
||||
Test-format documentation can be found [here](../../formats/merkle_proof/README.md).
|
0
tests/generators/merkle_proof/__init__.py
Normal file
0
tests/generators/merkle_proof/__init__.py
Normal file
14
tests/generators/merkle_proof/main.py
Normal file
14
tests/generators/merkle_proof/main.py
Normal file
@ -0,0 +1,14 @@
|
||||
from eth2spec.test.helpers.constants import DENEB
|
||||
from eth2spec.gen_helpers.gen_from_tests.gen import run_state_test_generators
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
deneb_mods = {key: 'eth2spec.test.deneb.merkle_proof.test_' + key for key in [
|
||||
'single_merkle_proof',
|
||||
]}
|
||||
|
||||
all_mods = {
|
||||
DENEB: deneb_mods,
|
||||
}
|
||||
|
||||
run_state_test_generators(runner_name="merkle_proof", all_mods=all_mods)
|
2
tests/generators/merkle_proof/requirements.txt
Normal file
2
tests/generators/merkle_proof/requirements.txt
Normal file
@ -0,0 +1,2 @@
|
||||
pytest>=4.4
|
||||
../../../[generator]
|
Loading…
x
Reference in New Issue
Block a user