@lodestar/beacon-node
Version:
A Typescript implementation of the beacon chain
35 lines • 1.54 kB
JavaScript
import { Repository } from "@lodestar/db";
import { ssz } from "@lodestar/types";
import { Bucket, getBucketNameByValue } from "../buckets.js";
const SLOT_BYTE_COUNT = 8;
/**
* Best PartialLightClientUpdate in each SyncPeriod
*
* Used to prepare light client updates
*/
export class BestLightClientUpdateRepository extends Repository {
constructor(config, db) {
// Pick some type but won't be used
const bucket = Bucket.lightClient_bestLightClientUpdate;
super(config, db, bucket, ssz.altair.LightClientUpdate, getBucketNameByValue(bucket));
}
// Overrides for multi-fork
encodeValue(value) {
// Not easy to have a fixed slot position for all forks in attested header, so lets
// prefix by attestedHeader's slot bytes
const slotBytes = ssz.Slot.serialize(value.attestedHeader.beacon.slot);
const valueBytes = this.config
.getPostAltairForkTypes(value.attestedHeader.beacon.slot)
.LightClientUpdate.serialize(value);
const prefixedData = new Uint8Array(SLOT_BYTE_COUNT + valueBytes.length);
prefixedData.set(slotBytes, 0);
prefixedData.set(valueBytes, SLOT_BYTE_COUNT);
return prefixedData;
}
decodeValue(data) {
// First slot is written
const slot = ssz.Slot.deserialize(data.subarray(0, SLOT_BYTE_COUNT));
return this.config.getPostAltairForkTypes(slot).LightClientUpdate.deserialize(data.subarray(SLOT_BYTE_COUNT));
}
}
//# sourceMappingURL=lightclientBestUpdate.js.map