enable filtering of peers during data column root request

This commit is contained in:
Agnish Ghosh 2024-08-21 18:23:05 +05:30
parent 5b8abc5f1b
commit e163aa08c0
1 changed files with 33 additions and 30 deletions

View File

@ -281,7 +281,7 @@ proc lookupCscFromPeer(peer: Peer):
peer_id = peer.peerId
return 0
else:
elif enrOpt.isOk:
let
enr = enrOpt.get
enrFieldOpt =
@ -293,6 +293,9 @@ proc lookupCscFromPeer(peer: Peer):
else:
return(enrFieldOpt.get)
else:
return(peer.metadata.get.custody_subnet_count)
proc constructValidCustodyPeers(rman: RequestManager,
peers: openArray[Peer]):
seq[Peer] =
@ -349,37 +352,37 @@ proc fetchDataColumnsFromNetwork(rman: RequestManager,
try:
peer = await rman.network.peerPool.acquire()
# # Create a peer list, which shall be later trimmed off as to which
# # of the peers have the valid custody columns
# peers.add(peer)
# let validPeers = rman.constructValidCustodyPeers(peers)
# if peer in validPeers:
debug "Requesting data columns by root", peer = peer, columns = shortLog(colIdList),
peer_score = peer.getScore()
let columns = await dataColumnSidecarsByRoot(peer, DataColumnIdentifierList colIdList)
# Create a peer list, which shall be later trimmed off as to which
# of the peers have the valid custody columns
peers.add(peer)
let validPeers = rman.constructValidCustodyPeers(peers)
if peer in validPeers:
debug "Requesting data columns by root", peer = peer, columns = shortLog(colIdList),
peer_score = peer.getScore()
let columns = await dataColumnSidecarsByRoot(peer, DataColumnIdentifierList colIdList)
if columns.isOk:
let ucolumns = columns.get()
if not checkResponse(colIdList, ucolumns.asSeq()):
debug "Mismatched response to data columns by root",
peer = peer, columns = shortLog(colIdList), ucolumns = len(ucolumns)
# peer.updateScore(PeerScoreBadResponse)
return
if columns.isOk:
let ucolumns = columns.get()
if not checkResponse(colIdList, ucolumns.asSeq()):
debug "Mismatched response to data columns by root",
peer = peer, columns = shortLog(colIdList), ucolumns = len(ucolumns)
# peer.updateScore(PeerScoreBadResponse)
return
for col in ucolumns:
rman.dataColumnQuarantine[].put(col)
var curRoot: Eth2Digest
for col in ucolumns:
let block_root = hash_tree_root(col.signed_block_header.message)
if block_root != curRoot:
curRoot = block_root
if (let o = rman.quarantine[].popColumnless(curRoot); o.isSome):
let col = o.unsafeGet()
discard await rman.blockVerifier(col, false)
else:
debug "Data columns by root request failed",
peer = peer, columns = shortLog(colIdList), err = columns.error()
# peer.updateScore(PeerScoreNoValues)
for col in ucolumns:
rman.dataColumnQuarantine[].put(col)
var curRoot: Eth2Digest
for col in ucolumns:
let block_root = hash_tree_root(col.signed_block_header.message)
if block_root != curRoot:
curRoot = block_root
if (let o = rman.quarantine[].popColumnless(curRoot); o.isSome):
let col = o.unsafeGet()
discard await rman.blockVerifier(col, false)
else:
debug "Data columns by root request failed",
peer = peer, columns = shortLog(colIdList), err = columns.error()
# peer.updateScore(PeerScoreNoValues)
finally:
if not(isNil(peer)):