pass lint
This commit is contained in:
parent
3dbe54e4b8
commit
c2a64a18f0
|
@ -23,7 +23,17 @@ T = TypeVar('T') # For generic function
|
|||
return '''
|
||||
def retrieve_blobs_and_proofs(beacon_block_root: Root) -> Tuple[Sequence[Blob], Sequence[KZGProof]]:
|
||||
# pylint: disable=unused-argument
|
||||
return [], []'''
|
||||
return [], []
|
||||
|
||||
|
||||
def compute_commitment_inclusion_proof(
|
||||
body: BeaconBlockBody,
|
||||
blob_kzg_commitments: Sequence[KZGCommitment],
|
||||
index: int
|
||||
) -> List[Bytes32, KZG_COMMITMENT_INCLUSION_PROOF_DEPTH]:
|
||||
# pylint: disable=unused-argument
|
||||
return []
|
||||
'''
|
||||
|
||||
@classmethod
|
||||
def execution_engine_cls(cls) -> str:
|
||||
|
@ -68,4 +78,5 @@ EXECUTION_ENGINE = NoopExecutionEngine()"""
|
|||
'BYTES_PER_FIELD_ELEMENT': spec_object.constant_vars['BYTES_PER_FIELD_ELEMENT'].value,
|
||||
'FIELD_ELEMENTS_PER_BLOB': spec_object.preset_vars['FIELD_ELEMENTS_PER_BLOB'].value,
|
||||
'MAX_BLOBS_PER_BLOCK': spec_object.preset_vars['MAX_BLOBS_PER_BLOCK'].value,
|
||||
'MAX_BLOB_COMMITMENTS_PER_BLOCK': spec_object.preset_vars['MAX_BLOB_COMMITMENTS_PER_BLOCK'].value,
|
||||
}
|
||||
|
|
|
@ -52,7 +52,7 @@ The specification of these changes continues in the same format as the network s
|
|||
| `MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS` | `2**12` (= 4096 epochs, ~18 days) | The minimum epoch range over which a node must serve blob sidecars |
|
||||
| `BLOB_SIDECAR_SUBNET_COUNT` | `6` | The number of blob sidecar subnets used in the gossipsub protocol. |
|
||||
| `BLOB_KZG_COMMITMENTS_GINDEX` | `4 ** 2 + 11` (= 27) | `blob_kzg_commitments` field gindex on `BeaconBlockBody` container |
|
||||
| `KZG_COMMITMENT_INCLUSION_PROOF_DEPTH` | `floorlog2(BLOB_KZG_COMMITMENTS_GINDEX) + ceillog2(MAX_BLOB_COMMITMENTS_PER_BLOCK) + 1` | Merkle proof for `blob_kzg_commitments` list item |
|
||||
| `KZG_COMMITMENT_INCLUSION_PROOF_DEPTH` | `floorlog2(BLOB_KZG_COMMITMENTS_GINDEX) + 1 + ceillog2(MAX_BLOB_COMMITMENTS_PER_BLOCK) # noqa: E501` | Merkle proof for `blob_kzg_commitments` list item |
|
||||
|
||||
### Containers
|
||||
|
||||
|
|
|
@ -148,6 +148,7 @@ Each `sidecar` is obtained from:
|
|||
def get_blob_sidecars(signed_block: SignedBeaconBlock,
|
||||
blobs: Sequence[Blob],
|
||||
blob_kzg_proofs: Sequence[KZGProof]) -> Sequence[BlobSidecar]:
|
||||
block = signed_block.message
|
||||
block_header = BeaconBlockHeader(
|
||||
slot=block.slot,
|
||||
proposer_index=block.proposer_index,
|
||||
|
@ -160,18 +161,17 @@ def get_blob_sidecars(signed_block: SignedBeaconBlock,
|
|||
BlobSidecar(
|
||||
index=index,
|
||||
blob=blob,
|
||||
kzg_commitment=signed_block.message.body.blob_kzg_commitments[index],
|
||||
kzg_commitment=block.body.blob_kzg_commitments[index],
|
||||
kzg_proof=blob_kzg_proofs[index],
|
||||
commitment_inclusion_proof=compute_commitment_inclusion_proof(
|
||||
signed_block.message.body,
|
||||
signed_block.message.body.blob_kzg_commitments[index],
|
||||
block.body,
|
||||
block.body.blob_kzg_commitments[index],
|
||||
index,
|
||||
),
|
||||
signed_block_header=signed_block_header,
|
||||
)
|
||||
for index, blob in enumerate(blobs)
|
||||
]
|
||||
|
||||
```
|
||||
|
||||
The `subnet_id` for the `signed_sidecar` is calculated with:
|
||||
|
|
|
@ -12,16 +12,48 @@ from eth2spec.test.helpers.sharding import (
|
|||
from eth2spec.test.helpers.block import (
|
||||
build_empty_block_for_next_slot
|
||||
)
|
||||
from eth2spec.test.helpers.keys import (
|
||||
pubkey_to_privkey
|
||||
)
|
||||
from tests.core.pyspec.eth2spec.utils.ssz.ssz_impl import hash_tree_root
|
||||
|
||||
|
||||
def get_blob_sidecars(spec, signed_block, blobs, blob_kzg_proofs):
|
||||
block = signed_block.message
|
||||
block_header = spec.BeaconBlockHeader(
|
||||
slot=block.slot,
|
||||
proposer_index=block.proposer_index,
|
||||
parent_root=block.parent_root,
|
||||
state_root=block.state_root,
|
||||
body_root=hash_tree_root(block.body),
|
||||
)
|
||||
signed_block_header = spec.SignedBeaconBlockHeader(message=block_header, signature=signed_block.signature)
|
||||
return [
|
||||
spec.BlobSidecar(
|
||||
index=index,
|
||||
blob=blob,
|
||||
kzg_commitment=signed_block.message.body.blob_kzg_commitments[index],
|
||||
kzg_proof=blob_kzg_proofs[index],
|
||||
commitment_inclusion_proof=compute_commitment_inclusion_proof(
|
||||
spec,
|
||||
signed_block.message.body,
|
||||
signed_block.message.body.blob_kzg_commitments[index],
|
||||
index,
|
||||
),
|
||||
signed_block_header=signed_block_header,
|
||||
)
|
||||
for index, blob in enumerate(blobs)
|
||||
]
|
||||
|
||||
|
||||
def compute_commitment_inclusion_proof(spec, body, kzg_commitment, index):
|
||||
gindex = (spec.BeaconBlockBody / 'blob_kzg_commitments' / index).gindex()
|
||||
raise Exception('todo, does remerkleable expose an API to compute proofs?')
|
||||
return gindex
|
||||
|
||||
|
||||
@with_deneb_and_later
|
||||
@spec_state_test
|
||||
def test_blob_sidecar_signature(spec, state):
|
||||
def test_blob_sidecar_inclusion_proof(spec, state):
|
||||
"""
|
||||
Test `get_blob_sidecar_signature`
|
||||
Test `verify_blob_sidecar_inclusion_proof`
|
||||
"""
|
||||
blob_count = 4
|
||||
block = build_empty_block_for_next_slot(spec, state)
|
||||
|
@ -30,22 +62,16 @@ def test_blob_sidecar_signature(spec, state):
|
|||
block.body.execution_payload.transactions = [opaque_tx]
|
||||
block.body.execution_payload.block_hash = compute_el_block_hash(spec, block.body.execution_payload)
|
||||
|
||||
blob_sidecars = spec.get_blob_sidecars(block, blobs, proofs)
|
||||
proposer = state.validators[blob_sidecars[1].proposer_index]
|
||||
privkey = pubkey_to_privkey[proposer.pubkey]
|
||||
sidecar_signature = spec.get_blob_sidecar_signature(state,
|
||||
blob_sidecars[1],
|
||||
privkey)
|
||||
blob_sidecars = spec.get_blob_sidecars(spec, block, blobs, proofs)
|
||||
|
||||
signed_blob_sidecar = spec.SignedBlobSidecar(message=blob_sidecars[1], signature=sidecar_signature)
|
||||
|
||||
assert spec.verify_blob_sidecar_signature(state, signed_blob_sidecar)
|
||||
for blob_sidecar in blob_sidecars:
|
||||
assert spec.verify_blob_sidecar_inclusion_proof(blob_sidecar)
|
||||
|
||||
|
||||
@with_deneb_and_later
|
||||
@spec_state_test
|
||||
@always_bls
|
||||
def test_blob_sidecar_signature_incorrect(spec, state):
|
||||
def test_blob_sidecar_inclusion_proof_incorrect(spec, state):
|
||||
"""
|
||||
Test `get_blob_sidecar_signature`
|
||||
"""
|
||||
|
@ -56,12 +82,9 @@ def test_blob_sidecar_signature_incorrect(spec, state):
|
|||
block.body.execution_payload.transactions = [opaque_tx]
|
||||
block.body.execution_payload.block_hash = compute_el_block_hash(spec, block.body.execution_payload)
|
||||
|
||||
blob_sidecars = spec.get_blob_sidecars(block, blobs, proofs)
|
||||
blob_sidecars = spec.get_blob_sidecars(spec, block, blobs, proofs)
|
||||
|
||||
sidecar_signature = spec.get_blob_sidecar_signature(state,
|
||||
blob_sidecars[1],
|
||||
123)
|
||||
|
||||
signed_blob_sidecar = spec.SignedBlobSidecar(message=blob_sidecars[1], signature=sidecar_signature)
|
||||
|
||||
assert not spec.verify_blob_sidecar_signature(state, signed_blob_sidecar)
|
||||
for blob_sidecar in blob_sidecars:
|
||||
block = blob_sidecar.signed_block_header.message
|
||||
block = block.body_root = hash_tree_root(block.body_root) # mutate body root to break proof
|
||||
assert not spec.verify_blob_sidecar_inclusion_proof(blob_sidecar)
|
||||
|
|
Loading…
Reference in New Issue