rm: message router logic for data column, need to move it

This commit is contained in:
Agnish Ghosh 2024-06-26 02:04:06 +05:30
parent 325bdfd4a2
commit aa390e9ada
No known key found for this signature in database
GPG Key ID: 7BDDA05D1B25E9F8
2 changed files with 36 additions and 26 deletions

View File

@ -17,6 +17,7 @@ import
kzg4844/kzg_ex, kzg4844/kzg_ex,
eth/p2p/discoveryv5/[node], eth/p2p/discoveryv5/[node],
./helpers, ./helpers,
./datatypes/[eip7594, deneb] ./datatypes/[eip7594, deneb]
proc sortedColumnIndices*(columnsPerSubnet: ColumnIndex, subnetIds: HashSet[uint64]): seq[ColumnIndex] = proc sortedColumnIndices*(columnsPerSubnet: ColumnIndex, subnetIds: HashSet[uint64]): seq[ColumnIndex] =
@ -28,9 +29,8 @@ proc sortedColumnIndices*(columnsPerSubnet: ColumnIndex, subnetIds: HashSet[uint
res.sort() res.sort()
res res
# https://github.com/ethereum/consensus-specs/blob/5f48840f4d768bf0e0a8156a3ed06ec333589007/specs/_features/eip7594/das-core.md#get_custody_columns proc get_custody_column_subnet*(node_id: NodeId, custody_subnet_count: uint64): Result[HashSet[uint64], cstring] =
proc get_custody_columns*(node_id: NodeId, custody_subnet_count: uint64): Result[seq[ColumnIndex], cstring] = # fetches the subnets for custody column for the current node
# assert custody_subnet_count <= DATA_COLUMN_SIDECAR_SUBNET_COUNT # assert custody_subnet_count <= DATA_COLUMN_SIDECAR_SUBNET_COUNT
if not (custody_subnet_count <= DATA_COLUMN_SIDECAR_SUBNET_COUNT): if not (custody_subnet_count <= DATA_COLUMN_SIDECAR_SUBNET_COUNT):
return err("Eip7594: Custody subnet count exceeds the DATA_COLUMN_SIDECAR_SUBNET_COUNT") return err("Eip7594: Custody subnet count exceeds the DATA_COLUMN_SIDECAR_SUBNET_COUNT")
@ -59,6 +59,13 @@ proc get_custody_columns*(node_id: NodeId, custody_subnet_count: uint64): Result
if not (subnet_ids.len == subnet_ids.len): if not (subnet_ids.len == subnet_ids.len):
return err("Eip7594: Subnet ids are not unique") return err("Eip7594: Subnet ids are not unique")
ok(subnet_ids)
# https://github.com/ethereum/consensus-specs/blob/5f48840f4d768bf0e0a8156a3ed06ec333589007/specs/_features/eip7594/das-core.md#get_custody_columns
proc get_custody_columns*(node_id: NodeId, custody_subnet_count: uint64): Result[seq[ColumnIndex], cstring] =
let subnet_ids = get_custody_column_subnet(node_id, custody_subnet_count).get
# columns_per_subnet = NUMBER_OF_COLUMNS // DATA_COLUMN_SIDECAR_SUBNET_COUNT # columns_per_subnet = NUMBER_OF_COLUMNS // DATA_COLUMN_SIDECAR_SUBNET_COUNT
let columns_per_subnet = NUMBER_OF_COLUMNS div DATA_COLUMN_SIDECAR_SUBNET_COUNT let columns_per_subnet = NUMBER_OF_COLUMNS div DATA_COLUMN_SIDECAR_SUBNET_COUNT
@ -184,7 +191,10 @@ proc get_data_column_sidecars*(signed_block: deneb.SignedBeaconBlock | electra.S
# Helper function to `verifyCellKzgProofBatch` at https://github.com/ethereum/c-kzg-4844/blob/das/bindings/nim/kzg_ex.nim#L170 # Helper function to `verifyCellKzgProofBatch` at https://github.com/ethereum/c-kzg-4844/blob/das/bindings/nim/kzg_ex.nim#L170
proc validate_data_column_sidecar*( proc validate_data_column_sidecar*(
expected_commitments: seq[KzgCommitment], rowIndex: seq[RowIndex], columnIndex: seq[ColumnIndex], column: seq[Cell], expected_commitments: seq[KzgCommitment],
rowIndex: seq[RowIndex],
columnIndex: seq[ColumnIndex],
column: seq[Cell],
proofs: seq[KzgProof]): Result[void, string] = proofs: seq[KzgProof]): Result[void, string] =
let res = verifyCellKzgProofBatch(expected_commitments, rowIndex, columnIndex, column, proofs).valueOr: let res = verifyCellKzgProofBatch(expected_commitments, rowIndex, columnIndex, column, proofs).valueOr:
return err("DataColumnSidecar: Proof verification error: " & error()) return err("DataColumnSidecar: Proof verification error: " & error())

View File

@ -161,30 +161,30 @@ proc routeSignedBeaconBlock*(
notice "Blob sent", blob = shortLog(blobs[i]) notice "Blob sent", blob = shortLog(blobs[i])
blobRefs = Opt.some(blobs.mapIt(newClone(it))) blobRefs = Opt.some(blobs.mapIt(newClone(it)))
var dataColumnRefs = Opt.none(DataColumnSidecars) # var dataColumnRefs = Opt.none(DataColumnSidecars)
when typeof(blck).kind >= ConsensusFork.Deneb: # when typeof(blck).kind >= ConsensusFork.Deneb:
if blobsOpt.isSome(): # if blobsOpt.isSome():
let blobs = blobsOpt.get() # let blobs = blobsOpt.get()
let data_columns = get_data_column_sidecars(blck, blobs.mapIt(it.blob)).get() # let data_columns = get_data_column_sidecars(blck, blobs.mapIt(it.blob)).get()
var das_workers = newSeq[Future[SendResult]](len(data_columns)) # var das_workers = newSeq[Future[SendResult]](len(data_columns))
for i in 0..<data_columns.lenu64: # for i in 0..<data_columns.lenu64:
let subnet_id = compute_subnet_for_data_column_sidecar(i) # let subnet_id = compute_subnet_for_data_column_sidecar(i)
das_workers[i] = # das_workers[i] =
router[].network.broadcastDataColumnSidecar(subnet_id, data_columns[i]) # router[].network.broadcastDataColumnSidecar(subnet_id, data_columns[i])
let allres = await allFinished(das_workers) # let allres = await allFinished(das_workers)
for i in 0..<allres.len: # for i in 0..<allres.len:
let res = allres[i] # let res = allres[i]
doAssert res.finished() # doAssert res.finished()
if res.failed(): # if res.failed():
notice "Data Columns not sent", # notice "Data Columns not sent",
data_column = shortLog(data_columns[i]), error = res.error[] # data_column = shortLog(data_columns[i]), error = res.error[]
else: # else:
notice "Data columns sent", data_column = shortLog(data_columns[i]) # notice "Data columns sent", data_column = shortLog(data_columns[i])
blobRefs = Opt.some(blobs.mapIt(newClone(it))) # blobRefs = Opt.some(blobs.mapIt(newClone(it)))
dataColumnRefs = Opt.some(data_columns.mapIt(newClone(it))) # dataColumnRefs = Opt.some(data_columns.mapIt(newClone(it)))
let added = await router[].blockProcessor[].addBlock( let added = await router[].blockProcessor[].addBlock(
MsgSource.api, ForkedSignedBeaconBlock.init(blck), blobRefs, dataColumnRefs) MsgSource.api, ForkedSignedBeaconBlock.init(blck), blobRefs, Opt.none(DataColumnSidecars))
# The boolean we return tells the caller whether the block was integrated # The boolean we return tells the caller whether the block was integrated
# into the chain # into the chain