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): withBlck(result):
readSszBytes(data, forkyBlck) 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 # 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, func compute_fork_data_root*(current_version: Version,
genesis_validators_root: Eth2Digest): Eth2Digest = genesis_validators_root: Eth2Digest): Eth2Digest =

View File

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