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