@lodestar/state-transition 1.41.0 → 1.42.0-dev.2f0347050b

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 (69) hide show
  1. package/lib/block/isValidIndexedAttestation.d.ts.map +1 -1
  2. package/lib/block/isValidIndexedAttestation.js +2 -3
  3. package/lib/block/isValidIndexedAttestation.js.map +1 -1
  4. package/lib/block/processAttestationsAltair.d.ts +2 -1
  5. package/lib/block/processAttestationsAltair.d.ts.map +1 -1
  6. package/lib/block/processAttestationsAltair.js +5 -3
  7. package/lib/block/processAttestationsAltair.js.map +1 -1
  8. package/lib/block/processExecutionPayloadEnvelope.d.ts +3 -1
  9. package/lib/block/processExecutionPayloadEnvelope.d.ts.map +1 -1
  10. package/lib/block/processExecutionPayloadEnvelope.js +11 -28
  11. package/lib/block/processExecutionPayloadEnvelope.js.map +1 -1
  12. package/lib/block/processVoluntaryExit.d.ts.map +1 -1
  13. package/lib/block/processVoluntaryExit.js +49 -47
  14. package/lib/block/processVoluntaryExit.js.map +1 -1
  15. package/lib/signatureSets/executionPayloadEnvelope.d.ts +5 -1
  16. package/lib/signatureSets/executionPayloadEnvelope.d.ts.map +1 -1
  17. package/lib/signatureSets/executionPayloadEnvelope.js +10 -1
  18. package/lib/signatureSets/executionPayloadEnvelope.js.map +1 -1
  19. package/lib/signatureSets/index.d.ts +2 -1
  20. package/lib/signatureSets/index.d.ts.map +1 -1
  21. package/lib/signatureSets/index.js +2 -2
  22. package/lib/signatureSets/index.js.map +1 -1
  23. package/lib/signatureSets/voluntaryExits.d.ts +7 -3
  24. package/lib/signatureSets/voluntaryExits.d.ts.map +1 -1
  25. package/lib/signatureSets/voluntaryExits.js +30 -9
  26. package/lib/signatureSets/voluntaryExits.js.map +1 -1
  27. package/lib/slot/upgradeStateToAltair.d.ts.map +1 -1
  28. package/lib/slot/upgradeStateToAltair.js +2 -1
  29. package/lib/slot/upgradeStateToAltair.js.map +1 -1
  30. package/lib/stateView/beaconStateView.d.ts +8 -10
  31. package/lib/stateView/beaconStateView.d.ts.map +1 -1
  32. package/lib/stateView/beaconStateView.js +11 -34
  33. package/lib/stateView/beaconStateView.js.map +1 -1
  34. package/lib/stateView/index.d.ts +1 -0
  35. package/lib/stateView/index.d.ts.map +1 -1
  36. package/lib/stateView/index.js +1 -0
  37. package/lib/stateView/index.js.map +1 -1
  38. package/lib/stateView/interface.d.ts +14 -9
  39. package/lib/stateView/interface.d.ts.map +1 -1
  40. package/lib/stateView/stateViewFactory.d.ts +40 -0
  41. package/lib/stateView/stateViewFactory.d.ts.map +1 -0
  42. package/lib/stateView/stateViewFactory.js +46 -0
  43. package/lib/stateView/stateViewFactory.js.map +1 -0
  44. package/lib/util/execution.js +1 -1
  45. package/lib/util/execution.js.map +1 -1
  46. package/lib/util/rootCache.d.ts +2 -2
  47. package/lib/util/rootCache.d.ts.map +1 -1
  48. package/lib/util/rootCache.js +2 -3
  49. package/lib/util/rootCache.js.map +1 -1
  50. package/lib/util/shuffling.d.ts +2 -1
  51. package/lib/util/shuffling.d.ts.map +1 -1
  52. package/lib/util/shuffling.js +2 -2
  53. package/lib/util/shuffling.js.map +1 -1
  54. package/package.json +7 -7
  55. package/src/block/isValidIndexedAttestation.ts +2 -3
  56. package/src/block/processAttestationsAltair.ts +7 -4
  57. package/src/block/processExecutionPayloadEnvelope.ts +18 -35
  58. package/src/block/processVoluntaryExit.ts +77 -54
  59. package/src/signatureSets/executionPayloadEnvelope.ts +26 -2
  60. package/src/signatureSets/index.ts +3 -1
  61. package/src/signatureSets/voluntaryExits.ts +51 -9
  62. package/src/slot/upgradeStateToAltair.ts +2 -1
  63. package/src/stateView/beaconStateView.ts +27 -50
  64. package/src/stateView/index.ts +1 -0
  65. package/src/stateView/interface.ts +15 -6
  66. package/src/stateView/stateViewFactory.ts +78 -0
  67. package/src/util/execution.ts +1 -1
  68. package/src/util/rootCache.ts +4 -5
  69. package/src/util/shuffling.ts +5 -4
@@ -1 +1 @@
1
- {"version":3,"file":"isValidIndexedAttestation.d.ts","sourceRoot":"","sources":["../../src/block/isValidIndexedAttestation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAC,kBAAkB,EAAE,wBAAwB,EAAE,IAAI,EAAC,MAAM,iBAAiB,CAAC;AACnF,OAAO,EAAC,WAAW,EAAC,MAAM,yBAAyB,CAAC;AAIpD;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,IAAI,EACf,aAAa,EAAE,MAAM,EACrB,kBAAkB,EAAE,kBAAkB,EACtC,eAAe,EAAE,OAAO,GACvB,OAAO,CAST;AAED,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,IAAI,EACf,aAAa,EAAE,MAAM,EACrB,kBAAkB,EAAE,wBAAwB,EAC5C,eAAe,EAAE,OAAO,GACvB,OAAO,CAYT;AAED;;GAEG;AACH,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,IAAI,EACf,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,EAAE,GAChB,OAAO,CA0BT"}
1
+ {"version":3,"file":"isValidIndexedAttestation.d.ts","sourceRoot":"","sources":["../../src/block/isValidIndexedAttestation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAC,kBAAkB,EAAE,wBAAwB,EAAE,IAAI,EAAC,MAAM,iBAAiB,CAAC;AACnF,OAAO,EAAC,WAAW,EAAC,MAAM,yBAAyB,CAAC;AAIpD;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,IAAI,EACf,aAAa,EAAE,MAAM,EACrB,kBAAkB,EAAE,kBAAkB,EACtC,eAAe,EAAE,OAAO,GACvB,OAAO,CAST;AAED,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,IAAI,EACf,aAAa,EAAE,MAAM,EACrB,kBAAkB,EAAE,wBAAwB,EAC5C,eAAe,EAAE,OAAO,GACvB,OAAO,CAYT;AAED;;GAEG;AACH,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,IAAI,EACf,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,EAAE,GAChB,OAAO,CAyBT"}
@@ -42,9 +42,8 @@ export function isValidIndexedAttestationIndices(config, stateSlot, validatorsLe
42
42
  return false;
43
43
  prev = index;
44
44
  }
45
- // check if indices are out of bounds, by checking the highest index (since it is sorted)
46
- const lastIndex = indices.at(-1);
47
- if (lastIndex && lastIndex >= validatorsLen) {
45
+ // check if indices are out of bounds, `prev` is the highest index since indices are sorted
46
+ if (prev >= validatorsLen) {
48
47
  return false;
49
48
  }
50
49
  return true;
@@ -1 +1 @@
1
- {"version":3,"file":"isValidIndexedAttestation.js","sourceRoot":"","sources":["../../src/block/isValidIndexedAttestation.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAE,uBAAuB,EAAE,4BAA4B,EAAC,MAAM,kBAAkB,CAAC;AAGhG,OAAO,EAAC,uCAAuC,EAAE,iCAAiC,EAAC,MAAM,2BAA2B,CAAC;AACrH,OAAO,EAAC,kBAAkB,EAAC,MAAM,kBAAkB,CAAC;AAEpD;;GAEG;AACH,MAAM,UAAU,yBAAyB,CACvC,MAAoB,EACpB,WAAwB,EACxB,SAAe,EACf,aAAqB,EACrB,kBAAsC,EACtC,eAAwB,EACf;IACT,IAAI,CAAC,gCAAgC,CAAC,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,kBAAkB,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC7G,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,kBAAkB,CAAC,iCAAiC,CAAC,MAAM,EAAE,SAAS,EAAE,kBAAkB,CAAC,EAAE,WAAW,CAAC,CAAC;IACnH,CAAC;IACD,OAAO,IAAI,CAAC;AAAA,CACb;AAED,MAAM,UAAU,+BAA+B,CAC7C,MAAoB,EACpB,WAAwB,EACxB,SAAe,EACf,aAAqB,EACrB,kBAA4C,EAC5C,eAAwB,EACf;IACT,IAAI,CAAC,gCAAgC,CAAC,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,kBAAkB,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC7G,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,kBAAkB,CACvB,uCAAuC,CAAC,MAAM,EAAE,SAAS,EAAE,kBAAkB,CAAC,EAC9E,WAAW,CACZ,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AAAA,CACb;AAED;;GAEG;AACH,MAAM,UAAU,gCAAgC,CAC9C,MAAoB,EACpB,SAAe,EACf,aAAqB,EACrB,OAAiB,EACR;IACT,+BAA+B;IAC/B,MAAM,UAAU,GACd,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,OAAO;QAC7C,CAAC,CAAC,4BAA4B,GAAG,uBAAuB;QACxD,CAAC,CAAC,4BAA4B,CAAC;IACnC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,IAAI,UAAU,CAAC,EAAE,CAAC;QAC1D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,wCAAwC;IACxC,mDAAmD;IACnD,oFAAoF;IACpF,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC;IACd,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,IAAI,IAAI;YAAE,OAAO,KAAK,CAAC;QAChC,IAAI,GAAG,KAAK,CAAC;IACf,CAAC;IAED,yFAAyF;IACzF,MAAM,SAAS,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,SAAS,IAAI,SAAS,IAAI,aAAa,EAAE,CAAC;QAC5C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,CAAC;AAAA,CACb"}
1
+ {"version":3,"file":"isValidIndexedAttestation.js","sourceRoot":"","sources":["../../src/block/isValidIndexedAttestation.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAE,uBAAuB,EAAE,4BAA4B,EAAC,MAAM,kBAAkB,CAAC;AAGhG,OAAO,EAAC,uCAAuC,EAAE,iCAAiC,EAAC,MAAM,2BAA2B,CAAC;AACrH,OAAO,EAAC,kBAAkB,EAAC,MAAM,kBAAkB,CAAC;AAEpD;;GAEG;AACH,MAAM,UAAU,yBAAyB,CACvC,MAAoB,EACpB,WAAwB,EACxB,SAAe,EACf,aAAqB,EACrB,kBAAsC,EACtC,eAAwB,EACf;IACT,IAAI,CAAC,gCAAgC,CAAC,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,kBAAkB,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC7G,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,kBAAkB,CAAC,iCAAiC,CAAC,MAAM,EAAE,SAAS,EAAE,kBAAkB,CAAC,EAAE,WAAW,CAAC,CAAC;IACnH,CAAC;IACD,OAAO,IAAI,CAAC;AAAA,CACb;AAED,MAAM,UAAU,+BAA+B,CAC7C,MAAoB,EACpB,WAAwB,EACxB,SAAe,EACf,aAAqB,EACrB,kBAA4C,EAC5C,eAAwB,EACf;IACT,IAAI,CAAC,gCAAgC,CAAC,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,kBAAkB,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC7G,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,kBAAkB,CACvB,uCAAuC,CAAC,MAAM,EAAE,SAAS,EAAE,kBAAkB,CAAC,EAC9E,WAAW,CACZ,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AAAA,CACb;AAED;;GAEG;AACH,MAAM,UAAU,gCAAgC,CAC9C,MAAoB,EACpB,SAAe,EACf,aAAqB,EACrB,OAAiB,EACR;IACT,+BAA+B;IAC/B,MAAM,UAAU,GACd,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,OAAO;QAC7C,CAAC,CAAC,4BAA4B,GAAG,uBAAuB;QACxD,CAAC,CAAC,4BAA4B,CAAC;IACnC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,IAAI,UAAU,CAAC,EAAE,CAAC;QAC1D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,wCAAwC;IACxC,mDAAmD;IACnD,oFAAoF;IACpF,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC;IACd,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,IAAI,IAAI;YAAE,OAAO,KAAK,CAAC;QAChC,IAAI,GAAG,KAAK,CAAC;IACf,CAAC;IAED,2FAA2F;IAC3F,IAAI,IAAI,IAAI,aAAa,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,CAAC;AAAA,CACb"}
@@ -1,3 +1,4 @@
1
+ import { BitArray } from "@chainsafe/ssz";
1
2
  import { ForkSeq } from "@lodestar/params";
2
3
  import { Attestation, Epoch, phase0 } from "@lodestar/types";
3
4
  import { BeaconStateTransitionMetrics } from "../metrics.js";
@@ -7,6 +8,6 @@ export declare function processAttestationsAltair(fork: ForkSeq, state: CachedBe
7
8
  /**
8
9
  * https://github.com/ethereum/consensus-specs/blob/v1.1.10/specs/altair/beacon-chain.md#get_attestation_participation_flag_indices
9
10
  */
10
- export declare function getAttestationParticipationStatus(fork: ForkSeq, data: phase0.AttestationData, inclusionDelay: number, currentEpoch: Epoch, rootCache: RootCache, executionPayloadAvailability: boolean[] | null): number;
11
+ export declare function getAttestationParticipationStatus(fork: ForkSeq, data: phase0.AttestationData, inclusionDelay: number, currentEpoch: Epoch, rootCache: RootCache, executionPayloadAvailability: BitArray | null): number;
11
12
  export declare function checkpointValueEquals(cp1: phase0.Checkpoint, cp2: phase0.Checkpoint): boolean;
12
13
  //# sourceMappingURL=processAttestationsAltair.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"processAttestationsAltair.d.ts","sourceRoot":"","sources":["../../src/block/processAttestationsAltair.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,OAAO,EAYR,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAC,WAAW,EAAE,KAAK,EAAE,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAE3D,OAAO,EAAC,4BAA4B,EAAC,MAAM,eAAe,CAAC;AAE3D,OAAO,EAAC,uBAAuB,EAAE,sBAAsB,EAAC,MAAM,aAAa,CAAC;AAG5E,OAAO,EAAC,SAAS,EAAC,MAAM,sBAAsB,CAAC;AAW/C,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,uBAAuB,GAAG,sBAAsB,EACvD,YAAY,EAAE,WAAW,EAAE,EAC3B,eAAe,UAAO,EACtB,OAAO,CAAC,EAAE,4BAA4B,GAAG,IAAI,GAC5C,IAAI,CAiIN;AAED;;GAEG;AACH,wBAAgB,iCAAiC,CAC/C,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,MAAM,CAAC,eAAe,EAC5B,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,KAAK,EACnB,SAAS,EAAE,SAAS,EACpB,4BAA4B,EAAE,OAAO,EAAE,GAAG,IAAI,GAC7C,MAAM,CAuDR;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,OAAO,CAE7F"}
1
+ {"version":3,"file":"processAttestationsAltair.d.ts","sourceRoot":"","sources":["../../src/block/processAttestationsAltair.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAEL,OAAO,EAYR,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAC,WAAW,EAAE,KAAK,EAAE,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAE3D,OAAO,EAAC,4BAA4B,EAAC,MAAM,eAAe,CAAC;AAG3D,OAAO,EAAC,uBAAuB,EAAE,sBAAsB,EAAC,MAAM,aAAa,CAAC;AAG5E,OAAO,EAAC,SAAS,EAAC,MAAM,sBAAsB,CAAC;AAW/C,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,uBAAuB,GAAG,sBAAsB,EACvD,YAAY,EAAE,WAAW,EAAE,EAC3B,eAAe,UAAO,EACtB,OAAO,CAAC,EAAE,4BAA4B,GAAG,IAAI,GAC5C,IAAI,CAiIN;AAED;;GAEG;AACH,wBAAgB,iCAAiC,CAC/C,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,MAAM,CAAC,eAAe,EAC5B,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,KAAK,EACnB,SAAS,EAAE,SAAS,EACpB,4BAA4B,EAAE,QAAQ,GAAG,IAAI,GAC5C,MAAM,CAwDR;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,OAAO,CAE7F"}
@@ -1,6 +1,7 @@
1
1
  import { EFFECTIVE_BALANCE_INCREMENT, ForkSeq, MIN_ATTESTATION_INCLUSION_DELAY, PROPOSER_WEIGHT, SLOTS_PER_EPOCH, SLOTS_PER_HISTORICAL_ROOT, TIMELY_HEAD_FLAG_INDEX, TIMELY_HEAD_WEIGHT, TIMELY_SOURCE_FLAG_INDEX, TIMELY_SOURCE_WEIGHT, TIMELY_TARGET_FLAG_INDEX, TIMELY_TARGET_WEIGHT, WEIGHT_DENOMINATOR, } from "@lodestar/params";
2
2
  import { byteArrayEquals, intSqrt } from "@lodestar/utils";
3
3
  import { getAttestationWithIndicesSignatureSet } from "../signatureSets/indexedAttestation.js";
4
+ import { BeaconStateView } from "../stateView/beaconStateView.js";
4
5
  import { isAttestationSameSlot, isAttestationSameSlotRootCache } from "../util/gloas.js";
5
6
  import { increaseBalance, verifySignatureSet } from "../util/index.js";
6
7
  import { RootCache } from "../util/rootCache.js";
@@ -15,7 +16,7 @@ export function processAttestationsAltair(fork, state, attestations, verifySigna
15
16
  const { epochCtx } = state;
16
17
  const { effectiveBalanceIncrements } = epochCtx;
17
18
  const stateSlot = state.slot;
18
- const rootCache = new RootCache(state);
19
+ const rootCache = new RootCache(new BeaconStateView(state));
19
20
  const currentEpoch = epochCtx.epoch;
20
21
  // Process all attestations first and then increase the balance of the proposer once
21
22
  let proposerReward = 0;
@@ -40,7 +41,7 @@ export function processAttestationsAltair(fork, state, attestations, verifySigna
40
41
  const epochParticipation = inCurrentEpoch ? state.currentEpochParticipation : state.previousEpochParticipation;
41
42
  // Count how much additional weight added to current or previous epoch's builder pending payment (in ETH increment)
42
43
  let paymentWeightToAdd = 0;
43
- const flagsAttestation = getAttestationParticipationStatus(fork, data, stateSlot - data.slot, epochCtx.epoch, rootCache, fork >= ForkSeq.gloas ? state.executionPayloadAvailability.toBoolArray() : null);
44
+ const flagsAttestation = getAttestationParticipationStatus(fork, data, stateSlot - data.slot, epochCtx.epoch, rootCache, fork >= ForkSeq.gloas ? state.executionPayloadAvailability : null);
44
45
  // For each participant, update their participation
45
46
  // In epoch processing, this participation info is used to calculate balance updates
46
47
  let totalBalanceIncrementsWithWeight = 0;
@@ -149,7 +150,8 @@ export function getAttestationParticipationStatus(fork, data, inclusionDelay, cu
149
150
  if (data.index !== 0 && data.index !== 1) {
150
151
  throw new Error(`data index must be 0 or 1 index=${data.index}`);
151
152
  }
152
- isMatchingPayload = Boolean(data.index) === executionPayloadAvailability[data.slot % SLOTS_PER_HISTORICAL_ROOT];
153
+ isMatchingPayload =
154
+ Boolean(data.index) === executionPayloadAvailability.get(data.slot % SLOTS_PER_HISTORICAL_ROOT);
153
155
  }
154
156
  isMatchingHead = isMatchingHead && isMatchingPayload;
155
157
  }
@@ -1 +1 @@
1
- {"version":3,"file":"processAttestationsAltair.js","sourceRoot":"","sources":["../../src/block/processAttestationsAltair.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"processAttestationsAltair.js","sourceRoot":"","sources":["../../src/block/processAttestationsAltair.ts"],"names":[],"mappings":"AACA,OAAO,EACL,2BAA2B,EAC3B,OAAO,EACP,+BAA+B,EAC/B,eAAe,EACf,eAAe,EACf,yBAAyB,EACzB,sBAAsB,EACtB,kBAAkB,EAClB,wBAAwB,EACxB,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAC,eAAe,EAAE,OAAO,EAAC,MAAM,iBAAiB,CAAC;AAEzD,OAAO,EAAC,qCAAqC,EAAC,MAAM,wCAAwC,CAAC;AAC7F,OAAO,EAAC,eAAe,EAAC,MAAM,iCAAiC,CAAC;AAEhE,OAAO,EAAC,qBAAqB,EAAE,8BAA8B,EAAC,MAAM,kBAAkB,CAAC;AACvF,OAAO,EAAC,eAAe,EAAE,kBAAkB,EAAC,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAC,SAAS,EAAC,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAC,eAAe,EAAE,cAAc,EAAE,mBAAmB,EAAC,MAAM,+BAA+B,CAAC;AAEnG,MAAM,yBAAyB,GAAG,CAAC,CAAC,kBAAkB,GAAG,eAAe,CAAC,GAAG,kBAAkB,CAAC,GAAG,eAAe,CAAC;AAElH,iHAAiH;AACjH,MAAM,aAAa,GAAG,CAAC,IAAI,wBAAwB,CAAC;AACpD,MAAM,aAAa,GAAG,CAAC,IAAI,wBAAwB,CAAC;AACpD,MAAM,WAAW,GAAG,CAAC,IAAI,sBAAsB,CAAC;AAChD,MAAM,oBAAoB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;AAEtD,MAAM,UAAU,yBAAyB,CACvC,IAAa,EACb,KAAuD,EACvD,YAA2B,EAC3B,eAAe,GAAG,IAAI,EACtB,OAA6C,EACvC;IACN,MAAM,EAAC,QAAQ,EAAC,GAAG,KAAK,CAAC;IACzB,MAAM,EAAC,0BAA0B,EAAC,GAAG,QAAQ,CAAC;IAC9C,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;IAC7B,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5D,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC;IAEpC,oFAAoF;IACpF,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,IAAI,gCAAgC,GAAG,CAAC,CAAC;IAEzC,MAAM,gBAAgB,GAAwB,IAAI,GAAG,EAAE,CAAC;IAExD,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC;QAE9B,mBAAmB,CAAC,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;QAE9C,6EAA6E;QAC7E,MAAM,gBAAgB,GAAG,QAAQ,CAAC,mBAAmB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAEzE,mGAAmG;QACnG,yGAAyG;QACzG,4CAA4C;QAC5C,IAAI,eAAe,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,qCAAqC,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC;YAC9G,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC5D,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,YAAY,CAAC;QAC1D,MAAM,kBAAkB,GAAG,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,0BAA0B,CAAC;QAC/G,mHAAmH;QACnH,IAAI,kBAAkB,GAAG,CAAC,CAAC;QAE3B,MAAM,gBAAgB,GAAG,iCAAiC,CACxD,IAAI,EACJ,IAAI,EACJ,SAAS,GAAG,IAAI,CAAC,IAAI,EACrB,QAAQ,CAAC,KAAK,EACd,SAAS,EACT,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAE,KAAgC,CAAC,4BAA4B,CAAC,CAAC,CAAC,IAAI,CAC9F,CAAC;QAEF,mDAAmD;QACnD,oFAAoF;QACpF,IAAI,gCAAgC,GAAG,CAAC,CAAC;QACzC,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;QACpC,KAAK,MAAM,cAAc,IAAI,gBAAgB,EAAE,CAAC;YAC9C,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YAErD,kEAAkE;YAClE,mEAAmE;YACnE,4DAA4D;YAE5D,4FAA4F;YAC5F,kBAAkB,CAAC,GAAG,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;YACzD,kDAAkD;YAElD,0EAA0E;YAC1E,MAAM,WAAW,GAAG,CAAC,KAAK,GAAG,gBAAgB,CAAC;YAC9C,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;gBACtB,gBAAgB,EAAE,CAAC;gBACnB,gCAAgC,IAAI,0BAA0B,CAAC,cAAc,CAAC,CAAC;YACjF,CAAC;YAED,QAAQ;YACR,gHAAgH;YAChH,sDAAsD;YACtD,IAAI,WAAW,GAAG,CAAC,CAAC;YACpB,IAAI,CAAC,WAAW,GAAG,aAAa,CAAC,KAAK,aAAa;gBAAE,WAAW,IAAI,oBAAoB,CAAC;YACzF,IAAI,CAAC,WAAW,GAAG,aAAa,CAAC,KAAK,aAAa;gBAAE,WAAW,IAAI,oBAAoB,CAAC;YACzF,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,KAAK,WAAW;gBAAE,WAAW,IAAI,kBAAkB,CAAC;YAEnF,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;gBACpB,gCAAgC,IAAI,0BAA0B,CAAC,cAAc,CAAC,GAAG,WAAW,CAAC;YAC/F,CAAC;YAED,4DAA4D;YAC5D,sGAAsG;YACtG,IAAI,CAAC,WAAW,GAAG,aAAa,CAAC,KAAK,aAAa,EAAE,CAAC;gBACpD,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;gBACzD,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;oBACvB,IAAI,cAAc,EAAE,CAAC;wBACnB,QAAQ,CAAC,uCAAuC,IAAI,0BAA0B,CAAC,cAAc,CAAC,CAAC;oBACjG,CAAC;yBAAM,CAAC;wBACN,QAAQ,CAAC,wCAAwC,IAAI,0BAA0B,CAAC,cAAc,CAAC,CAAC;oBAClG,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IAAI,IAAI,IAAI,OAAO,CAAC,KAAK,IAAI,WAAW,KAAK,CAAC,IAAI,qBAAqB,CAAC,KAA+B,EAAE,IAAI,CAAC,EAAE,CAAC;gBAC/G,kBAAkB,IAAI,0BAA0B,CAAC,cAAc,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;QAED,wEAAwE;QACxE,MAAM,eAAe,GAAG,gCAAgC,CAAC;QACzD,MAAM,uBAAuB,GAAG,eAAe,GAAG,KAAK,CAAC,QAAQ,CAAC,sBAAsB,CAAC;QACxF,cAAc,IAAI,IAAI,CAAC,KAAK,CAAC,uBAAuB,GAAG,yBAAyB,CAAC,CAAC;QAElF,IAAI,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAC1B,MAAM,0BAA0B,GAAG,cAAc;gBAC/C,CAAC,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;gBACjD,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;YAEhC,MAAM,cAAc,GAClB,gBAAgB,CAAC,GAAG,CAAC,0BAA0B,CAAC;gBAC/C,KAAgC,CAAC,sBAAsB,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,MAAM,CAAC;YAClG,MAAM,aAAa,GAAG,cAAc,GAAG,kBAAkB,GAAG,2BAA2B,CAAC;YACxF,gBAAgB,CAAC,GAAG,CAAC,0BAA0B,EAAE,aAAa,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,gBAAgB,EAAE,CAAC;QAC/C,MAAM,OAAO,GAAI,KAAgC,CAAC,sBAAsB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACpF,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,OAAO,EAAE,wBAAwB,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACxD,OAAO,EAAE,wCAAwC,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IACxF,OAAO,EAAE,oBAAoB,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAEvD,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,cAAc,CAAC,CAAC;IAC/E,KAAK,CAAC,eAAe,CAAC,YAAY,GAAG,cAAc,CAAC;AAAA,CACrD;AAED;;GAEG;AACH,MAAM,UAAU,iCAAiC,CAC/C,IAAa,EACb,IAA4B,EAC5B,cAAsB,EACtB,YAAmB,EACnB,SAAoB,EACpB,4BAA6C,EACrC;IACR,MAAM,mBAAmB,GACvB,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC;IAEpH,sGAAsG;IACtG,sDAAsD;IACtD,EAAE;IACF,6EAA6E;IAC7E,4FAA4F;IAC5F,0FAA0F;IAC1F,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,IAAI,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IACjF,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CACb,kEAAkE,eAAe,CAC/E,IAAI,CAAC,MAAM,CACZ,wBAAwB,eAAe,CAAC,mBAAmB,CAAC,EAAE,CAChE,CAAC;IACJ,CAAC;IAED,MAAM,gBAAgB,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAEtG,gEAAgE;IAChE,+CAA+C;IAC/C,IAAI,cAAc,GAChB,gBAAgB,IAAI,eAAe,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAErG,IAAI,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,iBAAiB,GAAG,KAAK,CAAC;QAE9B,IAAI,8BAA8B,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC;YACpD,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;gBACrB,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;YACrE,CAAC;YACD,iBAAiB,GAAG,IAAI,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,IAAI,4BAA4B,KAAK,IAAI,EAAE,CAAC;gBAC1C,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;YACzE,CAAC;YAED,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;gBACzC,MAAM,IAAI,KAAK,CAAC,mCAAmC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YACnE,CAAC;YAED,iBAAiB;gBACf,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,4BAA4B,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC,CAAC;QACpG,CAAC;QAED,cAAc,GAAG,cAAc,IAAI,iBAAiB,CAAC;IACvD,CAAC;IAED,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,gBAAgB,IAAI,cAAc,IAAI,oBAAoB;QAAE,KAAK,IAAI,aAAa,CAAC;IACvF,IAAI,gBAAgB,IAAI,cAAc,CAAC,IAAI,EAAE,cAAc,CAAC;QAAE,KAAK,IAAI,aAAa,CAAC;IACrF,IAAI,cAAc,IAAI,cAAc,KAAK,+BAA+B;QAAE,KAAK,IAAI,WAAW,CAAC;IAE/F,OAAO,KAAK,CAAC;AAAA,CACd;AAED,MAAM,UAAU,qBAAqB,CAAC,GAAsB,EAAE,GAAsB,EAAW;IAC7F,OAAO,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;AAAA,CACvE"}
@@ -1,7 +1,9 @@
1
1
  import { gloas } from "@lodestar/types";
2
2
  import { CachedBeaconStateGloas } from "../types.js";
3
3
  export type ProcessExecutionPayloadEnvelopeOpts = {
4
+ verifySignature?: boolean;
5
+ verifyStateRoot?: boolean;
4
6
  dontTransferCache?: boolean;
5
7
  };
6
- export declare function processExecutionPayloadEnvelope(state: CachedBeaconStateGloas, signedEnvelope: gloas.SignedExecutionPayloadEnvelope, verify: boolean, opts?: ProcessExecutionPayloadEnvelopeOpts): CachedBeaconStateGloas;
8
+ export declare function processExecutionPayloadEnvelope(state: CachedBeaconStateGloas, signedEnvelope: gloas.SignedExecutionPayloadEnvelope, opts?: ProcessExecutionPayloadEnvelopeOpts): CachedBeaconStateGloas;
7
9
  //# sourceMappingURL=processExecutionPayloadEnvelope.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"processExecutionPayloadEnvelope.d.ts","sourceRoot":"","sources":["../../src/block/processExecutionPayloadEnvelope.ts"],"names":[],"mappings":"AAOA,OAAO,EAAC,KAAK,EAAM,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAC,sBAAsB,EAAC,MAAM,aAAa,CAAC;AAMnD,MAAM,MAAM,mCAAmC,GAAG;IAChD,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAKF,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,sBAAsB,EAC7B,cAAc,EAAE,KAAK,CAAC,8BAA8B,EACpD,MAAM,EAAE,OAAO,EACf,IAAI,CAAC,EAAE,mCAAmC,GACzC,sBAAsB,CAoDxB"}
1
+ {"version":3,"file":"processExecutionPayloadEnvelope.d.ts","sourceRoot":"","sources":["../../src/block/processExecutionPayloadEnvelope.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,EAAM,MAAM,iBAAiB,CAAC;AAI3C,OAAO,EAAC,sBAAsB,EAAC,MAAM,aAAa,CAAC;AAOnD,MAAM,MAAM,mCAAmC,GAAG;IAChD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAKF,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,sBAAsB,EAC7B,cAAc,EAAE,KAAK,CAAC,8BAA8B,EACpD,IAAI,CAAC,EAAE,mCAAmC,GACzC,sBAAsB,CAqDxB"}
@@ -1,19 +1,22 @@
1
- import { PublicKey, Signature, verify } from "@chainsafe/blst";
2
- import { BUILDER_INDEX_SELF_BUILD, DOMAIN_BEACON_BUILDER, SLOTS_PER_EPOCH, SLOTS_PER_HISTORICAL_ROOT, } from "@lodestar/params";
1
+ import { SLOTS_PER_EPOCH, SLOTS_PER_HISTORICAL_ROOT } from "@lodestar/params";
3
2
  import { ssz } from "@lodestar/types";
4
3
  import { byteArrayEquals, toHex, toRootHex } from "@lodestar/utils";
5
- import { computeSigningRoot, computeTimeAtSlot } from "../util/index.js";
4
+ import { getExecutionPayloadEnvelopeSignatureSet } from "../signatureSets/executionPayloadEnvelope.js";
5
+ import { BeaconStateView } from "../stateView/beaconStateView.js";
6
+ import { computeTimeAtSlot } from "../util/index.js";
7
+ import { verifySignatureSet } from "../util/signatureSets.js";
6
8
  import { processConsolidationRequest } from "./processConsolidationRequest.js";
7
9
  import { processDepositRequest } from "./processDepositRequest.js";
8
10
  import { processWithdrawalRequest } from "./processWithdrawalRequest.js";
9
11
  // Unlike other block processing functions which mutate state in-place, this function
10
12
  // clones the state and returns the post-state, similar to stateTransition().
11
13
  // This function does not call execution engine to verify payload. Need to call it from other place.
12
- export function processExecutionPayloadEnvelope(state, signedEnvelope, verify, opts) {
14
+ export function processExecutionPayloadEnvelope(state, signedEnvelope, opts) {
15
+ const { verifySignature = true, verifyStateRoot = true } = opts ?? {};
13
16
  const envelope = signedEnvelope.message;
14
17
  const payload = envelope.payload;
15
18
  const fork = state.config.getForkSeq(envelope.slot);
16
- if (verify && !verifyExecutionPayloadEnvelopeSignature(state, signedEnvelope)) {
19
+ if (verifySignature && !verifyExecutionPayloadEnvelopeSignature(state, signedEnvelope)) {
17
20
  throw Error(`Execution payload envelope has invalid signature builderIndex=${envelope.builderIndex}`);
18
21
  }
19
22
  // .clone() before mutating state, similar to stateTransition()
@@ -41,7 +44,7 @@ export function processExecutionPayloadEnvelope(state, signedEnvelope, verify, o
41
44
  postState.executionPayloadAvailability.set(postState.slot % SLOTS_PER_HISTORICAL_ROOT, true);
42
45
  postState.latestBlockHash = payload.blockHash;
43
46
  postState.commit();
44
- if (verify && !byteArrayEquals(envelope.stateRoot, postState.hashTreeRoot())) {
47
+ if (verifyStateRoot && !byteArrayEquals(envelope.stateRoot, postState.hashTreeRoot())) {
45
48
  throw new Error(`Envelope's state root does not match state envelope=${toRootHex(envelope.stateRoot)} state=${toRootHex(postState.hashTreeRoot())}`);
46
49
  }
47
50
  return postState;
@@ -93,27 +96,7 @@ function validateExecutionPayloadEnvelope(state, envelope) {
93
96
  // Skipped: Verify the execution payload is valid
94
97
  }
95
98
  function verifyExecutionPayloadEnvelopeSignature(state, signedEnvelope) {
96
- const builderIndex = signedEnvelope.message.builderIndex;
97
- const domain = state.config.getDomain(state.slot, DOMAIN_BEACON_BUILDER);
98
- const signingRoot = computeSigningRoot(ssz.gloas.ExecutionPayloadEnvelope, signedEnvelope.message, domain);
99
- try {
100
- let publicKey;
101
- if (builderIndex === BUILDER_INDEX_SELF_BUILD) {
102
- const validatorIndex = state.latestBlockHeader.proposerIndex;
103
- const proposerPubkey = state.epochCtx.pubkeyCache.get(validatorIndex);
104
- if (!proposerPubkey) {
105
- return false;
106
- }
107
- publicKey = proposerPubkey;
108
- }
109
- else {
110
- publicKey = PublicKey.fromBytes(state.builders.getReadonly(builderIndex).pubkey);
111
- }
112
- const signature = Signature.fromBytes(signedEnvelope.signature, true);
113
- return verify(signingRoot, publicKey, signature);
114
- }
115
- catch (_e) {
116
- return false; // Catch all BLS errors: failed key validation, failed signature validation, invalid signature
117
- }
99
+ const signatureSet = getExecutionPayloadEnvelopeSignatureSet(state.config, state.epochCtx.pubkeyCache, new BeaconStateView(state), signedEnvelope, state.latestBlockHeader.proposerIndex);
100
+ return verifySignatureSet(signatureSet);
118
101
  }
119
102
  //# sourceMappingURL=processExecutionPayloadEnvelope.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"processExecutionPayloadEnvelope.js","sourceRoot":"","sources":["../../src/block/processExecutionPayloadEnvelope.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"processExecutionPayloadEnvelope.js","sourceRoot":"","sources":["../../src/block/processExecutionPayloadEnvelope.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"processVoluntaryExit.d.ts","sourceRoot":"","sources":["../../src/block/processVoluntaryExit.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,OAAO,EAAC,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAC,MAAM,EAAM,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAC,yBAAyB,EAAmD,MAAM,aAAa,CAAC;AAWxG,oBAAY,qBAAqB;IAC/B,KAAK,UAAU;IACf,QAAQ,aAAa;IACrB,aAAa,mBAAmB;IAChC,UAAU,gBAAgB;IAC1B,eAAe,sBAAsB;IACrC,kBAAkB,wBAAwB;IAC1C,gBAAgB,sBAAsB;CACvC;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,yBAAyB,EAChC,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,EAC/C,eAAe,UAAO,GACrB,IAAI,CAuDN;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,yBAAyB,EAChC,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,EAC/C,eAAe,UAAO,GACrB,qBAAqB,CA0CvB;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,yBAAyB,EAChC,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,EAC/C,eAAe,UAAO,GACrB,OAAO,CAET"}
1
+ {"version":3,"file":"processVoluntaryExit.d.ts","sourceRoot":"","sources":["../../src/block/processVoluntaryExit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,OAAO,EAAC,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAC,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAGvC,OAAO,EAAC,yBAAyB,EAAmD,MAAM,aAAa,CAAC;AAWxG,oBAAY,qBAAqB;IAC/B,KAAK,UAAU;IACf,QAAQ,aAAa;IACrB,aAAa,mBAAmB;IAChC,UAAU,gBAAgB;IAC1B,eAAe,sBAAsB;IACrC,kBAAkB,wBAAwB;IAC1C,gBAAgB,sBAAsB;CACvC;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,yBAAyB,EAChC,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,EAC/C,eAAe,UAAO,GACrB,IAAI,CAkBN;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,yBAAyB,EAChC,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,EAC/C,eAAe,UAAO,GACrB,qBAAqB,CAevB;AAyFD,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,yBAAyB,EAChC,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,EAC/C,eAAe,UAAO,GACrB,OAAO,CAET"}
@@ -1,9 +1,8 @@
1
- import { PublicKey, Signature, verify } from "@chainsafe/blst";
2
1
  import { FAR_FUTURE_EPOCH, ForkSeq } from "@lodestar/params";
3
- import { ssz } from "@lodestar/types";
4
2
  import { verifyVoluntaryExitSignature } from "../signatureSets/index.js";
3
+ import { BeaconStateView } from "../stateView/beaconStateView.js";
5
4
  import { convertValidatorIndexToBuilderIndex, getPendingBalanceToWithdrawForBuilder, initiateBuilderExit, isActiveBuilder, isBuilderIndex, } from "../util/gloas.js";
6
- import { computeSigningRoot, getCurrentEpoch, getPendingBalanceToWithdraw, isActiveValidator } from "../util/index.js";
5
+ import { getPendingBalanceToWithdraw, isActiveValidator } from "../util/index.js";
7
6
  import { initiateValidatorExit } from "./index.js";
8
7
  export { VoluntaryExitValidity };
9
8
  var VoluntaryExitValidity;
@@ -23,55 +22,61 @@ var VoluntaryExitValidity;
23
22
  */
24
23
  export function processVoluntaryExit(fork, state, signedVoluntaryExit, verifySignature = true) {
25
24
  const voluntaryExit = signedVoluntaryExit.message;
26
- const currentEpoch = getCurrentEpoch(state);
27
- // Exits must specify an epoch when they become valid; they are not valid before then
28
- if (currentEpoch < voluntaryExit.epoch) {
29
- throw Error(`Voluntary exit epoch ${voluntaryExit.epoch} is after current epoch ${currentEpoch}`);
30
- }
31
- // Check if this is a builder exit
32
- if (fork >= ForkSeq.gloas && isBuilderIndex(voluntaryExit.validatorIndex)) {
33
- const stateGloas = state;
34
- const builderIndex = convertValidatorIndexToBuilderIndex(voluntaryExit.validatorIndex);
35
- const builder = stateGloas.builders.getReadonly(builderIndex);
36
- // Verify the builder is active
37
- if (!isActiveBuilder(builder, state.finalizedCheckpoint.epoch)) {
38
- throw Error(`Builder ${builderIndex} is not active`);
39
- }
40
- // Only exit builder if it has no pending withdrawals in the queue
41
- if (getPendingBalanceToWithdrawForBuilder(stateGloas, builderIndex) !== 0) {
42
- throw Error(`Builder ${builderIndex} has pending withdrawals`);
43
- }
44
- // Verify signature
45
- if (verifySignature) {
46
- const domain = state.config.getDomainForVoluntaryExit(state.slot);
47
- const signingRoot = computeSigningRoot(ssz.phase0.VoluntaryExit, voluntaryExit, domain);
48
- try {
49
- const publicKey = PublicKey.fromBytes(builder.pubkey);
50
- const signature = Signature.fromBytes(signedVoluntaryExit.signature, true);
51
- if (!verify(signingRoot, publicKey, signature)) {
52
- throw Error("BLS verify failed");
53
- }
54
- }
55
- catch (e) {
56
- throw Error(`Builder ${builderIndex} invalid exit signature reason=${e.message}`);
57
- }
58
- }
59
- // Initiate builder exit
60
- initiateBuilderExit(stateGloas, builderIndex);
61
- return;
62
- }
63
- // Handle validator exit
64
25
  const validity = getVoluntaryExitValidity(fork, state, signedVoluntaryExit, verifySignature);
65
26
  if (validity !== VoluntaryExitValidity.valid) {
66
27
  throw Error(`Invalid voluntary exit at forkSeq=${fork} reason=${validity}`);
67
28
  }
29
+ if (fork >= ForkSeq.gloas && isBuilderIndex(voluntaryExit.validatorIndex)) {
30
+ initiateBuilderExit(state, convertValidatorIndexToBuilderIndex(voluntaryExit.validatorIndex));
31
+ return;
32
+ }
68
33
  const validator = state.validators.get(signedVoluntaryExit.message.validatorIndex);
69
34
  initiateValidatorExit(fork, state, validator);
70
35
  }
71
36
  export function getVoluntaryExitValidity(fork, state, signedVoluntaryExit, verifySignature = true) {
37
+ const currentEpoch = state.epochCtx.epoch;
38
+ const voluntaryExit = signedVoluntaryExit.message;
39
+ // Exits must specify an epoch when they become valid; they are not valid before then
40
+ if (currentEpoch < voluntaryExit.epoch) {
41
+ return VoluntaryExitValidity.earlyEpoch;
42
+ }
43
+ // Check if this is a builder exit
44
+ if (fork >= ForkSeq.gloas && isBuilderIndex(voluntaryExit.validatorIndex)) {
45
+ return getBuilderVoluntaryExitValidity(state, signedVoluntaryExit, verifySignature);
46
+ }
47
+ return getValidatorVoluntaryExitValidity(fork, state, signedVoluntaryExit, verifySignature);
48
+ }
49
+ function getBuilderVoluntaryExitValidity(state, signedVoluntaryExit, verifySignature) {
50
+ const { config, epochCtx } = state;
51
+ const builderIndex = convertValidatorIndexToBuilderIndex(signedVoluntaryExit.message.validatorIndex);
52
+ if (builderIndex >= state.builders.length) {
53
+ return VoluntaryExitValidity.inactive;
54
+ }
55
+ const builder = state.builders.getReadonly(builderIndex);
56
+ // Verify the builder is active
57
+ if (!isActiveBuilder(builder, state.finalizedCheckpoint.epoch)) {
58
+ return builder.withdrawableEpoch !== FAR_FUTURE_EPOCH
59
+ ? VoluntaryExitValidity.alreadyExited
60
+ : VoluntaryExitValidity.inactive;
61
+ }
62
+ // Only exit builder if it has no pending withdrawals in the queue
63
+ if (getPendingBalanceToWithdrawForBuilder(state, builderIndex) !== 0) {
64
+ return VoluntaryExitValidity.pendingWithdrawals;
65
+ }
66
+ // Verify signature
67
+ if (verifySignature &&
68
+ !verifyVoluntaryExitSignature(config, epochCtx.pubkeyCache, new BeaconStateView(state), signedVoluntaryExit)) {
69
+ return VoluntaryExitValidity.invalidSignature;
70
+ }
71
+ return VoluntaryExitValidity.valid;
72
+ }
73
+ function getValidatorVoluntaryExitValidity(fork, state, signedVoluntaryExit, verifySignature) {
72
74
  const { config, epochCtx } = state;
73
75
  const voluntaryExit = signedVoluntaryExit.message;
74
- const validator = state.validators.get(voluntaryExit.validatorIndex);
76
+ if (voluntaryExit.validatorIndex >= state.validators.length) {
77
+ return VoluntaryExitValidity.inactive;
78
+ }
79
+ const validator = state.validators.getReadonly(voluntaryExit.validatorIndex);
75
80
  const currentEpoch = epochCtx.epoch;
76
81
  // verify the validator is active
77
82
  if (!isActiveValidator(validator, currentEpoch)) {
@@ -81,10 +86,6 @@ export function getVoluntaryExitValidity(fork, state, signedVoluntaryExit, verif
81
86
  if (validator.exitEpoch !== FAR_FUTURE_EPOCH) {
82
87
  return VoluntaryExitValidity.alreadyExited;
83
88
  }
84
- // exits must specify an epoch when they become valid; they are not valid before then
85
- if (currentEpoch < voluntaryExit.epoch) {
86
- return VoluntaryExitValidity.earlyEpoch;
87
- }
88
89
  // verify the validator had been active long enough
89
90
  if (currentEpoch < validator.activationEpoch + config.SHARD_COMMITTEE_PERIOD) {
90
91
  return VoluntaryExitValidity.shortTimeActive;
@@ -94,8 +95,9 @@ export function getVoluntaryExitValidity(fork, state, signedVoluntaryExit, verif
94
95
  getPendingBalanceToWithdraw(state, voluntaryExit.validatorIndex) !== 0) {
95
96
  return VoluntaryExitValidity.pendingWithdrawals;
96
97
  }
98
+ // Verify signature
97
99
  if (verifySignature &&
98
- !verifyVoluntaryExitSignature(state.config, epochCtx.pubkeyCache, state.slot, signedVoluntaryExit)) {
100
+ !verifyVoluntaryExitSignature(config, epochCtx.pubkeyCache, new BeaconStateView(state), signedVoluntaryExit)) {
99
101
  return VoluntaryExitValidity.invalidSignature;
100
102
  }
101
103
  return VoluntaryExitValidity.valid;
@@ -1 +1 @@
1
- {"version":3,"file":"processVoluntaryExit.js","sourceRoot":"","sources":["../../src/block/processVoluntaryExit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAC,gBAAgB,EAAE,OAAO,EAAC,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAS,GAAG,EAAC,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAC,4BAA4B,EAAC,MAAM,2BAA2B,CAAC;AAEvE,OAAO,EACL,mCAAmC,EACnC,qCAAqC,EACrC,mBAAmB,EACnB,eAAe,EACf,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAC,kBAAkB,EAAE,eAAe,EAAE,2BAA2B,EAAE,iBAAiB,EAAC,MAAM,kBAAkB,CAAC;AACrH,OAAO,EAAC,qBAAqB,EAAC,MAAM,YAAY,CAAC;SAErC,qBAAqB;AAAjC,IAAY,qBAQX;AARD,WAAY,qBAAqB;IAC/B,wCAAe,CAAA;IACf,8CAAqB,CAAA;IACrB,yDAAgC,CAAA;IAChC,mDAA0B,CAAA;IAC1B,8DAAqC,CAAA;IACrC,mEAA0C,CAAA;IAC1C,+DAAsC,CAAA;AAAC,CACzC,EARY,qBAAqB,KAArB,qBAAqB,QAQhC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAClC,IAAa,EACb,KAAgC,EAChC,mBAA+C,EAC/C,eAAe,GAAG,IAAI,EAChB;IACN,MAAM,aAAa,GAAG,mBAAmB,CAAC,OAAO,CAAC;IAClD,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IAE5C,qFAAqF;IACrF,IAAI,YAAY,GAAG,aAAa,CAAC,KAAK,EAAE,CAAC;QACvC,MAAM,KAAK,CAAC,wBAAwB,aAAa,CAAC,KAAK,2BAA2B,YAAY,EAAE,CAAC,CAAC;IACpG,CAAC;IAED,kCAAkC;IAClC,IAAI,IAAI,IAAI,OAAO,CAAC,KAAK,IAAI,cAAc,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,CAAC;QAC1E,MAAM,UAAU,GAAG,KAA+B,CAAC;QACnD,MAAM,YAAY,GAAG,mCAAmC,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QACvF,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QAE9D,+BAA+B;QAC/B,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/D,MAAM,KAAK,CAAC,WAAW,YAAY,gBAAgB,CAAC,CAAC;QACvD,CAAC;QAED,kEAAkE;QAClE,IAAI,qCAAqC,CAAC,UAAU,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1E,MAAM,KAAK,CAAC,WAAW,YAAY,0BAA0B,CAAC,CAAC;QACjE,CAAC;QAED,mBAAmB;QACnB,IAAI,eAAe,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,yBAAyB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAClE,MAAM,WAAW,GAAG,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;YAExF,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBACtD,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;gBAE3E,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC;oBAC/C,MAAM,KAAK,CAAC,mBAAmB,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,KAAK,CAAC,WAAW,YAAY,kCAAmC,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;YAC/F,CAAC;QACH,CAAC;QAED,wBAAwB;QACxB,mBAAmB,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAC9C,OAAO;IACT,CAAC;IAED,wBAAwB;IACxB,MAAM,QAAQ,GAAG,wBAAwB,CAAC,IAAI,EAAE,KAAK,EAAE,mBAAmB,EAAE,eAAe,CAAC,CAAC;IAC7F,IAAI,QAAQ,KAAK,qBAAqB,CAAC,KAAK,EAAE,CAAC;QAC7C,MAAM,KAAK,CAAC,qCAAqC,IAAI,WAAW,QAAQ,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,mBAAmB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACnF,qBAAqB,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;AAAA,CAC/C;AAED,MAAM,UAAU,wBAAwB,CACtC,IAAa,EACb,KAAgC,EAChC,mBAA+C,EAC/C,eAAe,GAAG,IAAI,EACC;IACvB,MAAM,EAAC,MAAM,EAAE,QAAQ,EAAC,GAAG,KAAK,CAAC;IACjC,MAAM,aAAa,GAAG,mBAAmB,CAAC,OAAO,CAAC;IAClD,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;IACrE,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC;IAEpC,iCAAiC;IACjC,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,CAAC;QAChD,OAAO,qBAAqB,CAAC,QAAQ,CAAC;IACxC,CAAC;IAED,qCAAqC;IACrC,IAAI,SAAS,CAAC,SAAS,KAAK,gBAAgB,EAAE,CAAC;QAC7C,OAAO,qBAAqB,CAAC,aAAa,CAAC;IAC7C,CAAC;IAED,qFAAqF;IACrF,IAAI,YAAY,GAAG,aAAa,CAAC,KAAK,EAAE,CAAC;QACvC,OAAO,qBAAqB,CAAC,UAAU,CAAC;IAC1C,CAAC;IAED,mDAAmD;IACnD,IAAI,YAAY,GAAG,SAAS,CAAC,eAAe,GAAG,MAAM,CAAC,sBAAsB,EAAE,CAAC;QAC7E,OAAO,qBAAqB,CAAC,eAAe,CAAC;IAC/C,CAAC;IAED,oEAAoE;IACpE,IACE,IAAI,IAAI,OAAO,CAAC,OAAO;QACvB,2BAA2B,CAAC,KAAiC,EAAE,aAAa,CAAC,cAAc,CAAC,KAAK,CAAC,EAClG,CAAC;QACD,OAAO,qBAAqB,CAAC,kBAAkB,CAAC;IAClD,CAAC;IAED,IACE,eAAe;QACf,CAAC,4BAA4B,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,EAAE,mBAAmB,CAAC,EAClG,CAAC;QACD,OAAO,qBAAqB,CAAC,gBAAgB,CAAC;IAChD,CAAC;IAED,OAAO,qBAAqB,CAAC,KAAK,CAAC;AAAA,CACpC;AAED,MAAM,UAAU,oBAAoB,CAClC,IAAa,EACb,KAAgC,EAChC,mBAA+C,EAC/C,eAAe,GAAG,IAAI,EACb;IACT,OAAO,wBAAwB,CAAC,IAAI,EAAE,KAAK,EAAE,mBAAmB,EAAE,eAAe,CAAC,KAAK,qBAAqB,CAAC,KAAK,CAAC;AAAA,CACpH"}
1
+ {"version":3,"file":"processVoluntaryExit.js","sourceRoot":"","sources":["../../src/block/processVoluntaryExit.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,8 @@
1
1
  import { BeaconConfig } from "@lodestar/config";
2
- import { gloas } from "@lodestar/types";
2
+ import { ValidatorIndex, gloas } from "@lodestar/types";
3
+ import { PubkeyCache } from "../cache/pubkeyCache.js";
4
+ import { IBeaconStateView } from "../stateView/interface.js";
5
+ import { type SingleSignatureSet } from "../util/signatureSets.js";
3
6
  export declare function getExecutionPayloadEnvelopeSigningRoot(config: BeaconConfig, envelope: gloas.ExecutionPayloadEnvelope): Uint8Array;
7
+ export declare function getExecutionPayloadEnvelopeSignatureSet(config: BeaconConfig, pubkeyCache: PubkeyCache, state: IBeaconStateView, signedEnvelope: gloas.SignedExecutionPayloadEnvelope, proposerIndex: ValidatorIndex): SingleSignatureSet;
4
8
  //# sourceMappingURL=executionPayloadEnvelope.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"executionPayloadEnvelope.d.ts","sourceRoot":"","sources":["../../src/signatureSets/executionPayloadEnvelope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAC,KAAK,EAAM,MAAM,iBAAiB,CAAC;AAG3C,wBAAgB,sCAAsC,CACpD,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,KAAK,CAAC,wBAAwB,GACvC,UAAU,CAIZ"}
1
+ {"version":3,"file":"executionPayloadEnvelope.d.ts","sourceRoot":"","sources":["../../src/signatureSets/executionPayloadEnvelope.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAC,cAAc,EAAE,KAAK,EAAM,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAC,WAAW,EAAC,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAC,gBAAgB,EAAC,MAAM,2BAA2B,CAAC;AAE3D,OAAO,EAAC,KAAK,kBAAkB,EAAyC,MAAM,0BAA0B,CAAC;AAEzG,wBAAgB,sCAAsC,CACpD,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,KAAK,CAAC,wBAAwB,GACvC,UAAU,CAIZ;AAED,wBAAgB,uCAAuC,CACrD,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,gBAAgB,EACvB,cAAc,EAAE,KAAK,CAAC,8BAA8B,EACpD,aAAa,EAAE,cAAc,GAC5B,kBAAkB,CAYpB"}
@@ -1,8 +1,17 @@
1
- import { DOMAIN_BEACON_BUILDER } from "@lodestar/params";
1
+ import { PublicKey } from "@chainsafe/blst";
2
+ import { BUILDER_INDEX_SELF_BUILD, DOMAIN_BEACON_BUILDER } from "@lodestar/params";
2
3
  import { ssz } from "@lodestar/types";
3
4
  import { computeSigningRoot } from "../util/index.js";
5
+ import { createSingleSignatureSetFromComponents } from "../util/signatureSets.js";
4
6
  export function getExecutionPayloadEnvelopeSigningRoot(config, envelope) {
5
7
  const domain = config.getDomain(envelope.slot, DOMAIN_BEACON_BUILDER);
6
8
  return computeSigningRoot(ssz.gloas.ExecutionPayloadEnvelope, envelope, domain);
7
9
  }
10
+ export function getExecutionPayloadEnvelopeSignatureSet(config, pubkeyCache, state, signedEnvelope, proposerIndex) {
11
+ const envelope = signedEnvelope.message;
12
+ const pubkey = envelope.builderIndex === BUILDER_INDEX_SELF_BUILD
13
+ ? pubkeyCache.getOrThrow(proposerIndex)
14
+ : PublicKey.fromBytes(state.getBuilder(envelope.builderIndex).pubkey);
15
+ return createSingleSignatureSetFromComponents(pubkey, getExecutionPayloadEnvelopeSigningRoot(config, envelope), signedEnvelope.signature);
16
+ }
8
17
  //# sourceMappingURL=executionPayloadEnvelope.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"executionPayloadEnvelope.js","sourceRoot":"","sources":["../../src/signatureSets/executionPayloadEnvelope.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,qBAAqB,EAAC,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAQ,GAAG,EAAC,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAC,kBAAkB,EAAC,MAAM,kBAAkB,CAAC;AAEpD,MAAM,UAAU,sCAAsC,CACpD,MAAoB,EACpB,QAAwC,EAC5B;IACZ,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC;IAEtE,OAAO,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,wBAAwB,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;AAAA,CACjF"}
1
+ {"version":3,"file":"executionPayloadEnvelope.js","sourceRoot":"","sources":["../../src/signatureSets/executionPayloadEnvelope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAE1C,OAAO,EAAC,wBAAwB,EAAE,qBAAqB,EAAC,MAAM,kBAAkB,CAAC;AACjF,OAAO,EAAwB,GAAG,EAAC,MAAM,iBAAiB,CAAC;AAG3D,OAAO,EAAC,kBAAkB,EAAC,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAA0B,sCAAsC,EAAC,MAAM,0BAA0B,CAAC;AAEzG,MAAM,UAAU,sCAAsC,CACpD,MAAoB,EACpB,QAAwC,EAC5B;IACZ,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC;IAEtE,OAAO,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,wBAAwB,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;AAAA,CACjF;AAED,MAAM,UAAU,uCAAuC,CACrD,MAAoB,EACpB,WAAwB,EACxB,KAAuB,EACvB,cAAoD,EACpD,aAA6B,EACT;IACpB,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC;IACxC,MAAM,MAAM,GACV,QAAQ,CAAC,YAAY,KAAK,wBAAwB;QAChD,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,aAAa,CAAC;QACvC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;IAE1E,OAAO,sCAAsC,CAC3C,MAAM,EACN,sCAAsC,CAAC,MAAM,EAAE,QAAQ,CAAC,EACxD,cAAc,CAAC,SAAS,CACzB,CAAC;AAAA,CACH"}
@@ -1,6 +1,7 @@
1
1
  import { BeaconConfig } from "@lodestar/config";
2
2
  import { IndexedAttestation, SignedBeaconBlock } from "@lodestar/types";
3
3
  import { SyncCommitteeCache } from "../cache/syncCommitteeCache.js";
4
+ import { IBeaconStateView } from "../stateView/interface.js";
4
5
  import { ISignatureSet } from "../util/index.js";
5
6
  export * from "./attesterSlashings.js";
6
7
  export * from "./blsToExecutionChange.js";
@@ -16,7 +17,7 @@ export * from "./voluntaryExits.js";
16
17
  * Includes all signatures on the block (except the deposit signatures) for verification.
17
18
  * Deposits are not included because they can legally have invalid signatures.
18
19
  */
19
- export declare function getBlockSignatureSets(config: BeaconConfig, currentSyncCommitteeIndexed: SyncCommitteeCache, signedBlock: SignedBeaconBlock, indexedAttestations: IndexedAttestation[], opts?: {
20
+ export declare function getBlockSignatureSets(config: BeaconConfig, currentSyncCommitteeIndexed: SyncCommitteeCache, state: IBeaconStateView, signedBlock: SignedBeaconBlock, indexedAttestations: IndexedAttestation[], opts?: {
20
21
  /** Useful since block proposer signature is verified beforehand on gossip validation */
21
22
  skipProposerSignature?: boolean;
22
23
  }): ISignatureSet[];
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/signatureSets/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAC,kBAAkB,EAAE,iBAAiB,EAAkB,MAAM,iBAAiB,CAAC;AAEvF,OAAO,EAAC,kBAAkB,EAAC,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAC;AAS/C,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AAEpC;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,YAAY,EACpB,2BAA2B,EAAE,kBAAkB,EAC/C,WAAW,EAAE,iBAAiB,EAC9B,mBAAmB,EAAE,kBAAkB,EAAE,EACzC,IAAI,CAAC,EAAE;IACL,wFAAwF;IACxF,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC,GACA,aAAa,EAAE,CAyCjB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/signatureSets/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAC,kBAAkB,EAAE,iBAAiB,EAAkB,MAAM,iBAAiB,CAAC;AAEvF,OAAO,EAAC,kBAAkB,EAAC,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAC,gBAAgB,EAAC,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAC;AAS/C,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AAEpC;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,YAAY,EACpB,2BAA2B,EAAE,kBAAkB,EAC/C,KAAK,EAAE,gBAAgB,EACvB,WAAW,EAAE,iBAAiB,EAC9B,mBAAmB,EAAE,kBAAkB,EAAE,EACzC,IAAI,CAAC,EAAE;IACL,wFAAwF;IACxF,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC,GACA,aAAa,EAAE,CAyCjB"}
@@ -21,7 +21,7 @@ export * from "./voluntaryExits.js";
21
21
  * Includes all signatures on the block (except the deposit signatures) for verification.
22
22
  * Deposits are not included because they can legally have invalid signatures.
23
23
  */
24
- export function getBlockSignatureSets(config, currentSyncCommitteeIndexed, signedBlock, indexedAttestations, opts) {
24
+ export function getBlockSignatureSets(config, currentSyncCommitteeIndexed, state, signedBlock, indexedAttestations, opts) {
25
25
  // fork based validations
26
26
  const fork = config.getForkSeq(signedBlock.message.slot);
27
27
  const signatureSets = [
@@ -29,7 +29,7 @@ export function getBlockSignatureSets(config, currentSyncCommitteeIndexed, signe
29
29
  ...getProposerSlashingsSignatureSets(config, signedBlock),
30
30
  ...getAttesterSlashingsSignatureSets(config, signedBlock),
31
31
  ...getAttestationsSignatureSets(config, signedBlock, indexedAttestations),
32
- ...getVoluntaryExitsSignatureSets(config, signedBlock),
32
+ ...getVoluntaryExitsSignatureSets(config, state, signedBlock),
33
33
  ];
34
34
  if (!opts?.skipProposerSignature) {
35
35
  signatureSets.push(getBlockProposerSignatureSet(config, signedBlock));
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/signatureSets/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAC;AAEzC,OAAO,EAAC,4BAA4B,EAAC,MAAM,kCAAkC,CAAC;AAG9E,OAAO,EAAC,iCAAiC,EAAC,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAC,oCAAoC,EAAC,MAAM,2BAA2B,CAAC;AAC/E,OAAO,EAAC,4BAA4B,EAAC,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAC,4BAA4B,EAAC,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAC,iCAAiC,EAAC,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAC,2BAA2B,EAAC,MAAM,aAAa,CAAC;AACxD,OAAO,EAAC,8BAA8B,EAAC,MAAM,qBAAqB,CAAC;AAEnE,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AAEpC;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,MAAoB,EACpB,2BAA+C,EAC/C,WAA8B,EAC9B,mBAAyC,EACzC,IAGC,EACgB;IACjB,yBAAyB;IACzB,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzD,MAAM,aAAa,GAAG;QACpB,2BAA2B,CAAC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC;QACxD,GAAG,iCAAiC,CAAC,MAAM,EAAE,WAAW,CAAC;QACzD,GAAG,iCAAiC,CAAC,MAAM,EAAE,WAAW,CAAC;QACzD,GAAG,4BAA4B,CAAC,MAAM,EAAE,WAAW,EAAE,mBAAmB,CAAC;QACzE,GAAG,8BAA8B,CAAC,MAAM,EAAE,WAAW,CAAC;KACvD,CAAC;IAEF,IAAI,CAAC,IAAI,EAAE,qBAAqB,EAAE,CAAC;QACjC,aAAa,CAAC,IAAI,CAAC,4BAA4B,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,2DAA2D;IAC3D,IAAI,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QAC3B,MAAM,yBAAyB,GAAG,4BAA4B,CAC5D,MAAM,EACN,2BAA2B,EAC1B,WAAwC,CAAC,OAAO,CAClD,CAAC;QACF,2FAA2F;QAC3F,IAAI,yBAAyB,EAAE,CAAC;YAC9B,aAAa,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,0BAA0B;IAC1B,IAAI,IAAI,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QAC5B,MAAM,iCAAiC,GAAG,oCAAoC,CAC5E,MAAM,EACN,WAAwC,CACzC,CAAC;QACF,IAAI,iCAAiC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjD,aAAa,CAAC,IAAI,CAAC,GAAG,iCAAiC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,OAAO,aAAa,CAAC;AAAA,CACtB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/signatureSets/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAC;AAEzC,OAAO,EAAC,4BAA4B,EAAC,MAAM,kCAAkC,CAAC;AAI9E,OAAO,EAAC,iCAAiC,EAAC,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAC,oCAAoC,EAAC,MAAM,2BAA2B,CAAC;AAC/E,OAAO,EAAC,4BAA4B,EAAC,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAC,4BAA4B,EAAC,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAC,iCAAiC,EAAC,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAC,2BAA2B,EAAC,MAAM,aAAa,CAAC;AACxD,OAAO,EAAC,8BAA8B,EAAC,MAAM,qBAAqB,CAAC;AAEnE,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AAEpC;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,MAAoB,EACpB,2BAA+C,EAC/C,KAAuB,EACvB,WAA8B,EAC9B,mBAAyC,EACzC,IAGC,EACgB;IACjB,yBAAyB;IACzB,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzD,MAAM,aAAa,GAAG;QACpB,2BAA2B,CAAC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC;QACxD,GAAG,iCAAiC,CAAC,MAAM,EAAE,WAAW,CAAC;QACzD,GAAG,iCAAiC,CAAC,MAAM,EAAE,WAAW,CAAC;QACzD,GAAG,4BAA4B,CAAC,MAAM,EAAE,WAAW,EAAE,mBAAmB,CAAC;QACzE,GAAG,8BAA8B,CAAC,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC;KAC9D,CAAC;IAEF,IAAI,CAAC,IAAI,EAAE,qBAAqB,EAAE,CAAC;QACjC,aAAa,CAAC,IAAI,CAAC,4BAA4B,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,2DAA2D;IAC3D,IAAI,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QAC3B,MAAM,yBAAyB,GAAG,4BAA4B,CAC5D,MAAM,EACN,2BAA2B,EAC1B,WAAwC,CAAC,OAAO,CAClD,CAAC;QACF,2FAA2F;QAC3F,IAAI,yBAAyB,EAAE,CAAC;YAC9B,aAAa,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,0BAA0B;IAC1B,IAAI,IAAI,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QAC5B,MAAM,iCAAiC,GAAG,oCAAoC,CAC5E,MAAM,EACN,WAAwC,CACzC,CAAC;QACF,IAAI,iCAAiC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjD,aAAa,CAAC,IAAI,CAAC,GAAG,iCAAiC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,OAAO,aAAa,CAAC;AAAA,CACtB"}
@@ -1,11 +1,15 @@
1
1
  import { BeaconConfig } from "@lodestar/config";
2
2
  import { SignedBeaconBlock, Slot, phase0 } from "@lodestar/types";
3
3
  import { PubkeyCache } from "../cache/pubkeyCache.js";
4
+ import { IBeaconStateView } from "../stateView/interface.js";
4
5
  import { ISignatureSet } from "../util/index.js";
5
- export declare function verifyVoluntaryExitSignature(config: BeaconConfig, pubkeyCache: PubkeyCache, stateSlot: Slot, signedVoluntaryExit: phase0.SignedVoluntaryExit): boolean;
6
+ export declare function verifyVoluntaryExitSignature(config: BeaconConfig, pubkeyCache: PubkeyCache, state: IBeaconStateView, signedVoluntaryExit: phase0.SignedVoluntaryExit): boolean;
6
7
  /**
7
8
  * Extract signatures to allow validating all block signatures at once
8
9
  */
9
- export declare function getVoluntaryExitSignatureSet(config: BeaconConfig, stateSlot: Slot, signedVoluntaryExit: phase0.SignedVoluntaryExit): ISignatureSet;
10
- export declare function getVoluntaryExitsSignatureSets(config: BeaconConfig, signedBlock: SignedBeaconBlock): ISignatureSet[];
10
+ export declare function getVoluntaryExitSignatureSet(config: BeaconConfig, state: IBeaconStateView, signedVoluntaryExit: phase0.SignedVoluntaryExit): ISignatureSet;
11
+ export declare function getVoluntaryExitsSignatureSets(config: BeaconConfig, state: IBeaconStateView, signedBlock: SignedBeaconBlock): ISignatureSet[];
12
+ export declare function getValidatorVoluntaryExitSignatureSet(config: BeaconConfig, stateSlot: Slot, signedVoluntaryExit: phase0.SignedVoluntaryExit): ISignatureSet;
13
+ export declare function getBuilderVoluntaryExitSignatureSet(config: BeaconConfig, state: IBeaconStateView, signedVoluntaryExit: phase0.SignedVoluntaryExit): ISignatureSet;
14
+ export declare function isBuilderVoluntaryExit(signedVoluntaryExit: phase0.SignedVoluntaryExit): boolean;
11
15
  //# sourceMappingURL=voluntaryExits.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"voluntaryExits.d.ts","sourceRoot":"","sources":["../../src/signatureSets/voluntaryExits.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAC,iBAAiB,EAAE,IAAI,EAAE,MAAM,EAAM,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAC,WAAW,EAAC,MAAM,yBAAyB,CAAC;AACpD,OAAO,EACL,aAAa,EAKd,MAAM,kBAAkB,CAAC;AAE1B,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,IAAI,EACf,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,GAC9C,OAAO,CAET;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,IAAI,EACf,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,GAC9C,aAAa,CAUf;AAED,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,iBAAiB,GAAG,aAAa,EAAE,CAOpH"}
1
+ {"version":3,"file":"voluntaryExits.d.ts","sourceRoot":"","sources":["../../src/signatureSets/voluntaryExits.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAC,iBAAiB,EAAE,IAAI,EAAE,MAAM,EAAM,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAC,WAAW,EAAC,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAC,gBAAgB,EAAC,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EACL,aAAa,EAOd,MAAM,kBAAkB,CAAC;AAE1B,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,gBAAgB,EACvB,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,GAC9C,OAAO,CAET;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,gBAAgB,EACvB,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,GAC9C,aAAa,CAQf;AAED,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,gBAAgB,EACvB,WAAW,EAAE,iBAAiB,GAC7B,aAAa,EAAE,CAIjB;AAED,wBAAgB,qCAAqC,CACnD,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,IAAI,EACf,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,GAC9C,aAAa,CAUf;AAED,wBAAgB,mCAAmC,CACjD,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,gBAAgB,EACvB,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,GAC9C,aAAa,CAYf;AAED,wBAAgB,sBAAsB,CAAC,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,GAAG,OAAO,CAE/F"}
@@ -1,12 +1,24 @@
1
+ import { PublicKey } from "@chainsafe/blst";
2
+ import { ForkSeq } from "@lodestar/params";
1
3
  import { ssz } from "@lodestar/types";
2
- import { SignatureSetType, computeSigningRoot, computeStartSlotAtEpoch, verifySignatureSet, } from "../util/index.js";
3
- export function verifyVoluntaryExitSignature(config, pubkeyCache, stateSlot, signedVoluntaryExit) {
4
- return verifySignatureSet(getVoluntaryExitSignatureSet(config, stateSlot, signedVoluntaryExit), pubkeyCache);
4
+ import { SignatureSetType, computeSigningRoot, computeStartSlotAtEpoch, convertValidatorIndexToBuilderIndex, isBuilderIndex, verifySignatureSet, } from "../util/index.js";
5
+ export function verifyVoluntaryExitSignature(config, pubkeyCache, state, signedVoluntaryExit) {
6
+ return verifySignatureSet(getVoluntaryExitSignatureSet(config, state, signedVoluntaryExit), pubkeyCache);
5
7
  }
6
8
  /**
7
9
  * Extract signatures to allow validating all block signatures at once
8
10
  */
9
- export function getVoluntaryExitSignatureSet(config, stateSlot, signedVoluntaryExit) {
11
+ export function getVoluntaryExitSignatureSet(config, state, signedVoluntaryExit) {
12
+ const fork = config.getForkSeq(state.slot);
13
+ if (fork >= ForkSeq.gloas && isBuilderVoluntaryExit(signedVoluntaryExit)) {
14
+ return getBuilderVoluntaryExitSignatureSet(config, state, signedVoluntaryExit);
15
+ }
16
+ return getValidatorVoluntaryExitSignatureSet(config, state.slot, signedVoluntaryExit);
17
+ }
18
+ export function getVoluntaryExitsSignatureSets(config, state, signedBlock) {
19
+ return signedBlock.message.body.voluntaryExits.map((voluntaryExit) => getVoluntaryExitSignatureSet(config, state, voluntaryExit));
20
+ }
21
+ export function getValidatorVoluntaryExitSignatureSet(config, stateSlot, signedVoluntaryExit) {
10
22
  const messageSlot = computeStartSlotAtEpoch(signedVoluntaryExit.message.epoch);
11
23
  const domain = config.getDomainForVoluntaryExit(stateSlot, messageSlot);
12
24
  return {
@@ -16,10 +28,19 @@ export function getVoluntaryExitSignatureSet(config, stateSlot, signedVoluntaryE
16
28
  signature: signedVoluntaryExit.signature,
17
29
  };
18
30
  }
19
- export function getVoluntaryExitsSignatureSets(config, signedBlock) {
20
- // the getDomain() api requires the state slot as 1st param, however it's the same to block.slot in state-transition
21
- // and the same epoch when we verify blocks in batch in beacon-node. So we can safely use block.slot here.
22
- const blockSlot = signedBlock.message.slot;
23
- return signedBlock.message.body.voluntaryExits.map((voluntaryExit) => getVoluntaryExitSignatureSet(config, blockSlot, voluntaryExit));
31
+ export function getBuilderVoluntaryExitSignatureSet(config, state, signedVoluntaryExit) {
32
+ const messageSlot = computeStartSlotAtEpoch(signedVoluntaryExit.message.epoch);
33
+ const domain = config.getDomainForVoluntaryExit(state.slot, messageSlot);
34
+ const builderIndex = convertValidatorIndexToBuilderIndex(signedVoluntaryExit.message.validatorIndex);
35
+ const builder = state.getBuilder(builderIndex);
36
+ return {
37
+ type: SignatureSetType.single,
38
+ pubkey: PublicKey.fromBytes(builder.pubkey),
39
+ signingRoot: computeSigningRoot(ssz.phase0.VoluntaryExit, signedVoluntaryExit.message, domain),
40
+ signature: signedVoluntaryExit.signature,
41
+ };
42
+ }
43
+ export function isBuilderVoluntaryExit(signedVoluntaryExit) {
44
+ return isBuilderIndex(signedVoluntaryExit.message.validatorIndex);
24
45
  }
25
46
  //# sourceMappingURL=voluntaryExits.js.map