pass lint
This commit is contained in:
parent
3dbe54e4b8
commit
c2a64a18f0
|
@ -23,7 +23,17 @@ T = TypeVar('T') # For generic function
|
||||||
return '''
|
return '''
|
||||||
def retrieve_blobs_and_proofs(beacon_block_root: Root) -> Tuple[Sequence[Blob], Sequence[KZGProof]]:
|
def retrieve_blobs_and_proofs(beacon_block_root: Root) -> Tuple[Sequence[Blob], Sequence[KZGProof]]:
|
||||||
# pylint: disable=unused-argument
|
# 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
|
@classmethod
|
||||||
def execution_engine_cls(cls) -> str:
|
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,
|
'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,
|
'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_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 |
|
| `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_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 |
|
| `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
|
### Containers
|
||||||
|
|
||||||
|
|
|
@ -148,6 +148,7 @@ Each `sidecar` is obtained from:
|
||||||
def get_blob_sidecars(signed_block: SignedBeaconBlock,
|
def get_blob_sidecars(signed_block: SignedBeaconBlock,
|
||||||
blobs: Sequence[Blob],
|
blobs: Sequence[Blob],
|
||||||
blob_kzg_proofs: Sequence[KZGProof]) -> Sequence[BlobSidecar]:
|
blob_kzg_proofs: Sequence[KZGProof]) -> Sequence[BlobSidecar]:
|
||||||
|
block = signed_block.message
|
||||||
block_header = BeaconBlockHeader(
|
block_header = BeaconBlockHeader(
|
||||||
slot=block.slot,
|
slot=block.slot,
|
||||||
proposer_index=block.proposer_index,
|
proposer_index=block.proposer_index,
|
||||||
|
@ -160,18 +161,17 @@ def get_blob_sidecars(signed_block: SignedBeaconBlock,
|
||||||
BlobSidecar(
|
BlobSidecar(
|
||||||
index=index,
|
index=index,
|
||||||
blob=blob,
|
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],
|
kzg_proof=blob_kzg_proofs[index],
|
||||||
commitment_inclusion_proof=compute_commitment_inclusion_proof(
|
commitment_inclusion_proof=compute_commitment_inclusion_proof(
|
||||||
signed_block.message.body,
|
block.body,
|
||||||
signed_block.message.body.blob_kzg_commitments[index],
|
block.body.blob_kzg_commitments[index],
|
||||||
index,
|
index,
|
||||||
),
|
),
|
||||||
signed_block_header=signed_block_header,
|
signed_block_header=signed_block_header,
|
||||||
)
|
)
|
||||||
for index, blob in enumerate(blobs)
|
for index, blob in enumerate(blobs)
|
||||||
]
|
]
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
The `subnet_id` for the `signed_sidecar` is calculated with:
|
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 (
|
from eth2spec.test.helpers.block import (
|
||||||
build_empty_block_for_next_slot
|
build_empty_block_for_next_slot
|
||||||
)
|
)
|
||||||
from eth2spec.test.helpers.keys import (
|
from tests.core.pyspec.eth2spec.utils.ssz.ssz_impl import hash_tree_root
|
||||||
pubkey_to_privkey
|
|
||||||
)
|
|
||||||
|
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
|
@with_deneb_and_later
|
||||||
@spec_state_test
|
@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
|
blob_count = 4
|
||||||
block = build_empty_block_for_next_slot(spec, state)
|
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.transactions = [opaque_tx]
|
||||||
block.body.execution_payload.block_hash = compute_el_block_hash(spec, block.body.execution_payload)
|
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)
|
||||||
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)
|
|
||||||
|
|
||||||
signed_blob_sidecar = spec.SignedBlobSidecar(message=blob_sidecars[1], signature=sidecar_signature)
|
for blob_sidecar in blob_sidecars:
|
||||||
|
assert spec.verify_blob_sidecar_inclusion_proof(blob_sidecar)
|
||||||
assert spec.verify_blob_sidecar_signature(state, signed_blob_sidecar)
|
|
||||||
|
|
||||||
|
|
||||||
@with_deneb_and_later
|
@with_deneb_and_later
|
||||||
@spec_state_test
|
@spec_state_test
|
||||||
@always_bls
|
@always_bls
|
||||||
def test_blob_sidecar_signature_incorrect(spec, state):
|
def test_blob_sidecar_inclusion_proof_incorrect(spec, state):
|
||||||
"""
|
"""
|
||||||
Test `get_blob_sidecar_signature`
|
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.transactions = [opaque_tx]
|
||||||
block.body.execution_payload.block_hash = compute_el_block_hash(spec, block.body.execution_payload)
|
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,
|
for blob_sidecar in blob_sidecars:
|
||||||
blob_sidecars[1],
|
block = blob_sidecar.signed_block_header.message
|
||||||
123)
|
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)
|
||||||
signed_blob_sidecar = spec.SignedBlobSidecar(message=blob_sidecars[1], signature=sidecar_signature)
|
|
||||||
|
|
||||||
assert not spec.verify_blob_sidecar_signature(state, signed_blob_sidecar)
|
|
||||||
|
|
Loading…
Reference in New Issue