@lodestar/beacon-node 1.22.0-dev.6f470f8a35 → 1.22.0-dev.a7286bd669
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 +14 -2
- package/lib/api/impl/beacon/blocks/index.js.map +1 -1
- package/lib/api/impl/beacon/pool/index.js +31 -4
- package/lib/api/impl/beacon/pool/index.js.map +1 -1
- package/lib/api/impl/config/constants.d.ts +5 -1
- package/lib/api/impl/config/constants.js +7 -2
- package/lib/api/impl/config/constants.js.map +1 -1
- package/lib/api/impl/validator/index.js +26 -4
- package/lib/api/impl/validator/index.js.map +1 -1
- package/lib/chain/blocks/importBlock.js +3 -1
- package/lib/chain/blocks/importBlock.js.map +1 -1
- package/lib/chain/blocks/types.d.ts +2 -2
- package/lib/chain/blocks/types.js.map +1 -1
- package/lib/chain/chain.d.ts +40 -0
- package/lib/chain/chain.js +31 -2
- package/lib/chain/chain.js.map +1 -1
- package/lib/chain/errors/attestationError.d.ts +13 -1
- package/lib/chain/errors/attestationError.js +8 -0
- package/lib/chain/errors/attestationError.js.map +1 -1
- package/lib/chain/historicalState/worker.js +4 -0
- package/lib/chain/historicalState/worker.js.map +1 -1
- package/lib/chain/opPools/aggregatedAttestationPool.d.ts +46 -12
- package/lib/chain/opPools/aggregatedAttestationPool.js +226 -59
- package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
- package/lib/chain/opPools/attestationPool.d.ts +22 -6
- package/lib/chain/opPools/attestationPool.js +61 -27
- package/lib/chain/opPools/attestationPool.js.map +1 -1
- package/lib/chain/opPools/opPool.d.ts +2 -2
- package/lib/chain/opPools/opPool.js +5 -3
- package/lib/chain/opPools/opPool.js.map +1 -1
- package/lib/chain/opPools/utils.d.ts +2 -0
- package/lib/chain/opPools/utils.js +3 -0
- package/lib/chain/opPools/utils.js.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.js +2 -1
- package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
- package/lib/chain/regen/queued.d.ts +6 -1
- package/lib/chain/regen/queued.js +38 -0
- package/lib/chain/regen/queued.js.map +1 -1
- package/lib/chain/seenCache/seenAttestationData.d.ts +13 -5
- package/lib/chain/seenCache/seenAttestationData.js +5 -3
- package/lib/chain/seenCache/seenAttestationData.js.map +1 -1
- package/lib/chain/stateCache/blockStateCacheImpl.d.ts +1 -0
- package/lib/chain/stateCache/blockStateCacheImpl.js +4 -1
- package/lib/chain/stateCache/blockStateCacheImpl.js.map +1 -1
- package/lib/chain/stateCache/fifoBlockStateCache.d.ts +1 -0
- package/lib/chain/stateCache/fifoBlockStateCache.js +3 -0
- package/lib/chain/stateCache/fifoBlockStateCache.js.map +1 -1
- package/lib/chain/stateCache/inMemoryCheckpointsCache.d.ts +1 -0
- package/lib/chain/stateCache/inMemoryCheckpointsCache.js +3 -0
- package/lib/chain/stateCache/inMemoryCheckpointsCache.js.map +1 -1
- package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +1 -0
- package/lib/chain/stateCache/persistentCheckpointsCache.js +6 -0
- package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
- package/lib/chain/stateCache/types.d.ts +4 -0
- package/lib/chain/stateCache/types.js.map +1 -1
- package/lib/chain/validation/aggregateAndProof.d.ts +4 -4
- package/lib/chain/validation/aggregateAndProof.js +24 -7
- package/lib/chain/validation/aggregateAndProof.js.map +1 -1
- package/lib/chain/validation/attestation.d.ts +27 -6
- package/lib/chain/validation/attestation.js +109 -31
- package/lib/chain/validation/attestation.js.map +1 -1
- package/lib/chain/validation/attesterSlashing.js +2 -1
- package/lib/chain/validation/attesterSlashing.js.map +1 -1
- package/lib/chain/validation/signatureSets/aggregateAndProof.d.ts +4 -3
- package/lib/chain/validation/signatureSets/aggregateAndProof.js +3 -2
- package/lib/chain/validation/signatureSets/aggregateAndProof.js.map +1 -1
- package/lib/eth1/eth1DepositDataTracker.d.ts +5 -2
- package/lib/eth1/eth1DepositDataTracker.js +13 -2
- package/lib/eth1/eth1DepositDataTracker.js.map +1 -1
- package/lib/eth1/index.d.ts +2 -0
- package/lib/eth1/index.js +6 -0
- package/lib/eth1/index.js.map +1 -1
- package/lib/eth1/interface.d.ts +4 -0
- package/lib/eth1/utils/deposits.d.ts +2 -2
- package/lib/eth1/utils/deposits.js +6 -5
- package/lib/eth1/utils/deposits.js.map +1 -1
- package/lib/execution/engine/http.d.ts +2 -2
- package/lib/execution/engine/http.js +19 -15
- package/lib/execution/engine/http.js.map +1 -1
- package/lib/execution/engine/interface.d.ts +4 -4
- package/lib/execution/engine/interface.js.map +1 -1
- package/lib/execution/engine/mock.d.ts +1 -0
- package/lib/execution/engine/mock.js +6 -0
- package/lib/execution/engine/mock.js.map +1 -1
- package/lib/execution/engine/payloadIdCache.d.ts +17 -0
- package/lib/execution/engine/payloadIdCache.js.map +1 -1
- package/lib/execution/engine/types.d.ts +29 -3
- package/lib/execution/engine/types.js +81 -0
- package/lib/execution/engine/types.js.map +1 -1
- package/lib/metrics/metrics/beacon.d.ts +3 -0
- package/lib/metrics/metrics/beacon.js +6 -0
- package/lib/metrics/metrics/beacon.js.map +1 -1
- package/lib/metrics/metrics/lodestar.d.ts +9 -0
- package/lib/metrics/metrics/lodestar.js +34 -0
- package/lib/metrics/metrics/lodestar.js.map +1 -1
- package/lib/metrics/validatorMonitor.d.ts +1 -1
- package/lib/metrics/validatorMonitor.js +6 -1
- package/lib/metrics/validatorMonitor.js.map +1 -1
- package/lib/network/gossip/interface.d.ts +5 -5
- package/lib/network/gossip/interface.js.map +1 -1
- package/lib/network/gossip/topic.d.ts +1720 -129
- package/lib/network/gossip/topic.js +5 -5
- package/lib/network/gossip/topic.js.map +1 -1
- package/lib/network/interface.d.ts +2 -2
- package/lib/network/network.d.ts +2 -2
- package/lib/network/network.js.map +1 -1
- package/lib/network/processor/gossipHandlers.js +6 -6
- package/lib/network/processor/gossipHandlers.js.map +1 -1
- package/lib/network/processor/gossipQueues/index.js +5 -2
- package/lib/network/processor/gossipQueues/index.js.map +1 -1
- package/lib/network/processor/gossipQueues/indexed.js +1 -0
- package/lib/network/processor/gossipQueues/indexed.js.map +1 -1
- package/lib/util/sszBytes.d.ts +31 -8
- package/lib/util/sszBytes.js +74 -13
- package/lib/util/sszBytes.js.map +1 -1
- package/package.json +15 -15
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { aggregateSignatures } from "@chainsafe/blst";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { BitArray } from "@chainsafe/ssz";
|
|
3
|
+
import { ForkName, ForkSeq, isForkPostElectra, MAX_ATTESTATIONS, MAX_ATTESTATIONS_ELECTRA, MAX_COMMITTEES_PER_SLOT, MIN_ATTESTATION_INCLUSION_DELAY, SLOTS_PER_EPOCH, } from "@lodestar/params";
|
|
4
|
+
import { ssz, isElectraAttestation, } from "@lodestar/types";
|
|
4
5
|
import { computeEpochAtSlot, computeStartSlotAtEpoch, getBlockRootAtSlot, } from "@lodestar/state-transition";
|
|
5
6
|
import { EpochDifference } from "@lodestar/fork-choice";
|
|
6
|
-
import { MapDef, toRootHex } from "@lodestar/utils";
|
|
7
|
+
import { MapDef, toRootHex, assert } from "@lodestar/utils";
|
|
7
8
|
import { intersectUint8Arrays, IntersectResult } from "../../util/bitArray.js";
|
|
8
9
|
import { pruneBySlot, signatureFromBytesNoCheck } from "./utils.js";
|
|
9
10
|
import { InsertOutcome } from "./types.js";
|
|
@@ -15,13 +16,19 @@ import { InsertOutcome } from "./types.js";
|
|
|
15
16
|
*/
|
|
16
17
|
const MAX_RETAINED_ATTESTATIONS_PER_GROUP = 4;
|
|
17
18
|
/**
|
|
18
|
-
*
|
|
19
|
+
* Pre-electra, each slot has 64 committees, and each block has 128 attestations max so in average
|
|
19
20
|
* we get 2 attestation per groups.
|
|
20
21
|
* Starting from Jan 2024, we have a performance issue getting attestations for a block. Based on the
|
|
21
|
-
* fact that lot of groups will have only 1
|
|
22
|
+
* fact that lot of groups will have only 1 full participation attestation, increase this number
|
|
22
23
|
* a bit higher than average. This also help decrease number of slots to search for attestations.
|
|
23
24
|
*/
|
|
24
25
|
const MAX_ATTESTATIONS_PER_GROUP = 3;
|
|
26
|
+
/**
|
|
27
|
+
* For electra, each block has up to 8 aggregated attestations, assuming there are 3 for the "best"
|
|
28
|
+
* attestation data, there are still 5 for other attestation data so this constant is still good.
|
|
29
|
+
* We should separate to 2 constant based on conditions of different networks
|
|
30
|
+
*/
|
|
31
|
+
const MAX_ATTESTATIONS_PER_GROUP_ELECTRA = 3;
|
|
25
32
|
/**
|
|
26
33
|
* Maintain a pool of aggregated attestations. Attestations can be retrieved for inclusion in a block
|
|
27
34
|
* or api. The returned attestations are aggregated to maximise the number of validators that can be
|
|
@@ -29,18 +36,24 @@ const MAX_ATTESTATIONS_PER_GROUP = 3;
|
|
|
29
36
|
* Note that we want to remove attestations with attesters that were included in the chain.
|
|
30
37
|
*/
|
|
31
38
|
export class AggregatedAttestationPool {
|
|
32
|
-
constructor() {
|
|
33
|
-
this.
|
|
39
|
+
constructor(config) {
|
|
40
|
+
this.config = config;
|
|
41
|
+
/**
|
|
42
|
+
* post electra, different committees could have the same AttData and we have to consolidate attestations of the same
|
|
43
|
+
* data to be included in block, so we should group by data before index
|
|
44
|
+
* // TODO: make sure it does not affect performance for pre electra forks
|
|
45
|
+
*/
|
|
46
|
+
this.attestationGroupByIndexByDataHexBySlot = new MapDef(() => new Map());
|
|
34
47
|
this.lowestPermissibleSlot = 0;
|
|
35
48
|
}
|
|
36
49
|
/** For metrics to track size of the pool */
|
|
37
50
|
getAttestationCount() {
|
|
38
51
|
let attestationCount = 0;
|
|
39
52
|
let attestationDataCount = 0;
|
|
40
|
-
for (const
|
|
41
|
-
for (const
|
|
42
|
-
attestationDataCount +=
|
|
43
|
-
for (const attestationGroup of
|
|
53
|
+
for (const attestationGroupByIndexByDataHex of this.attestationGroupByIndexByDataHexBySlot.values()) {
|
|
54
|
+
for (const attestationGroupByIndex of attestationGroupByIndexByDataHex.values()) {
|
|
55
|
+
attestationDataCount += attestationGroupByIndex.size;
|
|
56
|
+
for (const attestationGroup of attestationGroupByIndex.values()) {
|
|
44
57
|
attestationCount += attestationGroup.getAttestationCount();
|
|
45
58
|
}
|
|
46
59
|
}
|
|
@@ -54,16 +67,31 @@ export class AggregatedAttestationPool {
|
|
|
54
67
|
if (slot < lowestPermissibleSlot) {
|
|
55
68
|
return InsertOutcome.Old;
|
|
56
69
|
}
|
|
57
|
-
const
|
|
58
|
-
let
|
|
59
|
-
if (!
|
|
60
|
-
|
|
61
|
-
|
|
70
|
+
const attestationGroupByIndexByDataHash = this.attestationGroupByIndexByDataHexBySlot.getOrDefault(slot);
|
|
71
|
+
let attestationGroupByIndex = attestationGroupByIndexByDataHash.get(dataRootHex);
|
|
72
|
+
if (!attestationGroupByIndex) {
|
|
73
|
+
attestationGroupByIndex = new Map();
|
|
74
|
+
attestationGroupByIndexByDataHash.set(dataRootHex, attestationGroupByIndex);
|
|
75
|
+
}
|
|
76
|
+
let committeeIndex;
|
|
77
|
+
if (isForkPostElectra(this.config.getForkName(slot))) {
|
|
78
|
+
if (!isElectraAttestation(attestation)) {
|
|
79
|
+
throw Error(`Attestation should be type electra.Attestation for slot ${slot}`);
|
|
80
|
+
}
|
|
81
|
+
committeeIndex = attestation.committeeBits.getSingleTrueBit();
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
if (isElectraAttestation(attestation)) {
|
|
85
|
+
throw Error(`Attestation should be type phase0.Attestation for slot ${slot}`);
|
|
86
|
+
}
|
|
87
|
+
committeeIndex = attestation.data.index;
|
|
62
88
|
}
|
|
63
|
-
|
|
89
|
+
// this should not happen because attestation should be validated before reaching this
|
|
90
|
+
assert.notNull(committeeIndex, "Committee index should not be null in aggregated attestation pool");
|
|
91
|
+
let attestationGroup = attestationGroupByIndex.get(committeeIndex);
|
|
64
92
|
if (!attestationGroup) {
|
|
65
93
|
attestationGroup = new MatchingDataAttestationGroup(committee, attestation.data);
|
|
66
|
-
|
|
94
|
+
attestationGroupByIndex.set(committeeIndex, attestationGroup);
|
|
67
95
|
}
|
|
68
96
|
return attestationGroup.add({
|
|
69
97
|
attestation,
|
|
@@ -73,27 +101,33 @@ export class AggregatedAttestationPool {
|
|
|
73
101
|
/** Remove attestations which are too old to be included in a block. */
|
|
74
102
|
prune(clockSlot) {
|
|
75
103
|
// Only retain SLOTS_PER_EPOCH slots
|
|
76
|
-
pruneBySlot(this.
|
|
104
|
+
pruneBySlot(this.attestationGroupByIndexByDataHexBySlot, clockSlot, SLOTS_PER_EPOCH);
|
|
77
105
|
this.lowestPermissibleSlot = Math.max(clockSlot - SLOTS_PER_EPOCH, 0);
|
|
78
106
|
}
|
|
107
|
+
getAttestationsForBlock(fork, forkChoice, state) {
|
|
108
|
+
const forkSeq = ForkSeq[fork];
|
|
109
|
+
return forkSeq >= ForkSeq.electra
|
|
110
|
+
? this.getAttestationsForBlockElectra(fork, forkChoice, state)
|
|
111
|
+
: this.getAttestationsForBlockPreElectra(fork, forkChoice, state);
|
|
112
|
+
}
|
|
79
113
|
/**
|
|
80
|
-
* Get attestations to be included in a block. Returns $MAX_ATTESTATIONS items
|
|
114
|
+
* Get attestations to be included in a block pre-electra. Returns up to $MAX_ATTESTATIONS items
|
|
81
115
|
*/
|
|
82
|
-
|
|
116
|
+
getAttestationsForBlockPreElectra(fork, forkChoice, state) {
|
|
83
117
|
const stateSlot = state.slot;
|
|
84
118
|
const stateEpoch = state.epochCtx.epoch;
|
|
85
119
|
const statePrevEpoch = stateEpoch - 1;
|
|
86
120
|
const notSeenValidatorsFn = getNotSeenValidatorsFn(state);
|
|
87
121
|
const validateAttestationDataFn = getValidateAttestationDataFn(forkChoice, state);
|
|
88
122
|
const attestationsByScore = [];
|
|
89
|
-
const slots = Array.from(this.
|
|
123
|
+
const slots = Array.from(this.attestationGroupByIndexByDataHexBySlot.keys()).sort((a, b) => b - a);
|
|
90
124
|
let minScore = Number.MAX_SAFE_INTEGER;
|
|
91
125
|
let slotCount = 0;
|
|
92
126
|
slot: for (const slot of slots) {
|
|
93
127
|
slotCount++;
|
|
94
|
-
const
|
|
128
|
+
const attestationGroupByIndexByDataHash = this.attestationGroupByIndexByDataHexBySlot.get(slot);
|
|
95
129
|
// should not happen
|
|
96
|
-
if (!
|
|
130
|
+
if (!attestationGroupByIndexByDataHash) {
|
|
97
131
|
throw Error(`No aggregated attestation pool for slot=${slot}`);
|
|
98
132
|
}
|
|
99
133
|
const epoch = computeEpochAtSlot(slot);
|
|
@@ -108,30 +142,21 @@ export class AggregatedAttestationPool {
|
|
|
108
142
|
continue; // Invalid attestations
|
|
109
143
|
}
|
|
110
144
|
const slotDelta = stateSlot - slot;
|
|
111
|
-
const
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
attestationsByScore.length >= MAX_ATTESTATIONS &&
|
|
127
|
-
notSeenAttestingIndices.size / slotDelta < minScore) {
|
|
128
|
-
// after 2 slots, there are a good chance that we have 2 * MAX_ATTESTATIONS attestations and break the for loop early
|
|
129
|
-
// if not, we may have to scan all slots in the pool
|
|
130
|
-
// if we have enough attestations and the max possible score is lower than scores of `attestationsByScore`, we should skip
|
|
131
|
-
// otherwise it takes time to check attestation, add it and remove it later after the sort by score
|
|
132
|
-
continue;
|
|
133
|
-
}
|
|
134
|
-
for (const attestationGroup of attestationGroupByData.values()) {
|
|
145
|
+
for (const attestationGroupByIndex of attestationGroupByIndexByDataHash.values()) {
|
|
146
|
+
for (const [committeeIndex, attestationGroup] of attestationGroupByIndex.entries()) {
|
|
147
|
+
const notSeenAttestingIndices = notSeenValidatorsFn(epoch, slot, committeeIndex);
|
|
148
|
+
if (notSeenAttestingIndices === null || notSeenAttestingIndices.size === 0) {
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
if (slotCount > 2 &&
|
|
152
|
+
attestationsByScore.length >= MAX_ATTESTATIONS &&
|
|
153
|
+
notSeenAttestingIndices.size / slotDelta < minScore) {
|
|
154
|
+
// after 2 slots, there are a good chance that we have 2 * MAX_ATTESTATIONS attestations and break the for loop early
|
|
155
|
+
// if not, we may have to scan all slots in the pool
|
|
156
|
+
// if we have enough attestations and the max possible score is lower than scores of `attestationsByScore`, we should skip
|
|
157
|
+
// otherwise it takes time to check attestation, add it and remove it later after the sort by score
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
135
160
|
if (!validateAttestationDataFn(attestationGroup.data)) {
|
|
136
161
|
continue;
|
|
137
162
|
}
|
|
@@ -142,7 +167,7 @@ export class AggregatedAttestationPool {
|
|
|
142
167
|
// These properties should not change after being validate in gossip
|
|
143
168
|
// IF they have to be validated, do it only with one attestation per group since same data
|
|
144
169
|
// The committeeCountPerSlot can be precomputed once per slot
|
|
145
|
-
for (const { attestation, notSeenAttesterCount } of attestationGroup.getAttestationsForBlock(notSeenAttestingIndices)) {
|
|
170
|
+
for (const { attestation, notSeenAttesterCount } of attestationGroup.getAttestationsForBlock(fork, notSeenAttestingIndices)) {
|
|
146
171
|
const score = notSeenAttesterCount / slotDelta;
|
|
147
172
|
if (score < minScore) {
|
|
148
173
|
minScore = score;
|
|
@@ -170,17 +195,117 @@ export class AggregatedAttestationPool {
|
|
|
170
195
|
}
|
|
171
196
|
return attestationsForBlock;
|
|
172
197
|
}
|
|
198
|
+
/**
|
|
199
|
+
* Get attestations to be included in an electra block. Returns up to $MAX_ATTESTATIONS_ELECTRA items
|
|
200
|
+
*/
|
|
201
|
+
getAttestationsForBlockElectra(fork, forkChoice, state) {
|
|
202
|
+
const stateSlot = state.slot;
|
|
203
|
+
const stateEpoch = state.epochCtx.epoch;
|
|
204
|
+
const statePrevEpoch = stateEpoch - 1;
|
|
205
|
+
const notSeenValidatorsFn = getNotSeenValidatorsFn(state);
|
|
206
|
+
const validateAttestationDataFn = getValidateAttestationDataFn(forkChoice, state);
|
|
207
|
+
const slots = Array.from(this.attestationGroupByIndexByDataHexBySlot.keys()).sort((a, b) => b - a);
|
|
208
|
+
const consolidations = [];
|
|
209
|
+
let minScore = Number.MAX_SAFE_INTEGER;
|
|
210
|
+
let slotCount = 0;
|
|
211
|
+
slot: for (const slot of slots) {
|
|
212
|
+
slotCount++;
|
|
213
|
+
const attestationGroupByIndexByDataHash = this.attestationGroupByIndexByDataHexBySlot.get(slot);
|
|
214
|
+
// should not happen
|
|
215
|
+
if (!attestationGroupByIndexByDataHash) {
|
|
216
|
+
throw Error(`No aggregated attestation pool for slot=${slot}`);
|
|
217
|
+
}
|
|
218
|
+
const epoch = computeEpochAtSlot(slot);
|
|
219
|
+
// validateAttestation condition: Attestation target epoch not in previous or current epoch
|
|
220
|
+
if (!(epoch === stateEpoch || epoch === statePrevEpoch)) {
|
|
221
|
+
continue; // Invalid attestations
|
|
222
|
+
}
|
|
223
|
+
// validateAttestation condition: Attestation slot not within inclusion window
|
|
224
|
+
if (!(slot + MIN_ATTESTATION_INCLUSION_DELAY <= stateSlot)) {
|
|
225
|
+
continue; // Invalid attestations
|
|
226
|
+
}
|
|
227
|
+
const slotDelta = stateSlot - slot;
|
|
228
|
+
// CommitteeIndex 0 1 2 ... Consolidation
|
|
229
|
+
// Attestations att00 --- att10 --- att20 --- 0 (att 00 10 20)
|
|
230
|
+
// att01 --- - --- att21 --- 1 (att 01 __ 21)
|
|
231
|
+
// - --- - --- att22 --- 2 (att __ __ 22)
|
|
232
|
+
for (const attestationGroupByIndex of attestationGroupByIndexByDataHash.values()) {
|
|
233
|
+
// sameAttDataCons could be up to MAX_ATTESTATIONS_PER_GROUP_ELECTRA
|
|
234
|
+
const sameAttDataCons = [];
|
|
235
|
+
for (const [committeeIndex, attestationGroup] of attestationGroupByIndex.entries()) {
|
|
236
|
+
const notSeenAttestingIndices = notSeenValidatorsFn(epoch, slot, committeeIndex);
|
|
237
|
+
if (notSeenAttestingIndices === null || notSeenAttestingIndices.size === 0) {
|
|
238
|
+
continue;
|
|
239
|
+
}
|
|
240
|
+
if (slotCount > 2 &&
|
|
241
|
+
consolidations.length >= MAX_ATTESTATIONS_ELECTRA &&
|
|
242
|
+
notSeenAttestingIndices.size / slotDelta < minScore) {
|
|
243
|
+
// after 2 slots, there are a good chance that we have 2 * MAX_ATTESTATIONS_ELECTRA attestations and break the for loop early
|
|
244
|
+
// if not, we may have to scan all slots in the pool
|
|
245
|
+
// if we have enough attestations and the max possible score is lower than scores of `attestationsByScore`, we should skip
|
|
246
|
+
// otherwise it takes time to check attestation, add it and remove it later after the sort by score
|
|
247
|
+
continue;
|
|
248
|
+
}
|
|
249
|
+
if (!validateAttestationDataFn(attestationGroup.data)) {
|
|
250
|
+
continue;
|
|
251
|
+
}
|
|
252
|
+
// TODO: Is it necessary to validateAttestation for:
|
|
253
|
+
// - Attestation committee index not within current committee count
|
|
254
|
+
// - Attestation aggregation bits length does not match committee length
|
|
255
|
+
//
|
|
256
|
+
// These properties should not change after being validate in gossip
|
|
257
|
+
// IF they have to be validated, do it only with one attestation per group since same data
|
|
258
|
+
// The committeeCountPerSlot can be precomputed once per slot
|
|
259
|
+
for (const [i, attestationNonParticipation] of attestationGroup
|
|
260
|
+
.getAttestationsForBlock(fork, notSeenAttestingIndices)
|
|
261
|
+
.entries()) {
|
|
262
|
+
if (sameAttDataCons[i] === undefined) {
|
|
263
|
+
sameAttDataCons[i] = {
|
|
264
|
+
byCommittee: new Map(),
|
|
265
|
+
attData: attestationNonParticipation.attestation.data,
|
|
266
|
+
totalNotSeenCount: 0,
|
|
267
|
+
// only update score after we have full data
|
|
268
|
+
score: 0,
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
sameAttDataCons[i].byCommittee.set(committeeIndex, attestationNonParticipation);
|
|
272
|
+
sameAttDataCons[i].totalNotSeenCount += attestationNonParticipation.notSeenAttesterCount;
|
|
273
|
+
}
|
|
274
|
+
for (const consolidation of sameAttDataCons) {
|
|
275
|
+
const score = consolidation.totalNotSeenCount / slotDelta;
|
|
276
|
+
if (score < minScore) {
|
|
277
|
+
minScore = score;
|
|
278
|
+
}
|
|
279
|
+
consolidations.push({ ...consolidation, score });
|
|
280
|
+
// Stop accumulating attestations there are enough that may have good scoring
|
|
281
|
+
if (consolidations.length >= MAX_ATTESTATIONS_ELECTRA * 2) {
|
|
282
|
+
break slot;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
const sortedConsolidationsByScore = consolidations
|
|
289
|
+
.sort((a, b) => b.score - a.score)
|
|
290
|
+
.slice(0, MAX_ATTESTATIONS_ELECTRA);
|
|
291
|
+
// on chain aggregation is expensive, only do it after all
|
|
292
|
+
return sortedConsolidationsByScore.map(aggregateConsolidation);
|
|
293
|
+
}
|
|
173
294
|
/**
|
|
174
295
|
* Get all attestations optionally filtered by `attestation.data.slot`
|
|
296
|
+
* Note this function is not fork aware and can potentially return a mix
|
|
297
|
+
* of phase0.Attestations and electra.Attestations.
|
|
298
|
+
* Caller of this function is expected to filtered result if they desire
|
|
299
|
+
* a homogenous array.
|
|
175
300
|
* @param bySlot slot to filter, `bySlot === attestation.data.slot`
|
|
176
301
|
*/
|
|
177
302
|
getAll(bySlot) {
|
|
178
303
|
let attestationGroupsArr;
|
|
179
304
|
if (bySlot === undefined) {
|
|
180
|
-
attestationGroupsArr = Array.from(this.
|
|
305
|
+
attestationGroupsArr = Array.from(this.attestationGroupByIndexByDataHexBySlot.values()).flatMap((byIndex) => Array.from(byIndex.values()));
|
|
181
306
|
}
|
|
182
307
|
else {
|
|
183
|
-
const attestationGroupsByIndex = this.
|
|
308
|
+
const attestationGroupsByIndex = this.attestationGroupByIndexByDataHexBySlot.get(bySlot);
|
|
184
309
|
if (!attestationGroupsByIndex)
|
|
185
310
|
throw Error(`No attestations for slot ${bySlot}`);
|
|
186
311
|
attestationGroupsArr = Array.from(attestationGroupsByIndex.values());
|
|
@@ -255,9 +380,14 @@ export class MatchingDataAttestationGroup {
|
|
|
255
380
|
* @param notSeenAttestingIndices not seen attestting indices, i.e. indices in the same committee
|
|
256
381
|
* @returns an array of AttestationNonParticipant
|
|
257
382
|
*/
|
|
258
|
-
getAttestationsForBlock(notSeenAttestingIndices) {
|
|
383
|
+
getAttestationsForBlock(fork, notSeenAttestingIndices) {
|
|
259
384
|
const attestations = [];
|
|
385
|
+
const isPostElectra = isForkPostElectra(fork);
|
|
260
386
|
for (const { attestation } of this.attestations) {
|
|
387
|
+
if ((isPostElectra && !isElectraAttestation(attestation)) ||
|
|
388
|
+
(!isPostElectra && isElectraAttestation(attestation))) {
|
|
389
|
+
continue;
|
|
390
|
+
}
|
|
261
391
|
let notSeenAttesterCount = 0;
|
|
262
392
|
const { aggregationBits } = attestation;
|
|
263
393
|
for (const notSeenIndex of notSeenAttestingIndices) {
|
|
@@ -269,13 +399,12 @@ export class MatchingDataAttestationGroup {
|
|
|
269
399
|
attestations.push({ attestation, notSeenAttesterCount });
|
|
270
400
|
}
|
|
271
401
|
}
|
|
272
|
-
|
|
402
|
+
const maxAttestation = isPostElectra ? MAX_ATTESTATIONS_PER_GROUP_ELECTRA : MAX_ATTESTATIONS_PER_GROUP;
|
|
403
|
+
if (attestations.length <= maxAttestation) {
|
|
273
404
|
return attestations;
|
|
274
405
|
}
|
|
275
406
|
else {
|
|
276
|
-
return attestations
|
|
277
|
-
.sort((a, b) => b.notSeenAttesterCount - a.notSeenAttesterCount)
|
|
278
|
-
.slice(0, MAX_ATTESTATIONS_PER_GROUP);
|
|
407
|
+
return attestations.sort((a, b) => b.notSeenAttesterCount - a.notSeenAttesterCount).slice(0, maxAttestation);
|
|
279
408
|
}
|
|
280
409
|
}
|
|
281
410
|
/** Get attestations for API. */
|
|
@@ -290,6 +419,33 @@ export function aggregateInto(attestation1, attestation2) {
|
|
|
290
419
|
const signature2 = signatureFromBytesNoCheck(attestation2.attestation.signature);
|
|
291
420
|
attestation1.attestation.signature = aggregateSignatures([signature1, signature2]).toBytes();
|
|
292
421
|
}
|
|
422
|
+
/**
|
|
423
|
+
* Electra and after: Block proposer consolidates attestations with the same
|
|
424
|
+
* attestation data from different committee into a single attestation
|
|
425
|
+
* https://github.com/ethereum/consensus-specs/blob/aba6345776aa876dad368cab27fbbb23fae20455/specs/_features/eip7549/validator.md?plain=1#L39
|
|
426
|
+
*/
|
|
427
|
+
export function aggregateConsolidation({ byCommittee, attData }) {
|
|
428
|
+
const committeeBits = BitArray.fromBitLen(MAX_COMMITTEES_PER_SLOT);
|
|
429
|
+
// TODO: can we improve this?
|
|
430
|
+
let aggregationBits = [];
|
|
431
|
+
const signatures = [];
|
|
432
|
+
const sortedCommittees = Array.from(byCommittee.keys()).sort((a, b) => a - b);
|
|
433
|
+
for (const committeeIndex of sortedCommittees) {
|
|
434
|
+
const attestationNonParticipation = byCommittee.get(committeeIndex);
|
|
435
|
+
if (attestationNonParticipation !== undefined) {
|
|
436
|
+
const { attestation } = attestationNonParticipation;
|
|
437
|
+
committeeBits.set(committeeIndex, true);
|
|
438
|
+
aggregationBits = [...aggregationBits, ...attestation.aggregationBits.toBoolArray()];
|
|
439
|
+
signatures.push(signatureFromBytesNoCheck(attestation.signature));
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
return {
|
|
443
|
+
aggregationBits: BitArray.fromBoolArray(aggregationBits),
|
|
444
|
+
data: attData,
|
|
445
|
+
committeeBits,
|
|
446
|
+
signature: aggregateSignatures(signatures).toBytes(),
|
|
447
|
+
};
|
|
448
|
+
}
|
|
293
449
|
/**
|
|
294
450
|
* Pre-compute participation from a CachedBeaconStateAllForks, for use to check if an attestation's committee
|
|
295
451
|
* has already attested or not.
|
|
@@ -304,11 +460,12 @@ export function getNotSeenValidatorsFn(state) {
|
|
|
304
460
|
const stateEpoch = computeEpochAtSlot(state.slot);
|
|
305
461
|
const previousEpochParticipants = extractParticipationPhase0(phase0State.previousEpochAttestations.getAllReadonly(), state);
|
|
306
462
|
const currentEpochParticipants = extractParticipationPhase0(phase0State.currentEpochAttestations.getAllReadonly(), state);
|
|
307
|
-
return (epoch,
|
|
463
|
+
return (epoch, slot, committeeIndex) => {
|
|
308
464
|
const participants = epoch === stateEpoch ? currentEpochParticipants : epoch === stateEpoch - 1 ? previousEpochParticipants : null;
|
|
309
465
|
if (participants === null) {
|
|
310
466
|
return null;
|
|
311
467
|
}
|
|
468
|
+
const committee = state.epochCtx.getBeaconCommittee(slot, committeeIndex);
|
|
312
469
|
const notSeenAttestingIndices = new Set();
|
|
313
470
|
for (const [i, validatorIndex] of committee.entries()) {
|
|
314
471
|
if (!participants.has(validatorIndex)) {
|
|
@@ -328,18 +485,28 @@ export function getNotSeenValidatorsFn(state) {
|
|
|
328
485
|
const previousParticipation = altairState.previousEpochParticipation.getAll();
|
|
329
486
|
const currentParticipation = altairState.currentEpochParticipation.getAll();
|
|
330
487
|
const stateEpoch = computeEpochAtSlot(state.slot);
|
|
331
|
-
|
|
488
|
+
// this function could be called multiple times with same slot + committeeIndex
|
|
489
|
+
const cachedNotSeenValidators = new Map();
|
|
490
|
+
return (epoch, slot, committeeIndex) => {
|
|
332
491
|
const participationStatus = epoch === stateEpoch ? currentParticipation : epoch === stateEpoch - 1 ? previousParticipation : null;
|
|
333
492
|
if (participationStatus === null) {
|
|
334
493
|
return null;
|
|
335
494
|
}
|
|
336
|
-
const
|
|
495
|
+
const cacheKey = slot + "_" + committeeIndex;
|
|
496
|
+
let notSeenAttestingIndices = cachedNotSeenValidators.get(cacheKey);
|
|
497
|
+
if (notSeenAttestingIndices != null) {
|
|
498
|
+
// if all validators are seen then return null, we don't need to check for any attestations of same committee again
|
|
499
|
+
return notSeenAttestingIndices.size === 0 ? null : notSeenAttestingIndices;
|
|
500
|
+
}
|
|
501
|
+
const committee = state.epochCtx.getBeaconCommittee(slot, committeeIndex);
|
|
502
|
+
notSeenAttestingIndices = new Set();
|
|
337
503
|
for (const [i, validatorIndex] of committee.entries()) {
|
|
338
504
|
// no need to check flagIsTimelySource as if validator is not seen, it's participation status is 0
|
|
339
505
|
if (participationStatus[validatorIndex] === 0) {
|
|
340
506
|
notSeenAttestingIndices.add(i);
|
|
341
507
|
}
|
|
342
508
|
}
|
|
509
|
+
cachedNotSeenValidators.set(cacheKey, notSeenAttestingIndices);
|
|
343
510
|
// if all validators are seen then return null, we don't need to check for any attestations of same committee again
|
|
344
511
|
return notSeenAttestingIndices.size === 0 ? null : notSeenAttestingIndices;
|
|
345
512
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aggregatedAttestationPool.js","sourceRoot":"","sources":["../../../src/chain/opPools/aggregatedAttestationPool.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"aggregatedAttestationPool.js","sourceRoot":"","sources":["../../../src/chain/opPools/aggregatedAttestationPool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,mBAAmB,EAAY,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAC,QAAQ,EAAC,MAAM,gBAAgB,CAAC;AACxC,OAAO,EACL,QAAQ,EACR,OAAO,EACP,iBAAiB,EACjB,gBAAgB,EAChB,wBAAwB,EACxB,uBAAuB,EACvB,+BAA+B,EAC/B,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAIL,GAAG,EAIH,oBAAoB,GAErB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAIL,kBAAkB,EAClB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAc,eAAe,EAAC,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAE1D,OAAO,EAAC,oBAAoB,EAAE,eAAe,EAAC,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EAAC,WAAW,EAAE,yBAAyB,EAAC,MAAM,YAAY,CAAC;AAClE,OAAO,EAAC,aAAa,EAAC,MAAM,YAAY,CAAC;AA2BzC;;;;;GAKG;AACH,MAAM,mCAAmC,GAAG,CAAC,CAAC;AAE9C;;;;;;GAMG;AACH,MAAM,0BAA0B,GAAG,CAAC,CAAC;AAErC;;;;GAIG;AACH,MAAM,kCAAkC,GAAG,CAAC,CAAC;AAE7C;;;;;GAKG;AACH,MAAM,OAAO,yBAAyB;IAYpC,YAA6B,MAAuB;QAAvB,WAAM,GAAN,MAAM,CAAiB;QAXpD;;;;WAIG;QACc,2CAAsC,GAAG,IAAI,MAAM,CAGlE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAkE,CAAC,CAAC;QAC3E,0BAAqB,GAAG,CAAC,CAAC;IAEqB,CAAC;IAExD,4CAA4C;IAC5C,mBAAmB;QACjB,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,IAAI,oBAAoB,GAAG,CAAC,CAAC;QAC7B,KAAK,MAAM,gCAAgC,IAAI,IAAI,CAAC,sCAAsC,CAAC,MAAM,EAAE,EAAE,CAAC;YACpG,KAAK,MAAM,uBAAuB,IAAI,gCAAgC,CAAC,MAAM,EAAE,EAAE,CAAC;gBAChF,oBAAoB,IAAI,uBAAuB,CAAC,IAAI,CAAC;gBACrD,KAAK,MAAM,gBAAgB,IAAI,uBAAuB,CAAC,MAAM,EAAE,EAAE,CAAC;oBAChE,gBAAgB,IAAI,gBAAgB,CAAC,mBAAmB,EAAE,CAAC;gBAC7D,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,EAAC,gBAAgB,EAAE,oBAAoB,EAAC,CAAC;IAClD,CAAC;IAED,GAAG,CACD,WAAwB,EACxB,WAAoB,EACpB,qBAA6B,EAC7B,SAAsB;QAEtB,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;QACnC,MAAM,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAC;QAEzD,4CAA4C;QAC5C,IAAI,IAAI,GAAG,qBAAqB,EAAE,CAAC;YACjC,OAAO,aAAa,CAAC,GAAG,CAAC;QAC3B,CAAC;QAED,MAAM,iCAAiC,GAAG,IAAI,CAAC,sCAAsC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACzG,IAAI,uBAAuB,GAAG,iCAAiC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACjF,IAAI,CAAC,uBAAuB,EAAE,CAAC;YAC7B,uBAAuB,GAAG,IAAI,GAAG,EAAgD,CAAC;YAClF,iCAAiC,CAAC,GAAG,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAAC;QAC9E,CAAC;QAED,IAAI,cAAc,CAAC;QAEnB,IAAI,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACrD,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,EAAE,CAAC;gBACvC,MAAM,KAAK,CAAC,2DAA2D,IAAI,EAAE,CAAC,CAAC;YACjF,CAAC;YACD,cAAc,GAAG,WAAW,CAAC,aAAa,CAAC,gBAAgB,EAAE,CAAC;QAChE,CAAC;aAAM,CAAC;YACN,IAAI,oBAAoB,CAAC,WAAW,CAAC,EAAE,CAAC;gBACtC,MAAM,KAAK,CAAC,0DAA0D,IAAI,EAAE,CAAC,CAAC;YAChF,CAAC;YACD,cAAc,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;QAC1C,CAAC;QACD,sFAAsF;QACtF,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,mEAAmE,CAAC,CAAC;QACpG,IAAI,gBAAgB,GAAG,uBAAuB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACnE,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,gBAAgB,GAAG,IAAI,4BAA4B,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;YACjF,uBAAuB,CAAC,GAAG,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;QAChE,CAAC;QAED,OAAO,gBAAgB,CAAC,GAAG,CAAC;YAC1B,WAAW;YACX,aAAa,EAAE,qBAAqB;SACrC,CAAC,CAAC;IACL,CAAC;IAED,uEAAuE;IACvE,KAAK,CAAC,SAAe;QACnB,oCAAoC;QACpC,WAAW,CAAC,IAAI,CAAC,sCAAsC,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;QACrF,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,eAAe,EAAE,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,uBAAuB,CAAC,IAAc,EAAE,UAAuB,EAAE,KAAgC;QAC/F,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC9B,OAAO,OAAO,IAAI,OAAO,CAAC,OAAO;YAC/B,CAAC,CAAC,IAAI,CAAC,8BAA8B,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC;YAC9D,CAAC,CAAC,IAAI,CAAC,iCAAiC,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;IACtE,CAAC;IAED;;OAEG;IACH,iCAAiC,CAC/B,IAAc,EACd,UAAuB,EACvB,KAAgC;QAEhC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;QAC7B,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;QACxC,MAAM,cAAc,GAAG,UAAU,GAAG,CAAC,CAAC;QAEtC,MAAM,mBAAmB,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;QAC1D,MAAM,yBAAyB,GAAG,4BAA4B,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAElF,MAAM,mBAAmB,GAA2B,EAAE,CAAC;QAEvD,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,sCAAsC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACnG,IAAI,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC;QACvC,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,EAAE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YAC/B,SAAS,EAAE,CAAC;YACZ,MAAM,iCAAiC,GAAG,IAAI,CAAC,sCAAsC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAChG,oBAAoB;YACpB,IAAI,CAAC,iCAAiC,EAAE,CAAC;gBACvC,MAAM,KAAK,CAAC,2CAA2C,IAAI,EAAE,CAAC,CAAC;YACjE,CAAC;YAED,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;YACvC,2FAA2F;YAC3F,IAAI,CAAC,CAAC,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,cAAc,CAAC,EAAE,CAAC;gBACxD,SAAS,CAAC,uBAAuB;YACnC,CAAC;YACD,8EAA8E;YAC9E,IACE,CAAC,CACC,IAAI,GAAG,+BAA+B,IAAI,SAAS;gBACnD,oEAAoE;gBACpE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,IAAI,SAAS,IAAI,IAAI,GAAG,eAAe,CAAC,CACxE,EACD,CAAC;gBACD,SAAS,CAAC,uBAAuB;YACnC,CAAC;YAED,MAAM,SAAS,GAAG,SAAS,GAAG,IAAI,CAAC;YACnC,KAAK,MAAM,uBAAuB,IAAI,iCAAiC,CAAC,MAAM,EAAE,EAAE,CAAC;gBACjF,KAAK,MAAM,CAAC,cAAc,EAAE,gBAAgB,CAAC,IAAI,uBAAuB,CAAC,OAAO,EAAE,EAAE,CAAC;oBACnF,MAAM,uBAAuB,GAAG,mBAAmB,CAAC,KAAK,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;oBACjF,IAAI,uBAAuB,KAAK,IAAI,IAAI,uBAAuB,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;wBAC3E,SAAS;oBACX,CAAC;oBAED,IACE,SAAS,GAAG,CAAC;wBACb,mBAAmB,CAAC,MAAM,IAAI,gBAAgB;wBAC9C,uBAAuB,CAAC,IAAI,GAAG,SAAS,GAAG,QAAQ,EACnD,CAAC;wBACD,qHAAqH;wBACrH,oDAAoD;wBACpD,0HAA0H;wBAC1H,mGAAmG;wBACnG,SAAS;oBACX,CAAC;oBAED,IAAI,CAAC,yBAAyB,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;wBACtD,SAAS;oBACX,CAAC;oBAED,oDAAoD;oBACpD,mEAAmE;oBACnE,wEAAwE;oBACxE,EAAE;oBACF,oEAAoE;oBACpE,0FAA0F;oBAC1F,6DAA6D;oBAC7D,KAAK,MAAM,EAAC,WAAW,EAAE,oBAAoB,EAAC,IAAI,gBAAgB,CAAC,uBAAuB,CACxF,IAAI,EACJ,uBAAuB,CACxB,EAAE,CAAC;wBACF,MAAM,KAAK,GAAG,oBAAoB,GAAG,SAAS,CAAC;wBAC/C,IAAI,KAAK,GAAG,QAAQ,EAAE,CAAC;4BACrB,QAAQ,GAAG,KAAK,CAAC;wBACnB,CAAC;wBACD,mBAAmB,CAAC,IAAI,CAAC;4BACvB,WAAW;4BACX,KAAK;yBACN,CAAC,CAAC;oBACL,CAAC;oBAED,6EAA6E;oBAC7E,IAAI,mBAAmB,CAAC,MAAM,IAAI,gBAAgB,GAAG,CAAC,EAAE,CAAC;wBACvD,MAAM,IAAI,CAAC;oBACb,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,yBAAyB,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QACxF,MAAM,oBAAoB,GAAyB,EAAE,CAAC;QACtD,KAAK,MAAM,CAAC,CAAC,EAAE,oBAAoB,CAAC,IAAI,yBAAyB,CAAC,OAAO,EAAE,EAAE,CAAC;YAC5E,IAAI,CAAC,IAAI,gBAAgB,EAAE,CAAC;gBAC1B,MAAM;YACR,CAAC;YACD,gFAAgF;YAChF,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,CAAC;QAC5F,CAAC;QACD,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,8BAA8B,CAC5B,IAAc,EACd,UAAuB,EACvB,KAAgC;QAEhC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;QAC7B,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;QACxC,MAAM,cAAc,GAAG,UAAU,GAAG,CAAC,CAAC;QAEtC,MAAM,mBAAmB,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;QAC1D,MAAM,yBAAyB,GAAG,4BAA4B,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAElF,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,sCAAsC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACnG,MAAM,cAAc,GAAgC,EAAE,CAAC;QACvD,IAAI,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC;QACvC,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,EAAE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YAC/B,SAAS,EAAE,CAAC;YACZ,MAAM,iCAAiC,GAAG,IAAI,CAAC,sCAAsC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAChG,oBAAoB;YACpB,IAAI,CAAC,iCAAiC,EAAE,CAAC;gBACvC,MAAM,KAAK,CAAC,2CAA2C,IAAI,EAAE,CAAC,CAAC;YACjE,CAAC;YAED,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;YACvC,2FAA2F;YAC3F,IAAI,CAAC,CAAC,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,cAAc,CAAC,EAAE,CAAC;gBACxD,SAAS,CAAC,uBAAuB;YACnC,CAAC;YACD,8EAA8E;YAC9E,IAAI,CAAC,CAAC,IAAI,GAAG,+BAA+B,IAAI,SAAS,CAAC,EAAE,CAAC;gBAC3D,SAAS,CAAC,uBAAuB;YACnC,CAAC;YAED,MAAM,SAAS,GAAG,SAAS,GAAG,IAAI,CAAC;YACnC,sEAAsE;YACtE,yEAAyE;YACzE,yEAAyE;YACzE,yEAAyE;YACzE,KAAK,MAAM,uBAAuB,IAAI,iCAAiC,CAAC,MAAM,EAAE,EAAE,CAAC;gBACjF,oEAAoE;gBACpE,MAAM,eAAe,GAAgC,EAAE,CAAC;gBACxD,KAAK,MAAM,CAAC,cAAc,EAAE,gBAAgB,CAAC,IAAI,uBAAuB,CAAC,OAAO,EAAE,EAAE,CAAC;oBACnF,MAAM,uBAAuB,GAAG,mBAAmB,CAAC,KAAK,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;oBACjF,IAAI,uBAAuB,KAAK,IAAI,IAAI,uBAAuB,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;wBAC3E,SAAS;oBACX,CAAC;oBAED,IACE,SAAS,GAAG,CAAC;wBACb,cAAc,CAAC,MAAM,IAAI,wBAAwB;wBACjD,uBAAuB,CAAC,IAAI,GAAG,SAAS,GAAG,QAAQ,EACnD,CAAC;wBACD,6HAA6H;wBAC7H,oDAAoD;wBACpD,0HAA0H;wBAC1H,mGAAmG;wBACnG,SAAS;oBACX,CAAC;oBAED,IAAI,CAAC,yBAAyB,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;wBACtD,SAAS;oBACX,CAAC;oBAED,oDAAoD;oBACpD,mEAAmE;oBACnE,wEAAwE;oBACxE,EAAE;oBACF,oEAAoE;oBACpE,0FAA0F;oBAC1F,6DAA6D;oBAC7D,KAAK,MAAM,CAAC,CAAC,EAAE,2BAA2B,CAAC,IAAI,gBAAgB;yBAC5D,uBAAuB,CAAC,IAAI,EAAE,uBAAuB,CAAC;yBACtD,OAAO,EAAE,EAAE,CAAC;wBACb,IAAI,eAAe,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;4BACrC,eAAe,CAAC,CAAC,CAAC,GAAG;gCACnB,WAAW,EAAE,IAAI,GAAG,EAAE;gCACtB,OAAO,EAAE,2BAA2B,CAAC,WAAW,CAAC,IAAI;gCACrD,iBAAiB,EAAE,CAAC;gCACpB,4CAA4C;gCAC5C,KAAK,EAAE,CAAC;6BACT,CAAC;wBACJ,CAAC;wBACD,eAAe,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,cAAc,EAAE,2BAA2B,CAAC,CAAC;wBAChF,eAAe,CAAC,CAAC,CAAC,CAAC,iBAAiB,IAAI,2BAA2B,CAAC,oBAAoB,CAAC;oBAC3F,CAAC;oBACD,KAAK,MAAM,aAAa,IAAI,eAAe,EAAE,CAAC;wBAC5C,MAAM,KAAK,GAAG,aAAa,CAAC,iBAAiB,GAAG,SAAS,CAAC;wBAC1D,IAAI,KAAK,GAAG,QAAQ,EAAE,CAAC;4BACrB,QAAQ,GAAG,KAAK,CAAC;wBACnB,CAAC;wBACD,cAAc,CAAC,IAAI,CAAC,EAAC,GAAG,aAAa,EAAE,KAAK,EAAC,CAAC,CAAC;wBAC/C,6EAA6E;wBAC7E,IAAI,cAAc,CAAC,MAAM,IAAI,wBAAwB,GAAG,CAAC,EAAE,CAAC;4BAC1D,MAAM,IAAI,CAAC;wBACb,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,2BAA2B,GAAG,cAAc;aAC/C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;aACjC,KAAK,CAAC,CAAC,EAAE,wBAAwB,CAAC,CAAC;QACtC,0DAA0D;QAC1D,OAAO,2BAA2B,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACjE,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,MAAa;QAClB,IAAI,oBAAyE,CAAC;QAC9E,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,oBAAoB,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,sCAAsC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAC1G,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAC7B,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,wBAAwB,GAAG,IAAI,CAAC,sCAAsC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACzF,IAAI,CAAC,wBAAwB;gBAAE,MAAM,KAAK,CAAC,4BAA4B,MAAM,EAAE,CAAC,CAAC;YACjF,oBAAoB,GAAG,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,CAAC,CAAC;QACvE,CAAC;QAED,MAAM,YAAY,GAAkB,EAAE,CAAC;QACvC,KAAK,MAAM,iBAAiB,IAAI,oBAAoB,EAAE,CAAC;YACrD,KAAK,MAAM,gBAAgB,IAAI,iBAAiB,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC1D,YAAY,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,eAAe,EAAE,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;CACF;AAcD;;;;;GAKG;AACH,MAAM,OAAO,4BAA4B;IAGvC;IACE,+BAA+B;IACtB,SAAsB,EACtB,IAA4B;QAD5B,cAAS,GAAT,SAAS,CAAa;QACtB,SAAI,GAAJ,IAAI,CAAwB;QALtB,iBAAY,GAA2B,EAAE,CAAC;IAMxD,CAAC;IAEJ,mBAAmB;QACjB,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;IAClC,CAAC;IAED;;;;;OAKG;IACH,GAAG,CAAC,WAAiC;QACnC,MAAM,OAAO,GAAG,WAAW,CAAC,WAAW,CAAC,eAAe,CAAC;QAExD,MAAM,eAAe,GAAG,EAAE,CAAC;QAE3B,KAAK,MAAM,CAAC,CAAC,EAAE,eAAe,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC;YAC/D,MAAM,QAAQ,GAAG,eAAe,CAAC,WAAW,CAAC,eAAe,CAAC;YAE7D,QAAQ,oBAAoB,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBACtE,KAAK,eAAe,CAAC,MAAM,CAAC;gBAC5B,KAAK,eAAe,CAAC,KAAK;oBACxB,qFAAqF;oBACrF,OAAO,aAAa,CAAC,YAAY,CAAC;gBAEpC,KAAK,eAAe,CAAC,SAAS;oBAC5B,kBAAkB;oBAClB,aAAa,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;oBAC5C,OAAO,aAAa,CAAC,UAAU,CAAC;gBAElC,KAAK,eAAe,CAAC,QAAQ;oBAC3B,+BAA+B;oBAC/B,2EAA2E;oBAC3E,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,iBAAiB;QACjB,KAAK,MAAM,KAAK,IAAI,eAAe,CAAC,OAAO,EAAE,EAAE,CAAC;YAC9C,oCAAoC;YACpC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACrC,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEpC,kDAAkD;QAClD,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,mCAAmC,EAAE,CAAC;YACnE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC;YACpE,IAAI,CAAC,YAAY,CAAC,MAAM,CACtB,mCAAmC,EACnC,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,mCAAmC,CAC/D,CAAC;QACJ,CAAC;QAED,OAAO,aAAa,CAAC,OAAO,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IACH,uBAAuB,CAAC,IAAc,EAAE,uBAAoC;QAC1E,MAAM,YAAY,GAAgC,EAAE,CAAC;QACrD,MAAM,aAAa,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC9C,KAAK,MAAM,EAAC,WAAW,EAAC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAC9C,IACE,CAAC,aAAa,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;gBACrD,CAAC,CAAC,aAAa,IAAI,oBAAoB,CAAC,WAAW,CAAC,CAAC,EACrD,CAAC;gBACD,SAAS;YACX,CAAC;YAED,IAAI,oBAAoB,GAAG,CAAC,CAAC;YAC7B,MAAM,EAAC,eAAe,EAAC,GAAG,WAAW,CAAC;YACtC,KAAK,MAAM,YAAY,IAAI,uBAAuB,EAAE,CAAC;gBACnD,IAAI,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;oBACtC,oBAAoB,EAAE,CAAC;gBACzB,CAAC;YACH,CAAC;YAED,IAAI,oBAAoB,GAAG,CAAC,EAAE,CAAC;gBAC7B,YAAY,CAAC,IAAI,CAAC,EAAC,WAAW,EAAE,oBAAoB,EAAC,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;QAED,MAAM,cAAc,GAAG,aAAa,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC,0BAA0B,CAAC;QACvG,IAAI,YAAY,CAAC,MAAM,IAAI,cAAc,EAAE,CAAC;YAC1C,OAAO,YAAY,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,oBAAoB,GAAG,CAAC,CAAC,oBAAoB,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;QAC/G,CAAC;IACH,CAAC;IAED,gCAAgC;IAChC,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IACzE,CAAC;CACF;AAED,MAAM,UAAU,aAAa,CAAC,YAAkC,EAAE,YAAkC;IAClG,+CAA+C;IAC/C,YAAY,CAAC,WAAW,CAAC,eAAe,CAAC,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;IAE/F,MAAM,UAAU,GAAG,yBAAyB,CAAC,YAAY,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACjF,MAAM,UAAU,GAAG,yBAAyB,CAAC,YAAY,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACjF,YAAY,CAAC,WAAW,CAAC,SAAS,GAAG,mBAAmB,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;AAC/F,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,EAAC,WAAW,EAAE,OAAO,EAA4B;IACtF,MAAM,aAAa,GAAG,QAAQ,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC;IACnE,6BAA6B;IAC7B,IAAI,eAAe,GAAc,EAAE,CAAC;IACpC,MAAM,UAAU,GAAgB,EAAE,CAAC;IACnC,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9E,KAAK,MAAM,cAAc,IAAI,gBAAgB,EAAE,CAAC;QAC9C,MAAM,2BAA2B,GAAG,WAAW,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACpE,IAAI,2BAA2B,KAAK,SAAS,EAAE,CAAC;YAC9C,MAAM,EAAC,WAAW,EAAC,GAAG,2BAA2B,CAAC;YAClD,aAAa,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;YACxC,eAAe,GAAG,CAAC,GAAG,eAAe,EAAE,GAAG,WAAW,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC,CAAC;YACrF,UAAU,CAAC,IAAI,CAAC,yBAAyB,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IACD,OAAO;QACL,eAAe,EAAE,QAAQ,CAAC,aAAa,CAAC,eAAe,CAAC;QACxD,IAAI,EAAE,OAAO;QACb,aAAa;QACb,SAAS,EAAE,mBAAmB,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE;KACrD,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAgC;IACrE,IAAI,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC7D,qDAAqD;QACrD,gFAAgF;QAChF,0FAA0F;QAC1F,iCAAiC;QACjC,MAAM,WAAW,GAAG,KAAgC,CAAC;QACrD,MAAM,UAAU,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAElD,MAAM,yBAAyB,GAAG,0BAA0B,CAC1D,WAAW,CAAC,yBAAyB,CAAC,cAAc,EAAE,EACtD,KAAK,CACN,CAAC;QACF,MAAM,wBAAwB,GAAG,0BAA0B,CACzD,WAAW,CAAC,wBAAwB,CAAC,cAAc,EAAE,EACrD,KAAK,CACN,CAAC;QAEF,OAAO,CAAC,KAAY,EAAE,IAAU,EAAE,cAAsB,EAAE,EAAE;YAC1D,MAAM,YAAY,GAChB,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,KAAK,KAAK,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,IAAI,CAAC;YAChH,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;gBAC1B,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YAE1E,MAAM,uBAAuB,GAAG,IAAI,GAAG,EAAU,CAAC;YAClD,KAAK,MAAM,CAAC,CAAC,EAAE,cAAc,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;gBACtD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;oBACtC,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACjC,CAAC;YACH,CAAC;YACD,OAAO,uBAAuB,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,uBAAuB,CAAC;QAC7E,CAAC,CAAC;IACJ,CAAC;IAED,0BAA0B;SACrB,CAAC;QACJ,sDAAsD;QACtD,0EAA0E;QAC1E,4FAA4F;QAC5F,iCAAiC;QACjC,MAAM,WAAW,GAAG,KAAgC,CAAC;QACrD,MAAM,qBAAqB,GAAG,WAAW,CAAC,0BAA0B,CAAC,MAAM,EAAE,CAAC;QAC9E,MAAM,oBAAoB,GAAG,WAAW,CAAC,yBAAyB,CAAC,MAAM,EAAE,CAAC;QAC5E,MAAM,UAAU,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClD,+EAA+E;QAC/E,MAAM,uBAAuB,GAAG,IAAI,GAAG,EAAuB,CAAC;QAE/D,OAAO,CAAC,KAAY,EAAE,IAAU,EAAE,cAAsB,EAAE,EAAE;YAC1D,MAAM,mBAAmB,GACvB,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,KAAK,KAAK,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAAC;YAExG,IAAI,mBAAmB,KAAK,IAAI,EAAE,CAAC;gBACjC,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,QAAQ,GAAG,IAAI,GAAG,GAAG,GAAG,cAAc,CAAC;YAC7C,IAAI,uBAAuB,GAAG,uBAAuB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACpE,IAAI,uBAAuB,IAAI,IAAI,EAAE,CAAC;gBACpC,mHAAmH;gBACnH,OAAO,uBAAuB,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,uBAAuB,CAAC;YAC7E,CAAC;YAED,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YAC1E,uBAAuB,GAAG,IAAI,GAAG,EAAU,CAAC;YAC5C,KAAK,MAAM,CAAC,CAAC,EAAE,cAAc,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;gBACtD,kGAAkG;gBAClG,IAAI,mBAAmB,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC9C,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACjC,CAAC;YACH,CAAC;YACD,uBAAuB,CAAC,GAAG,CAAC,QAAQ,EAAE,uBAAuB,CAAC,CAAC;YAC/D,mHAAmH;YACnH,OAAO,uBAAuB,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,uBAAuB,CAAC;QAC7E,CAAC,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,YAAyC,EACzC,KAAgC;IAEhC,MAAM,EAAC,QAAQ,EAAC,GAAG,KAAK,CAAC;IACzB,MAAM,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAC;IAClD,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAC/B,MAAM,eAAe,GAAG,GAAG,CAAC,eAAe,CAAC;QAC5C,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC;QACzB,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;QAC7B,MAAM,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC;QACrC,MAAM,SAAS,GAAG,QAAQ,CAAC,kBAAkB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QACvE,MAAM,YAAY,GAAG,eAAe,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QAChE,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;YACvC,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,4BAA4B,CAC1C,UAAuB,EACvB,KAAgC;IAEhC,MAAM,8BAA8B,GAAG,IAAI,GAAG,EAAoB,CAAC;IACnE,MAAM,EAAC,2BAA2B,EAAE,0BAA0B,EAAC,GAAG,KAAK,CAAC;IACxE,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;IACxC,OAAO,CAAC,OAA+B,EAAE,EAAE;QACzC,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;QACzC,IAAI,mBAAmB,CAAC;QACxB,qBAAqB;QACrB,IAAI,WAAW,KAAK,UAAU,EAAE,CAAC;YAC/B,mBAAmB,GAAG,0BAA0B,CAAC;QACnD,CAAC;aAAM,IAAI,WAAW,KAAK,UAAU,GAAG,CAAC,EAAE,CAAC;YAC1C,mBAAmB,GAAG,2BAA2B,CAAC;QACpD,CAAC;aAAM,CAAC;YACN,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC;YAAE,OAAO,KAAK,CAAC;QAErF,gEAAgE;QAChE,gEAAgE;QAChE,IAAI,UAAU,GAAG,CAAC,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,+DAA+D;QAC/D,MAAM,kBAAkB,GAAG,SAAS,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAC9D,MAAM,QAAQ,GAAG,kBAAkB,GAAG,WAAW,CAAC;QAClD,IAAI,OAAO,GAAG,8BAA8B,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC3D,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,GAAG,gBAAgB,CAAC,UAAU,EAAE,KAAK,EAAE,kBAAkB,EAAE,WAAW,CAAC,CAAC;YAC/E,8BAA8B,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB,CACpC,UAAuB,EACvB,KAAgC,EAChC,IAA4B;IAE5B,MAAM,EAAC,2BAA2B,EAAE,0BAA0B,EAAC,GAAG,KAAK,CAAC;IACxE,IAAI,mBAAmB,CAAC;IACxB,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;IACxC,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;IAEtC,IAAI,WAAW,KAAK,UAAU,EAAE,CAAC;QAC/B,mBAAmB,GAAG,0BAA0B,CAAC;IACnD,CAAC;SAAM,IAAI,WAAW,KAAK,UAAU,GAAG,CAAC,EAAE,CAAC;QAC1C,mBAAmB,GAAG,2BAA2B,CAAC;IACpD,CAAC;SAAM,CAAC;QACN,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,mBAAmB,CAAC;QAAE,OAAO,KAAK,CAAC;IAElF,gEAAgE;IAChE,gEAAgE;IAChE,IAAI,UAAU,GAAG,CAAC,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,kBAAkB,GAAG,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC3D,OAAO,gBAAgB,CAAC,UAAU,EAAE,KAAK,EAAE,kBAAkB,EAAE,WAAW,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,gBAAgB,CACvB,UAAuB,EACvB,KAAgC,EAChC,YAAqB,EACrB,WAAkB;IAElB,oFAAoF;IACpF,uEAAuE;IACvE,MAAM,SAAS,GAAG,uBAAuB,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IAC/D,MAAM,kBAAkB,GAAG,SAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;IAE3E,wFAAwF;IACxF,iFAAiF;IACjF,8DAA8D;IAC9D,oFAAoF;IACpF,MAAM,kBAAkB,GAAG,YAAY,CAAC;IACxC,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;IAC/D,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,KAAK,CAAC,oCAAoC,kBAAkB,0BAA0B,CAAC,CAAC;IAChG,CAAC;IAED,IAAI,wBAAgC,CAAC;IACrC,IAAI,CAAC;QACH,wBAAwB,GAAG,UAAU,CAAC,gBAAgB,CAAC,WAAW,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IAChG,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,yGAAyG;QACzG,8FAA8F;QAC9F,wDAAwD;QACxD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,wBAAwB,KAAK,kBAAkB,CAAC;AACzD,CAAC"}
|
|
@@ -1,6 +1,20 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { BitArray } from "@chainsafe/ssz";
|
|
2
|
+
import { Signature } from "@chainsafe/blst";
|
|
3
|
+
import { Slot, RootHex, Attestation } from "@lodestar/types";
|
|
4
|
+
import { ChainForkConfig } from "@lodestar/config";
|
|
2
5
|
import { IClock } from "../../util/clock.js";
|
|
3
6
|
import { InsertOutcome } from "./types.js";
|
|
7
|
+
type AggregateFastPhase0 = {
|
|
8
|
+
data: Attestation["data"];
|
|
9
|
+
aggregationBits: BitArray;
|
|
10
|
+
signature: Signature;
|
|
11
|
+
};
|
|
12
|
+
export type AggregateFastElectra = AggregateFastPhase0 & {
|
|
13
|
+
committeeBits: BitArray;
|
|
14
|
+
};
|
|
15
|
+
export type AggregateFast = AggregateFastPhase0 | AggregateFastElectra;
|
|
16
|
+
/** CommitteeIndex must be null for pre-electra. Must not be null post-electra */
|
|
17
|
+
type CommitteeIndex = number | null;
|
|
4
18
|
/**
|
|
5
19
|
* A pool of `Attestation` that is specially designed to store "unaggregated" attestations from
|
|
6
20
|
* the native aggregation scheme.
|
|
@@ -25,12 +39,13 @@ import { InsertOutcome } from "./types.js";
|
|
|
25
39
|
* receives and it can be triggered manually.
|
|
26
40
|
*/
|
|
27
41
|
export declare class AttestationPool {
|
|
42
|
+
private readonly config;
|
|
28
43
|
private readonly clock;
|
|
29
44
|
private readonly cutOffSecFromSlot;
|
|
30
45
|
private readonly preaggregateSlotDistance;
|
|
31
|
-
private readonly
|
|
46
|
+
private readonly aggregateByIndexByRootBySlot;
|
|
32
47
|
private lowestPermissibleSlot;
|
|
33
|
-
constructor(clock: IClock, cutOffSecFromSlot: number, preaggregateSlotDistance?: number);
|
|
48
|
+
constructor(config: ChainForkConfig, clock: IClock, cutOffSecFromSlot: number, preaggregateSlotDistance?: number);
|
|
34
49
|
/** Returns current count of pre-aggregated attestations with unique data */
|
|
35
50
|
getAttestationCount(): number;
|
|
36
51
|
/**
|
|
@@ -50,11 +65,11 @@ export declare class AttestationPool {
|
|
|
50
65
|
* - Valid committeeIndex
|
|
51
66
|
* - Valid data
|
|
52
67
|
*/
|
|
53
|
-
add(attestation:
|
|
68
|
+
add(committeeIndex: CommitteeIndex, attestation: Attestation, attDataRootHex: RootHex): InsertOutcome;
|
|
54
69
|
/**
|
|
55
70
|
* For validator API to get an aggregate
|
|
56
71
|
*/
|
|
57
|
-
getAggregate(slot: Slot, dataRootHex: RootHex):
|
|
72
|
+
getAggregate(slot: Slot, committeeIndex: CommitteeIndex, dataRootHex: RootHex): Attestation | null;
|
|
58
73
|
/**
|
|
59
74
|
* Removes any attestations with a slot lower than `current_slot - preaggregateSlotDistance`.
|
|
60
75
|
* By default, not interested in attestations in old slots, we only preaggregate attestations for the current slot.
|
|
@@ -64,6 +79,7 @@ export declare class AttestationPool {
|
|
|
64
79
|
* Get all attestations optionally filtered by `attestation.data.slot`
|
|
65
80
|
* @param bySlot slot to filter, `bySlot === attestation.data.slot`
|
|
66
81
|
*/
|
|
67
|
-
getAll(bySlot?: Slot):
|
|
82
|
+
getAll(bySlot?: Slot): Attestation[];
|
|
68
83
|
}
|
|
84
|
+
export {};
|
|
69
85
|
//# sourceMappingURL=attestationPool.d.ts.map
|