@lodestar/state-transition 1.46.0-dev.8b30182711 → 1.46.0-dev.8bab23d909

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 (101) hide show
  1. package/lib/block/processDeposit.d.ts +15 -0
  2. package/lib/block/processDeposit.d.ts.map +1 -1
  3. package/lib/block/processDeposit.js +73 -1
  4. package/lib/block/processDeposit.js.map +1 -1
  5. package/lib/block/processExecutionPayloadBid.d.ts +2 -2
  6. package/lib/block/processExecutionPayloadBid.d.ts.map +1 -1
  7. package/lib/block/processExecutionPayloadBid.js +8 -3
  8. package/lib/block/processExecutionPayloadBid.js.map +1 -1
  9. package/lib/cache/builderDepositSignatureCache.d.ts +48 -0
  10. package/lib/cache/builderDepositSignatureCache.d.ts.map +1 -0
  11. package/lib/cache/builderDepositSignatureCache.js +70 -0
  12. package/lib/cache/builderDepositSignatureCache.js.map +1 -0
  13. package/lib/cache/epochCache.d.ts +9 -0
  14. package/lib/cache/epochCache.d.ts.map +1 -1
  15. package/lib/cache/epochCache.js +13 -0
  16. package/lib/cache/epochCache.js.map +1 -1
  17. package/lib/cache/stateCache.d.ts +2 -1
  18. package/lib/cache/stateCache.d.ts.map +1 -1
  19. package/lib/cache/stateCache.js.map +1 -1
  20. package/lib/cache/types.d.ts +1 -0
  21. package/lib/cache/types.d.ts.map +1 -1
  22. package/lib/index.d.ts +2 -2
  23. package/lib/index.d.ts.map +1 -1
  24. package/lib/index.js +1 -1
  25. package/lib/index.js.map +1 -1
  26. package/lib/lightClient/spec/utils.d.ts.map +1 -1
  27. package/lib/lightClient/spec/utils.js +6 -0
  28. package/lib/lightClient/spec/utils.js.map +1 -1
  29. package/lib/signatureSets/executionPayloadBid.d.ts +2 -2
  30. package/lib/signatureSets/executionPayloadBid.d.ts.map +1 -1
  31. package/lib/signatureSets/executionPayloadBid.js +7 -5
  32. package/lib/signatureSets/executionPayloadBid.js.map +1 -1
  33. package/lib/slot/index.d.ts +1 -0
  34. package/lib/slot/index.d.ts.map +1 -1
  35. package/lib/slot/index.js +1 -0
  36. package/lib/slot/index.js.map +1 -1
  37. package/lib/slot/upgradeStateToGloas.js +13 -7
  38. package/lib/slot/upgradeStateToGloas.js.map +1 -1
  39. package/lib/slot/upgradeStateToHeze.d.ts +7 -0
  40. package/lib/slot/upgradeStateToHeze.d.ts.map +1 -0
  41. package/lib/slot/upgradeStateToHeze.js +83 -0
  42. package/lib/slot/upgradeStateToHeze.js.map +1 -0
  43. package/lib/stateTransition.d.ts.map +1 -1
  44. package/lib/stateTransition.js +4 -1
  45. package/lib/stateTransition.js.map +1 -1
  46. package/lib/stateView/beaconStateView.d.ts +3 -0
  47. package/lib/stateView/beaconStateView.d.ts.map +1 -1
  48. package/lib/stateView/beaconStateView.js +7 -0
  49. package/lib/stateView/beaconStateView.js.map +1 -1
  50. package/lib/stateView/interface.d.ts +16 -3
  51. package/lib/stateView/interface.d.ts.map +1 -1
  52. package/lib/stateView/interface.js +4 -1
  53. package/lib/stateView/interface.js.map +1 -1
  54. package/lib/stateView/nativeBeaconStateView.d.ts +3 -0
  55. package/lib/stateView/nativeBeaconStateView.d.ts.map +1 -1
  56. package/lib/stateView/nativeBeaconStateView.js +6 -0
  57. package/lib/stateView/nativeBeaconStateView.js.map +1 -1
  58. package/lib/testUtils/util.d.ts +16 -1
  59. package/lib/testUtils/util.d.ts.map +1 -1
  60. package/lib/testUtils/util.js +55 -2
  61. package/lib/testUtils/util.js.map +1 -1
  62. package/lib/types.d.ts +2 -2
  63. package/lib/types.d.ts.map +1 -1
  64. package/lib/util/genesis.d.ts.map +1 -1
  65. package/lib/util/genesis.js +5 -0
  66. package/lib/util/genesis.js.map +1 -1
  67. package/lib/util/index.d.ts +1 -0
  68. package/lib/util/index.d.ts.map +1 -1
  69. package/lib/util/index.js +1 -0
  70. package/lib/util/index.js.map +1 -1
  71. package/lib/util/pendingDepositsLookup.d.ts +7 -10
  72. package/lib/util/pendingDepositsLookup.d.ts.map +1 -1
  73. package/lib/util/pendingDepositsLookup.js +10 -19
  74. package/lib/util/pendingDepositsLookup.js.map +1 -1
  75. package/lib/util/preVerifyBuilderDeposits.d.ts +52 -0
  76. package/lib/util/preVerifyBuilderDeposits.d.ts.map +1 -0
  77. package/lib/util/preVerifyBuilderDeposits.js +124 -0
  78. package/lib/util/preVerifyBuilderDeposits.js.map +1 -0
  79. package/package.json +7 -7
  80. package/src/block/processDeposit.ts +75 -1
  81. package/src/block/processExecutionPayloadBid.ts +18 -8
  82. package/src/cache/builderDepositSignatureCache.ts +81 -0
  83. package/src/cache/epochCache.ts +14 -0
  84. package/src/cache/stateCache.ts +2 -0
  85. package/src/cache/types.ts +1 -0
  86. package/src/index.ts +4 -0
  87. package/src/lightClient/spec/utils.ts +7 -0
  88. package/src/signatureSets/executionPayloadBid.ts +7 -9
  89. package/src/slot/index.ts +1 -0
  90. package/src/slot/upgradeStateToGloas.ts +17 -10
  91. package/src/slot/upgradeStateToHeze.ts +91 -0
  92. package/src/stateTransition.ts +5 -0
  93. package/src/stateView/beaconStateView.ts +13 -0
  94. package/src/stateView/interface.ts +21 -2
  95. package/src/stateView/nativeBeaconStateView.ts +9 -0
  96. package/src/testUtils/util.ts +73 -3
  97. package/src/types.ts +2 -0
  98. package/src/util/genesis.ts +6 -0
  99. package/src/util/index.ts +1 -0
  100. package/src/util/pendingDepositsLookup.ts +13 -24
  101. package/src/util/preVerifyBuilderDeposits.ts +153 -0
@@ -1 +1 @@
1
- {"version":3,"file":"genesis.d.ts","sourceRoot":"","sources":["../../src/util/genesis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAE,iBAAiB,EAAC,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AAWjD,OAAO,EAAC,OAAO,EAAQ,WAAW,EAAE,MAAM,EAAE,GAAG,EAAC,MAAM,iBAAiB,CAAC;AAExE,OAAO,EAAC,uBAAuB,EAAC,MAAM,wBAAwB,CAAC;AAG/D,OAAO,EAAC,mBAAmB,EAAE,yBAAyB,EAA2B,MAAM,aAAa,CAAC;AAOrG,KAAK,uBAAuB,GAAG,iBAAiB,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;AAClE,KAAK,qBAAqB,GAAG,eAAe,CAAC,uBAAuB,CAAC,CAAC;AAItE;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAEhG;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAKrG;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,eAAe,EACvB,eAAe,EAAE,MAAM,CAAC,QAAQ,EAChC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,GAC1C,mBAAmB,CAkCrB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,yBAAyB,EAAE,aAAa,EAAE,OAAO,GAAG,IAAI,CAGjG;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,yBAAyB,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CAErH;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,yBAAyB,EAChC,WAAW,EAAE,MAAM,CAAC,OAAO,EAAE,EAC7B,uBAAuB,CAAC,EAAE,qBAAqB,GAC9C;IAAC,uBAAuB,EAAE,MAAM,CAAA;CAAC,CAqFnC;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,eAAe,EACvB,aAAa,EAAE,uBAAuB,EACtC,aAAa,EAAE,OAAO,EACtB,aAAa,EAAE,WAAW,EAC1B,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,EAC1B,uBAAuB,CAAC,EAAE,qBAAqB,EAC/C,sBAAsB,CAAC,EAAE,eAAe,CACpC,OAAO,GAAG,CAAC,SAAS,CAAC,sBAAsB,GAC3C,OAAO,GAAG,CAAC,OAAO,CAAC,sBAAsB,GACzC,OAAO,GAAG,CAAC,KAAK,CAAC,sBAAsB,GACvC,OAAO,GAAG,CAAC,OAAO,CAAC,sBAAsB,CAC5C,GACA,yBAAyB,CAoG3B"}
1
+ {"version":3,"file":"genesis.d.ts","sourceRoot":"","sources":["../../src/util/genesis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAE,iBAAiB,EAAC,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AAWjD,OAAO,EAAC,OAAO,EAAQ,WAAW,EAAE,MAAM,EAAE,GAAG,EAAC,MAAM,iBAAiB,CAAC;AAExE,OAAO,EAAC,uBAAuB,EAAC,MAAM,wBAAwB,CAAC;AAG/D,OAAO,EAAC,mBAAmB,EAAE,yBAAyB,EAA2B,MAAM,aAAa,CAAC;AAOrG,KAAK,uBAAuB,GAAG,iBAAiB,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;AAClE,KAAK,qBAAqB,GAAG,eAAe,CAAC,uBAAuB,CAAC,CAAC;AAItE;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAEhG;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAKrG;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,eAAe,EACvB,eAAe,EAAE,MAAM,CAAC,QAAQ,EAChC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,GAC1C,mBAAmB,CAkCrB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,yBAAyB,EAAE,aAAa,EAAE,OAAO,GAAG,IAAI,CAGjG;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,yBAAyB,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CAErH;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,yBAAyB,EAChC,WAAW,EAAE,MAAM,CAAC,OAAO,EAAE,EAC7B,uBAAuB,CAAC,EAAE,qBAAqB,GAC9C;IAAC,uBAAuB,EAAE,MAAM,CAAA;CAAC,CAqFnC;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,eAAe,EACvB,aAAa,EAAE,uBAAuB,EACtC,aAAa,EAAE,OAAO,EACtB,aAAa,EAAE,WAAW,EAC1B,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,EAC1B,uBAAuB,CAAC,EAAE,qBAAqB,EAC/C,sBAAsB,CAAC,EAAE,eAAe,CACpC,OAAO,GAAG,CAAC,SAAS,CAAC,sBAAsB,GAC3C,OAAO,GAAG,CAAC,OAAO,CAAC,sBAAsB,GACzC,OAAO,GAAG,CAAC,KAAK,CAAC,sBAAsB,GACvC,OAAO,GAAG,CAAC,OAAO,CAAC,sBAAsB,CAC5C,GACA,yBAAyB,CA0G3B"}
@@ -239,6 +239,11 @@ export function initializeBeaconStateFromEth1(config, immutableData, eth1BlockHa
239
239
  stateGloas.fork.previousVersion = config.GLOAS_FORK_VERSION;
240
240
  stateGloas.fork.currentVersion = config.GLOAS_FORK_VERSION;
241
241
  }
242
+ if (fork >= ForkSeq.heze) {
243
+ const stateHeze = state;
244
+ stateHeze.fork.previousVersion = config.HEZE_FORK_VERSION;
245
+ stateHeze.fork.currentVersion = config.HEZE_FORK_VERSION;
246
+ }
242
247
  state.commit();
243
248
  return state;
244
249
  }
@@ -1 +1 @@
1
- {"version":3,"file":"genesis.js","sourceRoot":"","sources":["../../src/util/genesis.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"genesis.js","sourceRoot":"","sources":["../../src/util/genesis.ts"],"names":[],"mappings":"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"}
@@ -20,6 +20,7 @@ export * from "./gloas.js";
20
20
  export * from "./interop.js";
21
21
  export * from "./loadState/index.js";
22
22
  export * from "./pendingDepositsLookup.js";
23
+ export * from "./preVerifyBuilderDeposits.js";
23
24
  export * from "./rootCache.js";
24
25
  export * from "./seed.js";
25
26
  export * from "./shuffling.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/util/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/util/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC"}
package/lib/util/index.js CHANGED
@@ -20,6 +20,7 @@ export * from "./gloas.js";
20
20
  export * from "./interop.js";
21
21
  export * from "./loadState/index.js";
22
22
  export * from "./pendingDepositsLookup.js";
23
+ export * from "./preVerifyBuilderDeposits.js";
23
24
  export * from "./rootCache.js";
24
25
  export * from "./seed.js";
25
26
  export * from "./shuffling.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/util/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/util/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { BeaconConfig } from "@lodestar/config";
2
2
  import { PubkeyHex, electra } from "@lodestar/types";
3
- import { CachedBeaconStateGloas } from "../types.js";
3
+ import { BuilderDepositSignatureCache } from "../cache/builderDepositSignatureCache.js";
4
4
  /**
5
5
  * Mutable lookup for the pending-deposit sequence used by builder-routing logic.
6
6
  *
@@ -21,20 +21,17 @@ export declare class PendingDepositsLookup {
21
21
  /** Build an empty lookup for a sequence that will be populated incrementally. */
22
22
  static buildEmpty(): PendingDepositsLookup;
23
23
  /**
24
- * Build a pubkey -> pending-deposits lookup from `state.pendingDeposits`.
25
- * No BLS work is done here; signature verification happens lazily in `hasPendingValidator`.
24
+ * Append a pending deposit to the represented sequence, keyed by its (precomputed) `pubkeyHex`.
26
25
  */
27
- static build(state: CachedBeaconStateGloas): PendingDepositsLookup;
28
- /**
29
- * Append a pending deposit to the represented sequence.
30
- * Pass `pubkeyHex` if the caller has already computed it.
31
- */
32
- add(pendingDeposit: electra.PendingDeposit, pubkeyHex?: PubkeyHex): void;
26
+ add(pendingDeposit: electra.PendingDeposit, pubkeyHex: PubkeyHex): void;
33
27
  /**
34
28
  * Returns true if any pending deposit for `pubkeyHex` has a valid BLS deposit signature.
35
29
  * Memoizes the result in `validationCache` so repeated checks for the same pubkey
36
30
  * within a block only verify deposits that have not already been checked.
31
+ *
32
+ * Most of the time it should hit the BuilderDepositSignatureCache so we don't have to validate
33
+ * signatures here.
37
34
  */
38
- hasPendingValidator(config: BeaconConfig, pubkeyHex: PubkeyHex): boolean;
35
+ hasPendingValidator(config: BeaconConfig, pubkeyHex: PubkeyHex, cache: BuilderDepositSignatureCache): boolean;
39
36
  }
40
37
  //# sourceMappingURL=pendingDepositsLookup.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pendingDepositsLookup.d.ts","sourceRoot":"","sources":["../../src/util/pendingDepositsLookup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAC,SAAS,EAAE,OAAO,EAAC,MAAM,iBAAiB,CAAC;AAGnD,OAAO,EAAC,sBAAsB,EAAC,MAAM,aAAa,CAAC;AAOnD;;;;;;;;;;;;GAYG;AACH,qBAAa,qBAAqB;IAE9B,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAFlC,OAAO,eAGH;IAEJ,iFAAiF;IACjF,MAAM,CAAC,UAAU,IAAI,qBAAqB,CAEzC;IAED;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,sBAAsB,GAAG,qBAAqB,CAMjE;IAED;;;OAGG;IACH,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI,CAQvE;IAED;;;;OAIG;IACH,mBAAmB,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAqCvE;CACF"}
1
+ {"version":3,"file":"pendingDepositsLookup.d.ts","sourceRoot":"","sources":["../../src/util/pendingDepositsLookup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAC,SAAS,EAAE,OAAO,EAAC,MAAM,iBAAiB,CAAC;AAEnD,OAAO,EAAC,4BAA4B,EAAC,MAAM,0CAA0C,CAAC;AAOtF;;;;;;;;;;;;GAYG;AACH,qBAAa,qBAAqB;IAE9B,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAFlC,OAAO,eAGH;IAEJ,iFAAiF;IACjF,MAAM,CAAC,UAAU,IAAI,qBAAqB,CAEzC;IAED;;OAEG;IACH,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,CAOtE;IAED;;;;;;;OAOG;IACH,mBAAmB,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,4BAA4B,GAAG,OAAO,CAsC5G;CACF"}
@@ -1,4 +1,3 @@
1
- import { toPubkeyHex } from "@lodestar/utils";
2
1
  import { isValidDepositSignature } from "../block/processDeposit.js";
3
2
  /**
4
3
  * Mutable lookup for the pending-deposit sequence used by builder-routing logic.
@@ -25,36 +24,26 @@ export class PendingDepositsLookup {
25
24
  return new PendingDepositsLookup(new Map(), new Map());
26
25
  }
27
26
  /**
28
- * Build a pubkey -> pending-deposits lookup from `state.pendingDeposits`.
29
- * No BLS work is done here; signature verification happens lazily in `hasPendingValidator`.
30
- */
31
- static build(state) {
32
- const lookup = PendingDepositsLookup.buildEmpty();
33
- for (const pendingDeposit of state.pendingDeposits.getAllReadonly()) {
34
- lookup.add(pendingDeposit);
35
- }
36
- return lookup;
37
- }
38
- /**
39
- * Append a pending deposit to the represented sequence.
40
- * Pass `pubkeyHex` if the caller has already computed it.
27
+ * Append a pending deposit to the represented sequence, keyed by its (precomputed) `pubkeyHex`.
41
28
  */
42
29
  add(pendingDeposit, pubkeyHex) {
43
- const key = pubkeyHex ?? toPubkeyHex(pendingDeposit.pubkey);
44
- const existing = this.depositsByPubkey.get(key);
30
+ const existing = this.depositsByPubkey.get(pubkeyHex);
45
31
  if (existing) {
46
32
  existing.push(pendingDeposit);
47
33
  }
48
34
  else {
49
- this.depositsByPubkey.set(key, [pendingDeposit]);
35
+ this.depositsByPubkey.set(pubkeyHex, [pendingDeposit]);
50
36
  }
51
37
  }
52
38
  /**
53
39
  * Returns true if any pending deposit for `pubkeyHex` has a valid BLS deposit signature.
54
40
  * Memoizes the result in `validationCache` so repeated checks for the same pubkey
55
41
  * within a block only verify deposits that have not already been checked.
42
+ *
43
+ * Most of the time it should hit the BuilderDepositSignatureCache so we don't have to validate
44
+ * signatures here.
56
45
  */
57
- hasPendingValidator(config, pubkeyHex) {
46
+ hasPendingValidator(config, pubkeyHex, cache) {
58
47
  const validation = this.validationCache.get(pubkeyHex);
59
48
  if (validation?.hasValidSignature === true) {
60
49
  return true;
@@ -72,7 +61,9 @@ export class PendingDepositsLookup {
72
61
  }
73
62
  for (let i = startIndex; i < deposits.length; i++) {
74
63
  const deposit = deposits[i];
75
- if (isValidDepositSignature(config, deposit.pubkey, deposit.withdrawalCredentials, deposit.amount, deposit.signature)) {
64
+ const isValid = cache.getSignatureValidity(deposit) ??
65
+ isValidDepositSignature(config, deposit.pubkey, deposit.withdrawalCredentials, deposit.amount, deposit.signature);
66
+ if (isValid) {
76
67
  this.validationCache.set(pubkeyHex, { hasValidSignature: true, validatedCount: i + 1 });
77
68
  return true;
78
69
  }
@@ -1 +1 @@
1
- {"version":3,"file":"pendingDepositsLookup.js","sourceRoot":"","sources":["../../src/util/pendingDepositsLookup.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,WAAW,EAAC,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAC,uBAAuB,EAAC,MAAM,4BAA4B,CAAC;AAQnE;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,qBAAqB;IAEb,gBAAgB;IAChB,eAAe;IAFlC,YACmB,gBAA0D,EAC1D,eAA0D;gCAD1D,gBAAgB;+BAChB,eAAe;IAC/B,CAAC;IAEJ,iFAAiF;IACjF,MAAM,CAAC,UAAU;QACf,OAAO,IAAI,qBAAqB,CAAC,IAAI,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;IACzD,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,KAA6B;QACxC,MAAM,MAAM,GAAG,qBAAqB,CAAC,UAAU,EAAE,CAAC;QAClD,KAAK,MAAM,cAAc,IAAI,KAAK,CAAC,eAAe,CAAC,cAAc,EAAE,EAAE,CAAC;YACpE,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;OAGG;IACH,GAAG,CAAC,cAAsC,EAAE,SAAqB;QAC/D,MAAM,GAAG,GAAG,SAAS,IAAI,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChD,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,mBAAmB,CAAC,MAAoB,EAAE,SAAoB;QAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvD,IAAI,UAAU,EAAE,iBAAiB,KAAK,IAAI,EAAE,CAAC;YAC3C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACtD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,kFAAkF;QAClF,2DAA2D;QAC3D,MAAM,UAAU,GAAG,UAAU,EAAE,cAAc,IAAI,CAAC,CAAC;QACnD,IAAI,UAAU,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;YACnC,6DAA6D;YAC7D,OAAO,KAAK,CAAC;QACf,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAClD,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC5B,IACE,uBAAuB,CACrB,MAAM,EACN,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,qBAAqB,EAC7B,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,SAAS,CAClB,EACD,CAAC;gBACD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE,EAAC,iBAAiB,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,GAAG,CAAC,EAAC,CAAC,CAAC;gBACtF,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE,EAAC,iBAAiB,EAAE,KAAK,EAAE,cAAc,EAAE,QAAQ,CAAC,MAAM,EAAC,CAAC,CAAC;QACjG,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
1
+ {"version":3,"file":"pendingDepositsLookup.js","sourceRoot":"","sources":["../../src/util/pendingDepositsLookup.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,uBAAuB,EAAC,MAAM,4BAA4B,CAAC;AAQnE;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,qBAAqB;IAEb,gBAAgB;IAChB,eAAe;IAFlC,YACmB,gBAA0D,EAC1D,eAA0D;gCAD1D,gBAAgB;+BAChB,eAAe;IAC/B,CAAC;IAEJ,iFAAiF;IACjF,MAAM,CAAC,UAAU;QACf,OAAO,IAAI,qBAAqB,CAAC,IAAI,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;IACzD,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,cAAsC,EAAE,SAAoB;QAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACtD,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACH,mBAAmB,CAAC,MAAoB,EAAE,SAAoB,EAAE,KAAmC;QACjG,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvD,IAAI,UAAU,EAAE,iBAAiB,KAAK,IAAI,EAAE,CAAC;YAC3C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACtD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,kFAAkF;QAClF,2DAA2D;QAC3D,MAAM,UAAU,GAAG,UAAU,EAAE,cAAc,IAAI,CAAC,CAAC;QACnD,IAAI,UAAU,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;YACnC,6DAA6D;YAC7D,OAAO,KAAK,CAAC;QACf,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAClD,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC5B,MAAM,OAAO,GACX,KAAK,CAAC,oBAAoB,CAAC,OAAO,CAAC;gBACnC,uBAAuB,CACrB,MAAM,EACN,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,qBAAqB,EAC7B,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,SAAS,CAClB,CAAC;YACJ,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE,EAAC,iBAAiB,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,GAAG,CAAC,EAAC,CAAC,CAAC;gBACtF,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE,EAAC,iBAAiB,EAAE,KAAK,EAAE,cAAc,EAAE,QAAQ,CAAC,MAAM,EAAC,CAAC,CAAC;QACjG,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
@@ -0,0 +1,52 @@
1
+ import { CachedBeaconStateFulu } from "../types.js";
2
+ /** Verify queued deposit signatures in batches of this size. Also the time-box granularity: the
3
+ * deadline is checked once per batch, so overrun is bounded to a single batch. Exported for tests. */
4
+ export declare const BUILDER_DEPOSIT_BATCH_SIZE = 32;
5
+ /**
6
+ * Per-tick cap on builder deposits the prepareForNextSlot scanner will verify.
7
+ * ~2.7s for 10_000 BLS verifications on a typical server — fits within the slot budget while the
8
+ * pre-window (see GLOAS_PREVERIFY_WINDOW_EPOCHS) covers up to ~620k deposits over its duration.
9
+ */
10
+ export declare const MAX_BUILDER_DEPOSITS_PER_SLOT = 10000;
11
+ /**
12
+ * Number of epochs before GLOAS_FORK_EPOCH during which the prepareForNextSlot scanner pre-verifies
13
+ * builder-deposit signatures. Two: deposits arriving this late cannot collude with validator
14
+ * deposits — validator-vs-builder routing is decided at the fork boundary from what is already in
15
+ * pendingDeposits, so anything submitted inside this window is unambiguous.
16
+ */
17
+ export declare const GLOAS_PREVERIFY_WINDOW_EPOCHS = 2;
18
+ /**
19
+ * Summary of a single `preVerifyBuilderDepositsPreGloas` call.
20
+ */
21
+ export type PreVerifyBuilderDepositsResult = {
22
+ /** Builder-prefix deposit signatures verified valid in this call (cached true). */
23
+ validBuilderSignaturesCount: number;
24
+ /** Builder-prefix deposit signatures verified invalid in this call (cached false, dropped at fork). */
25
+ invalidBuilderSignaturesCount: number;
26
+ /** Validator (builder-pubkey) deposit signatures verified valid in this call. */
27
+ validValidatorSignaturesCount: number;
28
+ /** Validator (builder-pubkey) deposit signatures verified invalid in this call (abuse signal). */
29
+ invalidValidatorSignaturesCount: number;
30
+ /** Pending deposits examined this call (all creds; < pendingDepositsCount ⇒ per-tick cap hit). */
31
+ scannedPendingDeposits: number;
32
+ /** Cumulative deposits verified & cached so far this window (cache size, pass + fail). */
33
+ totalCachedDeposits: number;
34
+ /** Distinct builder pubkeys tracked so far this window. */
35
+ totalBuilderPubkeys: number;
36
+ /** Current `state.pendingDeposits.length` — the full backlog. */
37
+ pendingDepositsCount: number;
38
+ };
39
+ /**
40
+ * Scanner driven by `prepareForNextSlot` over the `GLOAS_PREVERIFY_WINDOW_EPOCHS` epochs before
41
+ * GLOAS_FORK_EPOCH. Walks `state.pendingDeposits` (as struct values via getAllReadonlyValues) and
42
+ * queues, for signature verification, the deposits the fork transition will check on its hot path:
43
+ * - builder-prefix deposits (for onboarding); records each builder pubkey on the cache, and
44
+ * - validator deposits sharing a builder pubkey (the set `hasPendingValidator` walks at the fork),
45
+ * but only until one is found valid — `hasPendingValidator` stops at the first valid signature, so
46
+ * the cache marks the pubkey and the scanner skips that pubkey's remaining validator deposits.
47
+ *
48
+ * Bounded by two knobs: at most `maxBuilderDeposits` new deposits are queued per call, and the chunk
49
+ * verification is **time-boxed** to `maxDurationMs`.
50
+ */
51
+ export declare function preVerifyBuilderDepositsPreGloas(state: CachedBeaconStateFulu, maxBuilderDeposits: number, maxDurationMs: number): PreVerifyBuilderDepositsResult;
52
+ //# sourceMappingURL=preVerifyBuilderDeposits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preVerifyBuilderDeposits.d.ts","sourceRoot":"","sources":["../../src/util/preVerifyBuilderDeposits.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,qBAAqB,EAAC,MAAM,aAAa,CAAC;AAGlD;uGACuG;AACvG,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAE7C;;;;GAIG;AACH,eAAO,MAAM,6BAA6B,QAAS,CAAC;AAEpD;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAE/C;;GAEG;AACH,MAAM,MAAM,8BAA8B,GAAG;IAC3C,mFAAmF;IACnF,2BAA2B,EAAE,MAAM,CAAC;IACpC,uGAAuG;IACvG,6BAA6B,EAAE,MAAM,CAAC;IACtC,iFAAiF;IACjF,6BAA6B,EAAE,MAAM,CAAC;IACtC,kGAAkG;IAClG,+BAA+B,EAAE,MAAM,CAAC;IACxC,kGAAkG;IAClG,sBAAsB,EAAE,MAAM,CAAC;IAC/B,0FAA0F;IAC1F,mBAAmB,EAAE,MAAM,CAAC;IAC5B,2DAA2D;IAC3D,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iEAAiE;IACjE,oBAAoB,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,qBAAqB,EAC5B,kBAAkB,EAAE,MAAM,EAC1B,aAAa,EAAE,MAAM,GACpB,8BAA8B,CAyFhC"}
@@ -0,0 +1,124 @@
1
+ import { toPubkeyHex } from "@lodestar/utils";
2
+ import { verifyDepositSignatures } from "../block/processDeposit.js";
3
+ import { isBuilderWithdrawalCredential } from "./gloas.js";
4
+ /** Verify queued deposit signatures in batches of this size. Also the time-box granularity: the
5
+ * deadline is checked once per batch, so overrun is bounded to a single batch. Exported for tests. */
6
+ export const BUILDER_DEPOSIT_BATCH_SIZE = 32;
7
+ /**
8
+ * Per-tick cap on builder deposits the prepareForNextSlot scanner will verify.
9
+ * ~2.7s for 10_000 BLS verifications on a typical server — fits within the slot budget while the
10
+ * pre-window (see GLOAS_PREVERIFY_WINDOW_EPOCHS) covers up to ~620k deposits over its duration.
11
+ */
12
+ export const MAX_BUILDER_DEPOSITS_PER_SLOT = 10_000;
13
+ /**
14
+ * Number of epochs before GLOAS_FORK_EPOCH during which the prepareForNextSlot scanner pre-verifies
15
+ * builder-deposit signatures. Two: deposits arriving this late cannot collude with validator
16
+ * deposits — validator-vs-builder routing is decided at the fork boundary from what is already in
17
+ * pendingDeposits, so anything submitted inside this window is unambiguous.
18
+ */
19
+ export const GLOAS_PREVERIFY_WINDOW_EPOCHS = 2;
20
+ /**
21
+ * Scanner driven by `prepareForNextSlot` over the `GLOAS_PREVERIFY_WINDOW_EPOCHS` epochs before
22
+ * GLOAS_FORK_EPOCH. Walks `state.pendingDeposits` (as struct values via getAllReadonlyValues) and
23
+ * queues, for signature verification, the deposits the fork transition will check on its hot path:
24
+ * - builder-prefix deposits (for onboarding); records each builder pubkey on the cache, and
25
+ * - validator deposits sharing a builder pubkey (the set `hasPendingValidator` walks at the fork),
26
+ * but only until one is found valid — `hasPendingValidator` stops at the first valid signature, so
27
+ * the cache marks the pubkey and the scanner skips that pubkey's remaining validator deposits.
28
+ *
29
+ * Bounded by two knobs: at most `maxBuilderDeposits` new deposits are queued per call, and the chunk
30
+ * verification is **time-boxed** to `maxDurationMs`.
31
+ */
32
+ export function preVerifyBuilderDepositsPreGloas(state, maxBuilderDeposits, maxDurationMs) {
33
+ const cache = state.epochCtx.builderDepositSignatureCache;
34
+ // Collect uncached deposits to verify as struct values. Full rescan each tick: iteration is
35
+ // O(pendingDeposits) but runs in prepareNextSlot spare time, and isVerified() is an O(1) skip for
36
+ // already-cached deposits. For a ContainerNodeStructType, getAllReadonlyValues() returns each
37
+ // node.value by reference — the stable cache key.
38
+ const queue = [];
39
+ let scannedPendingDeposits = 0;
40
+ for (const deposit of state.pendingDeposits.getAllReadonlyValues()) {
41
+ if (queue.length >= maxBuilderDeposits)
42
+ break; // per-tick cap; next tick resumes via isVerified()
43
+ scannedPendingDeposits++;
44
+ if (cache.isVerified(deposit))
45
+ continue; // already verified in an earlier tick
46
+ if (isBuilderWithdrawalCredential(deposit.withdrawalCredentials)) {
47
+ // Record the builder pubkey so validator deposits sharing it get pre-verified — this or a
48
+ // later tick, since those validator deposits precede the builder deposit in the queue. A cached
49
+ // builder deposit already added its pubkey, so it's safe to skip via the `continue` above.
50
+ cache.addBuilderPubkey(toPubkeyHex(deposit.pubkey));
51
+ queue.push(deposit);
52
+ }
53
+ else {
54
+ // Validator deposit — pre-verify only if it shares a builder pubkey (the set hasPendingValidator
55
+ // walks at the fork) AND we haven't already cached a valid validator deposit for that pubkey.
56
+ // this is the same logic to hasPendingValidator.
57
+ const pubkeyHex = toPubkeyHex(deposit.pubkey);
58
+ if (cache.isBuilderPubkey(pubkeyHex) && !cache.hasValidValidatorDeposit(pubkeyHex)) {
59
+ queue.push(deposit);
60
+ }
61
+ }
62
+ }
63
+ const pendingDepositsCount = state.pendingDeposits.length;
64
+ if (queue.length === 0) {
65
+ return {
66
+ validBuilderSignaturesCount: 0,
67
+ invalidBuilderSignaturesCount: 0,
68
+ validValidatorSignaturesCount: 0,
69
+ invalidValidatorSignaturesCount: 0,
70
+ scannedPendingDeposits,
71
+ totalCachedDeposits: cache.cachedDepositCount,
72
+ totalBuilderPubkeys: cache.builderPubkeyCount,
73
+ pendingDepositsCount,
74
+ };
75
+ }
76
+ // Verify in chunks; chunking caps the fallback blast radius so one bad signature only forces 32
77
+ // individual re-verifications. Key each result by the deposit value object. Counts are tracked
78
+ // incrementally (not queue.length - verified) so they stay correct when we time-box out early.
79
+ const deadline = Date.now() + maxDurationMs;
80
+ let validBuilderSignaturesCount = 0;
81
+ let invalidBuilderSignaturesCount = 0;
82
+ let validValidatorSignaturesCount = 0;
83
+ let invalidValidatorSignaturesCount = 0;
84
+ for (let chunkStart = 0; chunkStart < queue.length; chunkStart += BUILDER_DEPOSIT_BATCH_SIZE) {
85
+ const end = Math.min(chunkStart + BUILDER_DEPOSIT_BATCH_SIZE, queue.length);
86
+ const chunk = queue.slice(chunkStart, end);
87
+ const chunkResults = verifyDepositSignatures(state.epochCtx.config, chunk);
88
+ for (let j = 0; j < chunk.length; j++) {
89
+ cache.setSignatureValidity(chunk[j], chunkResults[j]);
90
+ const isBuilder = isBuilderWithdrawalCredential(chunk[j].withdrawalCredentials);
91
+ if (chunkResults[j]) {
92
+ if (isBuilder) {
93
+ validBuilderSignaturesCount++;
94
+ }
95
+ else {
96
+ validValidatorSignaturesCount++;
97
+ // A valid validator deposit satisfies hasPendingValidator() for this pubkey; stop
98
+ // pre-verifying its remaining validator deposits on later ticks.
99
+ cache.setValidValidatorDeposit(toPubkeyHex(chunk[j].pubkey));
100
+ }
101
+ }
102
+ else if (isBuilder) {
103
+ invalidBuilderSignaturesCount++;
104
+ }
105
+ else {
106
+ invalidValidatorSignaturesCount++;
107
+ }
108
+ }
109
+ // Time-box: keep everything verified so far (already cached) and stop
110
+ if (Date.now() >= deadline)
111
+ break;
112
+ }
113
+ return {
114
+ validBuilderSignaturesCount,
115
+ invalidBuilderSignaturesCount,
116
+ validValidatorSignaturesCount,
117
+ invalidValidatorSignaturesCount,
118
+ scannedPendingDeposits,
119
+ totalCachedDeposits: cache.cachedDepositCount,
120
+ totalBuilderPubkeys: cache.builderPubkeyCount,
121
+ pendingDepositsCount,
122
+ };
123
+ }
124
+ //# sourceMappingURL=preVerifyBuilderDeposits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preVerifyBuilderDeposits.js","sourceRoot":"","sources":["../../src/util/preVerifyBuilderDeposits.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.46.0-dev.8b30182711",
14
+ "version": "1.46.0-dev.8bab23d909",
15
15
  "type": "module",
16
16
  "exports": {
17
17
  ".": {
@@ -71,14 +71,14 @@
71
71
  "@chainsafe/pubkey-index-map": "^3.0.0",
72
72
  "@chainsafe/ssz": "^1.6.2",
73
73
  "@chainsafe/swap-or-not-shuffle": "^1.2.1",
74
- "@lodestar/config": "^1.46.0-dev.8b30182711",
75
- "@lodestar/params": "^1.46.0-dev.8b30182711",
76
- "@lodestar/types": "^1.46.0-dev.8b30182711",
77
- "@lodestar/utils": "^1.46.0-dev.8b30182711",
74
+ "@lodestar/config": "^1.46.0-dev.8bab23d909",
75
+ "@lodestar/params": "^1.46.0-dev.8bab23d909",
76
+ "@lodestar/types": "^1.46.0-dev.8bab23d909",
77
+ "@lodestar/utils": "^1.46.0-dev.8bab23d909",
78
78
  "@vekexasia/bigint-buffer2": "^1.1.1"
79
79
  },
80
80
  "devDependencies": {
81
- "@lodestar/api": "^1.46.0-dev.8b30182711"
81
+ "@lodestar/api": "^1.46.0-dev.8bab23d909"
82
82
  },
83
83
  "keywords": [
84
84
  "ethereum",
@@ -86,5 +86,5 @@
86
86
  "beacon",
87
87
  "blockchain"
88
88
  ],
89
- "gitHead": "61745b494625f0d8bbfd0c026fb31fc38743c126"
89
+ "gitHead": "883fd70505af39446f16444e498a3722913f5ce7"
90
90
  }
@@ -1,4 +1,4 @@
1
- import {PublicKey, Signature, verify} from "@chainsafe/blst";
1
+ import {PublicKey, Signature, verify, verifyMultipleAggregateSignatures} from "@chainsafe/blst";
2
2
  import {BeaconConfig} from "@lodestar/config";
3
3
  import {
4
4
  DEPOSIT_CONTRACT_TREE_DEPTH,
@@ -138,6 +138,10 @@ export function addValidatorToRegistry(
138
138
  state.balances.push(amount);
139
139
  }
140
140
 
141
+ /**
142
+ * Verify a single deposit signature (proof of possession). See {@link verifyDepositSignatures} for
143
+ * the batch equivalent — the two MUST stay consistent (same domain, signing root, and checks).
144
+ */
141
145
  export function isValidDepositSignature(
142
146
  config: BeaconConfig,
143
147
  pubkey: Uint8Array,
@@ -164,3 +168,73 @@ export function isValidDepositSignature(
164
168
  return false; // Catch all BLS errors: failed key validation, failed signature validation, invalid signature
165
169
  }
166
170
  }
171
+
172
+ /**
173
+ * Batch equivalent of {@link isValidDepositSignature} — verify many deposit signatures at once.
174
+ * MUST stay consistent with `isValidDepositSignature`: same fork-agnostic deposit domain, same
175
+ * `DepositMessage` signing root, same group + infinity checks. Tries a single aggregate verify and,
176
+ * on failure, falls back to verifying each deposit individually so the valid deposits in a batch
177
+ * containing an invalid one are still identified. Returns a boolean per input deposit; `slot` is not
178
+ * part of the signature check.
179
+ *
180
+ * Used by the pre-Gloas builder-deposit pre-verify scanner (see `preVerifyBuilderDeposits.ts`).
181
+ */
182
+ export function verifyDepositSignatures(config: BeaconConfig, deposits: electra.PendingDeposit[]): boolean[] {
183
+ const results = new Array<boolean>(deposits.length).fill(false);
184
+ // fork-agnostic domain since deposits are valid across forks, matching isValidDepositSignature
185
+ const domain = computeDomain(DOMAIN_DEPOSIT, config.GENESIS_FORK_VERSION, ZERO_HASH);
186
+
187
+ const signatureSets: {pk: PublicKey; msg: Uint8Array; sig: Signature}[] = [];
188
+ const signatureSetDepositIndices: number[] = [];
189
+ for (let i = 0; i < deposits.length; i++) {
190
+ const {pubkey, withdrawalCredentials, amount, signature} = deposits[i];
191
+ let pk: PublicKey;
192
+ let sig: Signature;
193
+ try {
194
+ // Parse without group/infinity checks; deferred to the verify call below so it can be
195
+ // batched across all sets.
196
+ pk = PublicKey.fromBytes(pubkey);
197
+ sig = Signature.fromBytes(signature);
198
+ } catch (_) {
199
+ // Malformed pubkey or signature bytes - invalid deposit, results[i] stays false
200
+ continue;
201
+ }
202
+ const msg = computeSigningRoot(ssz.phase0.DepositMessage, {pubkey, withdrawalCredentials, amount}, domain);
203
+ signatureSets.push({pk, msg, sig});
204
+ signatureSetDepositIndices.push(i);
205
+ }
206
+
207
+ if (signatureSets.length === 0) {
208
+ return results;
209
+ }
210
+
211
+ // Deposit pubkeys and signatures are untrusted, so group + infinity checks are required.
212
+ // The trailing (true, true) args delegate those checks to blst, amortized across the batch.
213
+ let batchValid: boolean;
214
+ try {
215
+ batchValid =
216
+ signatureSets.length >= 2
217
+ ? verifyMultipleAggregateSignatures(signatureSets, true, true)
218
+ : verify(signatureSets[0].msg, signatureSets[0].pk, signatureSets[0].sig, true, true);
219
+ } catch (_) {
220
+ batchValid = false;
221
+ }
222
+
223
+ if (batchValid) {
224
+ for (const depositIndex of signatureSetDepositIndices) {
225
+ results[depositIndex] = true;
226
+ }
227
+ } else {
228
+ for (let s = 0; s < signatureSets.length; s++) {
229
+ try {
230
+ if (verify(signatureSets[s].msg, signatureSets[s].pk, signatureSets[s].sig, true, true)) {
231
+ results[signatureSetDepositIndices[s]] = true;
232
+ }
233
+ } catch (_) {
234
+ // invalid point / malformed → invalid signature, results[i] stays false
235
+ }
236
+ }
237
+ }
238
+
239
+ return results;
240
+ }
@@ -1,15 +1,21 @@
1
1
  import {PublicKey, Signature, verify} from "@chainsafe/blst";
2
- import {BUILDER_INDEX_SELF_BUILD, GENESIS_SLOT, PAYLOAD_BUILDER_VERSION, SLOTS_PER_EPOCH} from "@lodestar/params";
3
- import {Slot, gloas, ssz} from "@lodestar/types";
2
+ import {
3
+ BUILDER_INDEX_SELF_BUILD,
4
+ ForkSeq,
5
+ GENESIS_SLOT,
6
+ PAYLOAD_BUILDER_VERSION,
7
+ SLOTS_PER_EPOCH,
8
+ } from "@lodestar/params";
9
+ import {Slot, gloas, heze, ssz} from "@lodestar/types";
4
10
  import {byteArrayEquals, toHex, toRootHex} from "@lodestar/utils";
5
11
  import {G2_POINT_AT_INFINITY} from "../constants/constants.js";
6
12
  import {getExecutionPayloadBidSigningRoot} from "../signatureSets/executionPayloadBid.js";
7
- import {CachedBeaconStateGloas} from "../types.js";
13
+ import {CachedBeaconStateGloas, CachedBeaconStateHeze} from "../types.js";
8
14
  import {canBuilderCoverBid, isActiveBuilder} from "../util/gloas.js";
9
15
  import {getBlockRootAtSlot, getCurrentEpoch, getRandaoMix} from "../util/index.js";
10
16
 
11
17
  export function processExecutionPayloadBid(
12
- state: CachedBeaconStateGloas,
18
+ state: CachedBeaconStateGloas | CachedBeaconStateHeze,
13
19
  signedBid: gloas.SignedExecutionPayloadBid
14
20
  ): Slot {
15
21
  const bid = signedBid.message;
@@ -41,7 +47,7 @@ export function processExecutionPayloadBid(
41
47
  }
42
48
 
43
49
  // Verify that the builder has funds to cover the bid
44
- if (!canBuilderCoverBid(state, builderIndex, amount)) {
50
+ if (!canBuilderCoverBid(state as CachedBeaconStateGloas, builderIndex, amount)) {
45
51
  throw Error(`Invalid execution payload bid: builder ${builderIndex} has insufficient balance`);
46
52
  }
47
53
 
@@ -100,17 +106,21 @@ export function processExecutionPayloadBid(
100
106
  }
101
107
 
102
108
  const parentSlot = state.latestExecutionPayloadBid.slot;
103
- state.latestExecutionPayloadBid = ssz.gloas.ExecutionPayloadBid.toViewDU(bid);
109
+ if (state.config.getForkSeq(state.slot) >= ForkSeq.heze) {
110
+ state.latestExecutionPayloadBid = ssz.heze.ExecutionPayloadBid.toViewDU(bid as heze.ExecutionPayloadBid);
111
+ } else {
112
+ state.latestExecutionPayloadBid = ssz.gloas.ExecutionPayloadBid.toViewDU(bid);
113
+ }
104
114
 
105
115
  return parentSlot;
106
116
  }
107
117
 
108
118
  function verifyExecutionPayloadBidSignature(
109
- state: CachedBeaconStateGloas,
119
+ state: CachedBeaconStateGloas | CachedBeaconStateHeze,
110
120
  pubkey: Uint8Array,
111
121
  signedBid: gloas.SignedExecutionPayloadBid
112
122
  ): boolean {
113
- const signingRoot = getExecutionPayloadBidSigningRoot(state.config, state.slot, signedBid.message);
123
+ const signingRoot = getExecutionPayloadBidSigningRoot(state.config, signedBid.message);
114
124
 
115
125
  try {
116
126
  const publicKey = PublicKey.fromBytes(pubkey);