@lodestar/beacon-node 1.43.0 → 1.44.0-dev.055b83cb3d

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 (128) hide show
  1. package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -1
  2. package/lib/api/impl/beacon/blocks/index.js +30 -0
  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 +46 -5
  6. package/lib/api/impl/beacon/pool/index.js.map +1 -1
  7. package/lib/api/impl/validator/index.d.ts.map +1 -1
  8. package/lib/api/impl/validator/index.js +103 -49
  9. package/lib/api/impl/validator/index.js.map +1 -1
  10. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  11. package/lib/chain/blocks/importBlock.js +5 -2
  12. package/lib/chain/blocks/importBlock.js.map +1 -1
  13. package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
  14. package/lib/chain/blocks/importExecutionPayload.js +4 -2
  15. package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
  16. package/lib/chain/chain.d.ts +3 -2
  17. package/lib/chain/chain.d.ts.map +1 -1
  18. package/lib/chain/chain.js +5 -2
  19. package/lib/chain/chain.js.map +1 -1
  20. package/lib/chain/errors/executionPayloadBid.d.ts +24 -1
  21. package/lib/chain/errors/executionPayloadBid.d.ts.map +1 -1
  22. package/lib/chain/errors/executionPayloadBid.js +4 -0
  23. package/lib/chain/errors/executionPayloadBid.js.map +1 -1
  24. package/lib/chain/forkChoice/index.d.ts.map +1 -1
  25. package/lib/chain/forkChoice/index.js +14 -4
  26. package/lib/chain/forkChoice/index.js.map +1 -1
  27. package/lib/chain/interface.d.ts +2 -1
  28. package/lib/chain/interface.d.ts.map +1 -1
  29. package/lib/chain/interface.js.map +1 -1
  30. package/lib/chain/lightClient/index.d.ts.map +1 -1
  31. package/lib/chain/lightClient/index.js +1 -1
  32. package/lib/chain/lightClient/index.js.map +1 -1
  33. package/lib/chain/opPools/executionPayloadBidPool.d.ts +4 -4
  34. package/lib/chain/opPools/executionPayloadBidPool.d.ts.map +1 -1
  35. package/lib/chain/opPools/executionPayloadBidPool.js +6 -4
  36. package/lib/chain/opPools/executionPayloadBidPool.js.map +1 -1
  37. package/lib/chain/opPools/index.d.ts +1 -0
  38. package/lib/chain/opPools/index.d.ts.map +1 -1
  39. package/lib/chain/opPools/index.js +1 -0
  40. package/lib/chain/opPools/index.js.map +1 -1
  41. package/lib/chain/opPools/payloadAttestationPool.d.ts +1 -1
  42. package/lib/chain/opPools/payloadAttestationPool.d.ts.map +1 -1
  43. package/lib/chain/opPools/payloadAttestationPool.js +30 -10
  44. package/lib/chain/opPools/payloadAttestationPool.js.map +1 -1
  45. package/lib/chain/opPools/proposerPreferencesPool.d.ts +29 -0
  46. package/lib/chain/opPools/proposerPreferencesPool.d.ts.map +1 -0
  47. package/lib/chain/opPools/proposerPreferencesPool.js +56 -0
  48. package/lib/chain/opPools/proposerPreferencesPool.js.map +1 -0
  49. package/lib/chain/prepareNextSlot.d.ts.map +1 -1
  50. package/lib/chain/prepareNextSlot.js +2 -1
  51. package/lib/chain/prepareNextSlot.js.map +1 -1
  52. package/lib/chain/produceBlock/produceBlockBody.d.ts +7 -1
  53. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  54. package/lib/chain/produceBlock/produceBlockBody.js +107 -18
  55. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  56. package/lib/chain/validation/executionPayloadBid.d.ts +7 -3
  57. package/lib/chain/validation/executionPayloadBid.d.ts.map +1 -1
  58. package/lib/chain/validation/executionPayloadBid.js +87 -23
  59. package/lib/chain/validation/executionPayloadBid.js.map +1 -1
  60. package/lib/chain/validation/payloadAttestationMessage.d.ts +1 -1
  61. package/lib/chain/validation/payloadAttestationMessage.d.ts.map +1 -1
  62. package/lib/chain/validation/payloadAttestationMessage.js +5 -3
  63. package/lib/chain/validation/payloadAttestationMessage.js.map +1 -1
  64. package/lib/chain/validatorMonitor.d.ts +1 -0
  65. package/lib/chain/validatorMonitor.d.ts.map +1 -1
  66. package/lib/chain/validatorMonitor.js +16 -0
  67. package/lib/chain/validatorMonitor.js.map +1 -1
  68. package/lib/execution/builder/index.d.ts +1 -2
  69. package/lib/execution/builder/index.d.ts.map +1 -1
  70. package/lib/execution/builder/index.js +0 -1
  71. package/lib/execution/builder/index.js.map +1 -1
  72. package/lib/execution/engine/interface.d.ts +1 -0
  73. package/lib/execution/engine/interface.d.ts.map +1 -1
  74. package/lib/execution/engine/types.d.ts +2 -0
  75. package/lib/execution/engine/types.d.ts.map +1 -1
  76. package/lib/execution/engine/types.js +2 -0
  77. package/lib/execution/engine/types.js.map +1 -1
  78. package/lib/metrics/metrics/lodestar.d.ts +1 -1
  79. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  80. package/lib/metrics/metrics/lodestar.js +4 -3
  81. package/lib/metrics/metrics/lodestar.js.map +1 -1
  82. package/lib/network/gossip/topic.d.ts +1 -1
  83. package/lib/network/interface.d.ts +2 -0
  84. package/lib/network/interface.d.ts.map +1 -1
  85. package/lib/network/network.d.ts +2 -0
  86. package/lib/network/network.d.ts.map +1 -1
  87. package/lib/network/network.js +10 -0
  88. package/lib/network/network.js.map +1 -1
  89. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  90. package/lib/network/processor/gossipHandlers.js +19 -6
  91. package/lib/network/processor/gossipHandlers.js.map +1 -1
  92. package/lib/util/dependentRoot.d.ts +6 -2
  93. package/lib/util/dependentRoot.d.ts.map +1 -1
  94. package/lib/util/dependentRoot.js +20 -16
  95. package/lib/util/dependentRoot.js.map +1 -1
  96. package/package.json +14 -15
  97. package/src/api/impl/beacon/blocks/index.ts +36 -0
  98. package/src/api/impl/beacon/pool/index.ts +58 -4
  99. package/src/api/impl/validator/index.ts +118 -50
  100. package/src/chain/blocks/importBlock.ts +9 -2
  101. package/src/chain/blocks/importExecutionPayload.ts +7 -1
  102. package/src/chain/chain.ts +5 -0
  103. package/src/chain/errors/executionPayloadBid.ts +25 -1
  104. package/src/chain/forkChoice/index.ts +14 -4
  105. package/src/chain/interface.ts +2 -0
  106. package/src/chain/lightClient/index.ts +6 -6
  107. package/src/chain/opPools/executionPayloadBidPool.ts +10 -9
  108. package/src/chain/opPools/index.ts +1 -0
  109. package/src/chain/opPools/payloadAttestationPool.ts +34 -10
  110. package/src/chain/opPools/proposerPreferencesPool.ts +59 -0
  111. package/src/chain/prepareNextSlot.ts +2 -1
  112. package/src/chain/produceBlock/produceBlockBody.ts +158 -25
  113. package/src/chain/validation/executionPayloadBid.ts +96 -28
  114. package/src/chain/validation/payloadAttestationMessage.ts +6 -4
  115. package/src/chain/validatorMonitor.ts +18 -0
  116. package/src/execution/builder/index.ts +1 -4
  117. package/src/execution/engine/interface.ts +1 -0
  118. package/src/execution/engine/types.ts +4 -0
  119. package/src/metrics/metrics/lodestar.ts +4 -3
  120. package/src/network/interface.ts +2 -0
  121. package/src/network/network.ts +22 -0
  122. package/src/network/processor/gossipHandlers.ts +24 -6
  123. package/src/util/dependentRoot.ts +22 -18
  124. package/lib/execution/builder/utils.d.ts +0 -5
  125. package/lib/execution/builder/utils.d.ts.map +0 -1
  126. package/lib/execution/builder/utils.js +0 -17
  127. package/lib/execution/builder/utils.js.map +0 -1
  128. package/src/execution/builder/utils.ts +0 -19
@@ -1 +1 @@
1
- {"version":3,"file":"executionPayloadBidPool.d.ts","sourceRoot":"","sources":["../../../src/chain/opPools/executionPayloadBidPool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAE,KAAK,EAAC,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAC,aAAa,EAAC,MAAM,YAAY,CAAC;AAQzC,KAAK,YAAY,GAAG,MAAM,CAAC;AAC3B,KAAK,YAAY,GAAG,MAAM,CAAC;AAE3B;;GAEG;AACH,qBAAa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,iCAAiC,CAG+C;IACjG,OAAO,CAAC,qBAAqB,CAAK;IAElC,IAAI,IAAI,IAAI,MAAM,CAQjB;IAED,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,mBAAmB,GAAG,aAAa,CAyBjD;IAED;;;OAGG;IACH,UAAU,CACR,IAAI,EAAE,IAAI,EACV,eAAe,EAAE,YAAY,EAC7B,eAAe,EAAE,YAAY,GAC5B,KAAK,CAAC,mBAAmB,GAAG,IAAI,CAGlC;IAED,KAAK,CAAC,SAAS,EAAE,IAAI,GAAG,IAAI,CAE3B;CACF"}
1
+ {"version":3,"file":"executionPayloadBidPool.d.ts","sourceRoot":"","sources":["../../../src/chain/opPools/executionPayloadBidPool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAE,KAAK,EAAC,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAC,aAAa,EAAC,MAAM,YAAY,CAAC;AAQzC,KAAK,YAAY,GAAG,MAAM,CAAC;AAC3B,KAAK,YAAY,GAAG,MAAM,CAAC;AAE3B;;GAEG;AACH,qBAAa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,iCAAiC,CAGqD;IACvG,OAAO,CAAC,qBAAqB,CAAK;IAElC,IAAI,IAAI,IAAI,MAAM,CAQjB;IAED,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,yBAAyB,GAAG,aAAa,CAyBvD;IAED;;;OAGG;IACH,UAAU,CACR,IAAI,EAAE,IAAI,EACV,eAAe,EAAE,YAAY,GAAG,IAAI,EACpC,eAAe,EAAE,YAAY,GAC5B,KAAK,CAAC,yBAAyB,GAAG,IAAI,CAIxC;IAED,KAAK,CAAC,SAAS,EAAE,IAAI,GAAG,IAAI,CAE3B;CACF"}
@@ -6,7 +6,7 @@ import { pruneBySlot } from "./utils.js";
6
6
  */
7
7
  const SLOTS_RETAINED = 2;
8
8
  /**
9
- * Store the best execution payload bid per slot / (parent block root, parent block hash).
9
+ * Store the best signed execution payload bid per slot / (parent block root, parent block hash).
10
10
  */
11
11
  export class ExecutionPayloadBidPool {
12
12
  bidByParentHashByParentRootBySlot = new MapDef(() => new MapDef(() => new Map()));
@@ -21,7 +21,7 @@ export class ExecutionPayloadBidPool {
21
21
  return count;
22
22
  }
23
23
  add(bid) {
24
- const { slot, parentBlockRoot, parentBlockHash, value } = bid;
24
+ const { slot, parentBlockRoot, parentBlockHash, value } = bid.message;
25
25
  const lowestPermissibleSlot = this.lowestPermissibleSlot;
26
26
  if (slot < lowestPermissibleSlot) {
27
27
  return InsertOutcome.Old;
@@ -31,7 +31,7 @@ export class ExecutionPayloadBidPool {
31
31
  const bidByParentHash = this.bidByParentHashByParentRootBySlot.getOrDefault(slot).getOrDefault(parentRootHex);
32
32
  const existing = bidByParentHash.get(parentHashHex);
33
33
  if (existing) {
34
- const existingValue = existing.value;
34
+ const existingValue = existing.message.value;
35
35
  const newValue = value;
36
36
  if (newValue > existingValue) {
37
37
  bidByParentHash.set(parentHashHex, bid);
@@ -43,10 +43,12 @@ export class ExecutionPayloadBidPool {
43
43
  return InsertOutcome.NewData;
44
44
  }
45
45
  /**
46
- * Return the highest-value bid matching slot, parent block hash, and parent block root.
46
+ * Return the highest-value signed bid matching slot, parent block hash, and parent block root.
47
47
  * Used for gossip validation and block production.
48
48
  */
49
49
  getBestBid(slot, parentBlockHash, parentBlockRoot) {
50
+ if (parentBlockHash === null)
51
+ return null;
50
52
  const bidByParentHash = this.bidByParentHashByParentRootBySlot.get(slot)?.get(parentBlockRoot);
51
53
  return bidByParentHash?.get(parentBlockHash) ?? null;
52
54
  }
@@ -1 +1 @@
1
- {"version":3,"file":"executionPayloadBidPool.js","sourceRoot":"","sources":["../../../src/chain/opPools/executionPayloadBidPool.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAE,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAC,aAAa,EAAC,MAAM,YAAY,CAAC;AACzC,OAAO,EAAC,WAAW,EAAC,MAAM,YAAY,CAAC;AAEvC;;GAEG;AACH,MAAM,cAAc,GAAG,CAAC,CAAC;AAKzB;;GAEG;AACH,MAAM,OAAO,uBAAuB;IACjB,iCAAiC,GAAG,IAAI,MAAM,CAG7D,GAAG,EAAE,CAAC,IAAI,MAAM,CAA6D,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;IACzF,qBAAqB,GAAG,CAAC,CAAC;IAElC,IAAI,IAAI,GAAW;QACjB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,iCAAiC,CAAC,MAAM,EAAE,EAAE,CAAC;YAC3E,KAAK,MAAM,YAAY,IAAI,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC;gBACjD,KAAK,IAAI,YAAY,CAAC,IAAI,CAAC;YAC7B,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IAAA,CACd;IAED,GAAG,CAAC,GAA8B,EAAiB;QACjD,MAAM,EAAC,IAAI,EAAE,eAAe,EAAE,eAAe,EAAE,KAAK,EAAC,GAAG,GAAG,CAAC;QAC5D,MAAM,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAC;QAEzD,IAAI,IAAI,GAAG,qBAAqB,EAAE,CAAC;YACjC,OAAO,aAAa,CAAC,GAAG,CAAC;QAC3B,CAAC;QAED,MAAM,aAAa,GAAG,SAAS,CAAC,eAAe,CAAC,CAAC;QACjD,MAAM,aAAa,GAAG,SAAS,CAAC,eAAe,CAAC,CAAC;QACjD,MAAM,eAAe,GAAG,IAAI,CAAC,iCAAiC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;QAC9G,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAEpD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC;YACrC,MAAM,QAAQ,GAAG,KAAK,CAAC;YACvB,IAAI,QAAQ,GAAG,aAAa,EAAE,CAAC;gBAC7B,eAAe,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;gBACxC,OAAO,aAAa,CAAC,OAAO,CAAC;YAC/B,CAAC;YACD,OAAO,QAAQ,KAAK,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC;QAC/F,CAAC;QAED,eAAe,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;QACxC,OAAO,aAAa,CAAC,OAAO,CAAC;IAAA,CAC9B;IAED;;;OAGG;IACH,UAAU,CACR,IAAU,EACV,eAA6B,EAC7B,eAA6B,EACK;QAClC,MAAM,eAAe,GAAG,IAAI,CAAC,iCAAiC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC;QAC/F,OAAO,eAAe,EAAE,GAAG,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC;IAAA,CACtD;IAED,KAAK,CAAC,SAAe,EAAQ;QAC3B,IAAI,CAAC,qBAAqB,GAAG,WAAW,CAAC,IAAI,CAAC,iCAAiC,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;IAAA,CAC7G;CACF"}
1
+ {"version":3,"file":"executionPayloadBidPool.js","sourceRoot":"","sources":["../../../src/chain/opPools/executionPayloadBidPool.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAE,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAC,aAAa,EAAC,MAAM,YAAY,CAAC;AACzC,OAAO,EAAC,WAAW,EAAC,MAAM,YAAY,CAAC;AAEvC;;GAEG;AACH,MAAM,cAAc,GAAG,CAAC,CAAC;AAKzB;;GAEG;AACH,MAAM,OAAO,uBAAuB;IACjB,iCAAiC,GAAG,IAAI,MAAM,CAG7D,GAAG,EAAE,CAAC,IAAI,MAAM,CAAmE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;IAC/F,qBAAqB,GAAG,CAAC,CAAC;IAElC,IAAI,IAAI,GAAW;QACjB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,iCAAiC,CAAC,MAAM,EAAE,EAAE,CAAC;YAC3E,KAAK,MAAM,YAAY,IAAI,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC;gBACjD,KAAK,IAAI,YAAY,CAAC,IAAI,CAAC;YAC7B,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IAAA,CACd;IAED,GAAG,CAAC,GAAoC,EAAiB;QACvD,MAAM,EAAC,IAAI,EAAE,eAAe,EAAE,eAAe,EAAE,KAAK,EAAC,GAAG,GAAG,CAAC,OAAO,CAAC;QACpE,MAAM,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAC;QAEzD,IAAI,IAAI,GAAG,qBAAqB,EAAE,CAAC;YACjC,OAAO,aAAa,CAAC,GAAG,CAAC;QAC3B,CAAC;QAED,MAAM,aAAa,GAAG,SAAS,CAAC,eAAe,CAAC,CAAC;QACjD,MAAM,aAAa,GAAG,SAAS,CAAC,eAAe,CAAC,CAAC;QACjD,MAAM,eAAe,GAAG,IAAI,CAAC,iCAAiC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;QAC9G,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAEpD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;YAC7C,MAAM,QAAQ,GAAG,KAAK,CAAC;YACvB,IAAI,QAAQ,GAAG,aAAa,EAAE,CAAC;gBAC7B,eAAe,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;gBACxC,OAAO,aAAa,CAAC,OAAO,CAAC;YAC/B,CAAC;YACD,OAAO,QAAQ,KAAK,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC;QAC/F,CAAC;QAED,eAAe,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;QACxC,OAAO,aAAa,CAAC,OAAO,CAAC;IAAA,CAC9B;IAED;;;OAGG;IACH,UAAU,CACR,IAAU,EACV,eAAoC,EACpC,eAA6B,EACW;QACxC,IAAI,eAAe,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAC1C,MAAM,eAAe,GAAG,IAAI,CAAC,iCAAiC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC;QAC/F,OAAO,eAAe,EAAE,GAAG,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC;IAAA,CACtD;IAED,KAAK,CAAC,SAAe,EAAQ;QAC3B,IAAI,CAAC,qBAAqB,GAAG,WAAW,CAAC,IAAI,CAAC,iCAAiC,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;IAAA,CAC7G;CACF"}
@@ -3,6 +3,7 @@ export { AttestationPool } from "./attestationPool.js";
3
3
  export { ExecutionPayloadBidPool } from "./executionPayloadBidPool.js";
4
4
  export { OpPool } from "./opPool.js";
5
5
  export { PayloadAttestationPool } from "./payloadAttestationPool.js";
6
+ export { ProposerPreferencesPool } from "./proposerPreferencesPool.js";
6
7
  export { SyncCommitteeMessagePool } from "./syncCommitteeMessagePool.js";
7
8
  export { SyncContributionAndProofPool } from "./syncContributionAndProofPool.js";
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/chain/opPools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,yBAAyB,EAAC,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAC,eAAe,EAAC,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAC,uBAAuB,EAAC,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AACnC,OAAO,EAAC,sBAAsB,EAAC,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAC,wBAAwB,EAAC,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAC,4BAA4B,EAAC,MAAM,mCAAmC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/chain/opPools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,yBAAyB,EAAC,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAC,eAAe,EAAC,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAC,uBAAuB,EAAC,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AACnC,OAAO,EAAC,sBAAsB,EAAC,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAC,uBAAuB,EAAC,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAC,wBAAwB,EAAC,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAC,4BAA4B,EAAC,MAAM,mCAAmC,CAAC"}
@@ -3,6 +3,7 @@ export { AttestationPool } from "./attestationPool.js";
3
3
  export { ExecutionPayloadBidPool } from "./executionPayloadBidPool.js";
4
4
  export { OpPool } from "./opPool.js";
5
5
  export { PayloadAttestationPool } from "./payloadAttestationPool.js";
6
+ export { ProposerPreferencesPool } from "./proposerPreferencesPool.js";
6
7
  export { SyncCommitteeMessagePool } from "./syncCommitteeMessagePool.js";
7
8
  export { SyncContributionAndProofPool } from "./syncContributionAndProofPool.js";
8
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/chain/opPools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,yBAAyB,EAAC,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAC,eAAe,EAAC,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAC,uBAAuB,EAAC,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AACnC,OAAO,EAAC,sBAAsB,EAAC,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAC,wBAAwB,EAAC,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAC,4BAA4B,EAAC,MAAM,mCAAmC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/chain/opPools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,yBAAyB,EAAC,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAC,eAAe,EAAC,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAC,uBAAuB,EAAC,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AACnC,OAAO,EAAC,sBAAsB,EAAC,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAC,uBAAuB,EAAC,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAC,wBAAwB,EAAC,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAC,4BAA4B,EAAC,MAAM,mCAAmC,CAAC"}
@@ -12,7 +12,7 @@ export declare class PayloadAttestationPool {
12
12
  private lowestPermissibleSlot;
13
13
  constructor(config: ChainForkConfig, clock: IClock, metrics?: Metrics | null);
14
14
  get size(): number;
15
- add(message: gloas.PayloadAttestationMessage, payloadAttDataRootHex: RootHex, validatorCommitteeIndex: number): InsertOutcome;
15
+ add(message: gloas.PayloadAttestationMessage, payloadAttDataRootHex: RootHex, validatorCommitteeIndices: number[]): InsertOutcome;
16
16
  /**
17
17
  * Get payload attestations to be included in a block.
18
18
  * Pick the top `MAX_PAYLOAD_ATTESTATIONS` aggregates with the most votes.
@@ -1 +1 @@
1
- {"version":3,"file":"payloadAttestationPool.d.ts","sourceRoot":"","sources":["../../../src/chain/opPools/payloadAttestationPool.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAC,MAAM,iBAAiB,CAAC;AAErD,OAAO,EAAC,OAAO,EAAC,MAAM,0BAA0B,CAAC;AACjD,OAAO,EAAC,MAAM,EAAC,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAC,aAAa,EAA+B,MAAM,YAAY,CAAC;AAiBvE,KAAK,YAAY,GAAG,MAAM,CAAC;AAQ3B,qBAAa,sBAAsB;IAQ/B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAT1B,OAAO,CAAC,QAAQ,CAAC,oCAAoC,CAGa;IAClE,OAAO,CAAC,qBAAqB,CAAK;IAElC,YACmB,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,OAAO,GAAG,IAAW,EAC7C;IAEJ,IAAI,IAAI,IAAI,MAAM,CAQjB;IAED,GAAG,CACD,OAAO,EAAE,KAAK,CAAC,yBAAyB,EACxC,qBAAqB,EAAE,OAAO,EAC9B,uBAAuB,EAAE,MAAM,GAC9B,aAAa,CAiCf;IAED;;;OAGG;IACH,8BAA8B,CAAC,eAAe,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,GAAG,KAAK,CAAC,kBAAkB,EAAE,CAoBpG;IAED,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC,kBAAkB,EAAE,CAuB9C;IAED,KAAK,CAAC,SAAS,EAAE,IAAI,GAAG,IAAI,CAG3B;CACF"}
1
+ {"version":3,"file":"payloadAttestationPool.d.ts","sourceRoot":"","sources":["../../../src/chain/opPools/payloadAttestationPool.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAC,MAAM,iBAAiB,CAAC;AAErD,OAAO,EAAC,OAAO,EAAC,MAAM,0BAA0B,CAAC;AACjD,OAAO,EAAC,MAAM,EAAC,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAC,aAAa,EAA+B,MAAM,YAAY,CAAC;AAiBvE,KAAK,YAAY,GAAG,MAAM,CAAC;AAQ3B,qBAAa,sBAAsB;IAQ/B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAT1B,OAAO,CAAC,QAAQ,CAAC,oCAAoC,CAGa;IAClE,OAAO,CAAC,qBAAqB,CAAK;IAElC,YACmB,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,OAAO,GAAG,IAAW,EAC7C;IAEJ,IAAI,IAAI,IAAI,MAAM,CAQjB;IAED,GAAG,CACD,OAAO,EAAE,KAAK,CAAC,yBAAyB,EACxC,qBAAqB,EAAE,OAAO,EAC9B,yBAAyB,EAAE,MAAM,EAAE,GAClC,aAAa,CAiCf;IAED;;;OAGG;IACH,8BAA8B,CAAC,eAAe,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,GAAG,KAAK,CAAC,kBAAkB,EAAE,CAoBpG;IAED,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC,kBAAkB,EAAE,CAuB9C;IAED,KAAK,CAAC,SAAS,EAAE,IAAI,GAAG,IAAI,CAG3B;CACF"}
@@ -35,7 +35,7 @@ export class PayloadAttestationPool {
35
35
  }
36
36
  return count;
37
37
  }
38
- add(message, payloadAttDataRootHex, validatorCommitteeIndex) {
38
+ add(message, payloadAttDataRootHex, validatorCommitteeIndices) {
39
39
  const slot = message.data.slot;
40
40
  const lowestPermissibleSlot = this.lowestPermissibleSlot;
41
41
  if (slot < lowestPermissibleSlot) {
@@ -56,10 +56,10 @@ export class PayloadAttestationPool {
56
56
  const aggregate = aggregateByDataRoot.get(payloadAttDataRootHex);
57
57
  if (aggregate) {
58
58
  // Aggregate msg into aggregate
59
- return aggregateMessageInto(message, validatorCommitteeIndex, aggregate);
59
+ return aggregateMessageInto(message, validatorCommitteeIndices, aggregate);
60
60
  }
61
61
  // Create a new aggregate with data
62
- aggregateByDataRoot.set(payloadAttDataRootHex, messageToAggregate(message, validatorCommitteeIndex));
62
+ aggregateByDataRoot.set(payloadAttDataRootHex, messageToAggregate(message, validatorCommitteeIndices));
63
63
  return InsertOutcome.NewData;
64
64
  }
65
65
  /**
@@ -110,19 +110,39 @@ export class PayloadAttestationPool {
110
110
  this.lowestPermissibleSlot = clockSlot;
111
111
  }
112
112
  }
113
- function messageToAggregate(message, validatorCommitteeIndex) {
113
+ function messageToAggregate(message, validatorCommitteeIndices) {
114
+ const aggregationBits = BitArray.fromBitLen(PTC_SIZE);
115
+ for (const index of validatorCommitteeIndices) {
116
+ aggregationBits.set(index, true);
117
+ }
118
+ const sig = signatureFromBytesNoCheck(message.signature);
119
+ // The validator signed once but occupies `validatorCommitteeIndices.length` PTC positions.
120
+ // Verification aggregates the pubkey once per set bit, so the signature must be aggregated
121
+ // the same number of times for the BLS check to balance — same pattern as sync committee.
122
+ const signature = validatorCommitteeIndices.length === 1
123
+ ? sig
124
+ : aggregateSignatures(new Array(validatorCommitteeIndices.length).fill(sig));
114
125
  return {
115
- aggregationBits: BitArray.fromSingleBit(PTC_SIZE, validatorCommitteeIndex),
126
+ aggregationBits,
116
127
  data: message.data,
117
- signature: signatureFromBytesNoCheck(message.signature),
128
+ signature,
118
129
  };
119
130
  }
120
- function aggregateMessageInto(message, validatorCommitteeIndex, aggregate) {
121
- if (aggregate.aggregationBits.get(validatorCommitteeIndex) === true) {
131
+ function aggregateMessageInto(message, validatorCommitteeIndices, aggregate) {
132
+ // Gossip dedup via `seenPayloadAttesters` is keyed by (epoch, validatorIndex), so the same
133
+ // validator's message is never processed twice — all of its bits are set together or none.
134
+ // Checking the first index is sufficient.
135
+ if (aggregate.aggregationBits.get(validatorCommitteeIndices[0]) === true) {
122
136
  return InsertOutcome.AlreadyKnown;
123
137
  }
124
- aggregate.aggregationBits.set(validatorCommitteeIndex, true);
125
- aggregate.signature = aggregateSignatures([aggregate.signature, signatureFromBytesNoCheck(message.signature)]);
138
+ for (const index of validatorCommitteeIndices) {
139
+ aggregate.aggregationBits.set(index, true);
140
+ }
141
+ const sig = signatureFromBytesNoCheck(message.signature);
142
+ aggregate.signature = aggregateSignatures([
143
+ aggregate.signature,
144
+ ...new Array(validatorCommitteeIndices.length).fill(sig),
145
+ ]);
126
146
  return InsertOutcome.Aggregated;
127
147
  }
128
148
  function fastToPayloadAttestation(aggFast) {
@@ -1 +1 @@
1
- {"version":3,"file":"payloadAttestationPool.js","sourceRoot":"","sources":["../../../src/chain/opPools/payloadAttestationPool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"payloadAttestationPool.js","sourceRoot":"","sources":["../../../src/chain/opPools/payloadAttestationPool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { RootHex, Slot, gloas } from "@lodestar/types";
2
+ /**
3
+ * Pool of validated `SignedProposerPreferences` indexed by `(slot, dependent_root)`.
4
+ *
5
+ * The primary consumer is `validateExecutionPayloadBid`, which looks up the matching
6
+ * preferences via `get(bid.slot, dependent_root)` to enforce the IGNORE-existence and
7
+ * REJECT-equality rules from the gloas spec. The beacon API `/pool/proposer_preferences`
8
+ * GET endpoint reads from the same pool via `getAll`.
9
+ *
10
+ * `validator_index` is intentionally not part of the key: gossip validation enforces
11
+ * `proposers[proposalSlot % SLOTS_PER_EPOCH] === validatorIndex` against the shuffling
12
+ * implied by `dependent_root`, so once a preference has been validated `(slot, dependent_root)`
13
+ * already pins down the validator.
14
+ */
15
+ export declare class ProposerPreferencesPool {
16
+ private readonly bySlot;
17
+ /** Lookup for bid validation: matches `(bid.slot, get_proposer_dependent_root(parent_state, ...))`. */
18
+ get(slot: Slot, dependentRootHex: RootHex): gloas.SignedProposerPreferences | null;
19
+ add(signed: gloas.SignedProposerPreferences): void;
20
+ /** API read-out: flatten across branches, optionally filtered by slot. */
21
+ getAll(slot?: Slot): gloas.SignedProposerPreferences[];
22
+ /**
23
+ * Entries are only load-bearing while `proposal_slot >= current_slot`. Once the slot has
24
+ * passed the `[IGNORE] proposal_slot > current_slot` gossip rule takes over, so drop them
25
+ * on each slot tick.
26
+ */
27
+ prune(currentSlot: Slot): void;
28
+ }
29
+ //# sourceMappingURL=proposerPreferencesPool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proposerPreferencesPool.d.ts","sourceRoot":"","sources":["../../../src/chain/opPools/proposerPreferencesPool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAC,MAAM,iBAAiB,CAAC;AAGrD;;;;;;;;;;;;GAYG;AACH,qBAAa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkE;IAEzF,uGAAuG;IACvG,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,GAAG,KAAK,CAAC,yBAAyB,GAAG,IAAI,CAEjF;IAED,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,yBAAyB,GAAG,IAAI,CASjD;IAED,0EAA0E;IAC1E,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC,yBAAyB,EAAE,CAUrD;IAED;;;;OAIG;IACH,KAAK,CAAC,WAAW,EAAE,IAAI,GAAG,IAAI,CAI7B;CACF"}
@@ -0,0 +1,56 @@
1
+ import { toRootHex } from "@lodestar/utils";
2
+ /**
3
+ * Pool of validated `SignedProposerPreferences` indexed by `(slot, dependent_root)`.
4
+ *
5
+ * The primary consumer is `validateExecutionPayloadBid`, which looks up the matching
6
+ * preferences via `get(bid.slot, dependent_root)` to enforce the IGNORE-existence and
7
+ * REJECT-equality rules from the gloas spec. The beacon API `/pool/proposer_preferences`
8
+ * GET endpoint reads from the same pool via `getAll`.
9
+ *
10
+ * `validator_index` is intentionally not part of the key: gossip validation enforces
11
+ * `proposers[proposalSlot % SLOTS_PER_EPOCH] === validatorIndex` against the shuffling
12
+ * implied by `dependent_root`, so once a preference has been validated `(slot, dependent_root)`
13
+ * already pins down the validator.
14
+ */
15
+ export class ProposerPreferencesPool {
16
+ bySlot = new Map();
17
+ /** Lookup for bid validation: matches `(bid.slot, get_proposer_dependent_root(parent_state, ...))`. */
18
+ get(slot, dependentRootHex) {
19
+ return this.bySlot.get(slot)?.get(dependentRootHex) ?? null;
20
+ }
21
+ add(signed) {
22
+ const { proposalSlot, dependentRoot } = signed.message;
23
+ const rootHex = toRootHex(dependentRoot);
24
+ let byRoot = this.bySlot.get(proposalSlot);
25
+ if (!byRoot) {
26
+ byRoot = new Map();
27
+ this.bySlot.set(proposalSlot, byRoot);
28
+ }
29
+ byRoot.set(rootHex, signed);
30
+ }
31
+ /** API read-out: flatten across branches, optionally filtered by slot. */
32
+ getAll(slot) {
33
+ if (slot !== undefined) {
34
+ const byRoot = this.bySlot.get(slot);
35
+ return byRoot ? Array.from(byRoot.values()) : [];
36
+ }
37
+ const out = [];
38
+ for (const byRoot of this.bySlot.values()) {
39
+ for (const v of byRoot.values())
40
+ out.push(v);
41
+ }
42
+ return out;
43
+ }
44
+ /**
45
+ * Entries are only load-bearing while `proposal_slot >= current_slot`. Once the slot has
46
+ * passed the `[IGNORE] proposal_slot > current_slot` gossip rule takes over, so drop them
47
+ * on each slot tick.
48
+ */
49
+ prune(currentSlot) {
50
+ for (const slot of this.bySlot.keys()) {
51
+ if (slot < currentSlot)
52
+ this.bySlot.delete(slot);
53
+ }
54
+ }
55
+ }
56
+ //# sourceMappingURL=proposerPreferencesPool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proposerPreferencesPool.js","sourceRoot":"","sources":["../../../src/chain/opPools/proposerPreferencesPool.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAE1C;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,uBAAuB;IACjB,MAAM,GAAG,IAAI,GAAG,EAAuD,CAAC;IAEzF,uGAAuG;IACvG,GAAG,CAAC,IAAU,EAAE,gBAAyB,EAA0C;QACjF,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC;IAAA,CAC7D;IAED,GAAG,CAAC,MAAuC,EAAQ;QACjD,MAAM,EAAC,YAAY,EAAE,aAAa,EAAC,GAAG,MAAM,CAAC,OAAO,CAAC;QACrD,MAAM,OAAO,GAAG,SAAS,CAAC,aAAa,CAAC,CAAC;QACzC,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;YACnB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QACxC,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAAA,CAC7B;IAED,0EAA0E;IAC1E,MAAM,CAAC,IAAW,EAAqC;QACrD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACrC,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,CAAC;QACD,MAAM,GAAG,GAAsC,EAAE,CAAC;QAClD,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1C,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE;gBAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,GAAG,CAAC;IAAA,CACZ;IAED;;;;OAIG;IACH,KAAK,CAAC,WAAiB,EAAQ;QAC7B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YACtC,IAAI,IAAI,GAAG,WAAW;gBAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACnD,CAAC;IAAA,CACF;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"prepareNextSlot.d.ts","sourceRoot":"","sources":["../../src/chain/prepareNextSlot.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AAGjD,OAAO,EACL,gBAAgB,EAOjB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAC,MAAM,EAAiC,MAAM,iBAAiB,CAAC;AAGvE,OAAO,EAAC,OAAO,EAAC,MAAM,qBAAqB,CAAC;AAI5C,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAM5C,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAK1C;;;;;;;;;;GAUG;AACH,qBAAa,wBAAwB;IAEjC,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IALzB,YACmB,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,OAAO,GAAG,IAAI,EACvB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,WAAW,EAUrC;IAED;;OAEG;IACH,kBAAkB,uCAoNhB;IAEF,wBAAwB,CAAC,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,OAAO,GAAG,IAAI,CAQlF;CACF"}
1
+ {"version":3,"file":"prepareNextSlot.d.ts","sourceRoot":"","sources":["../../src/chain/prepareNextSlot.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AAGjD,OAAO,EACL,gBAAgB,EAOjB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAC,MAAM,EAAiC,MAAM,iBAAiB,CAAC;AAGvE,OAAO,EAAC,OAAO,EAAC,MAAM,qBAAqB,CAAC;AAI5C,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAM5C,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAK1C;;;;;;;;;;GAUG;AACH,qBAAa,wBAAwB;IAEjC,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IALzB,YACmB,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,OAAO,GAAG,IAAI,EACvB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,WAAW,EAUrC;IAED;;OAEG;IACH,kBAAkB,uCAqNhB;IAEF,wBAAwB,CAAC,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,OAAO,GAAG,IAAI,CAQlF;CACF"}
@@ -133,7 +133,8 @@ export class PrepareNextSlotScheduler {
133
133
  // Apply parent payload once here as it's reused by EL prep and SSE emit below
134
134
  let stateAfterParentPayload = updatedPrepareState;
135
135
  if (isStatePostGloas(updatedPrepareState)) {
136
- if (this.chain.forkChoice.shouldExtendPayload(updatedHead.blockRoot)) {
136
+ // Spec: should_build_on_full(store, head) — see produceBlockBody.ts for context.
137
+ if (this.chain.forkChoice.shouldBuildOnFull(updatedHead)) {
137
138
  parentBlockHash = updatedPrepareState.latestExecutionPayloadBid.blockHash;
138
139
  // Skip applying parent payload unless we're proposing the next slot or have to emit payload_attributes events
139
140
  if (feeRecipient !== undefined || this.chain.opts.emitPayloadAttributes === true) {
@@ -1 +1 @@
1
- {"version":3,"file":"prepareNextSlot.js","sourceRoot":"","sources":["../../src/chain/prepareNextSlot.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prepareNextSlot.js","sourceRoot":"","sources":["../../src/chain/prepareNextSlot.ts"],"names":[],"mappings":"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"}
@@ -2,11 +2,12 @@ import { ChainForkConfig } from "@lodestar/config";
2
2
  import { IForkChoice, ProtoBlock } from "@lodestar/fork-choice";
3
3
  import { ForkName, ForkPostBellatrix, ForkPostDeneb, ForkPostFulu, ForkPostGloas } from "@lodestar/params";
4
4
  import { IBeaconStateView, type IBeaconStateViewBellatrix } from "@lodestar/state-transition";
5
- import { BLSPubkey, BLSSignature, BeaconBlock, BeaconBlockBody, BlindedBeaconBlock, BlindedBeaconBlockBody, BlobsBundle, Bytes32, ExecutionPayload, Root, RootHex, SSEPayloadAttributes, Slot, ValidatorIndex, Wei, electra, fulu } from "@lodestar/types";
5
+ import { BLSPubkey, BLSSignature, BeaconBlock, BeaconBlockBody, BlindedBeaconBlock, BlindedBeaconBlockBody, BlobsBundle, Bytes32, ExecutionPayload, Root, RootHex, SSEPayloadAttributes, Slot, ValidatorIndex, Wei, electra, fulu, gloas } from "@lodestar/types";
6
6
  import { Logger } from "@lodestar/utils";
7
7
  import { IExecutionEngine, PayloadId } from "../../execution/index.js";
8
8
  import type { BeaconChain } from "../chain.js";
9
9
  import { CommonBlockBody } from "../interface.js";
10
+ import { ProposerPreferencesPool } from "../opPools/index.js";
10
11
  export declare enum PayloadPreparationType {
11
12
  Fresh = "Fresh",
12
13
  Cached = "Cached",
@@ -31,6 +32,8 @@ export type BlockAttributes = {
31
32
  slot: Slot;
32
33
  parentBlock: ProtoBlock;
33
34
  feeRecipient?: string;
35
+ /** When provided, build block with this builder bid instead of a self-build bid */
36
+ builderBid?: gloas.SignedExecutionPayloadBid;
34
37
  };
35
38
  export declare enum BlockType {
36
39
  Full = "Full",
@@ -91,6 +94,8 @@ export declare function produceBlockBody<T extends BlockType>(this: BeaconChain,
91
94
  export declare function prepareExecutionPayload(chain: {
92
95
  executionEngine: IExecutionEngine;
93
96
  config: ChainForkConfig;
97
+ forkChoice: IForkChoice;
98
+ proposerPreferencesPool: ProposerPreferencesPool;
94
99
  }, logger: Logger, fork: ForkPostBellatrix, parentBlockRoot: Root, parentBlockHash: Bytes32, safeBlockHash: RootHex, finalizedBlockHash: RootHex,
95
100
  /**
96
101
  * Post-gloas, when extending a full parent, callers must apply
@@ -103,6 +108,7 @@ state: IBeaconStateViewBellatrix, suggestedFeeRecipient: string): Promise<{
103
108
  export declare function getPayloadAttributesForSSE(fork: ForkPostBellatrix, chain: {
104
109
  config: ChainForkConfig;
105
110
  forkChoice: IForkChoice;
111
+ proposerPreferencesPool: ProposerPreferencesPool;
106
112
  }, { prepareState, prepareSlot, parentBlockRoot, parentBlockHash, feeRecipient }: {
107
113
  /**
108
114
  * Post-gloas, when extending a full parent, callers must apply
@@ -1 +1 @@
1
- {"version":3,"file":"produceBlockBody.d.ts","sourceRoot":"","sources":["../../../src/chain/produceBlock/produceBlockBody.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"produceBlockBody.d.ts","sourceRoot":"","sources":["../../../src/chain/produceBlock/produceBlockBody.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,11 @@
1
1
  import { getSafeExecutionBlockHash } from "@lodestar/fork-choice";
2
2
  import { BUILDER_INDEX_SELF_BUILD, ForkSeq, isForkPostAltair, isForkPostBellatrix, isForkPostGloas, } from "@lodestar/params";
3
- import { G2_POINT_AT_INFINITY, computeTimeAtSlot, isStatePostBellatrix, isStatePostCapella, isStatePostGloas, } from "@lodestar/state-transition";
3
+ import { G2_POINT_AT_INFINITY, computeEpochAtSlot, computeTimeAtSlot, getExpectedGasLimit, isStatePostBellatrix, isStatePostCapella, isStatePostGloas, } from "@lodestar/state-transition";
4
4
  import { ssz, } from "@lodestar/types";
5
- import { byteArrayEquals, fromHex, sleep, toHex, toPubkeyHex, toRootHex } from "@lodestar/utils";
5
+ import { GWEI_TO_WEI, byteArrayEquals, fromHex, sleep, toHex, toPubkeyHex, toRootHex } from "@lodestar/utils";
6
6
  import { ZERO_HASH_HEX } from "../../constants/index.js";
7
7
  import { numToQuantity } from "../../execution/engine/utils.js";
8
- import { getExpectedGasLimit, } from "../../execution/index.js";
8
+ import { getShufflingDependentRoot } from "../../util/dependentRoot.js";
9
9
  import { fromGraffitiBytes } from "../../util/graffiti.js";
10
10
  import { kzg } from "../../util/kzg.js";
11
11
  import { validateBlobsAndKzgCommitments, validateCellsAndKzgCommitments } from "./validateBlobsAndKzgCommitments.js";
@@ -39,8 +39,23 @@ var BlockType;
39
39
  BlockType["Full"] = "Full";
40
40
  BlockType["Blinded"] = "Blinded";
41
41
  })(BlockType || (BlockType = {}));
42
+ /**
43
+ * Drop voluntary exits that `parent_execution_requests` have invalidated (e.g. a withdrawal
44
+ * request initiating an exit on the same validator). Op pool selected against the unapplied
45
+ * state, so re-validate against the post-apply state to avoid producing an invalid block.
46
+ *
47
+ * `getStateAfterParentPayload` is a thunk so the post-apply state is only materialized when
48
+ * actually needed (i.e. when extending the parent payload and there are exits to filter).
49
+ */
50
+ function maybeFilterInvalidatedVoluntaryExits(commonBlockBody, isExtendingPayload, getStateAfterParentPayload) {
51
+ if (!isExtendingPayload || commonBlockBody.voluntaryExits.length === 0) {
52
+ return commonBlockBody.voluntaryExits;
53
+ }
54
+ const state = getStateAfterParentPayload();
55
+ return commonBlockBody.voluntaryExits.filter((signedVoluntaryExit) => state.isValidVoluntaryExit(signedVoluntaryExit, false));
56
+ }
42
57
  export async function produceBlockBody(blockType, currentState, blockAttr) {
43
- const { slot: blockSlot, feeRecipient: requestedFeeRecipient, parentBlock, proposerIndex, proposerPubKey, commonBlockBodyPromise, } = blockAttr;
58
+ const { slot: blockSlot, feeRecipient: requestedFeeRecipient, parentBlock, proposerIndex, proposerPubKey, commonBlockBodyPromise, builderBid, } = blockAttr;
44
59
  let executionPayloadValue;
45
60
  let blockBody;
46
61
  const parentBlockRoot = fromHex(parentBlock.blockRoot);
@@ -58,7 +73,33 @@ export async function produceBlockBody(blockType, currentState, blockAttr) {
58
73
  slot: blockSlot,
59
74
  };
60
75
  this.logger.verbose("Producing beacon block body", logMeta);
61
- if (isForkPostGloas(fork)) {
76
+ if (builderBid !== undefined) {
77
+ if (!isStatePostGloas(currentState)) {
78
+ throw new Error("Expected Gloas state for builder bid block production");
79
+ }
80
+ const isExtendingPayload = byteArrayEquals(builderBid.message.parentBlockHash, currentState.latestExecutionPayloadBid.blockHash);
81
+ const parentExecutionRequests = isExtendingPayload
82
+ ? await this.getParentExecutionRequests(parentBlock.slot, parentBlock.blockRoot)
83
+ : ssz.electra.ExecutionRequests.defaultValue();
84
+ executionPayloadValue = BigInt(builderBid.message.value) * GWEI_TO_WEI;
85
+ const commonBlockBody = await commonBlockBodyPromise;
86
+ const gloasBody = Object.assign({}, commonBlockBody);
87
+ gloasBody.signedExecutionPayloadBid = builderBid;
88
+ gloasBody.payloadAttestations = this.payloadAttestationPool.getPayloadAttestationsForBlock(parentBlock.blockRoot, blockSlot - 1);
89
+ gloasBody.parentExecutionRequests = parentExecutionRequests;
90
+ gloasBody.voluntaryExits = maybeFilterInvalidatedVoluntaryExits(commonBlockBody, isExtendingPayload, () => currentState.withParentPayloadApplied(parentExecutionRequests));
91
+ blockBody = gloasBody;
92
+ this.logger.verbose("Produced block with builder bid", {
93
+ slot: blockSlot,
94
+ builderIndex: builderBid.message.builderIndex,
95
+ bidValue: builderBid.message.value,
96
+ parentBlockHash: toRootHex(builderBid.message.parentBlockHash),
97
+ parentBlockRoot: toRootHex(builderBid.message.parentBlockRoot),
98
+ blockHash: toRootHex(builderBid.message.blockHash),
99
+ isExtendingPayload,
100
+ });
101
+ }
102
+ else if (isForkPostGloas(fork)) {
62
103
  if (!isStatePostGloas(currentState)) {
63
104
  throw new Error("Expected Gloas state for Gloas block production");
64
105
  }
@@ -67,20 +108,21 @@ export async function produceBlockBody(blockType, currentState, blockAttr) {
67
108
  // this into a completely separate function and have pre/post gloas more separated
68
109
  const safeBlockHash = getSafeExecutionBlockHash(this.forkChoice);
69
110
  const finalizedBlockHash = this.forkChoice.getFinalizedBlock().executionPayloadBlockHash ?? ZERO_HASH_HEX;
111
+ // TODO GLOAS: post-Gloas, proposer feeRecipient is also carried (signed) in
112
+ // ProposerPreferencesPool. Consider using this unified cache instead
113
+ // see https://github.com/ChainSafe/lodestar/issues/9379
70
114
  const feeRecipient = requestedFeeRecipient ?? this.beaconProposerCache.getOrDefault(proposerIndex);
71
115
  const endExecutionPayload = this.metrics?.executionBlockProductionTimeSteps.startTimer();
72
- this.logger.verbose("Preparing execution payload from engine", {
73
- slot: blockSlot,
74
- parentBlockRoot: toRootHex(parentBlockRoot),
75
- feeRecipient,
76
- });
77
116
  // Get execution payload from EL
78
117
  let parentBlockHash;
79
118
  let parentExecutionRequests;
80
119
  // Apply parent payload once here as it's reused by EL prep and voluntary exit filtering below
81
120
  let stateAfterParentPayload = currentState;
82
- const isExtendingPayload = this.forkChoice.shouldExtendPayload(toRootHex(parentBlockRoot));
83
- if (isExtendingPayload) {
121
+ // Spec: should_build_on_full(store, head). `parentBlock` is the proposer's head
122
+ // (set by chain.getProposerHead(slot)). Returns false when the PTC majority
123
+ // signalled the blob data is not available, forcing a build on EMPTY (reorg).
124
+ const isBuildingOnFull = this.forkChoice.shouldBuildOnFull(parentBlock);
125
+ if (isBuildingOnFull) {
84
126
  parentBlockHash = currentState.latestExecutionPayloadBid.blockHash;
85
127
  parentExecutionRequests = await this.getParentExecutionRequests(parentBlock.slot, parentBlock.blockRoot);
86
128
  stateAfterParentPayload = currentState.withParentPayloadApplied(parentExecutionRequests);
@@ -92,6 +134,15 @@ export async function produceBlockBody(blockType, currentState, blockAttr) {
92
134
  const prepareRes = await prepareExecutionPayload(this, this.logger, fork, parentBlockRoot, parentBlockHash, safeBlockHash, finalizedBlockHash ?? ZERO_HASH_HEX, stateAfterParentPayload, feeRecipient);
93
135
  const { prepType, payloadId } = prepareRes;
94
136
  Object.assign(logMeta, { executionPayloadPrepType: prepType });
137
+ this.logger.verbose("Prepared execution payload from engine", {
138
+ slot: blockSlot,
139
+ parentBlockRoot: toRootHex(parentBlockRoot),
140
+ parentBlockHash: toRootHex(parentBlockHash),
141
+ feeRecipient,
142
+ prepType,
143
+ payloadId,
144
+ isBuildingOnFull,
145
+ });
95
146
  if (prepType !== PayloadPreparationType.Cached) {
96
147
  await sleep(PAYLOAD_GENERATION_TIME_MS);
97
148
  }
@@ -135,12 +186,7 @@ export async function produceBlockBody(blockType, currentState, blockAttr) {
135
186
  gloasBody.signedExecutionPayloadBid = signedBid;
136
187
  gloasBody.payloadAttestations = this.payloadAttestationPool.getPayloadAttestationsForBlock(parentBlock.blockRoot, blockSlot - 1);
137
188
  gloasBody.parentExecutionRequests = parentExecutionRequests;
138
- // Drop voluntary exits that parent_execution_requests have invalidated (e.g. a withdrawal
139
- // request initiating an exit on the same validator). Op pool selected against the unapplied
140
- // state, so re-validate against the post-apply state to avoid producing an invalid block.
141
- if (isExtendingPayload && commonBlockBody.voluntaryExits.length > 0) {
142
- gloasBody.voluntaryExits = commonBlockBody.voluntaryExits.filter((signedVoluntaryExit) => stateAfterParentPayload.isValidVoluntaryExit(signedVoluntaryExit, false));
143
- }
189
+ gloasBody.voluntaryExits = maybeFilterInvalidatedVoluntaryExits(commonBlockBody, isBuildingOnFull, () => stateAfterParentPayload);
144
190
  blockBody = gloasBody;
145
191
  // Store execution payload data required to construct execution payload envelope later
146
192
  const gloasResult = produceResult;
@@ -159,6 +205,7 @@ export async function produceBlockBody(blockType, currentState, blockAttr) {
159
205
  fetchedTime,
160
206
  executionBlockHash: toRootHex(executionPayload.blockHash),
161
207
  blobs: blobsBundle.commitments.length,
208
+ gasLimit: executionPayload.gasLimit,
162
209
  });
163
210
  Object.assign(logMeta, {
164
211
  transactions: executionPayload.transactions.length,
@@ -535,10 +582,52 @@ function preparePayloadAttributes(fork, chain, { prepareState, prepareSlot, pare
535
582
  payloadAttributes.parentBeaconBlockRoot = parentBlockRoot;
536
583
  }
537
584
  if (ForkSeq[fork] >= ForkSeq.gloas) {
585
+ if (!isStatePostGloas(prepareState)) {
586
+ throw new Error("Expected Gloas state for Gloas payload attributes");
587
+ }
538
588
  payloadAttributes.slotNumber = prepareSlot;
589
+ payloadAttributes.targetGasLimit = getProposerTargetGasLimit(chain, prepareSlot, parentBlockRoot, parentBlockHash);
539
590
  }
540
591
  return payloadAttributes;
541
592
  }
593
+ /**
594
+ * Resolve the proposer's preferred (target) gas limit for the Gloas `PayloadAttributesV4`
595
+ * `targetGasLimit` field (consensus-specs#5235, execution-apis#796).
596
+ *
597
+ * Sourced from the `SignedProposerPreferences` the proposer's VC submitted to the pool
598
+ * (same `(slot, dependent_root)` lookup as gossip bid validation). When no matching
599
+ * preferences are pooled, target the parent payload's gas limit so the gas limit stays
600
+ * unchanged (`is_gas_limit_target_compatible` then requires `gas_limit == parent_gas_limit`).
601
+ *
602
+ * The parent payload's gas_limit is read from fork choice — the variant matching
603
+ * `(parentBlockRoot, parentBlockHash)` carries the correct value for both FULL parents
604
+ * (FULL.executionPayloadGasLimit = delivered payload's gas_limit) and EMPTY parents
605
+ * (EMPTY.executionPayloadGasLimit = inherited grandparent's gas_limit).
606
+ */
607
+ function getProposerTargetGasLimit(chain, prepareSlot, parentBlockRoot, parentBlockHash) {
608
+ const parentBlockRootHex = toRootHex(parentBlockRoot);
609
+ const parentBlock = chain.forkChoice.getBlockHexDefaultStatus(parentBlockRootHex);
610
+ const dependentRootHex = (() => {
611
+ if (parentBlock === null) {
612
+ return null;
613
+ }
614
+ try {
615
+ return getShufflingDependentRoot(chain.forkChoice, computeEpochAtSlot(prepareSlot), computeEpochAtSlot(parentBlock.slot), parentBlock);
616
+ }
617
+ catch {
618
+ return null;
619
+ }
620
+ })();
621
+ const pref = dependentRootHex !== null ? chain.proposerPreferencesPool.get(prepareSlot, dependentRootHex) : null;
622
+ if (pref !== null) {
623
+ return pref.message.targetGasLimit;
624
+ }
625
+ const parentPayloadVariant = chain.forkChoice.getBlockHexAndBlockHash(parentBlockRootHex, toRootHex(parentBlockHash));
626
+ if (parentPayloadVariant === null || parentPayloadVariant.executionPayloadBlockHash === null) {
627
+ throw new Error(`Cannot resolve parent payload gas_limit for proposer targetGasLimit fallback parentBlockRoot=${parentBlockRootHex} parentBlockHash=${toRootHex(parentBlockHash)}`);
628
+ }
629
+ return parentPayloadVariant.executionPayloadGasLimit;
630
+ }
542
631
  export async function produceCommonBlockBody(blockType, currentState, { randaoReveal, graffiti, slot, parentBlock }) {
543
632
  const stepsMetrics = blockType === BlockType.Full
544
633
  ? this.metrics?.executionBlockProductionTimeSteps