Add DB support for BlobSidecar (#4675)
This commit is contained in:
parent
adeaa9e6c4
commit
144130e80e
|
@ -113,7 +113,7 @@ type
|
||||||
keyValues: KvStoreRef # Random stuff using DbKeyKind - suitable for small values mainly!
|
keyValues: KvStoreRef # Random stuff using DbKeyKind - suitable for small values mainly!
|
||||||
blocks: array[ConsensusFork, KvStoreRef] # BlockRoot -> TrustedSignedBeaconBlock
|
blocks: array[ConsensusFork, KvStoreRef] # BlockRoot -> TrustedSignedBeaconBlock
|
||||||
|
|
||||||
blobs: KvStoreRef # (BlockRoot -> BlobsSidecar)
|
blobs: KvStoreRef # (BlockRoot -> BlobSidecar)
|
||||||
|
|
||||||
stateRoots: KvStoreRef # (Slot, BlockRoot) -> StateRoot
|
stateRoots: KvStoreRef # (Slot, BlockRoot) -> StateRoot
|
||||||
|
|
||||||
|
@ -245,6 +245,11 @@ func subkey(root: Eth2Digest, slot: Slot): array[40, byte] =
|
||||||
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
func blobkey(root: Eth2Digest, index: BlobIndex) : array[40, byte] =
|
||||||
|
var ret: array[40, byte]
|
||||||
|
ret[0..<8] = toBytes(index)
|
||||||
|
ret[8..<40] = root.data
|
||||||
|
|
||||||
template expectDb(x: auto): untyped =
|
template expectDb(x: auto): untyped =
|
||||||
# There's no meaningful error handling implemented for a corrupt database or
|
# There's no meaningful error handling implemented for a corrupt database or
|
||||||
# full disk - this requires manual intervention, so we'll panic for now
|
# full disk - this requires manual intervention, so we'll panic for now
|
||||||
|
@ -791,6 +796,11 @@ proc putBlock*(
|
||||||
db.blocks[type(value).toFork].putSZSSZ(value.root.data, value)
|
db.blocks[type(value).toFork].putSZSSZ(value.root.data, value)
|
||||||
db.putBeaconBlockSummary(value.root, value.message.toBeaconBlockSummary())
|
db.putBeaconBlockSummary(value.root, value.message.toBeaconBlockSummary())
|
||||||
|
|
||||||
|
proc putBlobSidecar*(
|
||||||
|
db: BeaconChainDB,
|
||||||
|
value: BlobSidecar) =
|
||||||
|
db.blobs.putSZSSZ(blobkey(value.block_root, value.index), value)
|
||||||
|
|
||||||
proc putBlobsSidecar*(
|
proc putBlobsSidecar*(
|
||||||
db: BeaconChainDB,
|
db: BeaconChainDB,
|
||||||
value: BlobsSidecar) =
|
value: BlobsSidecar) =
|
||||||
|
@ -991,6 +1001,14 @@ proc getBlobsSidecar*(db: BeaconChainDB, key: Eth2Digest): Opt[BlobsSidecar] =
|
||||||
if db.blobs.getSZSSZ(key.data, result.get) != GetResult.found:
|
if db.blobs.getSZSSZ(key.data, result.get) != GetResult.found:
|
||||||
result.err()
|
result.err()
|
||||||
|
|
||||||
|
proc getBlobSidecar*(db: BeaconChainDB, root: Eth2Digest, index: BlobIndex):
|
||||||
|
Opt[BlobSidecar] =
|
||||||
|
var blobs: BlobSidecar
|
||||||
|
result.ok(blobs)
|
||||||
|
if db.blobs.getSZSSZ(blobkey(root, index), result.get) != GetResult.found:
|
||||||
|
result.err()
|
||||||
|
|
||||||
|
|
||||||
proc getPhase0BlockSSZ(
|
proc getPhase0BlockSSZ(
|
||||||
db: BeaconChainDBV0, key: Eth2Digest, data: var seq[byte]): bool =
|
db: BeaconChainDBV0, key: Eth2Digest, data: var seq[byte]): bool =
|
||||||
let dataPtr = addr data # Short-lived
|
let dataPtr = addr data # Short-lived
|
||||||
|
@ -1067,6 +1085,14 @@ proc getBlobsSidecarSZ*(db: BeaconChainDB, key: Eth2Digest, data: var seq[byte])
|
||||||
assign(dataPtr[], data)
|
assign(dataPtr[], data)
|
||||||
db.blobs.get(key.data, decode).expectDb()
|
db.blobs.get(key.data, decode).expectDb()
|
||||||
|
|
||||||
|
proc getBlobSidecarSZ*(db: BeaconChainDB, root: Eth2Digest, index: BlobIndex,
|
||||||
|
data: var seq[byte]):
|
||||||
|
bool =
|
||||||
|
let dataPtr = addr data # Short-lived
|
||||||
|
func decode(data: openArray[byte]) =
|
||||||
|
assign(dataPtr[], data)
|
||||||
|
db.blobs.get(blobkey(root, index), decode).expectDb()
|
||||||
|
|
||||||
proc getBlockSZ*(
|
proc getBlockSZ*(
|
||||||
db: BeaconChainDB, key: Eth2Digest, data: var seq[byte],
|
db: BeaconChainDB, key: Eth2Digest, data: var seq[byte],
|
||||||
T: type phase0.TrustedSignedBeaconBlock): bool =
|
T: type phase0.TrustedSignedBeaconBlock): bool =
|
||||||
|
|
Loading…
Reference in New Issue