@lodestar/beacon-node 1.51.0-dev.e521668760 → 1.51.0-dev.e91a5043ed
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/state/index.d.ts.map +1 -1
- package/lib/api/impl/beacon/state/index.js +8 -2
- package/lib/api/impl/beacon/state/index.js.map +1 -1
- package/lib/api/impl/beacon/state/utils.d.ts +2 -1
- package/lib/api/impl/beacon/state/utils.d.ts.map +1 -1
- package/lib/api/impl/beacon/state/utils.js +17 -9
- package/lib/api/impl/beacon/state/utils.js.map +1 -1
- package/lib/api/impl/debug/index.d.ts.map +1 -1
- package/lib/api/impl/debug/index.js +3 -0
- package/lib/api/impl/debug/index.js.map +1 -1
- package/lib/api/impl/validator/index.d.ts.map +1 -1
- package/lib/api/impl/validator/index.js +102 -10
- package/lib/api/impl/validator/index.js.map +1 -1
- package/lib/chain/blocks/importBlock.d.ts.map +1 -1
- package/lib/chain/blocks/importBlock.js +3 -2
- package/lib/chain/blocks/importBlock.js.map +1 -1
- package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
- package/lib/chain/blocks/importExecutionPayload.js +50 -2
- package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
- package/lib/chain/blocks/types.d.ts +4 -0
- package/lib/chain/blocks/types.d.ts.map +1 -1
- package/lib/chain/blocks/types.js +5 -0
- package/lib/chain/blocks/types.js.map +1 -1
- package/lib/chain/chain.d.ts +2 -1
- package/lib/chain/chain.d.ts.map +1 -1
- package/lib/chain/chain.js +4 -1
- package/lib/chain/chain.js.map +1 -1
- package/lib/chain/errors/executionPayloadBid.d.ts +11 -1
- package/lib/chain/errors/executionPayloadBid.d.ts.map +1 -1
- package/lib/chain/errors/executionPayloadBid.js +2 -0
- package/lib/chain/errors/executionPayloadBid.js.map +1 -1
- package/lib/chain/errors/inclusionList.d.ts +60 -0
- package/lib/chain/errors/inclusionList.d.ts.map +1 -0
- package/lib/chain/errors/inclusionList.js +19 -0
- package/lib/chain/errors/inclusionList.js.map +1 -0
- package/lib/chain/errors/index.d.ts +1 -0
- package/lib/chain/errors/index.d.ts.map +1 -1
- package/lib/chain/errors/index.js +1 -0
- package/lib/chain/errors/index.js.map +1 -1
- package/lib/chain/interface.d.ts +2 -1
- package/lib/chain/interface.d.ts.map +1 -1
- package/lib/chain/interface.js.map +1 -1
- package/lib/chain/opPools/inclusionListStore.d.ts +63 -0
- package/lib/chain/opPools/inclusionListStore.d.ts.map +1 -0
- package/lib/chain/opPools/inclusionListStore.js +171 -0
- package/lib/chain/opPools/inclusionListStore.js.map +1 -0
- package/lib/chain/opPools/index.d.ts +1 -0
- package/lib/chain/opPools/index.d.ts.map +1 -1
- package/lib/chain/opPools/index.js +1 -0
- package/lib/chain/opPools/index.js.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.d.ts +3 -1
- package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.js +30 -10
- package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
- package/lib/chain/regen/interface.d.ts +1 -0
- package/lib/chain/regen/interface.d.ts.map +1 -1
- package/lib/chain/regen/interface.js +1 -0
- package/lib/chain/regen/interface.js.map +1 -1
- package/lib/chain/validation/executionPayloadBid.d.ts.map +1 -1
- package/lib/chain/validation/executionPayloadBid.js +33 -1
- package/lib/chain/validation/executionPayloadBid.js.map +1 -1
- package/lib/chain/validation/inclusionList.d.ts +14 -0
- package/lib/chain/validation/inclusionList.d.ts.map +1 -0
- package/lib/chain/validation/inclusionList.js +150 -0
- package/lib/chain/validation/inclusionList.js.map +1 -0
- package/lib/chain/validation/index.d.ts +1 -0
- package/lib/chain/validation/index.d.ts.map +1 -1
- package/lib/chain/validation/index.js +1 -0
- package/lib/chain/validation/index.js.map +1 -1
- package/lib/execution/builder/validateBid.d.ts.map +1 -1
- package/lib/execution/builder/validateBid.js +14 -1
- package/lib/execution/builder/validateBid.js.map +1 -1
- package/lib/execution/engine/blobVersionedHashes.d.ts +1 -1
- package/lib/execution/engine/blobVersionedHashes.d.ts.map +1 -1
- package/lib/execution/engine/blobVersionedHashes.js.map +1 -1
- package/lib/execution/engine/disabled.d.ts +1 -0
- package/lib/execution/engine/disabled.d.ts.map +1 -1
- package/lib/execution/engine/disabled.js +3 -0
- package/lib/execution/engine/disabled.js.map +1 -1
- package/lib/execution/engine/http.d.ts +8 -2
- package/lib/execution/engine/http.d.ts.map +1 -1
- package/lib/execution/engine/http.js +27 -4
- package/lib/execution/engine/http.js.map +1 -1
- package/lib/execution/engine/interface.d.ts +11 -2
- package/lib/execution/engine/interface.d.ts.map +1 -1
- package/lib/execution/engine/interface.js.map +1 -1
- package/lib/execution/engine/jsonRpcTransport.d.ts +3 -2
- package/lib/execution/engine/jsonRpcTransport.d.ts.map +1 -1
- package/lib/execution/engine/jsonRpcTransport.js +33 -9
- package/lib/execution/engine/jsonRpcTransport.js.map +1 -1
- package/lib/execution/engine/mock.d.ts +1 -0
- package/lib/execution/engine/mock.d.ts.map +1 -1
- package/lib/execution/engine/mock.js +31 -7
- package/lib/execution/engine/mock.js.map +1 -1
- package/lib/execution/engine/payloadIdCache.d.ts +5 -3
- package/lib/execution/engine/payloadIdCache.d.ts.map +1 -1
- package/lib/execution/engine/payloadIdCache.js +15 -4
- package/lib/execution/engine/payloadIdCache.js.map +1 -1
- package/lib/execution/engine/restTransport.d.ts +2 -1
- package/lib/execution/engine/restTransport.d.ts.map +1 -1
- package/lib/execution/engine/restTransport.js +3 -0
- package/lib/execution/engine/restTransport.js.map +1 -1
- package/lib/execution/engine/sszTypes.d.ts +38 -38
- package/lib/execution/engine/transport.d.ts +5 -2
- package/lib/execution/engine/transport.d.ts.map +1 -1
- package/lib/execution/engine/types.d.ts +25 -1
- package/lib/execution/engine/types.d.ts.map +1 -1
- package/lib/execution/engine/types.js +17 -4
- package/lib/execution/engine/types.js.map +1 -1
- package/lib/metrics/metrics/beacon.d.ts +16 -0
- package/lib/metrics/metrics/beacon.d.ts.map +1 -1
- package/lib/metrics/metrics/beacon.js +35 -0
- package/lib/metrics/metrics/beacon.js.map +1 -1
- package/lib/metrics/metrics/lodestar.d.ts +9 -0
- package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
- package/lib/metrics/metrics/lodestar.js +20 -0
- package/lib/metrics/metrics/lodestar.js.map +1 -1
- package/lib/network/gossip/interface.d.ts +8 -2
- package/lib/network/gossip/interface.d.ts.map +1 -1
- package/lib/network/gossip/interface.js +1 -0
- package/lib/network/gossip/interface.js.map +1 -1
- package/lib/network/gossip/topic.d.ts +13 -5
- package/lib/network/gossip/topic.d.ts.map +1 -1
- package/lib/network/gossip/topic.js +13 -1
- package/lib/network/gossip/topic.js.map +1 -1
- package/lib/network/interface.d.ts +2 -1
- package/lib/network/interface.d.ts.map +1 -1
- package/lib/network/network.d.ts +2 -1
- package/lib/network/network.d.ts.map +1 -1
- package/lib/network/network.js +5 -0
- package/lib/network/network.js.map +1 -1
- package/lib/network/peers/utils/enrSubnetsDeserialize.d.ts.map +1 -1
- package/lib/network/peers/utils/enrSubnetsDeserialize.js +5 -2
- package/lib/network/peers/utils/enrSubnetsDeserialize.js.map +1 -1
- package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
- package/lib/network/processor/gossipHandlers.js +40 -1
- package/lib/network/processor/gossipHandlers.js.map +1 -1
- package/lib/network/processor/gossipQueues/index.d.ts.map +1 -1
- package/lib/network/processor/gossipQueues/index.js +6 -0
- package/lib/network/processor/gossipQueues/index.js.map +1 -1
- package/lib/network/processor/gossipValidatorFn.d.ts.map +1 -1
- package/lib/network/processor/gossipValidatorFn.js +5 -1
- package/lib/network/processor/gossipValidatorFn.js.map +1 -1
- package/lib/network/processor/index.d.ts +5 -0
- package/lib/network/processor/index.d.ts.map +1 -1
- package/lib/network/processor/index.js +37 -26
- package/lib/network/processor/index.js.map +1 -1
- package/lib/network/reqresp/ReqRespBeaconNode.d.ts.map +1 -1
- package/lib/network/reqresp/ReqRespBeaconNode.js +6 -0
- package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
- package/lib/network/reqresp/handlers/inclusionListsByIndices.d.ts +10 -0
- package/lib/network/reqresp/handlers/inclusionListsByIndices.d.ts.map +1 -0
- package/lib/network/reqresp/handlers/inclusionListsByIndices.js +30 -0
- package/lib/network/reqresp/handlers/inclusionListsByIndices.js.map +1 -0
- package/lib/network/reqresp/handlers/index.d.ts.map +1 -1
- package/lib/network/reqresp/handlers/index.js +5 -0
- package/lib/network/reqresp/handlers/index.js.map +1 -1
- package/lib/network/reqresp/protocols.d.ts +1 -0
- package/lib/network/reqresp/protocols.d.ts.map +1 -1
- package/lib/network/reqresp/protocols.js +5 -0
- package/lib/network/reqresp/protocols.js.map +1 -1
- package/lib/network/reqresp/rateLimit.d.ts.map +1 -1
- package/lib/network/reqresp/rateLimit.js +4 -0
- package/lib/network/reqresp/rateLimit.js.map +1 -1
- package/lib/network/reqresp/types.d.ts +5 -2
- package/lib/network/reqresp/types.d.ts.map +1 -1
- package/lib/network/reqresp/types.js +3 -0
- package/lib/network/reqresp/types.js.map +1 -1
- package/package.json +30 -30
- package/src/api/impl/beacon/state/index.ts +10 -1
- package/src/api/impl/beacon/state/utils.ts +19 -9
- package/src/api/impl/debug/index.ts +4 -0
- package/src/api/impl/validator/index.ts +132 -10
- package/src/chain/blocks/importBlock.ts +3 -7
- package/src/chain/blocks/importExecutionPayload.ts +68 -2
- package/src/chain/blocks/types.ts +5 -0
- package/src/chain/chain.ts +4 -0
- package/src/chain/errors/executionPayloadBid.ts +12 -0
- package/src/chain/errors/inclusionList.ts +38 -0
- package/src/chain/errors/index.ts +1 -0
- package/src/chain/interface.ts +2 -0
- package/src/chain/opPools/inclusionListStore.ts +208 -0
- package/src/chain/opPools/index.ts +1 -0
- package/src/chain/produceBlock/produceBlockBody.ts +60 -19
- package/src/chain/regen/interface.ts +1 -0
- package/src/chain/validation/executionPayloadBid.ts +52 -2
- package/src/chain/validation/inclusionList.ts +192 -0
- package/src/chain/validation/index.ts +1 -0
- package/src/execution/builder/validateBid.ts +23 -2
- package/src/execution/engine/blobVersionedHashes.ts +1 -1
- package/src/execution/engine/disabled.ts +4 -0
- package/src/execution/engine/http.ts +40 -5
- package/src/execution/engine/interface.ts +27 -3
- package/src/execution/engine/jsonRpcTransport.ts +46 -9
- package/src/execution/engine/mock.ts +32 -7
- package/src/execution/engine/payloadIdCache.ts +24 -6
- package/src/execution/engine/restTransport.ts +15 -1
- package/src/execution/engine/transport.ts +7 -2
- package/src/execution/engine/types.ts +41 -6
- package/src/metrics/metrics/beacon.ts +37 -0
- package/src/metrics/metrics/lodestar.ts +21 -0
- package/src/network/gossip/interface.ts +5 -0
- package/src/network/gossip/topic.ts +14 -0
- package/src/network/interface.ts +2 -0
- package/src/network/network.ts +11 -0
- package/src/network/peers/utils/enrSubnetsDeserialize.ts +5 -2
- package/src/network/processor/gossipHandlers.ts +52 -1
- package/src/network/processor/gossipQueues/index.ts +6 -0
- package/src/network/processor/gossipValidatorFn.ts +5 -0
- package/src/network/processor/index.ts +33 -24
- package/src/network/processor/types.ts +1 -1
- package/src/network/reqresp/ReqRespBeaconNode.ts +7 -0
- package/src/network/reqresp/handlers/inclusionListsByIndices.ts +44 -0
- package/src/network/reqresp/handlers/index.ts +5 -0
- package/src/network/reqresp/protocols.ts +6 -0
- package/src/network/reqresp/rateLimit.ts +4 -0
- package/src/network/reqresp/types.ts +6 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import {PeerId} from "@libp2p/interface";
|
|
2
|
+
import {ResponseOutgoing} from "@lodestar/reqresp";
|
|
3
|
+
import {computeEpochAtSlot, computeStartSlotAtEpoch} from "@lodestar/state-transition";
|
|
4
|
+
import {heze, ssz} from "@lodestar/types";
|
|
5
|
+
import {toRootHex} from "@lodestar/utils";
|
|
6
|
+
import {IBeaconChain} from "../../../chain/index.js";
|
|
7
|
+
import {prettyPrintPeerId} from "../../util.js";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Only lists that passed gossip validation are stored and the store skips equivocators, so the spec's
|
|
11
|
+
* "SHOULD NOT respond with lists that fail gossip validation or are from equivocators" holds by construction.
|
|
12
|
+
*/
|
|
13
|
+
export async function* onInclusionListsByIndices(
|
|
14
|
+
requestBody: heze.InclusionListsByIndicesRequest,
|
|
15
|
+
chain: IBeaconChain,
|
|
16
|
+
peerId: PeerId,
|
|
17
|
+
peerClient: string
|
|
18
|
+
): AsyncIterable<ResponseOutgoing> {
|
|
19
|
+
const {slot, dependentRoot, indices} = requestBody;
|
|
20
|
+
|
|
21
|
+
const minimumRequestSlot = Math.max(
|
|
22
|
+
chain.clock.currentSlot - chain.config.MIN_SLOTS_FOR_INCLUSION_LISTS_REQUESTS,
|
|
23
|
+
computeStartSlotAtEpoch(chain.config.HEZE_FORK_EPOCH)
|
|
24
|
+
);
|
|
25
|
+
if (slot < minimumRequestSlot) {
|
|
26
|
+
chain.logger.debug("Cannot serve InclusionListsByIndices: slot below minimum request slot", {
|
|
27
|
+
slot,
|
|
28
|
+
minimumRequestSlot,
|
|
29
|
+
peer: prettyPrintPeerId(peerId),
|
|
30
|
+
client: peerClient,
|
|
31
|
+
});
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const signedInclusionLists = chain.inclusionListStore.getByIndices(slot, toRootHex(dependentRoot), indices);
|
|
36
|
+
|
|
37
|
+
const boundary = chain.config.getForkBoundaryAtEpoch(computeEpochAtSlot(slot));
|
|
38
|
+
for (const signedInclusionList of signedInclusionLists.slice(0, chain.config.MAX_REQUEST_INCLUSION_LIST)) {
|
|
39
|
+
yield {
|
|
40
|
+
data: ssz.heze.SignedInclusionList.serialize(signedInclusionList),
|
|
41
|
+
boundary,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -19,6 +19,7 @@ import {onDataColumnSidecarsByRange} from "./dataColumnSidecarsByRange.js";
|
|
|
19
19
|
import {onDataColumnSidecarsByRoot} from "./dataColumnSidecarsByRoot.js";
|
|
20
20
|
import {onExecutionPayloadEnvelopesByRange} from "./executionPayloadEnvelopesByRange.js";
|
|
21
21
|
import {onExecutionPayloadEnvelopesByRoot} from "./executionPayloadEnvelopesByRoot.js";
|
|
22
|
+
import {onInclusionListsByIndices} from "./inclusionListsByIndices.js";
|
|
22
23
|
import {onLightClientBootstrap} from "./lightClientBootstrap.js";
|
|
23
24
|
import {onLightClientFinalityUpdate} from "./lightClientFinalityUpdate.js";
|
|
24
25
|
import {onLightClientOptimisticUpdate} from "./lightClientOptimisticUpdate.js";
|
|
@@ -142,6 +143,10 @@ export function getReqRespHandlers({db, chain}: {db: IBeaconDb; chain: IBeaconCh
|
|
|
142
143
|
},
|
|
143
144
|
[ReqRespMethod.LightClientFinalityUpdate]: () => onLightClientFinalityUpdate(chain),
|
|
144
145
|
[ReqRespMethod.LightClientOptimisticUpdate]: () => onLightClientOptimisticUpdate(chain),
|
|
146
|
+
[ReqRespMethod.InclusionListsByIndices]: (req, peerId, peerClient) => {
|
|
147
|
+
const body = deserializeRequestBody(ssz.heze.InclusionListsByIndicesRequest, req.data);
|
|
148
|
+
return onInclusionListsByIndices(body, chain, peerId, peerClient);
|
|
149
|
+
},
|
|
145
150
|
};
|
|
146
151
|
|
|
147
152
|
return (method) => handlers[method];
|
|
@@ -113,6 +113,12 @@ export const ExecutionPayloadEnvelopesByRange = toProtocol({
|
|
|
113
113
|
contextBytesType: ContextBytesType.ForkDigest,
|
|
114
114
|
});
|
|
115
115
|
|
|
116
|
+
export const InclusionListsByIndices = toProtocol({
|
|
117
|
+
method: ReqRespMethod.InclusionListsByIndices,
|
|
118
|
+
version: Version.V1,
|
|
119
|
+
contextBytesType: ContextBytesType.ForkDigest,
|
|
120
|
+
});
|
|
121
|
+
|
|
116
122
|
export const LightClientBootstrap = toProtocol({
|
|
117
123
|
method: ReqRespMethod.LightClientBootstrap,
|
|
118
124
|
version: Version.V1,
|
|
@@ -109,6 +109,10 @@ export const rateLimitQuotas: (fork: ForkName, config: BeaconConfig) => Record<R
|
|
|
109
109
|
// Allow 2 per slot and a very safe bound until there's more testing of real usage.
|
|
110
110
|
byPeer: {quota: 2, quotaTimeMs: config.getSlotDurationMs(fork)},
|
|
111
111
|
},
|
|
112
|
+
[ReqRespMethod.InclusionListsByIndices]: {
|
|
113
|
+
// Peers only backfill what gossip missed, so a small per-slot allowance is enough
|
|
114
|
+
byPeer: {quota: 5, quotaTimeMs: config.getSlotDurationMs(fork)},
|
|
115
|
+
},
|
|
112
116
|
[ReqRespMethod.LightClientOptimisticUpdate]: {
|
|
113
117
|
// Optimistic updates should not be requested more than once per slot.
|
|
114
118
|
// Allow 2 per slot and a very safe bound until there's more testing of real usage.
|
|
@@ -16,6 +16,7 @@ import {
|
|
|
16
16
|
deneb,
|
|
17
17
|
fulu,
|
|
18
18
|
gloas,
|
|
19
|
+
heze,
|
|
19
20
|
phase0,
|
|
20
21
|
ssz,
|
|
21
22
|
sszTypesFor,
|
|
@@ -53,6 +54,7 @@ export enum ReqRespMethod {
|
|
|
53
54
|
LightClientUpdatesByRange = "light_client_updates_by_range",
|
|
54
55
|
LightClientFinalityUpdate = "light_client_finality_update",
|
|
55
56
|
LightClientOptimisticUpdate = "light_client_optimistic_update",
|
|
57
|
+
InclusionListsByIndices = "inclusion_lists_by_indices",
|
|
56
58
|
}
|
|
57
59
|
|
|
58
60
|
// To typesafe events to network
|
|
@@ -74,6 +76,7 @@ export type RequestBodyByMethod = {
|
|
|
74
76
|
[ReqRespMethod.LightClientUpdatesByRange]: altair.LightClientUpdatesByRange;
|
|
75
77
|
[ReqRespMethod.LightClientFinalityUpdate]: null;
|
|
76
78
|
[ReqRespMethod.LightClientOptimisticUpdate]: null;
|
|
79
|
+
[ReqRespMethod.InclusionListsByIndices]: heze.InclusionListsByIndicesRequest;
|
|
77
80
|
};
|
|
78
81
|
|
|
79
82
|
type ResponseBodyByMethod = {
|
|
@@ -96,6 +99,7 @@ type ResponseBodyByMethod = {
|
|
|
96
99
|
[ReqRespMethod.LightClientUpdatesByRange]: LightClientUpdate;
|
|
97
100
|
[ReqRespMethod.LightClientFinalityUpdate]: LightClientFinalityUpdate;
|
|
98
101
|
[ReqRespMethod.LightClientOptimisticUpdate]: LightClientOptimisticUpdate;
|
|
102
|
+
[ReqRespMethod.InclusionListsByIndices]: heze.SignedInclusionList;
|
|
99
103
|
};
|
|
100
104
|
|
|
101
105
|
/** Request SSZ type for each method and ForkName */
|
|
@@ -126,6 +130,7 @@ export const requestSszTypeByMethod: (
|
|
|
126
130
|
[ReqRespMethod.LightClientUpdatesByRange]: ssz.altair.LightClientUpdatesByRange,
|
|
127
131
|
[ReqRespMethod.LightClientFinalityUpdate]: null,
|
|
128
132
|
[ReqRespMethod.LightClientOptimisticUpdate]: null,
|
|
133
|
+
[ReqRespMethod.InclusionListsByIndices]: ssz.heze.InclusionListsByIndicesRequest,
|
|
129
134
|
});
|
|
130
135
|
|
|
131
136
|
export type ResponseTypeGetter<T> = (fork: ForkName, version: number) => Type<T>;
|
|
@@ -158,6 +163,7 @@ export const responseSszTypeByMethod: {[K in ReqRespMethod]: ResponseTypeGetter<
|
|
|
158
163
|
[ReqRespMethod.ExecutionPayloadEnvelopesByRange]: () => ssz.gloas.SignedExecutionPayloadEnvelope,
|
|
159
164
|
[ReqRespMethod.LightClientOptimisticUpdate]: (fork) =>
|
|
160
165
|
sszTypesFor(onlyPostAltairFork(fork)).LightClientOptimisticUpdate,
|
|
166
|
+
[ReqRespMethod.InclusionListsByIndices]: () => ssz.heze.SignedInclusionList,
|
|
161
167
|
};
|
|
162
168
|
|
|
163
169
|
function onlyPostAltairFork(fork: ForkName): ForkPostAltair {
|