fix `ncli_db`

This commit is contained in:
Etan Kissling 2024-07-25 19:30:25 +02:00
parent d028baea2a
commit 5fe9e93ee7
No known key found for this signature in database
GPG Key ID: B21DA824C5A3D03D
2 changed files with 36 additions and 4 deletions

View File

@ -1497,6 +1497,35 @@ func readSszForkedSignedBeaconBlock*(
withBlck(result):
readSszBytes(data, forkyBlck)
func readSszForkedBlobSidecar*(
cfg: RuntimeConfig, data: openArray[byte]
): ForkedBlobSidecar {.raises: [SerializationError].} =
## Helper to read `BlobSidecar` from bytes when it's not certain what
## `BlobFork` it is
type ForkedBlobSidecarHeader = object
index: BlobIndex
blob: Blob
kzg_commitment: KzgCommitment
kzg_proof: KzgProof
signed_block_header*: SignedBeaconBlockHeader
const numHeaderBytes = fixedPortionSize(ForkedBlobSidecarHeader)
if data.len() < numHeaderBytes:
raise (ref MalformedSszError)(msg: "Incomplete BlobSidecar header")
let
header = SSZ.decode(
data.toOpenArray(0, numHeaderBytes - 1), ForkedBlobSidecarHeader)
consensusFork = cfg.consensusForkAtEpoch(
header.signed_block_header.message.slot.epoch)
blobFork = blobForkAtConsensusFork(consensusFork).valueOr:
raise (ref MalformedSszError)(msg: "BlobSidecar slot is pre-Deneb")
# TODO https://github.com/nim-lang/Nim/issues/19357
result = ForkedBlobSidecar(kind: blobFork)
withForkyBlob(result):
forkyBlob = new blobFork.BlobSidecar()
readSszBytes(data, forkyBlob[])
# https://github.com/ethereum/consensus-specs/blob/v1.4.0/specs/phase0/beacon-chain.md#compute_fork_data_root
func compute_fork_data_root*(current_version: Version,
genesis_validators_root: Eth2Digest): Eth2Digest =

View File

@ -489,19 +489,22 @@ proc cmdPutBlob(conf: DbConf, cfg: RuntimeConfig) =
let
blob =
try:
SSZ.decode(readAllBytes(file).tryGet(), BlobSidecar)
readSszForkedBlobSidecar(
cfg, readAllBytes(file).tryGet())
except ResultError[IoErrorCode] as e:
echo "Couldn't load ", file, ": ", e.msg
continue
except SerializationError as e:
echo "Malformed ", file, ": ", e.msg
continue
res = blob.verify_blob_sidecar_inclusion_proof()
res = withForkyBlob(blob):
forkyBlob[].verify_blob_sidecar_inclusion_proof()
if res.isErr:
echo "Invalid ", file, ": ", res.error
continue
db.putBlobSidecar(blob)
withForkyBlob(blob):
db.putBlobSidecar(forkyBlob[])
proc cmdRewindState(conf: DbConf, cfg: RuntimeConfig) =
echo "Opening database..."