@lodestar/beacon-node
Version:
A Typescript implementation of the beacon chain
61 lines • 2.21 kB
JavaScript
import { Repository } from "@lodestar/db";
import { ssz } from "@lodestar/types";
import { bytesToInt } from "@lodestar/utils";
import { Bucket, getBucketNameByValue } from "../buckets.js";
export class DepositDataRootRepository extends Repository {
constructor(config, db) {
const bucket = Bucket.index_depositDataRoot;
super(config, db, bucket, ssz.Root, getBucketNameByValue(bucket));
}
decodeKey(data) {
return bytesToInt(super.decodeKey(data), "be");
}
// depositDataRoots stored by depositData index
getId(_value) {
throw new Error("Unable to create depositIndex from root");
}
async put(index, value) {
await super.put(index, value);
await this.depositRootTreeSet(index, value);
}
async batchPut(items) {
await super.batchPut(items);
for (const { key, value } of items) {
await this.depositRootTreeSet(key, value);
}
}
async putList(roots) {
await this.batchPut(roots.map((root, index) => ({ key: index, value: root })));
}
async batchPutValues(values) {
await this.batchPut(values.map(({ index, root }) => ({
key: index,
value: root,
})));
}
async getDepositRootTree() {
if (!this.depositRootTree) {
const values = await this.values();
this.depositRootTree = ssz.phase0.DepositDataRootList.toViewDU(values);
}
return this.depositRootTree;
}
async getDepositRootTreeAtIndex(depositIndex) {
const depositRootTree = await this.getDepositRootTree();
return depositRootTree.sliceTo(depositIndex);
}
async depositRootTreeSet(index, value) {
const depositRootTree = await this.getDepositRootTree();
// TODO: Review and fix properly
if (index > depositRootTree.length) {
throw Error(`Error setting depositRootTree index ${index} > length ${depositRootTree.length}`);
}
if (index === depositRootTree.length) {
depositRootTree.push(value);
}
else {
depositRootTree.set(index, value);
}
}
}
//# sourceMappingURL=depositDataRoot.js.map