@lodestar/beacon-node 1.22.0-dev.6f470f8a35 → 1.22.0-dev.9f4bf50408

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.
Files changed (148) hide show
  1. package/lib/api/impl/beacon/blocks/index.js +14 -2
  2. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  3. package/lib/api/impl/beacon/pool/index.js +31 -4
  4. package/lib/api/impl/beacon/pool/index.js.map +1 -1
  5. package/lib/api/impl/config/constants.d.ts +5 -1
  6. package/lib/api/impl/config/constants.js +7 -2
  7. package/lib/api/impl/config/constants.js.map +1 -1
  8. package/lib/api/impl/validator/index.js +26 -4
  9. package/lib/api/impl/validator/index.js.map +1 -1
  10. package/lib/chain/archiver/archiveStates.d.ts +3 -1
  11. package/lib/chain/archiver/archiveStates.js +6 -3
  12. package/lib/chain/archiver/archiveStates.js.map +1 -1
  13. package/lib/chain/archiver/index.js +1 -1
  14. package/lib/chain/archiver/index.js.map +1 -1
  15. package/lib/chain/blocks/importBlock.js +6 -5
  16. package/lib/chain/blocks/importBlock.js.map +1 -1
  17. package/lib/chain/blocks/types.d.ts +2 -2
  18. package/lib/chain/blocks/types.js.map +1 -1
  19. package/lib/chain/chain.d.ts +42 -0
  20. package/lib/chain/chain.js +35 -3
  21. package/lib/chain/chain.js.map +1 -1
  22. package/lib/chain/errors/attestationError.d.ts +13 -1
  23. package/lib/chain/errors/attestationError.js +8 -0
  24. package/lib/chain/errors/attestationError.js.map +1 -1
  25. package/lib/chain/historicalState/worker.js +4 -0
  26. package/lib/chain/historicalState/worker.js.map +1 -1
  27. package/lib/chain/initState.d.ts +3 -3
  28. package/lib/chain/initState.js +7 -6
  29. package/lib/chain/initState.js.map +1 -1
  30. package/lib/chain/interface.d.ts +2 -0
  31. package/lib/chain/interface.js.map +1 -1
  32. package/lib/chain/opPools/aggregatedAttestationPool.d.ts +46 -12
  33. package/lib/chain/opPools/aggregatedAttestationPool.js +226 -59
  34. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  35. package/lib/chain/opPools/attestationPool.d.ts +22 -6
  36. package/lib/chain/opPools/attestationPool.js +61 -27
  37. package/lib/chain/opPools/attestationPool.js.map +1 -1
  38. package/lib/chain/opPools/opPool.d.ts +2 -2
  39. package/lib/chain/opPools/opPool.js +7 -5
  40. package/lib/chain/opPools/opPool.js.map +1 -1
  41. package/lib/chain/opPools/utils.d.ts +2 -0
  42. package/lib/chain/opPools/utils.js +3 -0
  43. package/lib/chain/opPools/utils.js.map +1 -1
  44. package/lib/chain/produceBlock/produceBlockBody.js +2 -1
  45. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  46. package/lib/chain/regen/queued.d.ts +6 -1
  47. package/lib/chain/regen/queued.js +38 -0
  48. package/lib/chain/regen/queued.js.map +1 -1
  49. package/lib/chain/regen/regen.d.ts +1 -1
  50. package/lib/chain/regen/regen.js +47 -11
  51. package/lib/chain/regen/regen.js.map +1 -1
  52. package/lib/chain/seenCache/seenAttestationData.d.ts +13 -5
  53. package/lib/chain/seenCache/seenAttestationData.js +5 -3
  54. package/lib/chain/seenCache/seenAttestationData.js.map +1 -1
  55. package/lib/chain/serializeState.d.ts +6 -0
  56. package/lib/chain/serializeState.js +22 -0
  57. package/lib/chain/serializeState.js.map +1 -0
  58. package/lib/chain/stateCache/blockStateCacheImpl.d.ts +1 -0
  59. package/lib/chain/stateCache/blockStateCacheImpl.js +4 -1
  60. package/lib/chain/stateCache/blockStateCacheImpl.js.map +1 -1
  61. package/lib/chain/stateCache/datastore/file.js +5 -4
  62. package/lib/chain/stateCache/datastore/file.js.map +1 -1
  63. package/lib/chain/stateCache/fifoBlockStateCache.d.ts +1 -0
  64. package/lib/chain/stateCache/fifoBlockStateCache.js +3 -0
  65. package/lib/chain/stateCache/fifoBlockStateCache.js.map +1 -1
  66. package/lib/chain/stateCache/inMemoryCheckpointsCache.d.ts +1 -0
  67. package/lib/chain/stateCache/inMemoryCheckpointsCache.js +3 -0
  68. package/lib/chain/stateCache/inMemoryCheckpointsCache.js.map +1 -1
  69. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +2 -2
  70. package/lib/chain/stateCache/persistentCheckpointsCache.js +27 -51
  71. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  72. package/lib/chain/stateCache/types.d.ts +4 -0
  73. package/lib/chain/stateCache/types.js.map +1 -1
  74. package/lib/chain/validation/aggregateAndProof.d.ts +4 -4
  75. package/lib/chain/validation/aggregateAndProof.js +24 -7
  76. package/lib/chain/validation/aggregateAndProof.js.map +1 -1
  77. package/lib/chain/validation/attestation.d.ts +27 -6
  78. package/lib/chain/validation/attestation.js +109 -31
  79. package/lib/chain/validation/attestation.js.map +1 -1
  80. package/lib/chain/validation/attesterSlashing.js +2 -1
  81. package/lib/chain/validation/attesterSlashing.js.map +1 -1
  82. package/lib/chain/validation/signatureSets/aggregateAndProof.d.ts +4 -3
  83. package/lib/chain/validation/signatureSets/aggregateAndProof.js +3 -2
  84. package/lib/chain/validation/signatureSets/aggregateAndProof.js.map +1 -1
  85. package/lib/eth1/eth1DepositDataTracker.d.ts +5 -2
  86. package/lib/eth1/eth1DepositDataTracker.js +13 -2
  87. package/lib/eth1/eth1DepositDataTracker.js.map +1 -1
  88. package/lib/eth1/index.d.ts +2 -0
  89. package/lib/eth1/index.js +6 -0
  90. package/lib/eth1/index.js.map +1 -1
  91. package/lib/eth1/interface.d.ts +4 -0
  92. package/lib/eth1/provider/eth1Provider.js +2 -3
  93. package/lib/eth1/provider/eth1Provider.js.map +1 -1
  94. package/lib/eth1/provider/utils.js +4 -4
  95. package/lib/eth1/provider/utils.js.map +1 -1
  96. package/lib/eth1/utils/deposits.d.ts +2 -2
  97. package/lib/eth1/utils/deposits.js +6 -5
  98. package/lib/eth1/utils/deposits.js.map +1 -1
  99. package/lib/eth1/utils/eth1Vote.js +0 -1
  100. package/lib/eth1/utils/eth1Vote.js.map +1 -1
  101. package/lib/execution/engine/http.d.ts +2 -2
  102. package/lib/execution/engine/http.js +19 -15
  103. package/lib/execution/engine/http.js.map +1 -1
  104. package/lib/execution/engine/interface.d.ts +4 -4
  105. package/lib/execution/engine/interface.js.map +1 -1
  106. package/lib/execution/engine/mock.d.ts +1 -0
  107. package/lib/execution/engine/mock.js +6 -0
  108. package/lib/execution/engine/mock.js.map +1 -1
  109. package/lib/execution/engine/payloadIdCache.d.ts +17 -0
  110. package/lib/execution/engine/payloadIdCache.js.map +1 -1
  111. package/lib/execution/engine/types.d.ts +29 -3
  112. package/lib/execution/engine/types.js +81 -0
  113. package/lib/execution/engine/types.js.map +1 -1
  114. package/lib/index.d.ts +2 -2
  115. package/lib/index.js +2 -2
  116. package/lib/index.js.map +1 -1
  117. package/lib/metrics/metrics/beacon.d.ts +3 -0
  118. package/lib/metrics/metrics/beacon.js +6 -0
  119. package/lib/metrics/metrics/beacon.js.map +1 -1
  120. package/lib/metrics/metrics/lodestar.d.ts +30 -3
  121. package/lib/metrics/metrics/lodestar.js +63 -4
  122. package/lib/metrics/metrics/lodestar.js.map +1 -1
  123. package/lib/metrics/validatorMonitor.d.ts +1 -1
  124. package/lib/metrics/validatorMonitor.js +6 -1
  125. package/lib/metrics/validatorMonitor.js.map +1 -1
  126. package/lib/network/gossip/interface.d.ts +5 -5
  127. package/lib/network/gossip/interface.js.map +1 -1
  128. package/lib/network/gossip/topic.d.ts +1720 -129
  129. package/lib/network/gossip/topic.js +5 -5
  130. package/lib/network/gossip/topic.js.map +1 -1
  131. package/lib/network/interface.d.ts +2 -2
  132. package/lib/network/network.d.ts +2 -2
  133. package/lib/network/network.js.map +1 -1
  134. package/lib/network/peers/utils/assertPeerRelevance.js +2 -3
  135. package/lib/network/peers/utils/assertPeerRelevance.js.map +1 -1
  136. package/lib/network/processor/gossipHandlers.js +6 -6
  137. package/lib/network/processor/gossipHandlers.js.map +1 -1
  138. package/lib/network/processor/gossipQueues/index.js +5 -2
  139. package/lib/network/processor/gossipQueues/index.js.map +1 -1
  140. package/lib/network/processor/gossipQueues/indexed.js +1 -0
  141. package/lib/network/processor/gossipQueues/indexed.js.map +1 -1
  142. package/lib/util/bufferPool.d.ts +7 -2
  143. package/lib/util/bufferPool.js +13 -7
  144. package/lib/util/bufferPool.js.map +1 -1
  145. package/lib/util/sszBytes.d.ts +31 -8
  146. package/lib/util/sszBytes.js +74 -13
  147. package/lib/util/sszBytes.js.map +1 -1
  148. package/package.json +15 -15
@@ -1,10 +1,18 @@
1
1
  import { BitArray, deserializeUint8ArrayBitListFromBytes } from "@chainsafe/ssz";
2
- import { BYTES_PER_FIELD_ELEMENT, FIELD_ELEMENTS_PER_BLOB } from "@lodestar/params";
2
+ import { BYTES_PER_FIELD_ELEMENT, FIELD_ELEMENTS_PER_BLOB, ForkSeq, MAX_COMMITTEES_PER_SLOT, } from "@lodestar/params";
3
+ // pre-electra
3
4
  // class Attestation(Container):
4
5
  // aggregation_bits: Bitlist[MAX_VALIDATORS_PER_COMMITTEE] - offset 4
5
6
  // data: AttestationData - target data - 128
6
7
  // signature: BLSSignature - 96
8
+ // electra
9
+ // class Attestation(Container):
10
+ // aggregation_bits: BitList[MAX_VALIDATORS_PER_COMMITTEE * MAX_COMMITTEES_PER_SLOT] - offset 4
11
+ // data: AttestationData - target data - 128
12
+ // signature: BLSSignature - 96
13
+ // committee_bits: BitVector[MAX_COMMITTEES_PER_SLOT]
7
14
  //
15
+ // for all forks
8
16
  // class AttestationData(Container): 128 bytes fixed size
9
17
  // slot: Slot - data 8
10
18
  // index: CommitteeIndex - data 8
@@ -16,10 +24,13 @@ const ATTESTATION_BEACON_BLOCK_ROOT_OFFSET = VARIABLE_FIELD_OFFSET + 8 + 8;
16
24
  const ROOT_SIZE = 32;
17
25
  const SLOT_SIZE = 8;
18
26
  const ATTESTATION_DATA_SIZE = 128;
27
+ // MAX_COMMITTEES_PER_SLOT is in bit, need to convert to byte
28
+ const COMMITTEE_BITS_SIZE = Math.max(Math.ceil(MAX_COMMITTEES_PER_SLOT / 8), 1);
19
29
  const SIGNATURE_SIZE = 96;
20
30
  // shared Buffers to convert bytes to hex/base64
21
31
  const blockRootBuf = Buffer.alloc(ROOT_SIZE);
22
32
  const attDataBuf = Buffer.alloc(ATTESTATION_DATA_SIZE);
33
+ const committeeBitsDataBuf = Buffer.alloc(COMMITTEE_BITS_SIZE);
23
34
  /**
24
35
  * Extract slot from attestation serialized bytes.
25
36
  * Return null if data is not long enough to extract slot.
@@ -42,10 +53,10 @@ export function getBlockRootFromAttestationSerialized(data) {
42
53
  return "0x" + blockRootBuf.toString("hex");
43
54
  }
44
55
  /**
45
- * Extract attestation data base64 from attestation serialized bytes.
56
+ * Extract attestation data base64 from all forks' attestation serialized bytes.
46
57
  * Return null if data is not long enough to extract attestation data.
47
58
  */
48
- export function getAttDataBase64FromAttestationSerialized(data) {
59
+ export function getAttDataFromAttestationSerialized(data) {
49
60
  if (data.length < VARIABLE_FIELD_OFFSET + ATTESTATION_DATA_SIZE) {
50
61
  return null;
51
62
  }
@@ -53,15 +64,24 @@ export function getAttDataBase64FromAttestationSerialized(data) {
53
64
  attDataBuf.set(data.subarray(VARIABLE_FIELD_OFFSET, VARIABLE_FIELD_OFFSET + ATTESTATION_DATA_SIZE));
54
65
  return attDataBuf.toString("base64");
55
66
  }
67
+ /**
68
+ * Alias of `getAttDataFromAttestationSerialized` specifically for batch handling indexing in gossip queue
69
+ */
70
+ export function getGossipAttestationIndex(data) {
71
+ return getAttDataFromAttestationSerialized(data);
72
+ }
56
73
  /**
57
74
  * Extract aggregation bits from attestation serialized bytes.
58
75
  * Return null if data is not long enough to extract aggregation bits.
59
76
  */
60
- export function getAggregationBitsFromAttestationSerialized(data) {
61
- if (data.length < VARIABLE_FIELD_OFFSET + ATTESTATION_DATA_SIZE + SIGNATURE_SIZE) {
77
+ export function getAggregationBitsFromAttestationSerialized(fork, data) {
78
+ const aggregationBitsStartIndex = ForkSeq[fork] >= ForkSeq.electra
79
+ ? VARIABLE_FIELD_OFFSET + ATTESTATION_DATA_SIZE + SIGNATURE_SIZE + COMMITTEE_BITS_SIZE
80
+ : VARIABLE_FIELD_OFFSET + ATTESTATION_DATA_SIZE + SIGNATURE_SIZE;
81
+ if (data.length < aggregationBitsStartIndex) {
62
82
  return null;
63
83
  }
64
- const { uint8Array, bitLen } = deserializeUint8ArrayBitListFromBytes(data, VARIABLE_FIELD_OFFSET + ATTESTATION_DATA_SIZE + SIGNATURE_SIZE, data.length);
84
+ const { uint8Array, bitLen } = deserializeUint8ArrayBitListFromBytes(data, aggregationBitsStartIndex, data.length);
65
85
  return new BitArray(uint8Array, bitLen);
66
86
  }
67
87
  /**
@@ -69,10 +89,23 @@ export function getAggregationBitsFromAttestationSerialized(data) {
69
89
  * Return null if data is not long enough to extract signature.
70
90
  */
71
91
  export function getSignatureFromAttestationSerialized(data) {
72
- if (data.length < VARIABLE_FIELD_OFFSET + ATTESTATION_DATA_SIZE + SIGNATURE_SIZE) {
92
+ const signatureStartIndex = VARIABLE_FIELD_OFFSET + ATTESTATION_DATA_SIZE;
93
+ if (data.length < signatureStartIndex + SIGNATURE_SIZE) {
73
94
  return null;
74
95
  }
75
- return data.subarray(VARIABLE_FIELD_OFFSET + ATTESTATION_DATA_SIZE, VARIABLE_FIELD_OFFSET + ATTESTATION_DATA_SIZE + SIGNATURE_SIZE);
96
+ return data.subarray(signatureStartIndex, signatureStartIndex + SIGNATURE_SIZE);
97
+ }
98
+ /**
99
+ * Extract committee bits from Electra attestation serialized bytes.
100
+ * Return null if data is not long enough to extract committee bits.
101
+ */
102
+ export function getCommitteeBitsFromAttestationSerialized(data) {
103
+ const committeeBitsStartIndex = VARIABLE_FIELD_OFFSET + ATTESTATION_DATA_SIZE + SIGNATURE_SIZE;
104
+ if (data.length < committeeBitsStartIndex + COMMITTEE_BITS_SIZE) {
105
+ return null;
106
+ }
107
+ committeeBitsDataBuf.set(data.subarray(committeeBitsStartIndex, committeeBitsStartIndex + COMMITTEE_BITS_SIZE));
108
+ return committeeBitsDataBuf.toString("base64");
76
109
  }
77
110
  //
78
111
  // class SignedAggregateAndProof(Container):
@@ -87,8 +120,9 @@ const AGGREGATE_OFFSET = AGGREGATE_AND_PROOF_OFFSET + 8 + 4 + 96;
87
120
  const SIGNED_AGGREGATE_AND_PROOF_SLOT_OFFSET = AGGREGATE_OFFSET + VARIABLE_FIELD_OFFSET;
88
121
  const SIGNED_AGGREGATE_AND_PROOF_BLOCK_ROOT_OFFSET = SIGNED_AGGREGATE_AND_PROOF_SLOT_OFFSET + 8 + 8;
89
122
  /**
90
- * Extract slot from signed aggregate and proof serialized bytes.
91
- * Return null if data is not long enough to extract slot.
123
+ * Extract slot from signed aggregate and proof serialized bytes
124
+ * Return null if data is not long enough to extract slot
125
+ * This works for both phase + electra
92
126
  */
93
127
  export function getSlotFromSignedAggregateAndProofSerialized(data) {
94
128
  if (data.length < SIGNED_AGGREGATE_AND_PROOF_SLOT_OFFSET + SLOT_SIZE) {
@@ -97,8 +131,9 @@ export function getSlotFromSignedAggregateAndProofSerialized(data) {
97
131
  return getSlotFromOffset(data, SIGNED_AGGREGATE_AND_PROOF_SLOT_OFFSET);
98
132
  }
99
133
  /**
100
- * Extract block root from signed aggregate and proof serialized bytes.
101
- * Return null if data is not long enough to extract block root.
134
+ * Extract block root from signed aggregate and proof serialized bytes
135
+ * Return null if data is not long enough to extract block root
136
+ * This works for both phase + electra
102
137
  */
103
138
  export function getBlockRootFromSignedAggregateAndProofSerialized(data) {
104
139
  if (data.length < SIGNED_AGGREGATE_AND_PROOF_BLOCK_ROOT_OFFSET + ROOT_SIZE) {
@@ -107,11 +142,37 @@ export function getBlockRootFromSignedAggregateAndProofSerialized(data) {
107
142
  blockRootBuf.set(data.subarray(SIGNED_AGGREGATE_AND_PROOF_BLOCK_ROOT_OFFSET, SIGNED_AGGREGATE_AND_PROOF_BLOCK_ROOT_OFFSET + ROOT_SIZE));
108
143
  return "0x" + blockRootBuf.toString("hex");
109
144
  }
145
+ /**
146
+ * Extract AttestationData base64 from SignedAggregateAndProof for electra
147
+ * Return null if data is not long enough
148
+ */
149
+ export function getAttDataFromSignedAggregateAndProofElectra(data) {
150
+ const startIndex = SIGNED_AGGREGATE_AND_PROOF_SLOT_OFFSET;
151
+ const endIndex = startIndex + ATTESTATION_DATA_SIZE;
152
+ if (data.length < endIndex + SIGNATURE_SIZE + COMMITTEE_BITS_SIZE) {
153
+ return null;
154
+ }
155
+ attDataBuf.set(data.subarray(startIndex, endIndex));
156
+ return attDataBuf.toString("base64");
157
+ }
158
+ /**
159
+ * Extract CommitteeBits base64 from SignedAggregateAndProof for electra
160
+ * Return null if data is not long enough
161
+ */
162
+ export function getCommitteeBitsFromSignedAggregateAndProofElectra(data) {
163
+ const startIndex = SIGNED_AGGREGATE_AND_PROOF_SLOT_OFFSET + ATTESTATION_DATA_SIZE + SIGNATURE_SIZE;
164
+ const endIndex = startIndex + COMMITTEE_BITS_SIZE;
165
+ if (data.length < endIndex) {
166
+ return null;
167
+ }
168
+ committeeBitsDataBuf.set(data.subarray(startIndex, endIndex));
169
+ return committeeBitsDataBuf.toString("base64");
170
+ }
110
171
  /**
111
172
  * Extract attestation data base64 from signed aggregate and proof serialized bytes.
112
173
  * Return null if data is not long enough to extract attestation data.
113
174
  */
114
- export function getAttDataBase64FromSignedAggregateAndProofSerialized(data) {
175
+ export function getAttDataFromSignedAggregateAndProofPhase0(data) {
115
176
  if (data.length < SIGNED_AGGREGATE_AND_PROOF_SLOT_OFFSET + ATTESTATION_DATA_SIZE) {
116
177
  return null;
117
178
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sszBytes.js","sourceRoot":"","sources":["../../src/util/sszBytes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sszBytes.js","sourceRoot":"","sources":["../../src/util/sszBytes.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -11,7 +11,7 @@
11
11
  "bugs": {
12
12
  "url": "https://github.com/ChainSafe/lodestar/issues"
13
13
  },
14
- "version": "1.22.0-dev.6f470f8a35",
14
+ "version": "1.22.0-dev.9f4bf50408",
15
15
  "type": "module",
16
16
  "exports": {
17
17
  ".": {
@@ -103,7 +103,7 @@
103
103
  "@chainsafe/libp2p-noise": "^15.0.0",
104
104
  "@chainsafe/persistent-merkle-tree": "^0.8.0",
105
105
  "@chainsafe/prometheus-gc-stats": "^1.0.0",
106
- "@chainsafe/ssz": "^0.17.0",
106
+ "@chainsafe/ssz": "^0.17.1",
107
107
  "@chainsafe/threads": "^1.11.1",
108
108
  "@ethersproject/abi": "^5.7.0",
109
109
  "@fastify/bearer-auth": "^9.0.0",
@@ -119,18 +119,18 @@
119
119
  "@libp2p/peer-id-factory": "^4.1.0",
120
120
  "@libp2p/prometheus-metrics": "^3.0.21",
121
121
  "@libp2p/tcp": "9.0.23",
122
- "@lodestar/api": "1.22.0-dev.6f470f8a35",
123
- "@lodestar/config": "1.22.0-dev.6f470f8a35",
124
- "@lodestar/db": "1.22.0-dev.6f470f8a35",
125
- "@lodestar/fork-choice": "1.22.0-dev.6f470f8a35",
126
- "@lodestar/light-client": "1.22.0-dev.6f470f8a35",
127
- "@lodestar/logger": "1.22.0-dev.6f470f8a35",
128
- "@lodestar/params": "1.22.0-dev.6f470f8a35",
129
- "@lodestar/reqresp": "1.22.0-dev.6f470f8a35",
130
- "@lodestar/state-transition": "1.22.0-dev.6f470f8a35",
131
- "@lodestar/types": "1.22.0-dev.6f470f8a35",
132
- "@lodestar/utils": "1.22.0-dev.6f470f8a35",
133
- "@lodestar/validator": "1.22.0-dev.6f470f8a35",
122
+ "@lodestar/api": "1.22.0-dev.9f4bf50408",
123
+ "@lodestar/config": "1.22.0-dev.9f4bf50408",
124
+ "@lodestar/db": "1.22.0-dev.9f4bf50408",
125
+ "@lodestar/fork-choice": "1.22.0-dev.9f4bf50408",
126
+ "@lodestar/light-client": "1.22.0-dev.9f4bf50408",
127
+ "@lodestar/logger": "1.22.0-dev.9f4bf50408",
128
+ "@lodestar/params": "1.22.0-dev.9f4bf50408",
129
+ "@lodestar/reqresp": "1.22.0-dev.9f4bf50408",
130
+ "@lodestar/state-transition": "1.22.0-dev.9f4bf50408",
131
+ "@lodestar/types": "1.22.0-dev.9f4bf50408",
132
+ "@lodestar/utils": "1.22.0-dev.9f4bf50408",
133
+ "@lodestar/validator": "1.22.0-dev.9f4bf50408",
134
134
  "@multiformats/multiaddr": "^12.1.3",
135
135
  "c-kzg": "^2.1.2",
136
136
  "datastore-core": "^9.1.1",
@@ -167,5 +167,5 @@
167
167
  "beacon",
168
168
  "blockchain"
169
169
  ],
170
- "gitHead": "f70dd8fff70ebe6e9120fa388c2c5b7832d9ca92"
170
+ "gitHead": "40f868f1ffd12000b6573712ab09c3db3b311aa6"
171
171
  }