@lodestar/state-transition 1.39.0-dev.7e9e7caf38 → 1.39.0-dev.83fa4f530e

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 (91) hide show
  1. package/lib/block/isValidIndexedAttestation.d.ts.map +1 -1
  2. package/lib/block/isValidIndexedAttestation.js +2 -2
  3. package/lib/block/isValidIndexedAttestation.js.map +1 -1
  4. package/lib/block/processAttestationsAltair.js +1 -1
  5. package/lib/block/processAttestationsAltair.js.map +1 -1
  6. package/lib/block/processProposerSlashing.js +1 -1
  7. package/lib/block/processProposerSlashing.js.map +1 -1
  8. package/lib/block/processRandao.js +2 -2
  9. package/lib/block/processRandao.js.map +1 -1
  10. package/lib/block/processSyncCommittee.d.ts +2 -1
  11. package/lib/block/processSyncCommittee.d.ts.map +1 -1
  12. package/lib/block/processSyncCommittee.js +6 -4
  13. package/lib/block/processSyncCommittee.js.map +1 -1
  14. package/lib/block/processVoluntaryExit.js +1 -1
  15. package/lib/block/processVoluntaryExit.js.map +1 -1
  16. package/lib/block/processWithdrawals.d.ts +3 -3
  17. package/lib/block/processWithdrawals.d.ts.map +1 -1
  18. package/lib/block/processWithdrawals.js +152 -105
  19. package/lib/block/processWithdrawals.js.map +1 -1
  20. package/lib/index.d.ts +2 -1
  21. package/lib/index.d.ts.map +1 -1
  22. package/lib/index.js +2 -0
  23. package/lib/index.js.map +1 -1
  24. package/lib/rewards/attestationsRewards.d.ts +6 -0
  25. package/lib/rewards/attestationsRewards.d.ts.map +1 -0
  26. package/lib/rewards/attestationsRewards.js +113 -0
  27. package/lib/rewards/attestationsRewards.js.map +1 -0
  28. package/lib/rewards/blockRewards.d.ts +13 -0
  29. package/lib/rewards/blockRewards.d.ts.map +1 -0
  30. package/lib/rewards/blockRewards.js +95 -0
  31. package/lib/rewards/blockRewards.js.map +1 -0
  32. package/lib/rewards/index.d.ts +4 -0
  33. package/lib/rewards/index.d.ts.map +1 -0
  34. package/lib/rewards/index.js +4 -0
  35. package/lib/rewards/index.js.map +1 -0
  36. package/lib/rewards/syncCommitteeRewards.d.ts +6 -0
  37. package/lib/rewards/syncCommitteeRewards.d.ts.map +1 -0
  38. package/lib/rewards/syncCommitteeRewards.js +36 -0
  39. package/lib/rewards/syncCommitteeRewards.js.map +1 -0
  40. package/lib/signatureSets/attesterSlashings.d.ts +4 -5
  41. package/lib/signatureSets/attesterSlashings.d.ts.map +1 -1
  42. package/lib/signatureSets/attesterSlashings.js +10 -7
  43. package/lib/signatureSets/attesterSlashings.js.map +1 -1
  44. package/lib/signatureSets/index.d.ts +2 -2
  45. package/lib/signatureSets/index.d.ts.map +1 -1
  46. package/lib/signatureSets/index.js +10 -10
  47. package/lib/signatureSets/index.js.map +1 -1
  48. package/lib/signatureSets/indexedAttestation.d.ts +5 -6
  49. package/lib/signatureSets/indexedAttestation.d.ts.map +1 -1
  50. package/lib/signatureSets/indexedAttestation.js +12 -9
  51. package/lib/signatureSets/indexedAttestation.js.map +1 -1
  52. package/lib/signatureSets/proposer.d.ts +5 -6
  53. package/lib/signatureSets/proposer.d.ts.map +1 -1
  54. package/lib/signatureSets/proposer.js +12 -10
  55. package/lib/signatureSets/proposer.js.map +1 -1
  56. package/lib/signatureSets/proposerSlashings.d.ts +3 -4
  57. package/lib/signatureSets/proposerSlashings.d.ts.map +1 -1
  58. package/lib/signatureSets/proposerSlashings.js +7 -4
  59. package/lib/signatureSets/proposerSlashings.js.map +1 -1
  60. package/lib/signatureSets/randao.d.ts +2 -3
  61. package/lib/signatureSets/randao.d.ts.map +1 -1
  62. package/lib/signatureSets/randao.js +6 -4
  63. package/lib/signatureSets/randao.js.map +1 -1
  64. package/lib/signatureSets/voluntaryExits.d.ts +4 -5
  65. package/lib/signatureSets/voluntaryExits.d.ts.map +1 -1
  66. package/lib/signatureSets/voluntaryExits.js +10 -7
  67. package/lib/signatureSets/voluntaryExits.js.map +1 -1
  68. package/lib/stateTransition.d.ts.map +1 -1
  69. package/lib/stateTransition.js +1 -2
  70. package/lib/stateTransition.js.map +1 -1
  71. package/package.json +14 -11
  72. package/src/block/isValidIndexedAttestation.ts +4 -2
  73. package/src/block/processAttestationsAltair.ts +1 -1
  74. package/src/block/processProposerSlashing.ts +1 -1
  75. package/src/block/processRandao.ts +2 -2
  76. package/src/block/processSyncCommittee.ts +7 -4
  77. package/src/block/processVoluntaryExit.ts +1 -1
  78. package/src/block/processWithdrawals.ts +230 -135
  79. package/src/index.ts +2 -2
  80. package/src/rewards/attestationsRewards.ts +200 -0
  81. package/src/rewards/blockRewards.ts +147 -0
  82. package/src/rewards/index.ts +3 -0
  83. package/src/rewards/syncCommitteeRewards.ts +59 -0
  84. package/src/signatureSets/attesterSlashings.ts +10 -9
  85. package/src/signatureSets/index.ts +11 -11
  86. package/src/signatureSets/indexedAttestation.ts +12 -11
  87. package/src/signatureSets/proposer.ts +11 -11
  88. package/src/signatureSets/proposerSlashings.ts +7 -6
  89. package/src/signatureSets/randao.ts +4 -5
  90. package/src/signatureSets/voluntaryExits.ts +10 -9
  91. package/src/stateTransition.ts +1 -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,EAAC,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAAC,iBAAiB,EAAC,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAC,yBAAyB,EAAC,MAAM,aAAa,CAAC;AAGtD;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,iBAAiB,EAC/B,KAAK,EAAE,yBAAyB,EAChC,kBAAkB,EAAE,kBAAkB,EACtC,eAAe,EAAE,OAAO,GACvB,OAAO,CAST;AAED,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,iBAAiB,EAC/B,KAAK,EAAE,yBAAyB,EAChC,kBAAkB,EAAE,wBAAwB,EAC5C,eAAe,EAAE,OAAO,GACvB,OAAO,CAST;AAED;;GAEG;AACH,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,yBAAyB,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CA2B7G"}
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,EAAC,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAAC,iBAAiB,EAAC,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAC,yBAAyB,EAAC,MAAM,aAAa,CAAC;AAGtD;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,iBAAiB,EAC/B,KAAK,EAAE,yBAAyB,EAChC,kBAAkB,EAAE,kBAAkB,EACtC,eAAe,EAAE,OAAO,GACvB,OAAO,CAST;AAED,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,iBAAiB,EAC/B,KAAK,EAAE,yBAAyB,EAChC,kBAAkB,EAAE,wBAAwB,EAC5C,eAAe,EAAE,OAAO,GACvB,OAAO,CAWT;AAED;;GAEG;AACH,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,yBAAyB,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CA2B7G"}
@@ -9,7 +9,7 @@ export function isValidIndexedAttestation(config, index2pubkey, state, indexedAt
9
9
  return false;
10
10
  }
11
11
  if (verifySignature) {
12
- return verifySignatureSet(getIndexedAttestationSignatureSet(config, index2pubkey, state, indexedAttestation));
12
+ return verifySignatureSet(getIndexedAttestationSignatureSet(config, index2pubkey, state.slot, indexedAttestation));
13
13
  }
14
14
  return true;
15
15
  }
@@ -18,7 +18,7 @@ export function isValidIndexedAttestationBigint(config, index2pubkey, state, ind
18
18
  return false;
19
19
  }
20
20
  if (verifySignature) {
21
- return verifySignatureSet(getIndexedAttestationBigintSignatureSet(config, index2pubkey, state, indexedAttestation));
21
+ return verifySignatureSet(getIndexedAttestationBigintSignatureSet(config, index2pubkey, state.slot, indexedAttestation));
22
22
  }
23
23
  return true;
24
24
  }
@@ -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;AAErH,OAAO,EAAC,kBAAkB,EAAC,MAAM,kBAAkB,CAAC;AAEpD;;GAEG;AACH,MAAM,UAAU,yBAAyB,CACvC,MAAoB,EACpB,YAA+B,EAC/B,KAAgC,EAChC,kBAAsC,EACtC,eAAwB;IAExB,IAAI,CAAC,gCAAgC,CAAC,KAAK,EAAE,kBAAkB,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAClF,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,kBAAkB,CAAC,iCAAiC,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAChH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,+BAA+B,CAC7C,MAAoB,EACpB,YAA+B,EAC/B,KAAgC,EAChC,kBAA4C,EAC5C,eAAwB;IAExB,IAAI,CAAC,gCAAgC,CAAC,KAAK,EAAE,kBAAkB,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAClF,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,kBAAkB,CAAC,uCAAuC,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACtH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gCAAgC,CAAC,KAAgC,EAAE,OAAiB;IAClG,+BAA+B;IAC/B,MAAM,UAAU,GACd,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,OAAO;QACpD,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,wEAAwE;IACxE,MAAM,SAAS,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,SAAS,IAAI,SAAS,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;QACtD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
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;AAErH,OAAO,EAAC,kBAAkB,EAAC,MAAM,kBAAkB,CAAC;AAEpD;;GAEG;AACH,MAAM,UAAU,yBAAyB,CACvC,MAAoB,EACpB,YAA+B,EAC/B,KAAgC,EAChC,kBAAsC,EACtC,eAAwB;IAExB,IAAI,CAAC,gCAAgC,CAAC,KAAK,EAAE,kBAAkB,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAClF,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,kBAAkB,CAAC,iCAAiC,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACrH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,+BAA+B,CAC7C,MAAoB,EACpB,YAA+B,EAC/B,KAAgC,EAChC,kBAA4C,EAC5C,eAAwB;IAExB,IAAI,CAAC,gCAAgC,CAAC,KAAK,EAAE,kBAAkB,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAClF,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,kBAAkB,CACvB,uCAAuC,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAC9F,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gCAAgC,CAAC,KAAgC,EAAE,OAAiB;IAClG,+BAA+B;IAC/B,MAAM,UAAU,GACd,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,OAAO;QACpD,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,wEAAwE;IACxE,MAAM,SAAS,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,SAAS,IAAI,SAAS,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;QACtD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -32,7 +32,7 @@ export function processAttestationsAltair(fork, state, attestations, verifySigna
32
32
  // TODO: Why should we verify an indexed attestation that we just created? If it's just for the signature
33
33
  // we can verify only that and nothing else.
34
34
  if (verifySignature) {
35
- const sigSet = getAttestationWithIndicesSignatureSet(state.config, epochCtx.index2pubkey, state, attestation, attestingIndices);
35
+ const sigSet = getAttestationWithIndicesSignatureSet(state.config, epochCtx.index2pubkey, state.slot, attestation, attestingIndices);
36
36
  if (!verifySignatureSet(sigSet)) {
37
37
  throw new Error("Attestation signature is not valid");
38
38
  }
@@ -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":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAC/C,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,OAAO,EAAC,MAAM,iBAAiB,CAAC;AAExC,OAAO,EAAC,qCAAqC,EAAC,MAAM,wCAAwC,CAAC;AAE7F,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;IAE7C,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,KAAK,CAAC,CAAC;IACvC,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,CAClD,KAAK,CAAC,MAAM,EACZ,QAAQ,CAAC,YAAY,EACrB,KAAK,CAAC,IAAI,EACV,WAAW,EACX,gBAAgB,CACjB,CAAC;YACF,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;gBAChC,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,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAC5G,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;AACtD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iCAAiC,CAC/C,IAAa,EACb,IAA4B,EAC5B,cAAsB,EACtB,YAAmB,EACnB,SAAoB,EACpB,4BAA8C;IAE9C,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,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,4BAA4B,CAAC,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC,CAAC;QAClH,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;AACf,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,GAAsB,EAAE,GAAsB;IAClF,OAAO,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;AACxE,CAAC"}
@@ -50,7 +50,7 @@ export function assertValidProposerSlashing(state, proposerSlashing, verifySigna
50
50
  }
51
51
  // verify signatures
52
52
  if (verifySignatures) {
53
- const signatureSets = getProposerSlashingSignatureSets(state.config, state.epochCtx.index2pubkey, state, proposerSlashing);
53
+ const signatureSets = getProposerSlashingSignatureSets(state.config, state.epochCtx.index2pubkey, state.slot, proposerSlashing);
54
54
  for (let i = 0; i < signatureSets.length; i++) {
55
55
  if (!verifySignatureSet(signatureSets[i])) {
56
56
  throw new Error(`ProposerSlashing header${i + 1} signature invalid`);
@@ -1 +1 @@
1
- {"version":3,"file":"processProposerSlashing.js","sourceRoot":"","sources":["../../src/block/processProposerSlashing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"processProposerSlashing.js","sourceRoot":"","sources":["../../src/block/processProposerSlashing.ts"],"names":[],"mappings":"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"}
@@ -9,11 +9,11 @@ import { getRandaoMix } from "../util/index.js";
9
9
  * PERF: Fixed work independent of block contents.
10
10
  */
11
11
  export function processRandao(state, block, verifySignature = true) {
12
- const { epochCtx } = state;
12
+ const { epochCtx, config } = state;
13
13
  const epoch = epochCtx.epoch;
14
14
  const randaoReveal = block.body.randaoReveal;
15
15
  // verify RANDAO reveal
16
- if (verifySignature && !verifyRandaoSignature(state.config, epochCtx.index2pubkey, state, block)) {
16
+ if (verifySignature && !verifyRandaoSignature(config, epochCtx.index2pubkey, block)) {
17
17
  throw new Error("RANDAO reveal is an invalid signature");
18
18
  }
19
19
  // mix in RANDAO reveal
@@ -1 +1 @@
1
- {"version":3,"file":"processRandao.js","sourceRoot":"","sources":["../../src/block/processRandao.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAC,4BAA4B,EAAC,MAAM,kBAAkB,CAAC;AAE9D,OAAO,EAAC,GAAG,EAAC,MAAM,iBAAiB,CAAC;AACpC,OAAO,EAAC,qBAAqB,EAAC,MAAM,2BAA2B,CAAC;AAEhE,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAE9C;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,KAAgC,EAAE,KAAkB,EAAE,eAAe,GAAG,IAAI;IACxG,MAAM,EAAC,QAAQ,EAAC,GAAG,KAAK,CAAC;IACzB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC7B,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;IAE7C,uBAAuB;IACvB,IAAI,eAAe,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,YAAY,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;QACjG,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IAED,uBAAuB;IACvB,MAAM,SAAS,GAAG,GAAG,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;IACxE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,GAAG,4BAA4B,EAAE,SAAS,CAAC,CAAC;AACzE,CAAC"}
1
+ {"version":3,"file":"processRandao.js","sourceRoot":"","sources":["../../src/block/processRandao.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAC,4BAA4B,EAAC,MAAM,kBAAkB,CAAC;AAE9D,OAAO,EAAC,GAAG,EAAC,MAAM,iBAAiB,CAAC;AACpC,OAAO,EAAC,qBAAqB,EAAC,MAAM,2BAA2B,CAAC;AAEhE,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAE9C;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,KAAgC,EAAE,KAAkB,EAAE,eAAe,GAAG,IAAI;IACxG,MAAM,EAAC,QAAQ,EAAE,MAAM,EAAC,GAAG,KAAK,CAAC;IACjC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC7B,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;IAE7C,uBAAuB;IACvB,IAAI,eAAe,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC;QACpF,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IAED,uBAAuB;IACvB,MAAM,SAAS,GAAG,GAAG,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;IACxE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,GAAG,4BAA4B,EAAE,SAAS,CAAC,CAAC;AACzE,CAAC"}
@@ -1,10 +1,11 @@
1
1
  import { BeaconConfig } from "@lodestar/config";
2
2
  import { altair } from "@lodestar/types";
3
3
  import { Index2PubkeyCache } from "../cache/pubkeyCache.js";
4
+ import { SyncCommitteeCache } from "../cache/syncCommitteeCache.js";
4
5
  import { CachedBeaconStateAllForks } from "../types.js";
5
6
  import { ISignatureSet } from "../util/index.js";
6
7
  export declare function processSyncAggregate(state: CachedBeaconStateAllForks, block: altair.BeaconBlock, verifySignatures?: boolean): void;
7
- export declare function getSyncCommitteeSignatureSet(config: BeaconConfig, index2pubkey: Index2PubkeyCache, state: CachedBeaconStateAllForks, block: altair.BeaconBlock,
8
+ export declare function getSyncCommitteeSignatureSet(config: BeaconConfig, index2pubkey: Index2PubkeyCache, currentSyncCommitteeIndexed: SyncCommitteeCache, block: altair.BeaconBlock,
8
9
  /** Optional parameter to prevent computing it twice */
9
10
  participantIndices?: number[]): ISignatureSet | null;
10
11
  //# sourceMappingURL=processSyncCommittee.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"processSyncCommittee.d.ts","sourceRoot":"","sources":["../../src/block/processSyncCommittee.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAC,MAAM,EAAM,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAC,iBAAiB,EAAC,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAC,yBAAyB,EAAC,MAAM,aAAa,CAAC;AACtD,OAAO,EACL,aAAa,EAMd,MAAM,kBAAkB,CAAC;AAE1B,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,yBAAyB,EAChC,KAAK,EAAE,MAAM,CAAC,WAAW,EACzB,gBAAgB,UAAO,GACtB,IAAI,CAkDN;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,iBAAiB,EAC/B,KAAK,EAAE,yBAAyB,EAChC,KAAK,EAAE,MAAM,CAAC,WAAW;AACzB,uDAAuD;AACvD,kBAAkB,CAAC,EAAE,MAAM,EAAE,GAC5B,aAAa,GAAG,IAAI,CA8CtB"}
1
+ {"version":3,"file":"processSyncCommittee.d.ts","sourceRoot":"","sources":["../../src/block/processSyncCommittee.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAC,MAAM,EAAM,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAC,iBAAiB,EAAC,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAC,kBAAkB,EAAC,MAAM,gCAAgC,CAAC;AAElE,OAAO,EAAC,yBAAyB,EAAC,MAAM,aAAa,CAAC;AACtD,OAAO,EACL,aAAa,EAMd,MAAM,kBAAkB,CAAC;AAE1B,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,yBAAyB,EAChC,KAAK,EAAE,MAAM,CAAC,WAAW,EACzB,gBAAgB,UAAO,GACtB,IAAI,CAkDN;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,iBAAiB,EAC/B,2BAA2B,EAAE,kBAAkB,EAC/C,KAAK,EAAE,MAAM,CAAC,WAAW;AACzB,uDAAuD;AACvD,kBAAkB,CAAC,EAAE,MAAM,EAAE,GAC5B,aAAa,GAAG,IAAI,CAgDtB"}
@@ -9,7 +9,7 @@ export function processSyncAggregate(state, block, verifySignatures = true) {
9
9
  if (verifySignatures) {
10
10
  // This is to conform to the spec - we want the signature to be verified
11
11
  const participantIndices = block.body.syncAggregate.syncCommitteeBits.intersectValues(committeeIndices);
12
- const signatureSet = getSyncCommitteeSignatureSet(state.config, state.epochCtx.index2pubkey, state, block, participantIndices);
12
+ const signatureSet = getSyncCommitteeSignatureSet(state.config, state.epochCtx.index2pubkey, state.epochCtx.currentSyncCommitteeIndexed, block, participantIndices);
13
13
  // When there's no participation we consider the signature valid and just ignore i
14
14
  if (signatureSet !== null && !verifySignatureSet(signatureSet)) {
15
15
  throw Error("Sync committee signature invalid");
@@ -46,7 +46,7 @@ export function processSyncAggregate(state, block, verifySignatures = true) {
46
46
  // Apply proposer balance
47
47
  state.balances.set(proposerIndex, proposerBalance);
48
48
  }
49
- export function getSyncCommitteeSignatureSet(config, index2pubkey, state, block,
49
+ export function getSyncCommitteeSignatureSet(config, index2pubkey, currentSyncCommitteeIndexed, block,
50
50
  /** Optional parameter to prevent computing it twice */
51
51
  participantIndices) {
52
52
  const { syncAggregate } = block.body;
@@ -69,7 +69,7 @@ participantIndices) {
69
69
  // So getSyncCommitteeSignatureSet() can be called with a state in any slot (with the correct shuffling)
70
70
  const rootSigned = block.parentRoot;
71
71
  if (!participantIndices) {
72
- const committeeIndices = state.epochCtx.currentSyncCommitteeIndexed.validatorIndices;
72
+ const committeeIndices = currentSyncCommitteeIndexed.validatorIndices;
73
73
  participantIndices = syncAggregate.syncCommitteeBits.intersectValues(committeeIndices);
74
74
  }
75
75
  // When there's no participation we consider the signature valid and just ignore it
@@ -81,7 +81,9 @@ participantIndices) {
81
81
  }
82
82
  throw Error("Empty sync committee signature is not infinity");
83
83
  }
84
- const domain = config.getDomain(state.slot, DOMAIN_SYNC_COMMITTEE, previousSlot);
84
+ // the getDomain() api requires the state slot as 1st param, however it's the same to block.slot in state-transition
85
+ // and the same epoch when we verify blocks in batch in beacon-node. So we can safely use block.slot here.
86
+ const domain = config.getDomain(block.slot, DOMAIN_SYNC_COMMITTEE, previousSlot);
85
87
  return {
86
88
  type: SignatureSetType.aggregate,
87
89
  pubkeys: participantIndices.map((i) => index2pubkey[i]),
@@ -1 +1 @@
1
- {"version":3,"file":"processSyncCommittee.js","sourceRoot":"","sources":["../../src/block/processSyncCommittee.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"processSyncCommittee.js","sourceRoot":"","sources":["../../src/block/processSyncCommittee.ts"],"names":[],"mappings":"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"}
@@ -52,7 +52,7 @@ export function getVoluntaryExitValidity(fork, state, signedVoluntaryExit, verif
52
52
  return VoluntaryExitValidity.pendingWithdrawals;
53
53
  }
54
54
  if (verifySignature &&
55
- !verifyVoluntaryExitSignature(state.config, epochCtx.index2pubkey, state, signedVoluntaryExit)) {
55
+ !verifyVoluntaryExitSignature(state.config, epochCtx.index2pubkey, state.slot, signedVoluntaryExit)) {
56
56
  return VoluntaryExitValidity.invalidSignature;
57
57
  }
58
58
  return VoluntaryExitValidity.valid;
@@ -1 +1 @@
1
- {"version":3,"file":"processVoluntaryExit.js","sourceRoot":"","sources":["../../src/block/processVoluntaryExit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"processVoluntaryExit.js","sourceRoot":"","sources":["../../src/block/processVoluntaryExit.ts"],"names":[],"mappings":"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"}
@@ -3,9 +3,9 @@ import { capella } from "@lodestar/types";
3
3
  import { CachedBeaconStateCapella, CachedBeaconStateElectra, CachedBeaconStateGloas } from "../types.js";
4
4
  export declare function processWithdrawals(fork: ForkSeq, state: CachedBeaconStateCapella | CachedBeaconStateElectra | CachedBeaconStateGloas, payload?: capella.FullOrBlindedExecutionPayload): void;
5
5
  export declare function getExpectedWithdrawals(fork: ForkSeq, state: CachedBeaconStateCapella | CachedBeaconStateElectra | CachedBeaconStateGloas): {
6
- withdrawals: capella.Withdrawal[];
7
- sampledValidators: number;
8
- processedPartialWithdrawalsCount: number;
6
+ expectedWithdrawals: capella.Withdrawal[];
9
7
  processedBuilderWithdrawalsCount: number;
8
+ processedPartialWithdrawalsCount: number;
9
+ processedValidatorSweepCount: number;
10
10
  };
11
11
  //# sourceMappingURL=processWithdrawals.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"processWithdrawals.d.ts","sourceRoot":"","sources":["../../src/block/processWithdrawals.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,OAAO,EAMR,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAiB,OAAO,EAAM,MAAM,iBAAiB,CAAC;AAE7D,OAAO,EAAC,wBAAwB,EAAE,wBAAwB,EAAE,sBAAsB,EAAC,MAAM,aAAa,CAAC;AAUvG,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,wBAAwB,GAAG,wBAAwB,GAAG,sBAAsB,EACnF,OAAO,CAAC,EAAE,OAAO,CAAC,6BAA6B,GAC9C,IAAI,CA0FN;AAED,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,wBAAwB,GAAG,wBAAwB,GAAG,sBAAsB,GAClF;IACD,WAAW,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC;IAClC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gCAAgC,EAAE,MAAM,CAAC;IACzC,gCAAgC,EAAE,MAAM,CAAC;CAC1C,CA2KA"}
1
+ {"version":3,"file":"processWithdrawals.d.ts","sourceRoot":"","sources":["../../src/block/processWithdrawals.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,OAAO,EAMR,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAiB,OAAO,EAAM,MAAM,iBAAiB,CAAC;AAE7D,OAAO,EAAC,wBAAwB,EAAE,wBAAwB,EAAE,sBAAsB,EAAC,MAAM,aAAa,CAAC;AAUvG,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,wBAAwB,GAAG,wBAAwB,GAAG,sBAAsB,EACnF,OAAO,CAAC,EAAE,OAAO,CAAC,6BAA6B,GAC9C,IAAI,CAuFN;AAkND,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,wBAAwB,GAAG,wBAAwB,GAAG,sBAAsB,GAClF;IACD,mBAAmB,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC;IAC1C,gCAAgC,EAAE,MAAM,CAAC;IACzC,gCAAgC,EAAE,MAAM,CAAC;IACzC,4BAA4B,EAAE,MAAM,CAAC;CACtC,CA6DA"}
@@ -1,7 +1,7 @@
1
1
  import { byteArrayEquals } from "@chainsafe/ssz";
2
2
  import { FAR_FUTURE_EPOCH, ForkSeq, MAX_EFFECTIVE_BALANCE, MAX_PENDING_PARTIALS_PER_WITHDRAWALS_SWEEP, MAX_VALIDATORS_PER_WITHDRAWALS_SWEEP, MAX_WITHDRAWALS_PER_PAYLOAD, MIN_ACTIVATION_BALANCE, } from "@lodestar/params";
3
3
  import { ssz } from "@lodestar/types";
4
- import { MapDef, toRootHex } from "@lodestar/utils";
4
+ import { toRootHex } from "@lodestar/utils";
5
5
  import { isBuilderPaymentWithdrawable, isParentBlockFull } from "../util/gloas.js";
6
6
  import { decreaseBalance, getMaxEffectiveBalance, hasEth1WithdrawalCredential, hasExecutionWithdrawalCredential, isCapellaPayloadHeader, } from "../util/index.js";
7
7
  export function processWithdrawals(fork, state, payload) {
@@ -9,9 +9,10 @@ export function processWithdrawals(fork, state, payload) {
9
9
  if (fork >= ForkSeq.gloas && !isParentBlockFull(state)) {
10
10
  return;
11
11
  }
12
- // processedPartialWithdrawalsCount is withdrawals coming from EL since electra (EIP-7002)
13
12
  // processedBuilderWithdrawalsCount is withdrawals coming from builder payment since gloas (EIP-7732)
14
- const { withdrawals: expectedWithdrawals, processedPartialWithdrawalsCount, processedBuilderWithdrawalsCount, } = getExpectedWithdrawals(fork, state);
13
+ // processedPartialWithdrawalsCount is withdrawals coming from EL since electra (EIP-7002)
14
+ // processedValidatorSweepCount is withdrawals coming from validator sweep
15
+ const { expectedWithdrawals, processedBuilderWithdrawalsCount, processedPartialWithdrawalsCount } = getExpectedWithdrawals(fork, state);
15
16
  const numWithdrawals = expectedWithdrawals.length;
16
17
  // After gloas, withdrawals are verified later in processExecutionPayloadEnvelope
17
18
  if (fork < ForkSeq.gloas) {
@@ -37,11 +38,9 @@ export function processWithdrawals(fork, state, payload) {
37
38
  }
38
39
  }
39
40
  }
40
- for (let i = 0; i < numWithdrawals; i++) {
41
- const withdrawal = expectedWithdrawals[i];
42
- decreaseBalance(state, withdrawal.validatorIndex, Number(withdrawal.amount));
43
- }
41
+ applyWithdrawals(state, expectedWithdrawals);
44
42
  if (fork >= ForkSeq.electra) {
43
+ // https://github.com/ethereum/consensus-specs/blob/v1.7.0-alpha.0/specs/electra/beacon-chain.md#new-update_pending_partial_withdrawals
45
44
  const stateElectra = state;
46
45
  stateElectra.pendingPartialWithdrawals = stateElectra.pendingPartialWithdrawals.sliceFrom(processedPartialWithdrawalsCount);
47
46
  }
@@ -61,10 +60,12 @@ export function processWithdrawals(fork, state, payload) {
61
60
  ]);
62
61
  }
63
62
  // Update the nextWithdrawalIndex
63
+ // https://github.com/ethereum/consensus-specs/blob/v1.7.0-alpha.0/specs/capella/beacon-chain.md#new-update_next_withdrawal_index
64
64
  const latestWithdrawal = expectedWithdrawals.at(-1);
65
65
  if (latestWithdrawal) {
66
66
  state.nextWithdrawalIndex = latestWithdrawal.index + 1;
67
67
  }
68
+ // https://github.com/ethereum/consensus-specs/blob/v1.7.0-alpha.0/specs/capella/beacon-chain.md#new-update_next_withdrawal_validator_index
68
69
  // Update the nextWithdrawalValidatorIndex
69
70
  if (latestWithdrawal && expectedWithdrawals.length === MAX_WITHDRAWALS_PER_PAYLOAD) {
70
71
  // All slots filled, nextWithdrawalValidatorIndex should be validatorIndex having next turn
@@ -77,110 +78,119 @@ export function processWithdrawals(fork, state, payload) {
77
78
  (state.nextWithdrawalValidatorIndex + MAX_VALIDATORS_PER_WITHDRAWALS_SWEEP) % state.validators.length;
78
79
  }
79
80
  }
80
- export function getExpectedWithdrawals(fork, state) {
81
- if (fork < ForkSeq.capella) {
82
- throw new Error(`getExpectedWithdrawals not supported at forkSeq=${fork} < ForkSeq.capella`);
83
- }
81
+ function getBuilderWithdrawals(state, withdrawalIndex, balanceAfterWithdrawals) {
82
+ const builderWithdrawals = [];
84
83
  const epoch = state.epochCtx.epoch;
85
- let withdrawalIndex = state.nextWithdrawalIndex;
86
- const { validators, balances, nextWithdrawalValidatorIndex } = state;
87
- const withdrawals = [];
88
- const withdrawnBalances = new MapDef(() => 0);
89
- const isPostElectra = fork >= ForkSeq.electra;
90
- const isPostGloas = fork >= ForkSeq.gloas;
91
- // partialWithdrawalsCount is withdrawals coming from EL since electra (EIP-7002)
92
- let processedPartialWithdrawalsCount = 0;
93
- // builderWithdrawalsCount is withdrawals coming from builder payments since Gloas (EIP-7732)
94
- let processedBuilderWithdrawalsCount = 0;
95
- if (isPostGloas) {
96
- const stateGloas = state;
97
- const allBuilderPendingWithdrawals = stateGloas.builderPendingWithdrawals.length <= MAX_WITHDRAWALS_PER_PAYLOAD
98
- ? stateGloas.builderPendingWithdrawals.getAllReadonly()
99
- : null;
100
- for (let i = 0; i < stateGloas.builderPendingWithdrawals.length; i++) {
101
- const withdrawal = allBuilderPendingWithdrawals
102
- ? allBuilderPendingWithdrawals[i]
103
- : stateGloas.builderPendingWithdrawals.getReadonly(i);
104
- if (withdrawal.withdrawableEpoch > epoch || withdrawals.length + 1 === MAX_WITHDRAWALS_PER_PAYLOAD) {
105
- break;
84
+ const allBuilderPendingWithdrawals = state.builderPendingWithdrawals.length <= MAX_WITHDRAWALS_PER_PAYLOAD
85
+ ? state.builderPendingWithdrawals.getAllReadonly()
86
+ : null;
87
+ let processedCount = 0;
88
+ for (let i = 0; i < state.builderPendingWithdrawals.length; i++) {
89
+ const withdrawal = allBuilderPendingWithdrawals
90
+ ? allBuilderPendingWithdrawals[i]
91
+ : state.builderPendingWithdrawals.getReadonly(i);
92
+ if (withdrawal.withdrawableEpoch > epoch || builderWithdrawals.length === MAX_WITHDRAWALS_PER_PAYLOAD) {
93
+ break;
94
+ }
95
+ if (isBuilderPaymentWithdrawable(state, withdrawal)) {
96
+ const builderIndex = withdrawal.builderIndex;
97
+ const builder = state.validators.get(withdrawal.builderIndex);
98
+ let balance = balanceAfterWithdrawals.get(builderIndex);
99
+ if (balance === undefined) {
100
+ balance = state.balances.get(builderIndex);
101
+ balanceAfterWithdrawals.set(builderIndex, balance);
106
102
  }
107
- if (isBuilderPaymentWithdrawable(stateGloas, withdrawal)) {
108
- const totalWithdrawn = withdrawnBalances.getOrDefault(withdrawal.builderIndex);
109
- const balance = state.balances.get(withdrawal.builderIndex) - totalWithdrawn;
110
- const builder = state.validators.get(withdrawal.builderIndex);
111
- let withdrawableBalance = 0;
112
- if (builder.slashed) {
113
- withdrawableBalance = balance < withdrawal.amount ? balance : withdrawal.amount;
114
- }
115
- else if (balance > MIN_ACTIVATION_BALANCE) {
116
- withdrawableBalance =
117
- balance - MIN_ACTIVATION_BALANCE < withdrawal.amount ? balance - MIN_ACTIVATION_BALANCE : withdrawal.amount;
118
- }
119
- if (withdrawableBalance > 0) {
120
- withdrawals.push({
121
- index: withdrawalIndex,
122
- validatorIndex: withdrawal.builderIndex,
123
- address: withdrawal.feeRecipient,
124
- amount: BigInt(withdrawableBalance),
125
- });
126
- withdrawalIndex++;
127
- withdrawnBalances.set(withdrawal.builderIndex, totalWithdrawn + withdrawableBalance);
128
- }
103
+ let withdrawableBalance = 0;
104
+ if (builder.slashed) {
105
+ withdrawableBalance = balance < withdrawal.amount ? balance : withdrawal.amount;
129
106
  }
130
- processedBuilderWithdrawalsCount++;
131
- }
132
- }
133
- if (isPostElectra) {
134
- // In pre-gloas, partialWithdrawalBound == MAX_PENDING_PARTIALS_PER_WITHDRAWALS_SWEEP
135
- const partialWithdrawalBound = Math.min(withdrawals.length + MAX_PENDING_PARTIALS_PER_WITHDRAWALS_SWEEP, MAX_WITHDRAWALS_PER_PAYLOAD - 1);
136
- const stateElectra = state;
137
- // MAX_PENDING_PARTIALS_PER_WITHDRAWALS_SWEEP = 8, PENDING_PARTIAL_WITHDRAWALS_LIMIT: 134217728 so we should only call getAllReadonly() if it makes sense
138
- // pendingPartialWithdrawals comes from EIP-7002 smart contract where it takes fee so it's more likely than not validator is in correct condition to withdraw
139
- // also we may break early if withdrawableEpoch > epoch
140
- const allPendingPartialWithdrawals = stateElectra.pendingPartialWithdrawals.length <= partialWithdrawalBound
141
- ? stateElectra.pendingPartialWithdrawals.getAllReadonly()
142
- : null;
143
- // EIP-7002: Execution layer triggerable withdrawals
144
- for (let i = 0; i < stateElectra.pendingPartialWithdrawals.length; i++) {
145
- const withdrawal = allPendingPartialWithdrawals
146
- ? allPendingPartialWithdrawals[i]
147
- : stateElectra.pendingPartialWithdrawals.getReadonly(i);
148
- if (withdrawal.withdrawableEpoch > epoch || withdrawals.length === partialWithdrawalBound) {
149
- break;
107
+ else if (balance > MIN_ACTIVATION_BALANCE) {
108
+ withdrawableBalance =
109
+ balance - MIN_ACTIVATION_BALANCE < withdrawal.amount ? balance - MIN_ACTIVATION_BALANCE : withdrawal.amount;
150
110
  }
151
- const validator = validators.getReadonly(withdrawal.validatorIndex);
152
- const totalWithdrawn = withdrawnBalances.getOrDefault(withdrawal.validatorIndex);
153
- const balance = state.balances.get(withdrawal.validatorIndex) - totalWithdrawn;
154
- if (validator.exitEpoch === FAR_FUTURE_EPOCH &&
155
- validator.effectiveBalance >= MIN_ACTIVATION_BALANCE &&
156
- balance > MIN_ACTIVATION_BALANCE) {
157
- const balanceOverMinActivationBalance = BigInt(balance - MIN_ACTIVATION_BALANCE);
158
- const withdrawableBalance = balanceOverMinActivationBalance < withdrawal.amount ? balanceOverMinActivationBalance : withdrawal.amount;
159
- withdrawals.push({
111
+ if (withdrawableBalance > 0) {
112
+ builderWithdrawals.push({
160
113
  index: withdrawalIndex,
161
- validatorIndex: withdrawal.validatorIndex,
162
- address: validator.withdrawalCredentials.subarray(12),
163
- amount: withdrawableBalance,
114
+ validatorIndex: withdrawal.builderIndex,
115
+ address: withdrawal.feeRecipient,
116
+ amount: BigInt(withdrawableBalance),
164
117
  });
165
118
  withdrawalIndex++;
166
- withdrawnBalances.set(withdrawal.validatorIndex, totalWithdrawn + Number(withdrawableBalance));
119
+ balanceAfterWithdrawals.set(builderIndex, balance - withdrawableBalance);
167
120
  }
168
- processedPartialWithdrawalsCount++;
169
121
  }
122
+ processedCount++;
170
123
  }
171
- const withdrawalBound = Math.min(validators.length, MAX_VALIDATORS_PER_WITHDRAWALS_SWEEP);
172
- let n = 0;
124
+ return { builderWithdrawals, withdrawalIndex, processedCount };
125
+ }
126
+ function getPendingPartialWithdrawals(state, withdrawalIndex, numPriorWithdrawal, balanceAfterWithdrawals) {
127
+ const epoch = state.epochCtx.epoch;
128
+ const pendingPartialWithdrawals = [];
129
+ const validators = state.validators;
130
+ // In pre-gloas, partialWithdrawalBound == MAX_PENDING_PARTIALS_PER_WITHDRAWALS_SWEEP
131
+ const partialWithdrawalBound = Math.min(numPriorWithdrawal + MAX_PENDING_PARTIALS_PER_WITHDRAWALS_SWEEP, MAX_WITHDRAWALS_PER_PAYLOAD - 1);
132
+ // MAX_PENDING_PARTIALS_PER_WITHDRAWALS_SWEEP = 8, PENDING_PARTIAL_WITHDRAWALS_LIMIT: 134217728 so we should only call getAllReadonly() if it makes sense
133
+ // pendingPartialWithdrawals comes from EIP-7002 smart contract where it takes fee so it's more likely than not validator is in correct condition to withdraw
134
+ // also we may break early if withdrawableEpoch > epoch
135
+ const allPendingPartialWithdrawals = state.pendingPartialWithdrawals.length <= partialWithdrawalBound
136
+ ? state.pendingPartialWithdrawals.getAllReadonly()
137
+ : null;
138
+ // EIP-7002: Execution layer triggerable withdrawals
139
+ let processedCount = 0;
140
+ for (let i = 0; i < state.pendingPartialWithdrawals.length; i++) {
141
+ const withdrawal = allPendingPartialWithdrawals
142
+ ? allPendingPartialWithdrawals[i]
143
+ : state.pendingPartialWithdrawals.getReadonly(i);
144
+ if (withdrawal.withdrawableEpoch > epoch ||
145
+ pendingPartialWithdrawals.length + numPriorWithdrawal === partialWithdrawalBound) {
146
+ break;
147
+ }
148
+ const validatorIndex = withdrawal.validatorIndex;
149
+ const validator = validators.getReadonly(validatorIndex);
150
+ let balance = balanceAfterWithdrawals.get(validatorIndex);
151
+ if (balance === undefined) {
152
+ balance = state.balances.get(validatorIndex);
153
+ balanceAfterWithdrawals.set(validatorIndex, balance);
154
+ }
155
+ if (validator.exitEpoch === FAR_FUTURE_EPOCH &&
156
+ validator.effectiveBalance >= MIN_ACTIVATION_BALANCE &&
157
+ balance > MIN_ACTIVATION_BALANCE) {
158
+ const balanceOverMinActivationBalance = BigInt(balance - MIN_ACTIVATION_BALANCE);
159
+ const withdrawableBalance = balanceOverMinActivationBalance < withdrawal.amount ? balanceOverMinActivationBalance : withdrawal.amount;
160
+ pendingPartialWithdrawals.push({
161
+ index: withdrawalIndex,
162
+ validatorIndex,
163
+ address: validator.withdrawalCredentials.subarray(12),
164
+ amount: withdrawableBalance,
165
+ });
166
+ withdrawalIndex++;
167
+ balanceAfterWithdrawals.set(validatorIndex, balance - Number(withdrawableBalance));
168
+ }
169
+ processedCount++;
170
+ }
171
+ return { pendingPartialWithdrawals, withdrawalIndex, processedCount };
172
+ }
173
+ function getValidatorsSweepWithdrawals(fork, state, withdrawalIndex, numPriorWithdrawal, balanceAfterWithdrawals) {
174
+ const sweepWithdrawals = [];
175
+ const epoch = state.epochCtx.epoch;
176
+ const { validators, balances, nextWithdrawalValidatorIndex } = state;
177
+ const isPostElectra = fork >= ForkSeq.electra;
178
+ const validatorsLimit = Math.min(state.validators.length, MAX_VALIDATORS_PER_WITHDRAWALS_SWEEP);
179
+ let processedCount = 0;
173
180
  // Just run a bounded loop max iterating over all withdrawals
174
181
  // however breaks out once we have MAX_WITHDRAWALS_PER_PAYLOAD
175
- for (n = 0; n < withdrawalBound; n++) {
182
+ for (let n = 0; n < validatorsLimit; n++) {
183
+ if (sweepWithdrawals.length + numPriorWithdrawal === MAX_WITHDRAWALS_PER_PAYLOAD) {
184
+ break;
185
+ }
176
186
  // Get next validator in turn
177
187
  const validatorIndex = (nextWithdrawalValidatorIndex + n) % validators.length;
178
188
  const validator = validators.getReadonly(validatorIndex);
179
- const withdrawnBalance = withdrawnBalances.getOrDefault(validatorIndex);
180
- const balance = isPostElectra
181
- ? // Deduct partially withdrawn balance already queued above
182
- balances.get(validatorIndex) - withdrawnBalance
183
- : balances.get(validatorIndex);
189
+ let balance = balanceAfterWithdrawals.get(validatorIndex);
190
+ if (balance === undefined) {
191
+ balance = balances.get(validatorIndex);
192
+ balanceAfterWithdrawals.set(validatorIndex, balance);
193
+ }
184
194
  const { withdrawableEpoch, withdrawalCredentials, effectiveBalance } = validator;
185
195
  const hasWithdrawableCredentials = isPostElectra
186
196
  ? hasExecutionWithdrawalCredential(withdrawalCredentials)
@@ -188,37 +198,74 @@ export function getExpectedWithdrawals(fork, state) {
188
198
  // early skip for balance = 0 as its now more likely that validator has exited/slashed with
189
199
  // balance zero than not have withdrawal credentials set
190
200
  if (balance === 0 || !hasWithdrawableCredentials) {
201
+ processedCount++;
191
202
  continue;
192
203
  }
193
204
  // capella full withdrawal
194
205
  if (withdrawableEpoch <= epoch) {
195
- withdrawals.push({
206
+ sweepWithdrawals.push({
196
207
  index: withdrawalIndex,
197
208
  validatorIndex,
198
209
  address: validator.withdrawalCredentials.subarray(12),
199
210
  amount: BigInt(balance),
200
211
  });
201
212
  withdrawalIndex++;
202
- withdrawnBalances.set(validatorIndex, withdrawnBalance + balance);
213
+ balanceAfterWithdrawals.set(validatorIndex, 0);
203
214
  }
204
215
  else if (effectiveBalance === (isPostElectra ? getMaxEffectiveBalance(withdrawalCredentials) : MAX_EFFECTIVE_BALANCE) &&
205
216
  balance > effectiveBalance) {
206
217
  // capella partial withdrawal
207
218
  const partialAmount = balance - effectiveBalance;
208
- withdrawals.push({
219
+ sweepWithdrawals.push({
209
220
  index: withdrawalIndex,
210
221
  validatorIndex,
211
222
  address: validator.withdrawalCredentials.subarray(12),
212
223
  amount: BigInt(partialAmount),
213
224
  });
214
225
  withdrawalIndex++;
215
- withdrawnBalances.set(validatorIndex, withdrawnBalance + partialAmount);
216
- }
217
- // Break if we have enough to pack the block
218
- if (withdrawals.length >= MAX_WITHDRAWALS_PER_PAYLOAD) {
219
- break;
226
+ balanceAfterWithdrawals.set(validatorIndex, balance - partialAmount);
220
227
  }
228
+ processedCount++;
229
+ }
230
+ return { sweepWithdrawals, processedCount };
231
+ }
232
+ function applyWithdrawals(state, withdrawals) {
233
+ for (const withdrawal of withdrawals) {
234
+ decreaseBalance(state, withdrawal.validatorIndex, Number(withdrawal.amount));
235
+ }
236
+ }
237
+ export function getExpectedWithdrawals(fork, state) {
238
+ if (fork < ForkSeq.capella) {
239
+ throw new Error(`getExpectedWithdrawals not supported at forkSeq=${fork} < ForkSeq.capella`);
240
+ }
241
+ let withdrawalIndex = state.nextWithdrawalIndex;
242
+ const expectedWithdrawals = [];
243
+ // Map to track balances after applying withdrawals
244
+ // https://github.com/ethereum/consensus-specs/blob/v1.7.0-alpha.0/specs/capella/beacon-chain.md#new-get_balance_after_withdrawals
245
+ const balanceAfterWithdrawals = new Map();
246
+ // partialWithdrawalsCount is withdrawals coming from EL since electra (EIP-7002)
247
+ let processedPartialWithdrawalsCount = 0;
248
+ // builderWithdrawalsCount is withdrawals coming from builder payments since Gloas (EIP-7732)
249
+ let processedBuilderWithdrawalsCount = 0;
250
+ if (fork >= ForkSeq.gloas) {
251
+ const { builderWithdrawals, withdrawalIndex: newWithdrawalIndex, processedCount, } = getBuilderWithdrawals(state, withdrawalIndex, balanceAfterWithdrawals);
252
+ expectedWithdrawals.push(...builderWithdrawals);
253
+ withdrawalIndex = newWithdrawalIndex;
254
+ processedBuilderWithdrawalsCount = processedCount;
255
+ }
256
+ if (fork >= ForkSeq.electra) {
257
+ const { pendingPartialWithdrawals, withdrawalIndex: newWithdrawalIndex, processedCount, } = getPendingPartialWithdrawals(state, withdrawalIndex, expectedWithdrawals.length, balanceAfterWithdrawals);
258
+ expectedWithdrawals.push(...pendingPartialWithdrawals);
259
+ withdrawalIndex = newWithdrawalIndex;
260
+ processedPartialWithdrawalsCount = processedCount;
221
261
  }
222
- return { withdrawals, sampledValidators: n, processedPartialWithdrawalsCount, processedBuilderWithdrawalsCount };
262
+ const { sweepWithdrawals, processedCount: processedValidatorSweepCount } = getValidatorsSweepWithdrawals(fork, state, withdrawalIndex, expectedWithdrawals.length, balanceAfterWithdrawals);
263
+ expectedWithdrawals.push(...sweepWithdrawals);
264
+ return {
265
+ expectedWithdrawals,
266
+ processedBuilderWithdrawalsCount,
267
+ processedPartialWithdrawalsCount,
268
+ processedValidatorSweepCount,
269
+ };
223
270
  }
224
271
  //# sourceMappingURL=processWithdrawals.js.map