@lodestar/beacon-node 1.47.0-dev.d9c16ea16f → 1.47.0-dev.da8dfeabda

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 (258) hide show
  1. package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -1
  2. package/lib/api/impl/beacon/blocks/index.js +4 -7
  3. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  4. package/lib/api/impl/beacon/pool/index.d.ts.map +1 -1
  5. package/lib/api/impl/beacon/pool/index.js +12 -1
  6. package/lib/api/impl/beacon/pool/index.js.map +1 -1
  7. package/lib/api/impl/beacon/state/utils.d.ts +2 -1
  8. package/lib/api/impl/beacon/state/utils.d.ts.map +1 -1
  9. package/lib/api/impl/beacon/state/utils.js.map +1 -1
  10. package/lib/api/impl/events/index.d.ts +1 -1
  11. package/lib/api/impl/events/index.d.ts.map +1 -1
  12. package/lib/api/impl/events/index.js +10 -3
  13. package/lib/api/impl/events/index.js.map +1 -1
  14. package/lib/api/impl/validator/index.d.ts.map +1 -1
  15. package/lib/api/impl/validator/index.js +12 -22
  16. package/lib/api/impl/validator/index.js.map +1 -1
  17. package/lib/api/impl/validator/utils.d.ts +5 -0
  18. package/lib/api/impl/validator/utils.d.ts.map +1 -1
  19. package/lib/api/impl/validator/utils.js +18 -12
  20. package/lib/api/impl/validator/utils.js.map +1 -1
  21. package/lib/chain/archiveStore/historicalState/metrics.d.ts.map +1 -1
  22. package/lib/chain/archiveStore/historicalState/metrics.js +21 -0
  23. package/lib/chain/archiveStore/historicalState/metrics.js.map +1 -1
  24. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  25. package/lib/chain/blocks/importBlock.js +2 -7
  26. package/lib/chain/blocks/importBlock.js.map +1 -1
  27. package/lib/chain/blocks/importExecutionPayload.d.ts +3 -2
  28. package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
  29. package/lib/chain/blocks/importExecutionPayload.js +11 -9
  30. package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
  31. package/lib/chain/blocks/index.d.ts.map +1 -1
  32. package/lib/chain/blocks/index.js +15 -7
  33. package/lib/chain/blocks/index.js.map +1 -1
  34. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts.map +1 -1
  35. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js +22 -12
  36. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js.map +1 -1
  37. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.d.ts +2 -2
  38. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.d.ts.map +1 -1
  39. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.js +2 -2
  40. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.js.map +1 -1
  41. package/lib/chain/bls/index.d.ts +1 -1
  42. package/lib/chain/bls/index.d.ts.map +1 -1
  43. package/lib/chain/bls/interface.d.ts +5 -5
  44. package/lib/chain/bls/interface.d.ts.map +1 -1
  45. package/lib/chain/bls/multithread/index.d.ts +5 -11
  46. package/lib/chain/bls/multithread/index.d.ts.map +1 -1
  47. package/lib/chain/bls/multithread/index.js +116 -101
  48. package/lib/chain/bls/multithread/index.js.map +1 -1
  49. package/lib/chain/bls/multithread/jobItem.d.ts +5 -19
  50. package/lib/chain/bls/multithread/jobItem.d.ts.map +1 -1
  51. package/lib/chain/bls/multithread/jobItem.js +10 -65
  52. package/lib/chain/bls/multithread/jobItem.js.map +1 -1
  53. package/lib/chain/bls/multithread/types.d.ts +29 -8
  54. package/lib/chain/bls/multithread/types.d.ts.map +1 -1
  55. package/lib/chain/bls/multithread/types.js +12 -0
  56. package/lib/chain/bls/multithread/types.js.map +1 -1
  57. package/lib/chain/bls/multithread/utils.d.ts +4 -0
  58. package/lib/chain/bls/multithread/utils.d.ts.map +1 -1
  59. package/lib/chain/bls/multithread/utils.js +10 -0
  60. package/lib/chain/bls/multithread/utils.js.map +1 -1
  61. package/lib/chain/bls/multithread/worker.js +49 -23
  62. package/lib/chain/bls/multithread/worker.js.map +1 -1
  63. package/lib/chain/bls/singleThread.d.ts +4 -10
  64. package/lib/chain/bls/singleThread.d.ts.map +1 -1
  65. package/lib/chain/bls/singleThread.js +8 -45
  66. package/lib/chain/bls/singleThread.js.map +1 -1
  67. package/lib/chain/bls/utils.d.ts +4 -4
  68. package/lib/chain/bls/utils.d.ts.map +1 -1
  69. package/lib/chain/bls/utils.js +18 -19
  70. package/lib/chain/bls/utils.js.map +1 -1
  71. package/lib/chain/builderCircuitBreaker.d.ts +6 -5
  72. package/lib/chain/builderCircuitBreaker.d.ts.map +1 -1
  73. package/lib/chain/builderCircuitBreaker.js +28 -15
  74. package/lib/chain/builderCircuitBreaker.js.map +1 -1
  75. package/lib/chain/chain.d.ts +3 -2
  76. package/lib/chain/chain.d.ts.map +1 -1
  77. package/lib/chain/chain.js +8 -5
  78. package/lib/chain/chain.js.map +1 -1
  79. package/lib/chain/errors/blockError.d.ts +2 -0
  80. package/lib/chain/errors/blockError.d.ts.map +1 -1
  81. package/lib/chain/errors/blockError.js +6 -1
  82. package/lib/chain/errors/blockError.js.map +1 -1
  83. package/lib/chain/errors/proposerPreferences.d.ts +6 -0
  84. package/lib/chain/errors/proposerPreferences.d.ts.map +1 -1
  85. package/lib/chain/errors/proposerPreferences.js +1 -0
  86. package/lib/chain/errors/proposerPreferences.js.map +1 -1
  87. package/lib/chain/interface.d.ts +2 -1
  88. package/lib/chain/interface.d.ts.map +1 -1
  89. package/lib/chain/interface.js.map +1 -1
  90. package/lib/chain/opPools/aggregatedAttestationPool.js +1 -1
  91. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  92. package/lib/chain/opPools/attestationPool.d.ts +1 -1
  93. package/lib/chain/opPools/attestationPool.d.ts.map +1 -1
  94. package/lib/chain/opPools/attestationPool.js +1 -1
  95. package/lib/chain/opPools/attestationPool.js.map +1 -1
  96. package/lib/chain/opPools/payloadAttestationPool.js +3 -3
  97. package/lib/chain/opPools/payloadAttestationPool.js.map +1 -1
  98. package/lib/chain/opPools/syncCommitteeMessagePool.js +1 -1
  99. package/lib/chain/opPools/syncCommitteeMessagePool.js.map +1 -1
  100. package/lib/chain/opPools/syncContributionAndProofPool.js +1 -1
  101. package/lib/chain/opPools/syncContributionAndProofPool.js.map +1 -1
  102. package/lib/chain/opPools/utils.d.ts +1 -1
  103. package/lib/chain/opPools/utils.d.ts.map +1 -1
  104. package/lib/chain/opPools/utils.js +1 -1
  105. package/lib/chain/opPools/utils.js.map +1 -1
  106. package/lib/chain/options.d.ts +1 -1
  107. package/lib/chain/options.d.ts.map +1 -1
  108. package/lib/chain/prepareNextSlot.js +1 -1
  109. package/lib/chain/prepareNextSlot.js.map +1 -1
  110. package/lib/chain/produceBlock/produceBlockBody.d.ts +2 -0
  111. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  112. package/lib/chain/produceBlock/produceBlockBody.js +6 -1
  113. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  114. package/lib/chain/seenCache/seenAttesters.d.ts +9 -5
  115. package/lib/chain/seenCache/seenAttesters.d.ts.map +1 -1
  116. package/lib/chain/seenCache/seenAttesters.js +25 -4
  117. package/lib/chain/seenCache/seenAttesters.js.map +1 -1
  118. package/lib/chain/seenCache/seenBlockProposers.d.ts +5 -1
  119. package/lib/chain/seenCache/seenBlockProposers.d.ts.map +1 -1
  120. package/lib/chain/seenCache/seenBlockProposers.js +10 -3
  121. package/lib/chain/seenCache/seenBlockProposers.js.map +1 -1
  122. package/lib/chain/validation/attestation.d.ts.map +1 -1
  123. package/lib/chain/validation/attestation.js +1 -4
  124. package/lib/chain/validation/attestation.js.map +1 -1
  125. package/lib/chain/validation/attesterSlashing.d.ts.map +1 -1
  126. package/lib/chain/validation/attesterSlashing.js +1 -1
  127. package/lib/chain/validation/attesterSlashing.js.map +1 -1
  128. package/lib/chain/validation/block.d.ts.map +1 -1
  129. package/lib/chain/validation/block.js +21 -7
  130. package/lib/chain/validation/block.js.map +1 -1
  131. package/lib/chain/validation/executionPayloadBid.d.ts.map +1 -1
  132. package/lib/chain/validation/executionPayloadBid.js +1 -2
  133. package/lib/chain/validation/executionPayloadBid.js.map +1 -1
  134. package/lib/chain/validation/executionPayloadEnvelope.js +1 -1
  135. package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
  136. package/lib/chain/validation/payloadAttestationMessage.d.ts.map +1 -1
  137. package/lib/chain/validation/payloadAttestationMessage.js +5 -14
  138. package/lib/chain/validation/payloadAttestationMessage.js.map +1 -1
  139. package/lib/chain/validation/proposerPreferences.d.ts +1 -1
  140. package/lib/chain/validation/proposerPreferences.d.ts.map +1 -1
  141. package/lib/chain/validation/proposerPreferences.js +13 -4
  142. package/lib/chain/validation/proposerPreferences.js.map +1 -1
  143. package/lib/chain/validation/proposerSlashing.js +1 -1
  144. package/lib/chain/validation/proposerSlashing.js.map +1 -1
  145. package/lib/execution/builder/http.d.ts +10 -7
  146. package/lib/execution/builder/http.d.ts.map +1 -1
  147. package/lib/execution/builder/http.js +11 -8
  148. package/lib/execution/builder/http.js.map +1 -1
  149. package/lib/metrics/metrics/beacon.d.ts +3 -3
  150. package/lib/metrics/metrics/beacon.d.ts.map +1 -1
  151. package/lib/metrics/metrics/beacon.js +9 -9
  152. package/lib/metrics/metrics/beacon.js.map +1 -1
  153. package/lib/metrics/metrics/lodestar.d.ts +48 -18
  154. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  155. package/lib/metrics/metrics/lodestar.js +96 -50
  156. package/lib/metrics/metrics/lodestar.js.map +1 -1
  157. package/lib/network/gossip/topic.d.ts +13 -0
  158. package/lib/network/gossip/topic.d.ts.map +1 -1
  159. package/lib/network/gossip/topic.js +37 -0
  160. package/lib/network/gossip/topic.js.map +1 -1
  161. package/lib/network/libp2p/index.d.ts.map +1 -1
  162. package/lib/network/libp2p/index.js +10 -2
  163. package/lib/network/libp2p/index.js.map +1 -1
  164. package/lib/network/network.d.ts.map +1 -1
  165. package/lib/network/network.js +22 -43
  166. package/lib/network/network.js.map +1 -1
  167. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  168. package/lib/network/processor/gossipHandlers.js +32 -5
  169. package/lib/network/processor/gossipHandlers.js.map +1 -1
  170. package/lib/network/reqresp/score.d.ts.map +1 -1
  171. package/lib/network/reqresp/score.js +5 -11
  172. package/lib/network/reqresp/score.js.map +1 -1
  173. package/lib/network/util.d.ts +0 -1
  174. package/lib/network/util.d.ts.map +1 -1
  175. package/lib/network/util.js +0 -4
  176. package/lib/network/util.js.map +1 -1
  177. package/lib/node/nodejs.d.ts +2 -1
  178. package/lib/node/nodejs.d.ts.map +1 -1
  179. package/lib/node/nodejs.js.map +1 -1
  180. package/lib/sync/range/batch.d.ts +23 -5
  181. package/lib/sync/range/batch.d.ts.map +1 -1
  182. package/lib/sync/range/batch.js +61 -22
  183. package/lib/sync/range/batch.js.map +1 -1
  184. package/lib/sync/range/chain.d.ts +2 -1
  185. package/lib/sync/range/chain.d.ts.map +1 -1
  186. package/lib/sync/range/chain.js +23 -10
  187. package/lib/sync/range/chain.js.map +1 -1
  188. package/lib/sync/types.d.ts.map +1 -1
  189. package/lib/sync/types.js.map +1 -1
  190. package/lib/sync/unknownBlock.d.ts +9 -0
  191. package/lib/sync/unknownBlock.d.ts.map +1 -1
  192. package/lib/sync/unknownBlock.js +110 -14
  193. package/lib/sync/unknownBlock.js.map +1 -1
  194. package/package.json +18 -18
  195. package/src/api/impl/beacon/blocks/index.ts +5 -7
  196. package/src/api/impl/beacon/pool/index.ts +12 -1
  197. package/src/api/impl/beacon/state/utils.ts +2 -1
  198. package/src/api/impl/events/index.ts +10 -4
  199. package/src/api/impl/validator/index.ts +22 -27
  200. package/src/api/impl/validator/utils.ts +30 -15
  201. package/src/chain/archiveStore/historicalState/metrics.ts +22 -0
  202. package/src/chain/blocks/importBlock.ts +1 -6
  203. package/src/chain/blocks/importExecutionPayload.ts +12 -11
  204. package/src/chain/blocks/index.ts +19 -7
  205. package/src/chain/blocks/verifyBlocksStateTransitionOnly.ts +25 -16
  206. package/src/chain/blocks/verifyExecutionPayloadEnvelope.ts +1 -9
  207. package/src/chain/bls/index.ts +1 -1
  208. package/src/chain/bls/interface.ts +7 -3
  209. package/src/chain/bls/multithread/index.ts +148 -120
  210. package/src/chain/bls/multithread/jobItem.ts +12 -82
  211. package/src/chain/bls/multithread/types.ts +33 -8
  212. package/src/chain/bls/multithread/utils.ts +11 -0
  213. package/src/chain/bls/multithread/worker.ts +85 -27
  214. package/src/chain/bls/singleThread.ts +11 -55
  215. package/src/chain/bls/utils.ts +23 -24
  216. package/src/chain/builderCircuitBreaker.ts +31 -17
  217. package/src/chain/chain.ts +9 -5
  218. package/src/chain/errors/blockError.ts +9 -3
  219. package/src/chain/errors/proposerPreferences.ts +7 -0
  220. package/src/chain/interface.ts +2 -1
  221. package/src/chain/opPools/aggregatedAttestationPool.ts +1 -1
  222. package/src/chain/opPools/attestationPool.ts +1 -1
  223. package/src/chain/opPools/payloadAttestationPool.ts +3 -3
  224. package/src/chain/opPools/syncCommitteeMessagePool.ts +1 -1
  225. package/src/chain/opPools/syncContributionAndProofPool.ts +1 -1
  226. package/src/chain/opPools/utils.ts +1 -1
  227. package/src/chain/options.ts +1 -1
  228. package/src/chain/prepareNextSlot.ts +1 -1
  229. package/src/chain/produceBlock/produceBlockBody.ts +13 -0
  230. package/src/chain/seenCache/seenAttesters.ts +31 -5
  231. package/src/chain/seenCache/seenBlockProposers.ts +13 -3
  232. package/src/chain/validation/attestation.ts +1 -7
  233. package/src/chain/validation/attesterSlashing.ts +1 -8
  234. package/src/chain/validation/block.ts +21 -7
  235. package/src/chain/validation/executionPayloadBid.ts +1 -2
  236. package/src/chain/validation/executionPayloadEnvelope.ts +0 -1
  237. package/src/chain/validation/payloadAttestationMessage.ts +6 -17
  238. package/src/chain/validation/proposerPreferences.ts +15 -5
  239. package/src/chain/validation/proposerSlashing.ts +1 -1
  240. package/src/execution/builder/http.ts +11 -11
  241. package/src/metrics/metrics/beacon.ts +9 -9
  242. package/src/metrics/metrics/lodestar.ts +101 -51
  243. package/src/network/gossip/topic.ts +38 -0
  244. package/src/network/libp2p/index.ts +11 -2
  245. package/src/network/network.ts +27 -55
  246. package/src/network/processor/gossipHandlers.ts +35 -3
  247. package/src/network/reqresp/score.ts +5 -11
  248. package/src/network/util.ts +0 -5
  249. package/src/node/nodejs.ts +2 -1
  250. package/src/sync/range/batch.ts +83 -28
  251. package/src/sync/range/chain.ts +26 -11
  252. package/src/sync/types.ts +3 -1
  253. package/src/sync/unknownBlock.ts +126 -17
  254. package/lib/chain/bls/maybeBatch.d.ts +0 -12
  255. package/lib/chain/bls/maybeBatch.d.ts.map +0 -1
  256. package/lib/chain/bls/maybeBatch.js +0 -35
  257. package/lib/chain/bls/maybeBatch.js.map +0 -1
  258. package/src/chain/bls/maybeBatch.ts +0 -45
@@ -1,20 +1,39 @@
1
- import { VerifySignatureOpts } from "../interface.js";
1
+ import { type BlsSignatureSet } from "@chainsafe/lodestar-z/bls-verifier";
2
+ import { SameMessageSignatureSet, VerifySignatureOpts } from "../interface.js";
2
3
  export type WorkerData = {
3
4
  workerId: number;
4
5
  };
5
- export type SerializedSet = {
6
- publicKey: Uint8Array;
7
- message: Uint8Array;
8
- signature: Uint8Array;
6
+ export declare enum JobQueueItemType {
7
+ default = "default",
8
+ sameMessage = "same_message"
9
+ }
10
+ export type BlsWorkReqDefault = {
11
+ type: JobQueueItemType.default;
12
+ opts: VerifySignatureOpts;
13
+ sets: BlsSignatureSet[];
9
14
  };
10
- export type BlsWorkReq = {
15
+ export type BlsWorkReqSameMessage = {
16
+ type: JobQueueItemType.sameMessage;
11
17
  opts: VerifySignatureOpts;
12
- sets: SerializedSet[];
18
+ sets: SameMessageSignatureSet[];
19
+ message: Uint8Array;
13
20
  };
21
+ export type BlsWorkReq = BlsWorkReqDefault | BlsWorkReqSameMessage;
14
22
  export declare enum WorkResultCode {
15
23
  success = "success",
16
24
  error = "error"
17
25
  }
26
+ export declare enum VerificationCallOperation {
27
+ batch = "batch",
28
+ single = "single",
29
+ fallback = "fallback",
30
+ sameMessage = "same_message"
31
+ }
32
+ export type VerificationCall = {
33
+ operation: VerificationCallOperation;
34
+ duration: number;
35
+ signatureSets: number;
36
+ };
18
37
  export type WorkResultError = {
19
38
  code: WorkResultCode.error;
20
39
  error: Error;
@@ -30,10 +49,12 @@ export type BlsWorkResult = {
30
49
  batchRetries: number;
31
50
  /** Total num of sigs that have been successfully verified with batching */
32
51
  batchSigsSuccess: number;
52
+ /** Every lodestar-z verification call made while processing this work group */
53
+ verificationCalls: VerificationCall[];
33
54
  /** Time worker function starts - UNIX timestamp in seconds and nanoseconds */
34
55
  workerStartTime: [number, number];
35
56
  /** Time worker function ends - UNIX timestamp in seconds and nanoseconds */
36
57
  workerEndTime: [number, number];
37
- results: WorkResult<boolean>[];
58
+ results: WorkResult<boolean[]>[];
38
59
  };
39
60
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/chain/bls/multithread/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,mBAAmB,EAAC,MAAM,iBAAiB,CAAC;AAEpD,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,SAAS,EAAE,UAAU,CAAC;IACtB,OAAO,EAAE,UAAU,CAAC;IACpB,SAAS,EAAE,UAAU,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,mBAAmB,CAAC;IAC1B,IAAI,EAAE,aAAa,EAAE,CAAC;CACvB,CAAC;AAEF,oBAAY,cAAc;IACxB,OAAO,YAAY;IACnB,KAAK,UAAU;CAChB;AAED,MAAM,MAAM,eAAe,GAAG;IAAC,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAC,CAAC;AACzE,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI;IAAC,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC;IAAC,MAAM,EAAE,CAAC,CAAA;CAAC,GAAG,eAAe,CAAC;AAExF,MAAM,MAAM,aAAa,GAAG;IAC1B,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,CAAC;IACjB,kDAAkD;IAClD,YAAY,EAAE,MAAM,CAAC;IACrB,2EAA2E;IAC3E,gBAAgB,EAAE,MAAM,CAAC;IACzB,8EAA8E;IAC9E,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,4EAA4E;IAC5E,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;CAChC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/chain/bls/multithread/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,eAAe,EAAC,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAC,uBAAuB,EAAE,mBAAmB,EAAC,MAAM,iBAAiB,CAAC;AAE7E,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,oBAAY,gBAAgB;IAC1B,OAAO,YAAY;IACnB,WAAW,iBAAiB;CAC7B;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,gBAAgB,CAAC,OAAO,CAAC;IAC/B,IAAI,EAAE,mBAAmB,CAAC;IAC1B,IAAI,EAAE,eAAe,EAAE,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,gBAAgB,CAAC,WAAW,CAAC;IACnC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,IAAI,EAAE,uBAAuB,EAAE,CAAC;IAChC,OAAO,EAAE,UAAU,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,iBAAiB,GAAG,qBAAqB,CAAC;AAEnE,oBAAY,cAAc;IACxB,OAAO,YAAY;IACnB,KAAK,UAAU;CAChB;AAED,oBAAY,yBAAyB;IACnC,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,WAAW,iBAAiB;CAC7B;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,EAAE,yBAAyB,CAAC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAAC,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAC,CAAC;AACzE,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI;IAAC,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC;IAAC,MAAM,EAAE,CAAC,CAAA;CAAC,GAAG,eAAe,CAAC;AAExF,MAAM,MAAM,aAAa,GAAG;IAC1B,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,CAAC;IACjB,kDAAkD;IAClD,YAAY,EAAE,MAAM,CAAC;IACrB,2EAA2E;IAC3E,gBAAgB,EAAE,MAAM,CAAC;IACzB,+EAA+E;IAC/E,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC,8EAA8E;IAC9E,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,4EAA4E;IAC5E,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;CAClC,CAAC"}
@@ -1,6 +1,18 @@
1
+ export var JobQueueItemType;
2
+ (function (JobQueueItemType) {
3
+ JobQueueItemType["default"] = "default";
4
+ JobQueueItemType["sameMessage"] = "same_message";
5
+ })(JobQueueItemType || (JobQueueItemType = {}));
1
6
  export var WorkResultCode;
2
7
  (function (WorkResultCode) {
3
8
  WorkResultCode["success"] = "success";
4
9
  WorkResultCode["error"] = "error";
5
10
  })(WorkResultCode || (WorkResultCode = {}));
11
+ export var VerificationCallOperation;
12
+ (function (VerificationCallOperation) {
13
+ VerificationCallOperation["batch"] = "batch";
14
+ VerificationCallOperation["single"] = "single";
15
+ VerificationCallOperation["fallback"] = "fallback";
16
+ VerificationCallOperation["sameMessage"] = "same_message";
17
+ })(VerificationCallOperation || (VerificationCallOperation = {}));
6
18
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/chain/bls/multithread/types.ts"],"names":[],"mappings":"AAiBA,MAAM,CAAN,IAAY,cAGX;AAHD,WAAY,cAAc;IACxB,qCAAmB,CAAA;IACnB,iCAAe,CAAA;AACjB,CAAC,EAHW,cAAc,KAAd,cAAc,QAGzB"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/chain/bls/multithread/types.ts"],"names":[],"mappings":"AAOA,MAAM,CAAN,IAAY,gBAGX;AAHD,WAAY,gBAAgB;IAC1B,uCAAmB,CAAA;IACnB,gDAA4B,CAAA;AAC9B,CAAC,EAHW,gBAAgB,KAAhB,gBAAgB,QAG3B;AAiBD,MAAM,CAAN,IAAY,cAGX;AAHD,WAAY,cAAc;IACxB,qCAAmB,CAAA;IACnB,iCAAe,CAAA;AACjB,CAAC,EAHW,cAAc,KAAd,cAAc,QAGzB;AAED,MAAM,CAAN,IAAY,yBAKX;AALD,WAAY,yBAAyB;IACnC,4CAAe,CAAA;IACf,8CAAiB,CAAA;IACjB,kDAAqB,CAAA;IACrB,yDAA4B,CAAA;AAC9B,CAAC,EALW,yBAAyB,KAAzB,yBAAyB,QAKpC"}
@@ -2,4 +2,8 @@
2
2
  * Splits an array into an array of arrays maximizing the size of the smallest chunk.
3
3
  */
4
4
  export declare function chunkifyMaximizeChunkSize<T>(arr: T[], minPerChunk: number): T[][];
5
+ /**
6
+ * Splits an array into chunks that do not exceed a maximum size.
7
+ */
8
+ export declare function chunkifyMaxChunkSize<T>(arr: T[], maxPerChunk: number): T[][];
5
9
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/chain/bls/multithread/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,CAAC,EAAE,EAAE,CAejF"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/chain/bls/multithread/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,CAAC,EAAE,EAAE,CAejF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,CAAC,EAAE,EAAE,CAM5E"}
@@ -14,4 +14,14 @@ export function chunkifyMaximizeChunkSize(arr, minPerChunk) {
14
14
  }
15
15
  return arrArr;
16
16
  }
17
+ /**
18
+ * Splits an array into chunks that do not exceed a maximum size.
19
+ */
20
+ export function chunkifyMaxChunkSize(arr, maxPerChunk) {
21
+ const chunks = [];
22
+ for (let i = 0; i < arr.length; i += maxPerChunk) {
23
+ chunks.push(arr.slice(i, i + maxPerChunk));
24
+ }
25
+ return chunks;
26
+ }
17
27
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/chain/bls/multithread/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAI,GAAQ,EAAE,WAAmB;IACxE,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC;IACxD,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;IAED,oCAAoC;IACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC;IACpD,MAAM,MAAM,GAAU,EAAE,CAAC;IAEzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,QAAQ,EAAE,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/chain/bls/multithread/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAI,GAAQ,EAAE,WAAmB;IACxE,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC;IACxD,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;IAED,oCAAoC;IACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC;IACpD,MAAM,MAAM,GAAU,EAAE,CAAC;IAEzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,QAAQ,EAAE,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAI,GAAQ,EAAE,WAAmB;IACnE,MAAM,MAAM,GAAU,EAAE,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC;QACjD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1,8 +1,7 @@
1
1
  import worker from "node:worker_threads";
2
- import { PublicKey } from "@chainsafe/blst";
2
+ import { verifySignatureSets, verifySignatureSetsSameMessage, } from "@chainsafe/lodestar-z/bls-verifier";
3
3
  import { expose } from "@chainsafe/threads/worker";
4
- import { verifySignatureSetsMaybeBatch } from "../maybeBatch.js";
5
- import { WorkResultCode } from "./types.js";
4
+ import { JobQueueItemType, VerificationCallOperation, WorkResultCode, } from "./types.js";
6
5
  import { chunkifyMaximizeChunkSize } from "./utils.js";
7
6
  /**
8
7
  * Split batchable sets in chunks of minimum size 16.
@@ -25,6 +24,7 @@ expose({
25
24
  function verifyManySignatureSets(workReqArr) {
26
25
  const [startSec, startNs] = process.hrtime();
27
26
  const results = [];
27
+ const verificationCalls = [];
28
28
  let batchRetries = 0;
29
29
  let batchSigsSuccess = 0;
30
30
  // If there are multiple batchable sets attempt batch verification with them
@@ -33,12 +33,26 @@ function verifyManySignatureSets(workReqArr) {
33
33
  // Split sets between batchable and non-batchable preserving their original index in the req array
34
34
  for (let i = 0; i < workReqArr.length; i++) {
35
35
  const workReq = workReqArr[i];
36
- const sets = workReq.sets.map(deserializeSet);
37
- if (workReq.opts.batchable) {
38
- batchableSets.push({ idx: i, sets });
39
- }
40
- else {
41
- nonBatchableSets.push({ idx: i, sets });
36
+ switch (workReq.type) {
37
+ case JobQueueItemType.default: {
38
+ const { sets } = workReq;
39
+ if (workReq.opts.batchable) {
40
+ batchableSets.push({ idx: i, sets });
41
+ }
42
+ else {
43
+ nonBatchableSets.push({ idx: i, sets, operation: VerificationCallOperation.single });
44
+ }
45
+ break;
46
+ }
47
+ case JobQueueItemType.sameMessage:
48
+ try {
49
+ const result = recordVerificationCall(verificationCalls, VerificationCallOperation.sameMessage, workReq.sets.length, () => verifySignatureSetsSameMessage(workReq.sets, workReq.message));
50
+ results[i] = { code: WorkResultCode.success, result };
51
+ }
52
+ catch (e) {
53
+ results[i] = { code: WorkResultCode.error, error: e };
54
+ }
55
+ break;
42
56
  }
43
57
  }
44
58
  if (batchableSets.length > 0) {
@@ -53,33 +67,41 @@ function verifyManySignatureSets(workReqArr) {
53
67
  }
54
68
  try {
55
69
  // Attempt to verify multiple sets at once
56
- const isValid = verifySignatureSetsMaybeBatch(allSets);
70
+ const isValid = recordVerificationCall(verificationCalls, VerificationCallOperation.batch, allSets.length, () => verifySignatureSets(allSets));
57
71
  if (isValid) {
58
72
  // The entire batch is valid, return success to all
59
73
  for (const { idx, sets } of batchableChunk) {
60
74
  batchSigsSuccess += sets.length;
61
- results[idx] = { code: WorkResultCode.success, result: isValid };
75
+ results[idx] = { code: WorkResultCode.success, result: [isValid] };
62
76
  }
63
77
  }
64
78
  else {
65
79
  batchRetries++;
66
80
  // Re-verify all sigs
67
- nonBatchableSets.push(...batchableChunk);
81
+ nonBatchableSets.push(...batchableChunk.map(({ idx, sets }) => ({
82
+ idx,
83
+ sets,
84
+ operation: VerificationCallOperation.fallback,
85
+ })));
68
86
  }
69
87
  }
70
88
  catch (_e) {
71
89
  // TODO: Ignore this error expecting that the same error will happen when re-verifying the set individually
72
- // It's not ideal but '@chainsafe/blst' may throw errors on some conditions
90
+ // It's not ideal but the BLS implementation may throw errors on some conditions
73
91
  batchRetries++;
74
92
  // Re-verify all sigs
75
- nonBatchableSets.push(...batchableChunk);
93
+ nonBatchableSets.push(...batchableChunk.map(({ idx, sets }) => ({
94
+ idx,
95
+ sets,
96
+ operation: VerificationCallOperation.fallback,
97
+ })));
76
98
  }
77
99
  }
78
100
  }
79
- for (const { idx, sets } of nonBatchableSets) {
101
+ for (const { idx, sets, operation } of nonBatchableSets) {
80
102
  try {
81
- const isValid = verifySignatureSetsMaybeBatch(sets);
82
- results[idx] = { code: WorkResultCode.success, result: isValid };
103
+ const isValid = recordVerificationCall(verificationCalls, operation, sets.length, () => verifySignatureSets(sets));
104
+ results[idx] = { code: WorkResultCode.success, result: [isValid] };
83
105
  }
84
106
  catch (e) {
85
107
  results[idx] = { code: WorkResultCode.error, error: e };
@@ -90,16 +112,20 @@ function verifyManySignatureSets(workReqArr) {
90
112
  workerId,
91
113
  batchRetries,
92
114
  batchSigsSuccess,
115
+ verificationCalls,
93
116
  workerStartTime: [startSec, startNs],
94
117
  workerEndTime: [workerEndSec, workerEndNs],
95
118
  results,
96
119
  };
97
120
  }
98
- function deserializeSet(set) {
99
- return {
100
- publicKey: PublicKey.fromBytes(set.publicKey),
101
- message: set.message,
102
- signature: set.signature,
103
- };
121
+ function recordVerificationCall(calls, operation, signatureSets, verify) {
122
+ const startTime = process.hrtime();
123
+ try {
124
+ return verify();
125
+ }
126
+ finally {
127
+ const [seconds, nanoseconds] = process.hrtime(startTime);
128
+ calls.push({ operation, signatureSets, duration: seconds + nanoseconds / 1e9 });
129
+ }
104
130
  }
105
131
  //# sourceMappingURL=worker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../../src/chain/bls/multithread/worker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../../src/chain/bls/multithread/worker.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,qBAAqB,CAAC;AACzC,OAAO,EAEL,mBAAmB,EACnB,8BAA8B,GAC/B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAC,MAAM,EAAC,MAAM,2BAA2B,CAAC;AACjD,OAAO,EAGL,gBAAgB,EAEhB,yBAAyB,EAEzB,cAAc,GAEf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAC,yBAAyB,EAAC,MAAM,YAAY,CAAC;AAErD;;;;;;GAMG;AACH,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAEnC,gCAAgC;AAChC,MAAM,UAAU,GAAG,MAAM,CAAC,UAAwB,CAAC;AACnD,IAAI,CAAC,UAAU;IAAE,MAAM,KAAK,CAAC,4BAA4B,CAAC,CAAC;AAC3D,MAAM,EAAC,QAAQ,EAAC,GAAG,UAAU,IAAI,EAAE,CAAC;AAEpC,MAAM,CAAC;IACL,KAAK,CAAC,uBAAuB,CAAC,UAAwB;QACpD,OAAO,uBAAuB,CAAC,UAAU,CAAC,CAAC;IAC7C,CAAC;CACF,CAAC,CAAC;AAEH,SAAS,uBAAuB,CAAC,UAAwB;IACvD,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAC7C,MAAM,OAAO,GAA4B,EAAE,CAAC;IAC5C,MAAM,iBAAiB,GAAuB,EAAE,CAAC;IACjD,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,gBAAgB,GAAG,CAAC,CAAC;IAEzB,4EAA4E;IAC5E,MAAM,aAAa,GAA6C,EAAE,CAAC;IACnE,MAAM,gBAAgB,GAIhB,EAAE,CAAC;IAET,kGAAkG;IAClG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAC9B,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;YACrB,KAAK,gBAAgB,CAAC,OAAO,EAAE,CAAC;gBAC9B,MAAM,EAAC,IAAI,EAAC,GAAG,OAAO,CAAC;gBACvB,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;oBAC3B,aAAa,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAC,CAAC,CAAC;gBACrC,CAAC;qBAAM,CAAC;oBACN,gBAAgB,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,yBAAyB,CAAC,MAAM,EAAC,CAAC,CAAC;gBACrF,CAAC;gBACD,MAAM;YACR,CAAC;YACD,KAAK,gBAAgB,CAAC,WAAW;gBAC/B,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,sBAAsB,CACnC,iBAAiB,EACjB,yBAAyB,CAAC,WAAW,EACrC,OAAO,CAAC,IAAI,CAAC,MAAM,EACnB,GAAG,EAAE,CAAC,8BAA8B,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CACpE,CAAC;oBACF,OAAO,CAAC,CAAC,CAAC,GAAG,EAAC,IAAI,EAAE,cAAc,CAAC,OAAO,EAAE,MAAM,EAAC,CAAC;gBACtD,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,OAAO,CAAC,CAAC,CAAC,GAAG,EAAC,IAAI,EAAE,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,CAAU,EAAC,CAAC;gBAC/D,CAAC;gBACD,MAAM;QACV,CAAC;IACH,CAAC;IAED,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,kFAAkF;QAClF,MAAM,eAAe,GAAG,yBAAyB,CAAC,aAAa,EAAE,uBAAuB,CAAC,CAAC;QAE1F,KAAK,MAAM,cAAc,IAAI,eAAe,EAAE,CAAC;YAC7C,MAAM,OAAO,GAAsB,EAAE,CAAC;YACtC,KAAK,MAAM,EAAC,IAAI,EAAC,IAAI,cAAc,EAAE,CAAC;gBACpC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;oBACvB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC;YAED,IAAI,CAAC;gBACH,0CAA0C;gBAC1C,MAAM,OAAO,GAAG,sBAAsB,CAAC,iBAAiB,EAAE,yBAAyB,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,CAC9G,mBAAmB,CAAC,OAAO,CAAC,CAC7B,CAAC;gBAEF,IAAI,OAAO,EAAE,CAAC;oBACZ,mDAAmD;oBACnD,KAAK,MAAM,EAAC,GAAG,EAAE,IAAI,EAAC,IAAI,cAAc,EAAE,CAAC;wBACzC,gBAAgB,IAAI,IAAI,CAAC,MAAM,CAAC;wBAChC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAC,IAAI,EAAE,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,OAAO,CAAC,EAAC,CAAC;oBACnE,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,YAAY,EAAE,CAAC;oBACf,qBAAqB;oBACrB,gBAAgB,CAAC,IAAI,CACnB,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,EAAC,GAAG,EAAE,IAAI,EAAC,EAAE,EAAE,CAAC,CAAC;wBACtC,GAAG;wBACH,IAAI;wBACJ,SAAS,EAAE,yBAAyB,CAAC,QAAiB;qBACvD,CAAC,CAAC,CACJ,CAAC;gBACJ,CAAC;YACH,CAAC;YAAC,OAAO,EAAE,EAAE,CAAC;gBACZ,2GAA2G;gBAC3G,sFAAsF;gBACtF,YAAY,EAAE,CAAC;gBACf,qBAAqB;gBACrB,gBAAgB,CAAC,IAAI,CACnB,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,EAAC,GAAG,EAAE,IAAI,EAAC,EAAE,EAAE,CAAC,CAAC;oBACtC,GAAG;oBACH,IAAI;oBACJ,SAAS,EAAE,yBAAyB,CAAC,QAAiB;iBACvD,CAAC,CAAC,CACJ,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,MAAM,EAAC,GAAG,EAAE,IAAI,EAAE,SAAS,EAAC,IAAI,gBAAgB,EAAE,CAAC;QACtD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,sBAAsB,CAAC,iBAAiB,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CACrF,mBAAmB,CAAC,IAAI,CAAC,CAC1B,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,GAAG,EAAC,IAAI,EAAE,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,OAAO,CAAC,EAAC,CAAC;QACnE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,GAAG,EAAC,IAAI,EAAE,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,CAAU,EAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAED,MAAM,CAAC,YAAY,EAAE,WAAW,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAErD,OAAO;QACL,QAAQ;QACR,YAAY;QACZ,gBAAgB;QAChB,iBAAiB;QACjB,eAAe,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;QACpC,aAAa,EAAE,CAAC,YAAY,EAAE,WAAW,CAAC;QAC1C,OAAO;KACR,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAC7B,KAAyB,EACzB,SAAoC,EACpC,aAAqB,EACrB,MAAe;IAEf,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IACnC,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,CAAC;IAClB,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACzD,KAAK,CAAC,IAAI,CAAC,EAAC,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,GAAG,WAAW,GAAG,GAAG,EAAC,CAAC,CAAC;IAChF,CAAC;AACH,CAAC"}
@@ -1,19 +1,13 @@
1
- import { PublicKey } from "@chainsafe/blst";
2
- import { ISignatureSet, PubkeyCache } from "@lodestar/state-transition";
1
+ import { ISignatureSet } from "@lodestar/state-transition";
3
2
  import { Metrics } from "../../metrics/index.js";
4
- import { IBlsVerifier } from "./interface.js";
3
+ import { IBlsVerifier, SameMessageSignatureSet } from "./interface.js";
5
4
  export declare class BlsSingleThreadVerifier implements IBlsVerifier {
6
5
  private readonly metrics;
7
- private readonly pubkeyCache;
8
- constructor({ metrics, pubkeyCache }: {
6
+ constructor({ metrics }: {
9
7
  metrics: Metrics | null;
10
- pubkeyCache: PubkeyCache;
11
8
  });
12
9
  verifySignatureSets(sets: ISignatureSet[]): Promise<boolean>;
13
- verifySignatureSetsSameMessage(sets: {
14
- publicKey: PublicKey;
15
- signature: Uint8Array;
16
- }[], message: Uint8Array): Promise<boolean[]>;
10
+ verifySignatureSetsSameMessage(sets: SameMessageSignatureSet[], message: Uint8Array): Promise<boolean[]>;
17
11
  close(): Promise<void>;
18
12
  canAcceptWork(): boolean;
19
13
  }
@@ -1 +1 @@
1
- {"version":3,"file":"singleThread.d.ts","sourceRoot":"","sources":["../../../src/chain/bls/singleThread.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAA8D,MAAM,iBAAiB,CAAC;AACvG,OAAO,EAAC,aAAa,EAAE,WAAW,EAAC,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAC,OAAO,EAAC,MAAM,wBAAwB,CAAC;AAC/C,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAI5C,qBAAa,uBAAwB,YAAW,YAAY;IAC1D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAE1C,YAAY,EAAC,OAAc,EAAE,WAAW,EAAC,EAAE;QAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;QAAC,WAAW,EAAE,WAAW,CAAA;KAAC,EAG7F;IAEK,mBAAmB,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAmBjE;IAEK,8BAA8B,CAClC,IAAI,EAAE;QAAC,SAAS,EAAE,SAAS,CAAC;QAAC,SAAS,EAAE,UAAU,CAAA;KAAC,EAAE,EACrD,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,OAAO,EAAE,CAAC,CAsCpB;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3B;IAED,aAAa,IAAI,OAAO,CAGvB;CACF"}
1
+ {"version":3,"file":"singleThread.d.ts","sourceRoot":"","sources":["../../../src/chain/bls/singleThread.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,aAAa,EAAC,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAC,OAAO,EAAC,MAAM,wBAAwB,CAAC;AAC/C,OAAO,EAAC,YAAY,EAAE,uBAAuB,EAAC,MAAM,gBAAgB,CAAC;AAGrE,qBAAa,uBAAwB,YAAW,YAAY;IAC1D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,YAAY,EAAC,OAAc,EAAC,EAAE;QAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;KAAC,EAEtD;IAEK,mBAAmB,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAYjE;IAEK,8BAA8B,CAAC,IAAI,EAAE,uBAAuB,EAAE,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAQ7G;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3B;IAED,aAAa,IAAI,OAAO,CAGvB;CACF"}
@@ -1,23 +1,14 @@
1
- import { Signature, aggregatePublicKeys, aggregateSignatures, verify } from "@chainsafe/blst";
2
- import { verifySignatureSetsMaybeBatch } from "./maybeBatch.js";
3
- import { getAggregatedPubkey, getAggregatedPubkeysCount } from "./utils.js";
1
+ import { verifySignatureSetsSameMessage } from "@chainsafe/lodestar-z/bls-verifier";
2
+ import { chunkSameMessageSignatureSets, getAggregatedPubkeysCount, verifySignatureSetsInBatches } from "./utils.js";
4
3
  export class BlsSingleThreadVerifier {
5
4
  metrics;
6
- pubkeyCache;
7
- constructor({ metrics = null, pubkeyCache }) {
5
+ constructor({ metrics = null }) {
8
6
  this.metrics = metrics;
9
- this.pubkeyCache = pubkeyCache;
10
7
  }
11
8
  async verifySignatureSets(sets) {
12
9
  this.metrics?.bls.aggregatedPubkeys.inc(getAggregatedPubkeysCount(sets));
13
- const setsAggregated = sets.map((set) => ({
14
- publicKey: getAggregatedPubkey(set, this.pubkeyCache, this.metrics),
15
- message: set.signingRoot,
16
- signature: set.signature,
17
- }));
18
- // Count time after aggregating
19
10
  const timer = this.metrics?.blsThreadPool.mainThreadDurationInThreadPool.startTimer();
20
- const isValid = verifySignatureSetsMaybeBatch(setsAggregated);
11
+ const isValid = verifySignatureSetsInBatches(sets);
21
12
  // Don't use a try/catch, only count run without exceptions
22
13
  if (timer) {
23
14
  timer();
@@ -26,39 +17,11 @@ export class BlsSingleThreadVerifier {
26
17
  }
27
18
  async verifySignatureSetsSameMessage(sets, message) {
28
19
  const timer = this.metrics?.blsThreadPool.mainThreadDurationInThreadPool.startTimer();
29
- const pubkey = aggregatePublicKeys(sets.map((set) => set.publicKey));
30
- let isAllValid = true;
31
- // validate signature = true
32
- const signatures = sets.map((set) => {
33
- try {
34
- return Signature.fromBytes(set.signature, true);
35
- }
36
- catch (_) {
37
- // at least one set has malformed signature
38
- isAllValid = false;
39
- return null;
40
- }
41
- });
42
- if (isAllValid) {
43
- const signature = aggregateSignatures(signatures);
44
- isAllValid = verify(message, pubkey, signature);
45
- }
46
- let result;
47
- if (isAllValid) {
48
- result = sets.map(() => true);
49
- }
50
- else {
51
- result = sets.map((set, i) => {
52
- const sig = signatures[i];
53
- if (sig === null) {
54
- return false;
55
- }
56
- return verify(message, set.publicKey, sig);
57
- });
58
- }
59
- if (timer) {
60
- timer();
20
+ const result = [];
21
+ for (const setsChunk of chunkSameMessageSignatureSets(sets)) {
22
+ result.push(...verifySignatureSetsSameMessage(setsChunk, message));
61
23
  }
24
+ timer?.();
62
25
  return result;
63
26
  }
64
27
  async close() {
@@ -1 +1 @@
1
- {"version":3,"file":"singleThread.js","sourceRoot":"","sources":["../../../src/chain/bls/singleThread.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"singleThread.js","sourceRoot":"","sources":["../../../src/chain/bls/singleThread.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,8BAA8B,EAAC,MAAM,oCAAoC,CAAC;AAIlF,OAAO,EAAC,6BAA6B,EAAE,yBAAyB,EAAE,4BAA4B,EAAC,MAAM,YAAY,CAAC;AAElH,MAAM,OAAO,uBAAuB;IACjB,OAAO,CAAiB;IACzC,YAAY,EAAC,OAAO,GAAG,IAAI,EAA4B;QACrD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,IAAqB;QAC7C,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC;QAEzE,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,8BAA8B,CAAC,UAAU,EAAE,CAAC;QACtF,MAAM,OAAO,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAAC;QAEnD,2DAA2D;QAC3D,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,EAAE,CAAC;QACV,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,8BAA8B,CAAC,IAA+B,EAAE,OAAmB;QACvF,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,8BAA8B,CAAC,UAAU,EAAE,CAAC;QACtF,MAAM,MAAM,GAAc,EAAE,CAAC;QAC7B,KAAK,MAAM,SAAS,IAAI,6BAA6B,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5D,MAAM,CAAC,IAAI,CAAC,GAAG,8BAA8B,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;QACrE,CAAC;QACD,KAAK,EAAE,EAAE,CAAC;QACV,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,KAAK;QACT,gBAAgB;IAClB,CAAC;IAED,aAAa;QACX,qFAAqF;QACrF,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -1,6 +1,6 @@
1
- import { PublicKey } from "@chainsafe/blst";
2
- import { ISignatureSet, PubkeyCache } from "@lodestar/state-transition";
3
- import { Metrics } from "../../metrics/metrics.js";
4
- export declare function getAggregatedPubkey(signatureSet: ISignatureSet, pubkeyCache: PubkeyCache, metrics?: Metrics | null): PublicKey;
1
+ import { ISignatureSet } from "@lodestar/state-transition";
2
+ import { SameMessageSignatureSet } from "./interface.js";
3
+ export declare function verifySignatureSetsInBatches(signatureSets: ISignatureSet[]): boolean;
4
+ export declare function chunkSameMessageSignatureSets(sets: SameMessageSignatureSet[]): SameMessageSignatureSet[][];
5
5
  export declare function getAggregatedPubkeysCount(signatureSets: ISignatureSet[]): number;
6
6
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/chain/bls/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAsB,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAC,aAAa,EAAE,WAAW,EAAmB,MAAM,4BAA4B,CAAC;AACxF,OAAO,EAAC,OAAO,EAAC,MAAM,0BAA0B,CAAC;AAEjD,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,aAAa,EAC3B,WAAW,EAAE,WAAW,EACxB,OAAO,GAAE,OAAO,GAAG,IAAW,GAC7B,SAAS,CAsBX;AAED,wBAAgB,yBAAyB,CAAC,aAAa,EAAE,aAAa,EAAE,GAAG,MAAM,CAQhF"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/chain/bls/utils.ts"],"names":[],"mappings":"AAKA,OAAO,EAAC,aAAa,EAAsC,MAAM,4BAA4B,CAAC;AAC9F,OAAO,EAAC,uBAAuB,EAAC,MAAM,gBAAgB,CAAC;AAEvD,wBAAgB,4BAA4B,CAAC,aAAa,EAAE,aAAa,EAAE,GAAG,OAAO,CAapF;AAED,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,uBAAuB,EAAE,GAAG,uBAAuB,EAAE,EAAE,CAM1G;AAED,wBAAgB,yBAAyB,CAAC,aAAa,EAAE,aAAa,EAAE,GAAG,MAAM,CAQhF"}
@@ -1,24 +1,23 @@
1
- import { aggregatePublicKeys } from "@chainsafe/blst";
2
- import { SignatureSetType } from "@lodestar/state-transition";
3
- export function getAggregatedPubkey(signatureSet, pubkeyCache, metrics = null) {
4
- switch (signatureSet.type) {
5
- case SignatureSetType.single:
6
- return signatureSet.pubkey;
7
- case SignatureSetType.indexed: {
8
- return pubkeyCache.getOrThrow(signatureSet.index);
9
- }
10
- case SignatureSetType.aggregate: {
11
- const timer = metrics?.blsThreadPool.pubkeysAggregationMainThreadDuration.startTimer();
12
- const pubkeys = signatureSet.indices.map((i) => {
13
- return pubkeyCache.getOrThrow(i);
14
- });
15
- const aggregated = aggregatePublicKeys(pubkeys);
16
- timer?.();
17
- return aggregated;
1
+ import { BLS_VERIFIER_MAX_BATCH_SIZE, BLS_VERIFIER_MAX_SAME_MESSAGE_BATCH_SIZE, verifySignatureSets, } from "@chainsafe/lodestar-z/bls-verifier";
2
+ import { SignatureSetType, toBlsSignatureSet } from "@lodestar/state-transition";
3
+ export function verifySignatureSetsInBatches(signatureSets) {
4
+ if (signatureSets.length === 0) {
5
+ return false;
6
+ }
7
+ for (let start = 0; start < signatureSets.length; start += BLS_VERIFIER_MAX_BATCH_SIZE) {
8
+ const sets = signatureSets.slice(start, start + BLS_VERIFIER_MAX_BATCH_SIZE).map(toBlsSignatureSet);
9
+ if (!verifySignatureSets(sets)) {
10
+ return false;
18
11
  }
19
- default:
20
- throw Error("Unknown signature set type");
21
12
  }
13
+ return true;
14
+ }
15
+ export function chunkSameMessageSignatureSets(sets) {
16
+ const chunks = [];
17
+ for (let start = 0; start < sets.length; start += BLS_VERIFIER_MAX_SAME_MESSAGE_BATCH_SIZE) {
18
+ chunks.push(sets.slice(start, start + BLS_VERIFIER_MAX_SAME_MESSAGE_BATCH_SIZE));
19
+ }
20
+ return chunks;
22
21
  }
23
22
  export function getAggregatedPubkeysCount(signatureSets) {
24
23
  let pubkeysCount = 0;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/chain/bls/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,mBAAmB,EAAC,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAA6B,gBAAgB,EAAC,MAAM,4BAA4B,CAAC;AAGxF,MAAM,UAAU,mBAAmB,CACjC,YAA2B,EAC3B,WAAwB,EACxB,OAAO,GAAmB,IAAI;IAE9B,QAAQ,YAAY,CAAC,IAAI,EAAE,CAAC;QAC1B,KAAK,gBAAgB,CAAC,MAAM;YAC1B,OAAO,YAAY,CAAC,MAAM,CAAC;QAE7B,KAAK,gBAAgB,CAAC,OAAO,EAAE,CAAC;YAC9B,OAAO,WAAW,CAAC,UAAU,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACpD,CAAC;QAED,KAAK,gBAAgB,CAAC,SAAS,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,OAAO,EAAE,aAAa,CAAC,oCAAoC,CAAC,UAAU,EAAE,CAAC;YACvF,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC7C,OAAO,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC;YACH,MAAM,UAAU,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;YAChD,KAAK,EAAE,EAAE,CAAC;YACV,OAAO,UAAU,CAAC;QACpB,CAAC;QAED;YACE,MAAM,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,aAA8B;IACtE,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAChC,IAAI,GAAG,CAAC,IAAI,KAAK,gBAAgB,CAAC,SAAS,EAAE,CAAC;YAC5C,YAAY,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;QACrC,CAAC;IACH,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/chain/bls/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,2BAA2B,EAC3B,wCAAwC,EACxC,mBAAmB,GACpB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAgB,gBAAgB,EAAE,iBAAiB,EAAC,MAAM,4BAA4B,CAAC;AAG9F,MAAM,UAAU,4BAA4B,CAAC,aAA8B;IACzE,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,aAAa,CAAC,MAAM,EAAE,KAAK,IAAI,2BAA2B,EAAE,CAAC;QACvF,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,2BAA2B,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QACpG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,IAA+B;IAC3E,MAAM,MAAM,GAAgC,EAAE,CAAC;IAC/C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,wCAAwC,EAAE,CAAC;QAC3F,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,wCAAwC,CAAC,CAAC,CAAC;IACnF,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,aAA8B;IACtE,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAChC,IAAI,GAAG,CAAC,IAAI,KAAK,gBAAgB,CAAC,SAAS,EAAE,CAAC;YAC5C,YAAY,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;QACrC,CAAC;IACH,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC"}
@@ -1,4 +1,4 @@
1
- import { IForkChoice } from "@lodestar/fork-choice";
1
+ import { IForkChoice, ProtoBlock } from "@lodestar/fork-choice";
2
2
  import { Slot } from "@lodestar/types";
3
3
  import { Logger } from "@lodestar/utils";
4
4
  import { Metrics } from "../metrics/index.js";
@@ -14,8 +14,9 @@ export type BuilderCircuitBreakerModules = {
14
14
  /**
15
15
  * Post-gloas circuit breaker for builder bids. The beacon block is produced by the proposer
16
16
  * regardless of bid source, so missed blocks are not a useful builder health signal. Instead
17
- * count blocks whose payload was never revealed and stop selecting builder bids while the
18
- * non-reveal rate in the fault inspection window is too high.
17
+ * count canonical blocks selected as EMPTY. Activate when the proportion of EMPTY blocks exceeds
18
+ * the fault budget, and resume selecting builder bids only when the observed blocks are within
19
+ * budget and meet the minimum recovery sample size.
19
20
  */
20
21
  export declare class BuilderCircuitBreaker {
21
22
  private readonly modules;
@@ -25,7 +26,7 @@ export declare class BuilderCircuitBreaker {
25
26
  private lastUpdatedSlot;
26
27
  constructor(opts: BuilderCircuitBreakerOpts, modules: BuilderCircuitBreakerModules);
27
28
  /** Whether builder bids must be ignored for a block produced at clockSlot */
28
- isActive(clockSlot: Slot): boolean;
29
- update(clockSlot: Slot): void;
29
+ isActive(clockSlot: Slot, head: ProtoBlock): boolean;
30
+ update(clockSlot: Slot, head: ProtoBlock): void;
30
31
  }
31
32
  //# sourceMappingURL=builderCircuitBreaker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"builderCircuitBreaker.d.ts","sourceRoot":"","sources":["../../src/chain/builderCircuitBreaker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAC,IAAI,EAAC,MAAM,iBAAiB,CAAC;AACrC,OAAO,EAAC,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAEvC,OAAO,EAAC,OAAO,EAAC,MAAM,qBAAqB,CAAC;AAE5C,MAAM,MAAM,yBAAyB,GAAG;IACtC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,UAAU,EAAE,WAAW,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;CACzB,CAAC;AAEF;;;;;GAKG;AACH,qBAAa,qBAAqB;IAS9B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAR1B,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAE/B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,eAAe,CAAM;IAE7B,YACE,IAAI,EAAE,yBAAyB,EACd,OAAO,EAAE,4BAA4B,EAKvD;IAED,6EAA6E;IAC7E,QAAQ,CAAC,SAAS,EAAE,IAAI,GAAG,OAAO,CAGjC;IAED,MAAM,CAAC,SAAS,EAAE,IAAI,GAAG,IAAI,CAqC5B;CACF"}
1
+ {"version":3,"file":"builderCircuitBreaker.d.ts","sourceRoot":"","sources":["../../src/chain/builderCircuitBreaker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAE,UAAU,EAAC,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAC,IAAI,EAAC,MAAM,iBAAiB,CAAC;AACrC,OAAO,EAAC,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAEvC,OAAO,EAAC,OAAO,EAAC,MAAM,qBAAqB,CAAC;AAE5C,MAAM,MAAM,yBAAyB,GAAG;IACtC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,UAAU,EAAE,WAAW,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;CACzB,CAAC;AAKF;;;;;;GAMG;AACH,qBAAa,qBAAqB;IAS9B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAR1B,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAE/B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,eAAe,CAAM;IAE7B,YACE,IAAI,EAAE,yBAAyB,EACd,OAAO,EAAE,4BAA4B,EAMvD;IAED,6EAA6E;IAC7E,QAAQ,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAGnD;IAED,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,CA8C9C;CACF"}
@@ -1,9 +1,12 @@
1
1
  import { getFaultInspectionParams } from "../execution/builder/http.js";
2
+ /** Four observations is the minimum useful recovery sample for the default ~25% fault budget */
3
+ const MIN_BLOCKS_TO_DEACTIVATE = 4;
2
4
  /**
3
5
  * Post-gloas circuit breaker for builder bids. The beacon block is produced by the proposer
4
6
  * regardless of bid source, so missed blocks are not a useful builder health signal. Instead
5
- * count blocks whose payload was never revealed and stop selecting builder bids while the
6
- * non-reveal rate in the fault inspection window is too high.
7
+ * count canonical blocks selected as EMPTY. Activate when the proportion of EMPTY blocks exceeds
8
+ * the fault budget, and resume selecting builder bids only when the observed blocks are within
9
+ * budget and meet the minimum recovery sample size.
7
10
  */
8
11
  export class BuilderCircuitBreaker {
9
12
  modules;
@@ -16,30 +19,40 @@ export class BuilderCircuitBreaker {
16
19
  const { faultInspectionWindow, allowedFaults } = getFaultInspectionParams(opts);
17
20
  this.faultInspectionWindow = faultInspectionWindow;
18
21
  this.allowedFaults = allowedFaults;
22
+ this.modules.logger.info("Builder circuit breaker initialized", { faultInspectionWindow, allowedFaults });
19
23
  }
20
24
  /** Whether builder bids must be ignored for a block produced at clockSlot */
21
- isActive(clockSlot) {
22
- this.update(clockSlot);
25
+ isActive(clockSlot, head) {
26
+ this.update(clockSlot, head);
23
27
  return this.active;
24
28
  }
25
- update(clockSlot) {
29
+ update(clockSlot, head) {
26
30
  if (clockSlot <= this.lastUpdatedSlot) {
27
31
  return;
28
32
  }
29
33
  this.lastUpdatedSlot = clockSlot;
30
- // Exclude clockSlot itself, its payload reveal may still be in flight
31
- const { blocksPresent, payloadsRevealed } = this.modules.forkChoice.getPayloadRevealCounts(Math.max(clockSlot - this.faultInspectionWindow, 0), clockSlot - 1);
32
- const faults = blocksPresent - payloadsRevealed;
34
+ // Exclude clockSlot itself, its payload status may still be unresolved
35
+ const { full, empty } = this.modules.forkChoice.getCanonicalPayloadCounts(Math.max(clockSlot - this.faultInspectionWindow, 0), clockSlot - 1, head);
36
+ const canonicalBlocks = full + empty;
33
37
  const wasActive = this.active;
34
- // Scale the fault budget by blocks present so sparse windows still trigger on high non-reveal rates
35
- this.active = faults * this.faultInspectionWindow > this.allowedFaults * blocksPresent;
38
+ // Scale the fault budget by canonical blocks so sparse windows still trigger on high EMPTY rates
39
+ const exceedsFaultBudget = empty * this.faultInspectionWindow > this.allowedFaults * canonicalBlocks;
40
+ if (exceedsFaultBudget) {
41
+ this.active = true;
42
+ }
43
+ else if (canonicalBlocks >= MIN_BLOCKS_TO_DEACTIVATE) {
44
+ // Require a minimum sample within the fault budget before accepting builder bids again
45
+ this.active = false;
46
+ }
36
47
  this.modules.metrics?.builderCircuitBreaker.active.set(this.active ? 1 : 0);
37
- this.modules.metrics?.builderCircuitBreaker.faults.set(faults);
38
- this.modules.metrics?.builderCircuitBreaker.blocksPresent.set(blocksPresent);
39
- this.modules.metrics?.builderCircuitBreaker.payloadsRevealed.set(payloadsRevealed);
48
+ this.modules.metrics?.builderCircuitBreaker.canonicalBlocks.set(canonicalBlocks);
49
+ this.modules.metrics?.builderCircuitBreaker.fullBlocks.set(full);
50
+ this.modules.metrics?.builderCircuitBreaker.emptyBlocks.set(empty);
40
51
  const logCtx = {
41
- blocksPresent,
42
- faults,
52
+ clockSlot,
53
+ canonicalBlocks,
54
+ full,
55
+ empty,
43
56
  faultInspectionWindow: this.faultInspectionWindow,
44
57
  allowedFaults: this.allowedFaults,
45
58
  };
@@ -1 +1 @@
1
- {"version":3,"file":"builderCircuitBreaker.js","sourceRoot":"","sources":["../../src/chain/builderCircuitBreaker.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,wBAAwB,EAAC,MAAM,8BAA8B,CAAC;AActE;;;;;GAKG;AACH,MAAM,OAAO,qBAAqB;IASb,OAAO;IARjB,qBAAqB,CAAS;IAC9B,aAAa,CAAS;IAEvB,MAAM,GAAG,KAAK,CAAC;IACf,eAAe,GAAG,CAAC,CAAC,CAAC;IAE7B,YACE,IAA+B,EACd,OAAqC;uBAArC,OAAO;QAExB,MAAM,EAAC,qBAAqB,EAAE,aAAa,EAAC,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAC9E,IAAI,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;QACnD,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IAED,6EAA6E;IAC7E,QAAQ,CAAC,SAAe;QACtB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,MAAM,CAAC,SAAe;QACpB,IAAI,SAAS,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACtC,OAAO;QACT,CAAC;QACD,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QAEjC,sEAAsE;QACtE,MAAM,EAAC,aAAa,EAAE,gBAAgB,EAAC,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,sBAAsB,CACtF,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC,EACnD,SAAS,GAAG,CAAC,CACd,CAAC;QACF,MAAM,MAAM,GAAG,aAAa,GAAG,gBAAgB,CAAC;QAEhD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;QAC9B,oGAAoG;QACpG,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QAEvF,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,qBAAqB,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5E,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,qBAAqB,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC/D,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,qBAAqB,CAAC,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC7E,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,qBAAqB,CAAC,gBAAgB,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAEnF,MAAM,MAAM,GAAG;YACb,aAAa;YACb,MAAM;YACN,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;YACjD,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC;QACF,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,0DAA0D,EAAE,MAAM,CAAC,CAAC;YAC/F,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,qCAAqC,EAAE,MAAM,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,gCAAgC,EAAE,EAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,EAAC,CAAC,CAAC;QAClG,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"builderCircuitBreaker.js","sourceRoot":"","sources":["../../src/chain/builderCircuitBreaker.ts"],"names":[],"mappings":"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"}