Fix blob syncing for Electra (#6438)
* Fix blob syncing for Electra `BlobSidecar` requests on libp2p have a context prefix based on: > The `<context-bytes>` field is calculated as context = > `compute_fork_digest(fork_version, genesis_validators_root)` We currently only process blobs if that indicates Deneb, meaning that on Electra we incorrectly report `InvalidContextBytes` and refuse to process the blob response data. Fix this, and also ensure that the code no longer needs maintenance with every fork unrelated to blobs. * fix
This commit is contained in:
parent
5762ebc249
commit
ae0a1488b5
|
@ -44,50 +44,19 @@ proc readChunkPayload*(
|
|||
var contextBytes: ForkDigest
|
||||
try:
|
||||
await conn.readExactly(addr contextBytes, sizeof contextBytes)
|
||||
except CancelledError as exc:
|
||||
raise exc
|
||||
except CatchableError:
|
||||
return neterr UnexpectedEOF
|
||||
let contextFork =
|
||||
peer.network.forkDigests[].consensusForkForDigest(contextBytes).valueOr:
|
||||
return neterr InvalidContextBytes
|
||||
|
||||
static: doAssert ConsensusFork.high == ConsensusFork.Electra
|
||||
if contextBytes == peer.network.forkDigests.phase0:
|
||||
let res = await readChunkPayload(conn, peer, phase0.SignedBeaconBlock)
|
||||
withConsensusFork(contextFork):
|
||||
let res = await readChunkPayload(
|
||||
conn, peer, consensusFork.SignedBeaconBlock)
|
||||
if res.isOk:
|
||||
return ok newClone(ForkedSignedBeaconBlock.init(res.get))
|
||||
else:
|
||||
return err(res.error)
|
||||
elif contextBytes == peer.network.forkDigests.altair:
|
||||
let res = await readChunkPayload(conn, peer, altair.SignedBeaconBlock)
|
||||
if res.isOk:
|
||||
return ok newClone(ForkedSignedBeaconBlock.init(res.get))
|
||||
else:
|
||||
return err(res.error)
|
||||
elif contextBytes == peer.network.forkDigests.bellatrix:
|
||||
let res = await readChunkPayload(conn, peer, bellatrix.SignedBeaconBlock)
|
||||
if res.isOk:
|
||||
return ok newClone(ForkedSignedBeaconBlock.init(res.get))
|
||||
else:
|
||||
return err(res.error)
|
||||
elif contextBytes == peer.network.forkDigests.capella:
|
||||
let res = await readChunkPayload(conn, peer, capella.SignedBeaconBlock)
|
||||
if res.isOk:
|
||||
return ok newClone(ForkedSignedBeaconBlock.init(res.get))
|
||||
else:
|
||||
return err(res.error)
|
||||
elif contextBytes == peer.network.forkDigests.deneb:
|
||||
let res = await readChunkPayload(conn, peer, deneb.SignedBeaconBlock)
|
||||
if res.isOk:
|
||||
return ok newClone(ForkedSignedBeaconBlock.init(res.get))
|
||||
else:
|
||||
return err(res.error)
|
||||
elif contextBytes == peer.network.forkDigests.electra:
|
||||
let res = await readChunkPayload(conn, peer, electra.SignedBeaconBlock)
|
||||
if res.isOk:
|
||||
return ok newClone(ForkedSignedBeaconBlock.init(res.get))
|
||||
else:
|
||||
return err(res.error)
|
||||
else:
|
||||
return neterr InvalidContextBytes
|
||||
|
||||
proc readChunkPayload*(
|
||||
conn: Connection, peer: Peer, MsgType: type (ref BlobSidecar)):
|
||||
|
@ -95,19 +64,21 @@ proc readChunkPayload*(
|
|||
var contextBytes: ForkDigest
|
||||
try:
|
||||
await conn.readExactly(addr contextBytes, sizeof contextBytes)
|
||||
except CancelledError as exc:
|
||||
raise exc
|
||||
except CatchableError:
|
||||
return neterr UnexpectedEOF
|
||||
let contextFork =
|
||||
peer.network.forkDigests[].consensusForkForDigest(contextBytes).valueOr:
|
||||
return neterr InvalidContextBytes
|
||||
|
||||
if contextBytes == peer.network.forkDigests.deneb:
|
||||
let res = await readChunkPayload(conn, peer, BlobSidecar)
|
||||
if res.isOk:
|
||||
return ok newClone(res.get)
|
||||
withConsensusFork(contextFork):
|
||||
when consensusFork >= ConsensusFork.Deneb:
|
||||
let res = await readChunkPayload(conn, peer, BlobSidecar)
|
||||
if res.isOk:
|
||||
return ok newClone(res.get)
|
||||
else:
|
||||
return err(res.error)
|
||||
else:
|
||||
return err(res.error)
|
||||
else:
|
||||
return neterr InvalidContextBytes
|
||||
return neterr InvalidContextBytes
|
||||
|
||||
{.pop.} # TODO fix p2p macro for raises
|
||||
|
||||
|
|
Loading…
Reference in New Issue