@lodestar/beacon-node
Version:
A Typescript implementation of the beacon chain
41 lines • 1.57 kB
JavaScript
import { BinaryRepository } from "@lodestar/db";
import { bytesToInt, toHex } from "@lodestar/utils";
import { Bucket, getBucketNameByValue } from "../buckets.js";
import { getRootIndex, getRootIndexKey, storeRootIndex } from "./stateArchiveIndex.js";
export class StateArchiveRepository extends BinaryRepository {
constructor(config, db) {
const bucket = Bucket.allForks_stateArchive;
super(config, db, bucket, getBucketNameByValue(bucket));
}
// Handle key as slot
async put(key, value) {
await Promise.all([super.putBinary(key, value.serialize()), storeRootIndex(this.db, key, value.hashTreeRoot())]);
}
decodeKey(data) {
return bytesToInt(super.decodeKey(data), "be");
}
// Index Root -> Slot
async getBinaryByRoot(stateRoot) {
const slot = await this.getSlotByRoot(stateRoot);
if (slot !== null && Number.isInteger(slot)) {
return this.getBinary(slot);
}
return null;
}
async dumpRootIndexEntries() {
const entries = await this.db.entries({
lte: getRootIndexKey(Buffer.alloc(32, 0xff)),
gte: getRootIndexKey(Buffer.alloc(32, 0x00)),
bucketId: this.bucketId,
});
return entries.map((entry) => ({
root: toHex(entry.key),
slot: bytesToInt(entry.value, "be"),
}));
}
async getSlotByRoot(root) {
const value = await getRootIndex(this.db, root);
return value && bytesToInt(value, "be");
}
}
//# sourceMappingURL=stateArchive.js.map