add: inclusion proof and dc sidecar verification (#6577)
* add: inclusion proof and dc sidecar verification * review 1
This commit is contained in:
parent
d4e441e694
commit
31b5c3e30e
|
@ -307,3 +307,56 @@ func get_extended_sample_count*(samples_per_slot: int,
|
|||
return i
|
||||
|
||||
NUMBER_OF_COLUMNS
|
||||
|
||||
# https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.6/specs/_features/eip7594/p2p-interface.md#verify_data_column_sidecar_inclusion_proof
|
||||
proc verify_data_column_sidecar_inclusion_proof*(sidecar: DataColumnSidecar):
|
||||
Result[void, cstring] =
|
||||
## Verify if the given KZG Commitments are in included
|
||||
## in the beacon block or not
|
||||
let gindex =
|
||||
KZG_COMMITMENTS_INCLUSION_PROOF_DEPTH_GINDEX.GeneralizedIndex
|
||||
if not is_valid_merkle_branch(
|
||||
hash_tree_root(sidecar.kzg_commitments),
|
||||
sidecar.kzg_commitments_inclusion_proof,
|
||||
KZG_COMMITMENTS_INCLUSION_PROOF_DEPTH.int,
|
||||
get_subtree_index(gindex),
|
||||
sidecar.signed_block_header.message.body_root):
|
||||
|
||||
return err("DataColumnSidecar: Inclusion proof is invalid")
|
||||
|
||||
ok()
|
||||
|
||||
# https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.6/specs/_features/eip7594/p2p-interface.md#verify_data_column_sidecar_kzg_proofs
|
||||
proc verify_data_column_sidecar_kzg_proofs*(sidecar: DataColumnSidecar):
|
||||
Result[void, cstring] =
|
||||
## Verify if the KZG Proofs consisting in the `DataColumnSidecar`
|
||||
## is valid or not.
|
||||
|
||||
# Check if the data column sidecar index < NUMBER_OF_COLUMNS
|
||||
if not (sidecar.index < NUMBER_OF_COLUMNS):
|
||||
return err("Data column sidecar index exceeds the NUMBER_OF_COLUMNS")
|
||||
|
||||
# Check is the sidecar column length = sidecar.kzg_commitments length
|
||||
# and sidecar.kzg_commitments length = sidecar.kzg_proofs length
|
||||
if not (sidecar.column.len == sidecar.kzg_commitments.len):
|
||||
return err("Data column sidecar length is not equal to the kzg_commitments length")
|
||||
|
||||
if not (sidecar.kzg_commitments.len == sidecar.kzg_proofs.len):
|
||||
return err("Sidecar kzg_commitments length is not equal to the kzg_proofs length")
|
||||
|
||||
# Iterate through the cell indices
|
||||
var cellIndices =
|
||||
newSeq[CellIndex](MAX_BLOB_COMMITMENTS_PER_BLOCK)
|
||||
for _ in 0..<sidecar.column.len:
|
||||
cellIndices.add(sidecar.index * sidecar.column.lenu64)
|
||||
|
||||
let res =
|
||||
verifyCellKzgProofBatch(sidecar.kzg_commitments.asSeq,
|
||||
cellIndices,
|
||||
sidecar.column.asSeq,
|
||||
sidecar.kzg_proofs.asSeq)
|
||||
|
||||
if res.isErr():
|
||||
return err("DataColumnSidecar: validation failed")
|
||||
|
||||
ok()
|
Loading…
Reference in New Issue