UNPKG

@lodestar/beacon-node

Version:

A Typescript implementation of the beacon chain

61 lines 2.21 kB
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