@lodestar/beacon-node 1.34.0-dev.9a2216dc5a → 1.34.0-dev.9ed8317064
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/api/impl/beacon/blocks/index.js +2 -2
- package/lib/api/impl/beacon/blocks/index.js.map +1 -1
- package/lib/api/impl/beacon/state/index.js +9 -4
- package/lib/api/impl/beacon/state/index.js.map +1 -1
- package/lib/api/impl/debug/index.js +2 -2
- package/lib/api/impl/debug/index.js.map +1 -1
- package/lib/api/impl/validator/index.js +2 -2
- package/lib/api/impl/validator/index.js.map +1 -1
- package/lib/api/impl/validator/utils.d.ts +3 -3
- package/lib/api/impl/validator/utils.js +2 -2
- package/lib/api/impl/validator/utils.js.map +1 -1
- package/lib/chain/archiveStore/utils/archiveBlocks.js +19 -20
- package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
- package/lib/chain/blocks/utils/zebraBanner.d.ts +2 -0
- package/lib/chain/blocks/utils/zebraBanner.js +45 -0
- package/lib/chain/blocks/utils/zebraBanner.js.map +1 -0
- package/lib/chain/blocks/verifyBlock.js +5 -0
- package/lib/chain/blocks/verifyBlock.js.map +1 -1
- package/lib/chain/blocks/writeBlockInputToDb.js +7 -34
- package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
- package/lib/chain/chain.js +26 -11
- package/lib/chain/chain.js.map +1 -1
- package/lib/chain/validation/dataColumnSidecar.js +2 -2
- package/lib/chain/validation/dataColumnSidecar.js.map +1 -1
- package/lib/db/beacon.d.ts +3 -3
- package/lib/db/beacon.js +3 -3
- package/lib/db/beacon.js.map +1 -1
- package/lib/db/interface.d.ts +3 -3
- package/lib/db/repositories/dataColumnSidecar.d.ts +26 -0
- package/lib/db/repositories/dataColumnSidecar.js +39 -0
- package/lib/db/repositories/dataColumnSidecar.js.map +1 -0
- package/lib/db/repositories/dataColumnSidecarArchive.d.ts +24 -0
- package/lib/db/repositories/dataColumnSidecarArchive.js +39 -0
- package/lib/db/repositories/dataColumnSidecarArchive.js.map +1 -0
- package/lib/db/repositories/index.d.ts +2 -2
- package/lib/db/repositories/index.js +2 -2
- package/lib/db/repositories/index.js.map +1 -1
- package/lib/network/gossip/topic.d.ts +16 -16
- package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts +1 -2
- package/lib/network/reqresp/handlers/blobSidecarsByRange.js +5 -6
- package/lib/network/reqresp/handlers/blobSidecarsByRange.js.map +1 -1
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts +1 -2
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js +23 -42
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js.map +1 -1
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js +7 -21
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js.map +1 -1
- package/lib/sync/unknownBlock.js +1 -4
- package/lib/sync/unknownBlock.js.map +1 -1
- package/package.json +14 -14
- package/lib/db/repositories/dataColumnSidecars.d.ts +0 -47
- package/lib/db/repositories/dataColumnSidecars.js +0 -40
- package/lib/db/repositories/dataColumnSidecars.js.map +0 -1
- package/lib/db/repositories/dataColumnSidecarsArchive.d.ts +0 -15
- package/lib/db/repositories/dataColumnSidecarsArchive.js +0 -23
- package/lib/db/repositories/dataColumnSidecarsArchive.js.map +0 -1
package/lib/db/beacon.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CheckpointStateRepository } from "./repositories/checkpointState.js";
|
|
2
|
-
import { AttesterSlashingRepository, BLSToExecutionChangeRepository, BackfilledRanges, BestLightClientUpdateRepository, BlobSidecarsArchiveRepository, BlobSidecarsRepository, BlockArchiveRepository, BlockRepository, CheckpointHeaderRepository,
|
|
2
|
+
import { AttesterSlashingRepository, BLSToExecutionChangeRepository, BackfilledRanges, BestLightClientUpdateRepository, BlobSidecarsArchiveRepository, BlobSidecarsRepository, BlockArchiveRepository, BlockRepository, CheckpointHeaderRepository, DataColumnSidecarArchiveRepository, DataColumnSidecarRepository, DepositDataRootRepository, DepositEventRepository, Eth1DataRepository, ProposerSlashingRepository, StateArchiveRepository, SyncCommitteeRepository, SyncCommitteeWitnessRepository, VoluntaryExitRepository, } from "./repositories/index.js";
|
|
3
3
|
import { PreGenesisState, PreGenesisStateLastProcessedBlock } from "./single/index.js";
|
|
4
4
|
export class BeaconDb {
|
|
5
5
|
constructor(config, db) {
|
|
@@ -9,8 +9,8 @@ export class BeaconDb {
|
|
|
9
9
|
this.blockArchive = new BlockArchiveRepository(config, db);
|
|
10
10
|
this.blobSidecars = new BlobSidecarsRepository(config, db);
|
|
11
11
|
this.blobSidecarsArchive = new BlobSidecarsArchiveRepository(config, db);
|
|
12
|
-
this.
|
|
13
|
-
this.
|
|
12
|
+
this.dataColumnSidecar = new DataColumnSidecarRepository(config, db);
|
|
13
|
+
this.dataColumnSidecarArchive = new DataColumnSidecarArchiveRepository(config, db);
|
|
14
14
|
this.stateArchive = new StateArchiveRepository(config, db);
|
|
15
15
|
this.checkpointState = new CheckpointStateRepository(config, db);
|
|
16
16
|
this.voluntaryExit = new VoluntaryExitRepository(config, db);
|
package/lib/db/beacon.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"beacon.js","sourceRoot":"","sources":["../../src/db/beacon.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,yBAAyB,EAAC,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EACL,0BAA0B,EAC1B,8BAA8B,EAC9B,gBAAgB,EAChB,+BAA+B,EAC/B,6BAA6B,EAC7B,sBAAsB,EACtB,sBAAsB,EACtB,eAAe,EACf,0BAA0B,EAC1B,
|
|
1
|
+
{"version":3,"file":"beacon.js","sourceRoot":"","sources":["../../src/db/beacon.ts"],"names":[],"mappings":"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"}
|
package/lib/db/interface.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { LevelDbControllerMetrics } from "@lodestar/db";
|
|
2
2
|
import { CheckpointStateRepository } from "./repositories/checkpointState.js";
|
|
3
|
-
import { AttesterSlashingRepository, BLSToExecutionChangeRepository, BackfilledRanges, BestLightClientUpdateRepository, BlobSidecarsArchiveRepository, BlobSidecarsRepository, BlockArchiveRepository, BlockRepository, CheckpointHeaderRepository,
|
|
3
|
+
import { AttesterSlashingRepository, BLSToExecutionChangeRepository, BackfilledRanges, BestLightClientUpdateRepository, BlobSidecarsArchiveRepository, BlobSidecarsRepository, BlockArchiveRepository, BlockRepository, CheckpointHeaderRepository, DataColumnSidecarArchiveRepository, DataColumnSidecarRepository, DepositDataRootRepository, DepositEventRepository, Eth1DataRepository, ProposerSlashingRepository, StateArchiveRepository, SyncCommitteeRepository, SyncCommitteeWitnessRepository, VoluntaryExitRepository } from "./repositories/index.js";
|
|
4
4
|
import { PreGenesisState, PreGenesisStateLastProcessedBlock } from "./single/index.js";
|
|
5
5
|
/**
|
|
6
6
|
* The DB service manages the data layer of the beacon chain
|
|
@@ -12,8 +12,8 @@ export interface IBeaconDb {
|
|
|
12
12
|
blockArchive: BlockArchiveRepository;
|
|
13
13
|
blobSidecars: BlobSidecarsRepository;
|
|
14
14
|
blobSidecarsArchive: BlobSidecarsArchiveRepository;
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
dataColumnSidecar: DataColumnSidecarRepository;
|
|
16
|
+
dataColumnSidecarArchive: DataColumnSidecarArchiveRepository;
|
|
17
17
|
stateArchive: StateArchiveRepository;
|
|
18
18
|
checkpointState: CheckpointStateRepository;
|
|
19
19
|
voluntaryExit: VoluntaryExitRepository;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { ChainForkConfig } from "@lodestar/config";
|
|
2
|
+
import { Db, PrefixedRepository } from "@lodestar/db";
|
|
3
|
+
import { ColumnIndex, Root, fulu } from "@lodestar/types";
|
|
4
|
+
type BlockRoot = Root;
|
|
5
|
+
/**
|
|
6
|
+
* DataColumnSidecarsRepository
|
|
7
|
+
* Used to store `unfinalized` DataColumnSidecars
|
|
8
|
+
*
|
|
9
|
+
* Indexed data by `blockRoot` + `columnIndex`
|
|
10
|
+
*/
|
|
11
|
+
export declare class DataColumnSidecarRepository extends PrefixedRepository<BlockRoot, ColumnIndex, fulu.DataColumnSidecar> {
|
|
12
|
+
constructor(config: ChainForkConfig, db: Db);
|
|
13
|
+
/**
|
|
14
|
+
* Id is hashTreeRoot of unsigned BeaconBlock
|
|
15
|
+
*/
|
|
16
|
+
getId(value: fulu.DataColumnSidecar): ColumnIndex;
|
|
17
|
+
encodeKeyRaw(prefix: BlockRoot, id: ColumnIndex): Uint8Array;
|
|
18
|
+
decodeKeyRaw(raw: Uint8Array): {
|
|
19
|
+
prefix: BlockRoot;
|
|
20
|
+
id: ColumnIndex;
|
|
21
|
+
};
|
|
22
|
+
getMaxKeyRaw(prefix: BlockRoot): Uint8Array;
|
|
23
|
+
getMinKeyRaw(prefix: BlockRoot): Uint8Array;
|
|
24
|
+
}
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=dataColumnSidecar.d.ts.map
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { PrefixedRepository } from "@lodestar/db";
|
|
2
|
+
import { NUMBER_OF_COLUMNS } from "@lodestar/params";
|
|
3
|
+
import { ssz } from "@lodestar/types";
|
|
4
|
+
import { bytesToInt, intToBytes } from "@lodestar/utils";
|
|
5
|
+
import { Bucket, getBucketNameByValue } from "../buckets.js";
|
|
6
|
+
/**
|
|
7
|
+
* DataColumnSidecarsRepository
|
|
8
|
+
* Used to store `unfinalized` DataColumnSidecars
|
|
9
|
+
*
|
|
10
|
+
* Indexed data by `blockRoot` + `columnIndex`
|
|
11
|
+
*/
|
|
12
|
+
export class DataColumnSidecarRepository extends PrefixedRepository {
|
|
13
|
+
constructor(config, db) {
|
|
14
|
+
const bucket = Bucket.allForks_dataColumnSidecars;
|
|
15
|
+
super(config, db, bucket, ssz.fulu.DataColumnSidecar, getBucketNameByValue(bucket));
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Id is hashTreeRoot of unsigned BeaconBlock
|
|
19
|
+
*/
|
|
20
|
+
getId(value) {
|
|
21
|
+
return value.index;
|
|
22
|
+
}
|
|
23
|
+
encodeKeyRaw(prefix, id) {
|
|
24
|
+
return Buffer.concat([prefix, intToBytes(id, 4)]);
|
|
25
|
+
}
|
|
26
|
+
decodeKeyRaw(raw) {
|
|
27
|
+
return {
|
|
28
|
+
prefix: raw.slice(0, 32),
|
|
29
|
+
id: bytesToInt(raw.slice(32, 36)),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
getMaxKeyRaw(prefix) {
|
|
33
|
+
return Buffer.concat([prefix, intToBytes(NUMBER_OF_COLUMNS, 4)]);
|
|
34
|
+
}
|
|
35
|
+
getMinKeyRaw(prefix) {
|
|
36
|
+
return Buffer.concat([prefix, intToBytes(0, 4)]);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=dataColumnSidecar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataColumnSidecar.js","sourceRoot":"","sources":["../../../src/db/repositories/dataColumnSidecar.ts"],"names":[],"mappings":"AACA,OAAO,EAAK,kBAAkB,EAAC,MAAM,cAAc,CAAC;AACpD,OAAO,EAAC,iBAAiB,EAAC,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAA0B,GAAG,EAAC,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAC,UAAU,EAAE,UAAU,EAAC,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAC,MAAM,EAAE,oBAAoB,EAAC,MAAM,eAAe,CAAC;AAI3D;;;;;GAKG;AACH,MAAM,OAAO,2BAA4B,SAAQ,kBAAkE;IACjH,YAAY,MAAuB,EAAE,EAAM;QACzC,MAAM,MAAM,GAAG,MAAM,CAAC,2BAA2B,CAAC;QAClD,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;IACtF,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAA6B;QACjC,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC;IAED,YAAY,CAAC,MAAiB,EAAE,EAAe;QAC7C,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,YAAY,CAAC,GAAe;QAC1B,OAAO;YACL,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAc;YACrC,EAAE,EAAE,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAgB;SACjD,CAAC;IACJ,CAAC;IAED,YAAY,CAAC,MAAiB;QAC5B,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,YAAY,CAAC,MAAiB;QAC5B,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC;CACF"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ChainForkConfig } from "@lodestar/config";
|
|
2
|
+
import { Db, PrefixedRepository } from "@lodestar/db";
|
|
3
|
+
import { ColumnIndex, Slot, fulu } from "@lodestar/types";
|
|
4
|
+
/**
|
|
5
|
+
* DataColumnSidecarsRepository
|
|
6
|
+
* Used to store `finalized` DataColumnSidecars
|
|
7
|
+
*
|
|
8
|
+
* Indexed data by `slot` + `columnIndex`
|
|
9
|
+
*/
|
|
10
|
+
export declare class DataColumnSidecarArchiveRepository extends PrefixedRepository<Slot, ColumnIndex, fulu.DataColumnSidecar> {
|
|
11
|
+
constructor(config: ChainForkConfig, db: Db);
|
|
12
|
+
/**
|
|
13
|
+
* Id is hashTreeRoot of unsigned BeaconBlock
|
|
14
|
+
*/
|
|
15
|
+
getId(value: fulu.DataColumnSidecar): ColumnIndex;
|
|
16
|
+
encodeKeyRaw(prefix: Slot, id: ColumnIndex): Uint8Array;
|
|
17
|
+
decodeKeyRaw(raw: Uint8Array): {
|
|
18
|
+
prefix: Slot;
|
|
19
|
+
id: ColumnIndex;
|
|
20
|
+
};
|
|
21
|
+
getMaxKeyRaw(prefix: Slot): Uint8Array;
|
|
22
|
+
getMinKeyRaw(prefix: Slot): Uint8Array;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=dataColumnSidecarArchive.d.ts.map
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { PrefixedRepository } from "@lodestar/db";
|
|
2
|
+
import { NUMBER_OF_COLUMNS } from "@lodestar/params";
|
|
3
|
+
import { ssz } from "@lodestar/types";
|
|
4
|
+
import { bytesToInt, intToBytes } from "@lodestar/utils";
|
|
5
|
+
import { Bucket, getBucketNameByValue } from "../buckets.js";
|
|
6
|
+
/**
|
|
7
|
+
* DataColumnSidecarsRepository
|
|
8
|
+
* Used to store `finalized` DataColumnSidecars
|
|
9
|
+
*
|
|
10
|
+
* Indexed data by `slot` + `columnIndex`
|
|
11
|
+
*/
|
|
12
|
+
export class DataColumnSidecarArchiveRepository extends PrefixedRepository {
|
|
13
|
+
constructor(config, db) {
|
|
14
|
+
const bucket = Bucket.allForks_dataColumnSidecars;
|
|
15
|
+
super(config, db, bucket, ssz.fulu.DataColumnSidecar, getBucketNameByValue(bucket));
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Id is hashTreeRoot of unsigned BeaconBlock
|
|
19
|
+
*/
|
|
20
|
+
getId(value) {
|
|
21
|
+
return value.index;
|
|
22
|
+
}
|
|
23
|
+
encodeKeyRaw(prefix, id) {
|
|
24
|
+
return Buffer.concat([intToBytes(prefix, 4), intToBytes(id, 4)]);
|
|
25
|
+
}
|
|
26
|
+
decodeKeyRaw(raw) {
|
|
27
|
+
return {
|
|
28
|
+
prefix: bytesToInt(raw.slice(0, 4)),
|
|
29
|
+
id: bytesToInt(raw.slice(4, 8)),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
getMaxKeyRaw(prefix) {
|
|
33
|
+
return Buffer.concat([intToBytes(prefix, 4), intToBytes(NUMBER_OF_COLUMNS, 4)]);
|
|
34
|
+
}
|
|
35
|
+
getMinKeyRaw(prefix) {
|
|
36
|
+
return Buffer.concat([intToBytes(prefix, 4), intToBytes(0, 4)]);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=dataColumnSidecarArchive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataColumnSidecarArchive.js","sourceRoot":"","sources":["../../../src/db/repositories/dataColumnSidecarArchive.ts"],"names":[],"mappings":"AACA,OAAO,EAAK,kBAAkB,EAAC,MAAM,cAAc,CAAC;AACpD,OAAO,EAAC,iBAAiB,EAAC,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAA0B,GAAG,EAAC,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAC,UAAU,EAAE,UAAU,EAAC,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAC,MAAM,EAAE,oBAAoB,EAAC,MAAM,eAAe,CAAC;AAE3D;;;;;GAKG;AACH,MAAM,OAAO,kCAAmC,SAAQ,kBAA6D;IACnH,YAAY,MAAuB,EAAE,EAAM;QACzC,MAAM,MAAM,GAAG,MAAM,CAAC,2BAA2B,CAAC;QAClD,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;IACtF,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAA6B;QACjC,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC;IAED,YAAY,CAAC,MAAY,EAAE,EAAe;QACxC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,YAAY,CAAC,GAAe;QAC1B,OAAO;YACL,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAS;YAC3C,EAAE,EAAE,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAgB;SAC/C,CAAC;IACJ,CAAC;IAED,YAAY,CAAC,MAAY;QACvB,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAClF,CAAC;IAED,YAAY,CAAC,MAAY;QACvB,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,CAAC;CACF"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { BlobSidecarsRepository } from "./blobSidecars.js";
|
|
2
2
|
export { BlobSidecarsArchiveRepository } from "./blobSidecarsArchive.js";
|
|
3
|
-
export {
|
|
4
|
-
export {
|
|
3
|
+
export { DataColumnSidecarRepository } from "./dataColumnSidecar.js";
|
|
4
|
+
export { DataColumnSidecarArchiveRepository } from "./dataColumnSidecarArchive.js";
|
|
5
5
|
export { BlockRepository } from "./block.js";
|
|
6
6
|
export { BlockArchiveRepository } from "./blockArchive.js";
|
|
7
7
|
export type { BlockArchiveBatchPutBinaryItem, BlockFilterOptions } from "./blockArchive.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { BlobSidecarsRepository } from "./blobSidecars.js";
|
|
2
2
|
export { BlobSidecarsArchiveRepository } from "./blobSidecarsArchive.js";
|
|
3
|
-
export {
|
|
4
|
-
export {
|
|
3
|
+
export { DataColumnSidecarRepository } from "./dataColumnSidecar.js";
|
|
4
|
+
export { DataColumnSidecarArchiveRepository } from "./dataColumnSidecarArchive.js";
|
|
5
5
|
export { BlockRepository } from "./block.js";
|
|
6
6
|
export { BlockArchiveRepository } from "./blockArchive.js";
|
|
7
7
|
export { StateArchiveRepository } from "./stateArchive.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/db/repositories/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,sBAAsB,EAAC,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAC,6BAA6B,EAAC,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/db/repositories/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,sBAAsB,EAAC,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAC,6BAA6B,EAAC,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAC,2BAA2B,EAAC,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAC,kCAAkC,EAAC,MAAM,+BAA+B,CAAC;AAEjF,OAAO,EAAC,eAAe,EAAC,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAC,sBAAsB,EAAC,MAAM,mBAAmB,CAAC;AAEzD,OAAO,EAAC,sBAAsB,EAAC,MAAM,mBAAmB,CAAC;AAEzD,OAAO,EAAC,0BAA0B,EAAC,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAC,0BAA0B,EAAC,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAC,uBAAuB,EAAC,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAC,sBAAsB,EAAC,MAAM,mBAAmB,CAAC;AAEzD,OAAO,EAAC,yBAAyB,EAAC,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAC,kBAAkB,EAAC,MAAM,eAAe,CAAC;AAEjD,OAAO,EAAC,+BAA+B,EAAC,MAAM,4BAA4B,CAAC;AAC3E,OAAO,EAAC,0BAA0B,EAAC,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAC,uBAAuB,EAAC,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAC,8BAA8B,EAAC,MAAM,sCAAsC,CAAC;AACpF,OAAO,EAAC,gBAAgB,EAAC,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAC,8BAA8B,EAAC,MAAM,2BAA2B,CAAC"}
|
|
@@ -21,6 +21,22 @@ export declare class GossipTopicCache implements IGossipTopicCache {
|
|
|
21
21
|
*/
|
|
22
22
|
export declare function stringifyGossipTopic(forkDigestContext: ForkDigestContext, topic: GossipTopic): string;
|
|
23
23
|
export declare function getGossipSSZType(topic: GossipTopic): import("@chainsafe/ssz").ContainerType<{
|
|
24
|
+
index: import("@chainsafe/ssz").UintNumberType;
|
|
25
|
+
column: import("@chainsafe/ssz").ListCompositeType<import("@chainsafe/ssz").ByteVectorType>;
|
|
26
|
+
kzgCommitments: import("@chainsafe/ssz").ListCompositeType<import("@chainsafe/ssz").ByteVectorType>;
|
|
27
|
+
kzgProofs: import("@chainsafe/ssz").ListCompositeType<import("@chainsafe/ssz").ByteVectorType>;
|
|
28
|
+
signedBlockHeader: import("@chainsafe/ssz").ContainerType<{
|
|
29
|
+
message: import("@chainsafe/ssz").ContainerType<{
|
|
30
|
+
slot: import("@chainsafe/ssz").UintNumberType;
|
|
31
|
+
proposerIndex: import("@chainsafe/ssz").UintNumberType;
|
|
32
|
+
parentRoot: import("@chainsafe/ssz").ByteVectorType;
|
|
33
|
+
stateRoot: import("@chainsafe/ssz").ByteVectorType;
|
|
34
|
+
bodyRoot: import("@chainsafe/ssz").ByteVectorType;
|
|
35
|
+
}>;
|
|
36
|
+
signature: import("@chainsafe/ssz").ByteVectorType;
|
|
37
|
+
}>;
|
|
38
|
+
kzgCommitmentsInclusionProof: import("@chainsafe/ssz").VectorCompositeType<import("@chainsafe/ssz").ByteVectorType>;
|
|
39
|
+
}> | import("@chainsafe/ssz").ContainerType<{
|
|
24
40
|
message: import("@chainsafe/ssz").ContainerType<{
|
|
25
41
|
slot: import("@chainsafe/ssz").UintNumberType;
|
|
26
42
|
proposerIndex: import("@chainsafe/ssz").UintNumberType;
|
|
@@ -323,22 +339,6 @@ export declare function getGossipSSZType(topic: GossipTopic): import("@chainsafe
|
|
|
323
339
|
signature: import("@chainsafe/ssz").ByteVectorType;
|
|
324
340
|
}>;
|
|
325
341
|
kzgCommitmentInclusionProof: import("@chainsafe/ssz").VectorCompositeType<import("@chainsafe/ssz").ByteVectorType>;
|
|
326
|
-
}> | import("@chainsafe/ssz").ContainerType<{
|
|
327
|
-
index: import("@chainsafe/ssz").UintNumberType;
|
|
328
|
-
column: import("@chainsafe/ssz").ListCompositeType<import("@chainsafe/ssz").ByteVectorType>;
|
|
329
|
-
kzgCommitments: import("@chainsafe/ssz").ListCompositeType<import("@chainsafe/ssz").ByteVectorType>;
|
|
330
|
-
kzgProofs: import("@chainsafe/ssz").ListCompositeType<import("@chainsafe/ssz").ByteVectorType>;
|
|
331
|
-
signedBlockHeader: import("@chainsafe/ssz").ContainerType<{
|
|
332
|
-
message: import("@chainsafe/ssz").ContainerType<{
|
|
333
|
-
slot: import("@chainsafe/ssz").UintNumberType;
|
|
334
|
-
proposerIndex: import("@chainsafe/ssz").UintNumberType;
|
|
335
|
-
parentRoot: import("@chainsafe/ssz").ByteVectorType;
|
|
336
|
-
stateRoot: import("@chainsafe/ssz").ByteVectorType;
|
|
337
|
-
bodyRoot: import("@chainsafe/ssz").ByteVectorType;
|
|
338
|
-
}>;
|
|
339
|
-
signature: import("@chainsafe/ssz").ByteVectorType;
|
|
340
|
-
}>;
|
|
341
|
-
kzgCommitmentsInclusionProof: import("@chainsafe/ssz").VectorCompositeType<import("@chainsafe/ssz").ByteVectorType>;
|
|
342
342
|
}> | import("@chainsafe/ssz").CompositeType<import("@chainsafe/ssz").ValueOfFields<{
|
|
343
343
|
message: import("@chainsafe/ssz").ContainerType<{
|
|
344
344
|
aggregatorIndex: import("@chainsafe/ssz").UintNumberType;
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import { BeaconConfig } from "@lodestar/config";
|
|
2
1
|
import { ResponseOutgoing } from "@lodestar/reqresp";
|
|
3
2
|
import { Slot, deneb } from "@lodestar/types";
|
|
4
3
|
import { IBeaconChain } from "../../../chain/index.js";
|
|
5
4
|
import { IBeaconDb } from "../../../db/index.js";
|
|
6
5
|
export declare function onBlobSidecarsByRange(request: deneb.BlobSidecarsByRangeRequest, chain: IBeaconChain, db: IBeaconDb): AsyncIterable<ResponseOutgoing>;
|
|
7
6
|
export declare function iterateBlobBytesFromWrapper(chain: IBeaconChain, blobSideCarsBytesWrapped: Uint8Array, blockSlot: Slot): Iterable<ResponseOutgoing>;
|
|
8
|
-
export declare function validateBlobSidecarsByRangeRequest(
|
|
7
|
+
export declare function validateBlobSidecarsByRangeRequest(request: deneb.BlobSidecarsByRangeRequest): deneb.BlobSidecarsByRangeRequest;
|
|
9
8
|
//# sourceMappingURL=blobSidecarsByRange.d.ts.map
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { BLOBSIDECAR_FIXED_SIZE, GENESIS_SLOT } from "@lodestar/params";
|
|
1
|
+
import { BLOBSIDECAR_FIXED_SIZE, GENESIS_SLOT, MAX_REQUEST_BLOCKS_DENEB } from "@lodestar/params";
|
|
2
2
|
import { RespStatus, ResponseError } from "@lodestar/reqresp";
|
|
3
3
|
import { computeEpochAtSlot } from "@lodestar/state-transition";
|
|
4
4
|
import { fromHex } from "@lodestar/utils";
|
|
5
5
|
import { BLOB_SIDECARS_IN_WRAPPER_INDEX } from "../../../db/repositories/blobSidecars.js";
|
|
6
6
|
export async function* onBlobSidecarsByRange(request, chain, db) {
|
|
7
7
|
// Non-finalized range of blobs
|
|
8
|
-
const { startSlot, count } = validateBlobSidecarsByRangeRequest(
|
|
8
|
+
const { startSlot, count } = validateBlobSidecarsByRangeRequest(request);
|
|
9
9
|
const endSlot = startSlot + count;
|
|
10
10
|
const finalized = db.blobSidecarsArchive;
|
|
11
11
|
const unfinalized = db.blobSidecars;
|
|
@@ -62,7 +62,7 @@ export function* iterateBlobBytesFromWrapper(chain, blobSideCarsBytesWrapped, bl
|
|
|
62
62
|
};
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
|
-
export function validateBlobSidecarsByRangeRequest(
|
|
65
|
+
export function validateBlobSidecarsByRangeRequest(request) {
|
|
66
66
|
const { startSlot } = request;
|
|
67
67
|
let { count } = request;
|
|
68
68
|
if (count < 1) {
|
|
@@ -72,9 +72,8 @@ export function validateBlobSidecarsByRangeRequest(config, request) {
|
|
|
72
72
|
if (startSlot < GENESIS_SLOT) {
|
|
73
73
|
throw new ResponseError(RespStatus.INVALID_REQUEST, "startSlot < genesis");
|
|
74
74
|
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
count = maxRequestBlobSidecars;
|
|
75
|
+
if (count > MAX_REQUEST_BLOCKS_DENEB) {
|
|
76
|
+
count = MAX_REQUEST_BLOCKS_DENEB;
|
|
78
77
|
}
|
|
79
78
|
return { startSlot, count };
|
|
80
79
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blobSidecarsByRange.js","sourceRoot":"","sources":["../../../../src/network/reqresp/handlers/blobSidecarsByRange.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"blobSidecarsByRange.js","sourceRoot":"","sources":["../../../../src/network/reqresp/handlers/blobSidecarsByRange.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { ResponseOutgoing } from "@lodestar/reqresp";
|
|
2
|
-
import {
|
|
2
|
+
import { fulu } from "@lodestar/types";
|
|
3
3
|
import { IBeaconChain } from "../../../chain/index.js";
|
|
4
4
|
import { IBeaconDb } from "../../../db/index.js";
|
|
5
5
|
export declare function onDataColumnSidecarsByRange(request: fulu.DataColumnSidecarsByRangeRequest, chain: IBeaconChain, db: IBeaconDb): AsyncIterable<ResponseOutgoing>;
|
|
6
|
-
export declare function iterateDataColumnBytesFromWrapper(chain: IBeaconChain, dataColumnSidecarsBytesWrapped: Uint8Array, blockSlot: Slot, columns: ColumnIndex[]): Iterable<ResponseOutgoing>;
|
|
7
6
|
export declare function validateDataColumnSidecarsByRangeRequest(request: fulu.DataColumnSidecarsByRangeRequest): fulu.DataColumnSidecarsByRangeRequest;
|
|
8
7
|
//# sourceMappingURL=dataColumnSidecarsByRange.d.ts.map
|
|
@@ -1,23 +1,27 @@
|
|
|
1
|
-
import { GENESIS_SLOT, MAX_REQUEST_BLOCKS_DENEB
|
|
1
|
+
import { GENESIS_SLOT, MAX_REQUEST_BLOCKS_DENEB } from "@lodestar/params";
|
|
2
2
|
import { RespStatus, ResponseError } from "@lodestar/reqresp";
|
|
3
3
|
import { computeEpochAtSlot } from "@lodestar/state-transition";
|
|
4
|
-
import { ssz } from "@lodestar/types";
|
|
5
4
|
import { fromHex } from "@lodestar/utils";
|
|
6
|
-
import { COLUMN_SIZE_IN_WRAPPER_INDEX, CUSTODY_COLUMNS_IN_IN_WRAPPER_INDEX, DATA_COLUMN_SIDECARS_IN_WRAPPER_INDEX, NUM_COLUMNS_IN_WRAPPER_INDEX, } from "../../../db/repositories/dataColumnSidecars.js";
|
|
7
5
|
export async function* onDataColumnSidecarsByRange(request, chain, db) {
|
|
8
6
|
// Non-finalized range of columns
|
|
9
7
|
const { startSlot, count, columns } = validateDataColumnSidecarsByRangeRequest(request);
|
|
10
8
|
const endSlot = startSlot + count;
|
|
11
|
-
const finalized = db.
|
|
12
|
-
const unfinalized = db.
|
|
9
|
+
const finalized = db.dataColumnSidecarArchive;
|
|
10
|
+
const unfinalized = db.dataColumnSidecar;
|
|
13
11
|
const finalizedSlot = chain.forkChoice.getFinalizedBlock().slot;
|
|
14
12
|
// Finalized range of columns
|
|
15
13
|
if (startSlot <= finalizedSlot) {
|
|
16
|
-
for
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
14
|
+
for (let slot = startSlot; slot < endSlot; slot++) {
|
|
15
|
+
const dataColumnSidecars = await finalized.getManyBinary(slot, columns);
|
|
16
|
+
for (const [index, dataColumnSidecarBytes] of dataColumnSidecars.entries()) {
|
|
17
|
+
if (!dataColumnSidecarBytes) {
|
|
18
|
+
throw new ResponseError(RespStatus.SERVER_ERROR, `No finalized dataColumnSidecar found for slot=${slot}, index=${columns[index]}`);
|
|
19
|
+
}
|
|
20
|
+
yield {
|
|
21
|
+
data: dataColumnSidecarBytes,
|
|
22
|
+
boundary: chain.config.getForkBoundaryAtEpoch(computeEpochAtSlot(slot)),
|
|
23
|
+
};
|
|
24
|
+
}
|
|
21
25
|
}
|
|
22
26
|
}
|
|
23
27
|
// Non-finalized range of columns
|
|
@@ -33,12 +37,16 @@ export async function* onDataColumnSidecarsByRange(request, chain, db) {
|
|
|
33
37
|
// at the time of the start of the request. Spec is clear the chain of columns must be consistent, but on
|
|
34
38
|
// re-org there's no need to abort the request
|
|
35
39
|
// Spec: https://github.com/ethereum/consensus-specs/blob/ad36024441cf910d428d03f87f331fbbd2b3e5f1/specs/fulu/p2p-interface.md#L425-L429
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
+
const dataColumnSidecars = await unfinalized.getManyBinary(fromHex(block.blockRoot), columns);
|
|
41
|
+
for (const [index, dataColumnSidecarBytes] of dataColumnSidecars.entries()) {
|
|
42
|
+
if (!dataColumnSidecarBytes) {
|
|
43
|
+
throw new ResponseError(RespStatus.SERVER_ERROR, `No unfinalized dataColumnSidecar found for root=${block.blockRoot}, index=${columns[index]}`);
|
|
44
|
+
}
|
|
45
|
+
yield {
|
|
46
|
+
data: dataColumnSidecarBytes,
|
|
47
|
+
boundary: chain.config.getForkBoundaryAtEpoch(computeEpochAtSlot(block.slot)),
|
|
48
|
+
};
|
|
40
49
|
}
|
|
41
|
-
yield* iterateDataColumnBytesFromWrapper(chain, dataColumnSidecarsBytesWrapped, block.slot, columns);
|
|
42
50
|
}
|
|
43
51
|
// If block is after endSlot, stop iterating
|
|
44
52
|
else if (block.slot >= endSlot) {
|
|
@@ -47,33 +55,6 @@ export async function* onDataColumnSidecarsByRange(request, chain, db) {
|
|
|
47
55
|
}
|
|
48
56
|
}
|
|
49
57
|
}
|
|
50
|
-
export function* iterateDataColumnBytesFromWrapper(chain, dataColumnSidecarsBytesWrapped, blockSlot, columns) {
|
|
51
|
-
const retrivedColumnsLen = ssz.Uint8.deserialize(dataColumnSidecarsBytesWrapped.slice(NUM_COLUMNS_IN_WRAPPER_INDEX, COLUMN_SIZE_IN_WRAPPER_INDEX));
|
|
52
|
-
const retrievedColumnsSizeBytes = dataColumnSidecarsBytesWrapped.slice(COLUMN_SIZE_IN_WRAPPER_INDEX, CUSTODY_COLUMNS_IN_IN_WRAPPER_INDEX);
|
|
53
|
-
const columnsSize = ssz.UintNum64.deserialize(retrievedColumnsSizeBytes);
|
|
54
|
-
const dataColumnsIndex = dataColumnSidecarsBytesWrapped.slice(CUSTODY_COLUMNS_IN_IN_WRAPPER_INDEX, CUSTODY_COLUMNS_IN_IN_WRAPPER_INDEX + NUMBER_OF_COLUMNS);
|
|
55
|
-
const allDataColumnSidecarsBytes = dataColumnSidecarsBytesWrapped.slice(DATA_COLUMN_SIDECARS_IN_WRAPPER_INDEX + 4 * retrivedColumnsLen);
|
|
56
|
-
const columnsLen = allDataColumnSidecarsBytes.length / columnsSize;
|
|
57
|
-
// no columns possibly no blobs
|
|
58
|
-
if (columnsLen === 0) {
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
for (const index of columns) {
|
|
62
|
-
// get the index at which the column is
|
|
63
|
-
const dataIndex = (dataColumnsIndex[index] ?? 0) - 1;
|
|
64
|
-
if (dataIndex < 0) {
|
|
65
|
-
throw new ResponseError(RespStatus.SERVER_ERROR, `dataColumnSidecar index=${index} dataIndex=${dataIndex} not custodied`);
|
|
66
|
-
}
|
|
67
|
-
const dataColumnSidecarBytes = allDataColumnSidecarsBytes.slice(dataIndex * columnsSize, (dataIndex + 1) * columnsSize);
|
|
68
|
-
if (dataColumnSidecarBytes.length !== columnsSize) {
|
|
69
|
-
throw new ResponseError(RespStatus.SERVER_ERROR, `Invalid dataColumnSidecar index=${index} dataIndex=${dataIndex} bytes length=${dataColumnSidecarBytes.length} expected=${columnsSize} for slot ${blockSlot} blobsLen=${columnsLen}`);
|
|
70
|
-
}
|
|
71
|
-
yield {
|
|
72
|
-
data: dataColumnSidecarBytes,
|
|
73
|
-
boundary: chain.config.getForkBoundaryAtEpoch(computeEpochAtSlot(blockSlot)),
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
58
|
export function validateDataColumnSidecarsByRangeRequest(request) {
|
|
78
59
|
const { startSlot, columns } = request;
|
|
79
60
|
let { count } = request;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataColumnSidecarsByRange.js","sourceRoot":"","sources":["../../../../src/network/reqresp/handlers/dataColumnSidecarsByRange.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAE,wBAAwB,
|
|
1
|
+
{"version":3,"file":"dataColumnSidecarsByRange.js","sourceRoot":"","sources":["../../../../src/network/reqresp/handlers/dataColumnSidecarsByRange.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAE,wBAAwB,EAAC,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAC,UAAU,EAAE,aAAa,EAAmB,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAAC,kBAAkB,EAAC,MAAM,4BAA4B,CAAC;AAE9D,OAAO,EAAC,OAAO,EAAC,MAAM,iBAAiB,CAAC;AAIxC,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,2BAA2B,CAChD,OAA8C,EAC9C,KAAmB,EACnB,EAAa;IAEb,iCAAiC;IACjC,MAAM,EAAC,SAAS,EAAE,KAAK,EAAE,OAAO,EAAC,GAAG,wCAAwC,CAAC,OAAO,CAAC,CAAC;IACtF,MAAM,OAAO,GAAG,SAAS,GAAG,KAAK,CAAC;IAElC,MAAM,SAAS,GAAG,EAAE,CAAC,wBAAwB,CAAC;IAC9C,MAAM,WAAW,GAAG,EAAE,CAAC,iBAAiB,CAAC;IACzC,MAAM,aAAa,GAAG,KAAK,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC;IAEhE,6BAA6B;IAC7B,IAAI,SAAS,IAAI,aAAa,EAAE,CAAC;QAC/B,KAAK,IAAI,IAAI,GAAG,SAAS,EAAE,IAAI,GAAG,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC;YAClD,MAAM,kBAAkB,GAAG,MAAM,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAExE,KAAK,MAAM,CAAC,KAAK,EAAE,sBAAsB,CAAC,IAAI,kBAAkB,CAAC,OAAO,EAAE,EAAE,CAAC;gBAC3E,IAAI,CAAC,sBAAsB,EAAE,CAAC;oBAC5B,MAAM,IAAI,aAAa,CACrB,UAAU,CAAC,YAAY,EACvB,iDAAiD,IAAI,WAAW,OAAO,CAAC,KAAK,CAAC,EAAE,CACjF,CAAC;gBACJ,CAAC;gBAED,MAAM;oBACJ,IAAI,EAAE,sBAAsB;oBAC5B,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;iBACxE,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,iCAAiC;IACjC,IAAI,OAAO,GAAG,aAAa,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;QAChD,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAElE,kDAAkD;QAClD,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/C,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAE3B,mDAAmD;YACnD,IAAI,KAAK,CAAC,IAAI,IAAI,SAAS,IAAI,KAAK,CAAC,IAAI,GAAG,OAAO,EAAE,CAAC;gBACpD,2GAA2G;gBAC3G,yGAAyG;gBACzG,8CAA8C;gBAC9C,wIAAwI;gBACxI,MAAM,kBAAkB,GAAG,MAAM,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;gBAC9F,KAAK,MAAM,CAAC,KAAK,EAAE,sBAAsB,CAAC,IAAI,kBAAkB,CAAC,OAAO,EAAE,EAAE,CAAC;oBAC3E,IAAI,CAAC,sBAAsB,EAAE,CAAC;wBAC5B,MAAM,IAAI,aAAa,CACrB,UAAU,CAAC,YAAY,EACvB,mDAAmD,KAAK,CAAC,SAAS,WAAW,OAAO,CAAC,KAAK,CAAC,EAAE,CAC9F,CAAC;oBACJ,CAAC;oBAED,MAAM;wBACJ,IAAI,EAAE,sBAAsB;wBAC5B,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;qBAC9E,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,4CAA4C;iBACvC,IAAI,KAAK,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC;gBAC/B,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,wCAAwC,CACtD,OAA8C;IAE9C,MAAM,EAAC,SAAS,EAAE,OAAO,EAAC,GAAG,OAAO,CAAC;IACrC,IAAI,EAAC,KAAK,EAAC,GAAG,OAAO,CAAC;IAEtB,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACd,MAAM,IAAI,aAAa,CAAC,UAAU,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IACnE,CAAC;IACD,uDAAuD;IACvD,IAAI,SAAS,GAAG,YAAY,EAAE,CAAC;QAC7B,MAAM,IAAI,aAAa,CAAC,UAAU,CAAC,eAAe,EAAE,qBAAqB,CAAC,CAAC;IAC7E,CAAC;IAED,IAAI,KAAK,GAAG,wBAAwB,EAAE,CAAC;QACrC,KAAK,GAAG,wBAAwB,CAAC;IACnC,CAAC;IAED,OAAO,EAAC,SAAS,EAAE,KAAK,EAAE,OAAO,EAAC,CAAC;AACrC,CAAC"}
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
import { NUMBER_OF_COLUMNS } from "@lodestar/params";
|
|
2
1
|
import { RespStatus, ResponseError } from "@lodestar/reqresp";
|
|
3
2
|
import { computeEpochAtSlot } from "@lodestar/state-transition";
|
|
4
|
-
import { ssz } from "@lodestar/types";
|
|
5
3
|
import { fromHex, toHex } from "@lodestar/utils";
|
|
6
|
-
import { COLUMN_SIZE_IN_WRAPPER_INDEX, CUSTODY_COLUMNS_IN_IN_WRAPPER_INDEX, DATA_COLUMN_SIDECARS_IN_WRAPPER_INDEX, NUM_COLUMNS_IN_WRAPPER_INDEX, } from "../../../db/repositories/dataColumnSidecars.js";
|
|
7
4
|
export async function* onDataColumnSidecarsByRoot(requestBody, chain, db) {
|
|
8
5
|
// SPEC: minimum_request_epoch = max(finalized_epoch, current_epoch - MIN_EPOCHS_FOR_DATA_COLUMN_SIDECARS_REQUESTS, FULU_FORK_EPOCH)
|
|
9
6
|
const finalizedEpoch = chain.forkChoice.getFinalizedCheckpoint().epoch;
|
|
@@ -21,27 +18,16 @@ export async function* onDataColumnSidecarsByRoot(requestBody, chain, db) {
|
|
|
21
18
|
if (!block || computeEpochAtSlot(block.slot) < minimumRequestEpoch) {
|
|
22
19
|
continue;
|
|
23
20
|
}
|
|
24
|
-
const
|
|
25
|
-
if (!
|
|
26
|
-
|
|
27
|
-
throw new ResponseError(RespStatus.SERVER_ERROR, `No item for root ${block.blockRoot} slot ${block.slot}`);
|
|
21
|
+
const dataColumns = await db.dataColumnSidecar.getManyBinary(fromHex(block.blockRoot), columns);
|
|
22
|
+
if (!dataColumns) {
|
|
23
|
+
throw new ResponseError(RespStatus.SERVER_ERROR, `No item for root=${block.blockRoot}, slot=${block.slot}`);
|
|
28
24
|
}
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
const dataColumnSidecarsBytes = dataColumnSidecarsBytesWrapped.slice(DATA_COLUMN_SIDECARS_IN_WRAPPER_INDEX + 4 * retrivedColumnsLen);
|
|
33
|
-
const dataColumnsIndex = dataColumnSidecarsBytesWrapped.slice(CUSTODY_COLUMNS_IN_IN_WRAPPER_INDEX, CUSTODY_COLUMNS_IN_IN_WRAPPER_INDEX + NUMBER_OF_COLUMNS);
|
|
34
|
-
for (const index of columns) {
|
|
35
|
-
const dataIndex = (dataColumnsIndex[index] ?? 0) - 1;
|
|
36
|
-
if (dataIndex < 0) {
|
|
37
|
-
throw new ResponseError(RespStatus.SERVER_ERROR, `dataColumnSidecar index=${index} not custodied`);
|
|
38
|
-
}
|
|
39
|
-
const dataColumnSidecarBytes = dataColumnSidecarsBytes.slice(dataIndex * columnsSize, (dataIndex + 1) * columnsSize);
|
|
40
|
-
if (dataColumnSidecarBytes.length !== columnsSize) {
|
|
41
|
-
throw Error(`Inconsistent state, dataColumnSidecar blockRoot=${blockRootHex} index=${index} dataColumnSidecarBytes=${dataColumnSidecarBytes.length} expected=${columnsSize}`);
|
|
25
|
+
for (const [index, dataColumnBytes] of dataColumns.entries()) {
|
|
26
|
+
if (!dataColumnBytes) {
|
|
27
|
+
throw new ResponseError(RespStatus.SERVER_ERROR, `dataColumnSidecar index=${columns[index]} not custodied`);
|
|
42
28
|
}
|
|
43
29
|
yield {
|
|
44
|
-
data:
|
|
30
|
+
data: dataColumnBytes,
|
|
45
31
|
boundary: chain.config.getForkBoundaryAtEpoch(computeEpochAtSlot(block.slot)),
|
|
46
32
|
};
|
|
47
33
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataColumnSidecarsByRoot.js","sourceRoot":"","sources":["../../../../src/network/reqresp/handlers/dataColumnSidecarsByRoot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"dataColumnSidecarsByRoot.js","sourceRoot":"","sources":["../../../../src/network/reqresp/handlers/dataColumnSidecarsByRoot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAE,aAAa,EAAmB,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAAC,kBAAkB,EAAC,MAAM,4BAA4B,CAAC;AAE9D,OAAO,EAAC,OAAO,EAAE,KAAK,EAAC,MAAM,iBAAiB,CAAC;AAI/C,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,0BAA0B,CAC/C,WAAiD,EACjD,KAAmB,EACnB,EAAa;IAEb,oIAAoI;IACpI,MAAM,cAAc,GAAG,KAAK,CAAC,UAAU,CAAC,sBAAsB,EAAE,CAAC,KAAK,CAAC;IACvE,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC;IAC9C,MAAM,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAClC,cAAc,EACd,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,4CAA4C,EACxE,KAAK,CAAC,MAAM,CAAC,eAAe,CAC7B,CAAC;IAEF,KAAK,MAAM,2BAA2B,IAAI,WAAW,EAAE,CAAC;QACtD,MAAM,EAAC,SAAS,EAAE,OAAO,EAAC,GAAG,2BAA2B,CAAC;QACzD,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QAEzD,2CAA2C;QAC3C,8EAA8E;QAC9E,mHAAmH;QACnH,4FAA4F;QAC5F,oJAAoJ;QACpJ,IAAI,CAAC,KAAK,IAAI,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,mBAAmB,EAAE,CAAC;YACnE,SAAS;QACX,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,iBAAiB,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;QAChG,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,aAAa,CAAC,UAAU,CAAC,YAAY,EAAE,oBAAoB,KAAK,CAAC,SAAS,UAAU,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9G,CAAC;QAED,KAAK,MAAM,CAAC,KAAK,EAAE,eAAe,CAAC,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC;YAC7D,IAAI,CAAC,eAAe,EAAE,CAAC;gBACrB,MAAM,IAAI,aAAa,CAAC,UAAU,CAAC,YAAY,EAAE,2BAA2B,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAC9G,CAAC;YAED,MAAM;gBACJ,IAAI,EAAE,eAAe;gBACrB,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;aAC9E,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC"}
|
package/lib/sync/unknownBlock.js
CHANGED
|
@@ -717,10 +717,7 @@ export class UnknownBlockPeerBalancer {
|
|
|
717
717
|
pendingDataColumns.add(column);
|
|
718
718
|
}
|
|
719
719
|
}
|
|
720
|
-
|
|
721
|
-
// no pending columns, we can return null
|
|
722
|
-
return null;
|
|
723
|
-
}
|
|
720
|
+
// there could be no pending column in case of NullBlockInput
|
|
724
721
|
eligiblePeers.push(...this.filterPeers(pendingDataColumns, excludedPeers));
|
|
725
722
|
}
|
|
726
723
|
else {
|