@lodestar/state-transition 1.39.0-dev.c151a164f2 → 1.39.0-dev.c630c55067

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 (99) hide show
  1. package/lib/block/index.d.ts.map +1 -1
  2. package/lib/block/index.js +4 -2
  3. package/lib/block/index.js.map +1 -1
  4. package/lib/block/isValidIndexedAttestation.d.ts.map +1 -1
  5. package/lib/block/isValidIndexedAttestation.js +2 -2
  6. package/lib/block/isValidIndexedAttestation.js.map +1 -1
  7. package/lib/block/processAttestationsAltair.js +1 -1
  8. package/lib/block/processAttestationsAltair.js.map +1 -1
  9. package/lib/block/processExecutionPayload.d.ts.map +1 -1
  10. package/lib/block/processExecutionPayload.js +6 -4
  11. package/lib/block/processExecutionPayload.js.map +1 -1
  12. package/lib/block/processProposerSlashing.js +1 -1
  13. package/lib/block/processProposerSlashing.js.map +1 -1
  14. package/lib/block/processRandao.js +2 -2
  15. package/lib/block/processRandao.js.map +1 -1
  16. package/lib/block/processSyncCommittee.d.ts +2 -1
  17. package/lib/block/processSyncCommittee.d.ts.map +1 -1
  18. package/lib/block/processSyncCommittee.js +6 -4
  19. package/lib/block/processSyncCommittee.js.map +1 -1
  20. package/lib/block/processVoluntaryExit.js +1 -1
  21. package/lib/block/processVoluntaryExit.js.map +1 -1
  22. package/lib/index.d.ts +2 -1
  23. package/lib/index.d.ts.map +1 -1
  24. package/lib/index.js +2 -0
  25. package/lib/index.js.map +1 -1
  26. package/lib/rewards/attestationsRewards.d.ts +6 -0
  27. package/lib/rewards/attestationsRewards.d.ts.map +1 -0
  28. package/lib/rewards/attestationsRewards.js +113 -0
  29. package/lib/rewards/attestationsRewards.js.map +1 -0
  30. package/lib/rewards/blockRewards.d.ts +13 -0
  31. package/lib/rewards/blockRewards.d.ts.map +1 -0
  32. package/lib/rewards/blockRewards.js +95 -0
  33. package/lib/rewards/blockRewards.js.map +1 -0
  34. package/lib/rewards/index.d.ts +4 -0
  35. package/lib/rewards/index.d.ts.map +1 -0
  36. package/lib/rewards/index.js +4 -0
  37. package/lib/rewards/index.js.map +1 -0
  38. package/lib/rewards/syncCommitteeRewards.d.ts +6 -0
  39. package/lib/rewards/syncCommitteeRewards.d.ts.map +1 -0
  40. package/lib/rewards/syncCommitteeRewards.js +36 -0
  41. package/lib/rewards/syncCommitteeRewards.js.map +1 -0
  42. package/lib/signatureSets/attesterSlashings.d.ts +4 -5
  43. package/lib/signatureSets/attesterSlashings.d.ts.map +1 -1
  44. package/lib/signatureSets/attesterSlashings.js +10 -7
  45. package/lib/signatureSets/attesterSlashings.js.map +1 -1
  46. package/lib/signatureSets/index.d.ts +2 -2
  47. package/lib/signatureSets/index.d.ts.map +1 -1
  48. package/lib/signatureSets/index.js +10 -10
  49. package/lib/signatureSets/index.js.map +1 -1
  50. package/lib/signatureSets/indexedAttestation.d.ts +5 -6
  51. package/lib/signatureSets/indexedAttestation.d.ts.map +1 -1
  52. package/lib/signatureSets/indexedAttestation.js +12 -9
  53. package/lib/signatureSets/indexedAttestation.js.map +1 -1
  54. package/lib/signatureSets/proposer.d.ts +2 -2
  55. package/lib/signatureSets/proposer.d.ts.map +1 -1
  56. package/lib/signatureSets/proposer.js +7 -4
  57. package/lib/signatureSets/proposer.js.map +1 -1
  58. package/lib/signatureSets/proposerSlashings.d.ts +3 -4
  59. package/lib/signatureSets/proposerSlashings.d.ts.map +1 -1
  60. package/lib/signatureSets/proposerSlashings.js +7 -4
  61. package/lib/signatureSets/proposerSlashings.js.map +1 -1
  62. package/lib/signatureSets/randao.d.ts +2 -3
  63. package/lib/signatureSets/randao.d.ts.map +1 -1
  64. package/lib/signatureSets/randao.js +6 -4
  65. package/lib/signatureSets/randao.js.map +1 -1
  66. package/lib/signatureSets/voluntaryExits.d.ts +4 -5
  67. package/lib/signatureSets/voluntaryExits.d.ts.map +1 -1
  68. package/lib/signatureSets/voluntaryExits.js +10 -7
  69. package/lib/signatureSets/voluntaryExits.js.map +1 -1
  70. package/lib/stateTransition.d.ts.map +1 -1
  71. package/lib/stateTransition.js +1 -2
  72. package/lib/stateTransition.js.map +1 -1
  73. package/lib/util/execution.d.ts +11 -1
  74. package/lib/util/execution.d.ts.map +1 -1
  75. package/lib/util/execution.js +26 -1
  76. package/lib/util/execution.js.map +1 -1
  77. package/package.json +6 -6
  78. package/src/block/index.ts +6 -2
  79. package/src/block/isValidIndexedAttestation.ts +4 -2
  80. package/src/block/processAttestationsAltair.ts +1 -1
  81. package/src/block/processExecutionPayload.ts +14 -8
  82. package/src/block/processProposerSlashing.ts +1 -1
  83. package/src/block/processRandao.ts +2 -2
  84. package/src/block/processSyncCommittee.ts +7 -4
  85. package/src/block/processVoluntaryExit.ts +1 -1
  86. package/src/index.ts +2 -2
  87. package/src/rewards/attestationsRewards.ts +200 -0
  88. package/src/rewards/blockRewards.ts +147 -0
  89. package/src/rewards/index.ts +3 -0
  90. package/src/rewards/syncCommitteeRewards.ts +59 -0
  91. package/src/signatureSets/attesterSlashings.ts +10 -9
  92. package/src/signatureSets/index.ts +11 -11
  93. package/src/signatureSets/indexedAttestation.ts +12 -11
  94. package/src/signatureSets/proposer.ts +5 -4
  95. package/src/signatureSets/proposerSlashings.ts +7 -6
  96. package/src/signatureSets/randao.ts +4 -5
  97. package/src/signatureSets/voluntaryExits.ts +10 -9
  98. package/src/stateTransition.ts +1 -4
  99. package/src/util/execution.ts +39 -0
@@ -1,12 +1,11 @@
1
1
  import { BeaconConfig } from "@lodestar/config";
2
- import { SignedBeaconBlock, phase0 } from "@lodestar/types";
2
+ import { SignedBeaconBlock, Slot, phase0 } from "@lodestar/types";
3
3
  import { Index2PubkeyCache } from "../cache/pubkeyCache.js";
4
- import { CachedBeaconStateAllForks } from "../types.js";
5
4
  import { ISignatureSet } from "../util/index.js";
6
- export declare function verifyVoluntaryExitSignature(config: BeaconConfig, index2pubkey: Index2PubkeyCache, state: CachedBeaconStateAllForks, signedVoluntaryExit: phase0.SignedVoluntaryExit): boolean;
5
+ export declare function verifyVoluntaryExitSignature(config: BeaconConfig, index2pubkey: Index2PubkeyCache, stateSlot: Slot, signedVoluntaryExit: phase0.SignedVoluntaryExit): boolean;
7
6
  /**
8
7
  * Extract signatures to allow validating all block signatures at once
9
8
  */
10
- export declare function getVoluntaryExitSignatureSet(config: BeaconConfig, index2pubkey: Index2PubkeyCache, state: CachedBeaconStateAllForks, signedVoluntaryExit: phase0.SignedVoluntaryExit): ISignatureSet;
11
- export declare function getVoluntaryExitsSignatureSets(config: BeaconConfig, index2pubkey: Index2PubkeyCache, state: CachedBeaconStateAllForks, signedBlock: SignedBeaconBlock): ISignatureSet[];
9
+ export declare function getVoluntaryExitSignatureSet(config: BeaconConfig, index2pubkey: Index2PubkeyCache, stateSlot: Slot, signedVoluntaryExit: phase0.SignedVoluntaryExit): ISignatureSet;
10
+ export declare function getVoluntaryExitsSignatureSets(config: BeaconConfig, index2pubkey: Index2PubkeyCache, signedBlock: SignedBeaconBlock): ISignatureSet[];
12
11
  //# 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,MAAM,EAAM,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAC,iBAAiB,EAAC,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAC,yBAAyB,EAAC,MAAM,aAAa,CAAC;AACtD,OAAO,EACL,aAAa,EAKd,MAAM,kBAAkB,CAAC;AAE1B,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,iBAAiB,EAC/B,KAAK,EAAE,yBAAyB,EAChC,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,GAC9C,OAAO,CAET;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,iBAAiB,EAC/B,KAAK,EAAE,yBAAyB,EAChC,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,GAC9C,aAAa,CAUf;AAED,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,iBAAiB,EAC/B,KAAK,EAAE,yBAAyB,EAChC,WAAW,EAAE,iBAAiB,GAC7B,aAAa,EAAE,CAIjB"}
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,iBAAiB,EAAC,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EACL,aAAa,EAKd,MAAM,kBAAkB,CAAC;AAE1B,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,iBAAiB,EAC/B,SAAS,EAAE,IAAI,EACf,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,GAC9C,OAAO,CAET;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,iBAAiB,EAC/B,SAAS,EAAE,IAAI,EACf,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,GAC9C,aAAa,CAUf;AAED,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,iBAAiB,EAC/B,WAAW,EAAE,iBAAiB,GAC7B,aAAa,EAAE,CAOjB"}
@@ -1,14 +1,14 @@
1
1
  import { ssz } from "@lodestar/types";
2
2
  import { SignatureSetType, computeSigningRoot, computeStartSlotAtEpoch, verifySignatureSet, } from "../util/index.js";
3
- export function verifyVoluntaryExitSignature(config, index2pubkey, state, signedVoluntaryExit) {
4
- return verifySignatureSet(getVoluntaryExitSignatureSet(config, index2pubkey, state, signedVoluntaryExit));
3
+ export function verifyVoluntaryExitSignature(config, index2pubkey, stateSlot, signedVoluntaryExit) {
4
+ return verifySignatureSet(getVoluntaryExitSignatureSet(config, index2pubkey, stateSlot, signedVoluntaryExit));
5
5
  }
6
6
  /**
7
7
  * Extract signatures to allow validating all block signatures at once
8
8
  */
9
- export function getVoluntaryExitSignatureSet(config, index2pubkey, state, signedVoluntaryExit) {
10
- const slot = computeStartSlotAtEpoch(signedVoluntaryExit.message.epoch);
11
- const domain = config.getDomainForVoluntaryExit(state.slot, slot);
9
+ export function getVoluntaryExitSignatureSet(config, index2pubkey, stateSlot, signedVoluntaryExit) {
10
+ const messageSlot = computeStartSlotAtEpoch(signedVoluntaryExit.message.epoch);
11
+ const domain = config.getDomainForVoluntaryExit(stateSlot, messageSlot);
12
12
  return {
13
13
  type: SignatureSetType.single,
14
14
  pubkey: index2pubkey[signedVoluntaryExit.message.validatorIndex],
@@ -16,7 +16,10 @@ export function getVoluntaryExitSignatureSet(config, index2pubkey, state, signed
16
16
  signature: signedVoluntaryExit.signature,
17
17
  };
18
18
  }
19
- export function getVoluntaryExitsSignatureSets(config, index2pubkey, state, signedBlock) {
20
- return signedBlock.message.body.voluntaryExits.map((voluntaryExit) => getVoluntaryExitSignatureSet(config, index2pubkey, state, voluntaryExit));
19
+ export function getVoluntaryExitsSignatureSets(config, index2pubkey, 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, index2pubkey, blockSlot, voluntaryExit));
21
24
  }
22
25
  //# sourceMappingURL=voluntaryExits.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"voluntaryExits.js","sourceRoot":"","sources":["../../src/signatureSets/voluntaryExits.ts"],"names":[],"mappings":"AACA,OAAO,EAA4B,GAAG,EAAC,MAAM,iBAAiB,CAAC;AAG/D,OAAO,EAEL,gBAAgB,EAChB,kBAAkB,EAClB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,UAAU,4BAA4B,CAC1C,MAAoB,EACpB,YAA+B,EAC/B,KAAgC,EAChC,mBAA+C;IAE/C,OAAO,kBAAkB,CAAC,4BAA4B,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC;AAC5G,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,4BAA4B,CAC1C,MAAoB,EACpB,YAA+B,EAC/B,KAAgC,EAChC,mBAA+C;IAE/C,MAAM,IAAI,GAAG,uBAAuB,CAAC,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACxE,MAAM,MAAM,GAAG,MAAM,CAAC,yBAAyB,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAElE,OAAO;QACL,IAAI,EAAE,gBAAgB,CAAC,MAAM;QAC7B,MAAM,EAAE,YAAY,CAAC,mBAAmB,CAAC,OAAO,CAAC,cAAc,CAAC;QAChE,WAAW,EAAE,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,EAAE,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC;QAC9F,SAAS,EAAE,mBAAmB,CAAC,SAAS;KACzC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,MAAoB,EACpB,YAA+B,EAC/B,KAAgC,EAChC,WAA8B;IAE9B,OAAO,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE,CACnE,4BAA4B,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,CAAC,CACzE,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"voluntaryExits.js","sourceRoot":"","sources":["../../src/signatureSets/voluntaryExits.ts"],"names":[],"mappings":"AACA,OAAO,EAAkC,GAAG,EAAC,MAAM,iBAAiB,CAAC;AAErE,OAAO,EAEL,gBAAgB,EAChB,kBAAkB,EAClB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,UAAU,4BAA4B,CAC1C,MAAoB,EACpB,YAA+B,EAC/B,SAAe,EACf,mBAA+C;IAE/C,OAAO,kBAAkB,CAAC,4BAA4B,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,mBAAmB,CAAC,CAAC,CAAC;AAChH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,4BAA4B,CAC1C,MAAoB,EACpB,YAA+B,EAC/B,SAAe,EACf,mBAA+C;IAE/C,MAAM,WAAW,GAAG,uBAAuB,CAAC,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC/E,MAAM,MAAM,GAAG,MAAM,CAAC,yBAAyB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAExE,OAAO;QACL,IAAI,EAAE,gBAAgB,CAAC,MAAM;QAC7B,MAAM,EAAE,YAAY,CAAC,mBAAmB,CAAC,OAAO,CAAC,cAAc,CAAC;QAChE,WAAW,EAAE,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,EAAE,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC;QAC9F,SAAS,EAAE,mBAAmB,CAAC,SAAS;KACzC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,MAAoB,EACpB,YAA+B,EAC/B,WAA8B;IAE9B,oHAAoH;IACpH,0GAA0G;IAC1G,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3C,OAAO,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE,CACnE,4BAA4B,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,aAAa,CAAC,CAC7E,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"stateTransition.d.ts","sourceRoot":"","sources":["../src/stateTransition.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,IAAI,EAAM,MAAM,iBAAiB,CAAC;AAE9F,OAAO,EAAC,iBAAiB,EAAiD,MAAM,yBAAyB,CAAC;AAE1G,OAAO,EAAC,gBAAgB,EAAC,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAuB,wBAAwB,EAAqB,MAAM,iCAAiC,CAAC;AAEnH,OAAO,EAAC,4BAA4B,EAA0C,MAAM,cAAc,CAAC;AAYnG,OAAO,EACL,yBAAyB,EAQ1B,MAAM,YAAY,CAAC;AAMpB,MAAM,MAAM,mBAAmB,GAAG,iBAAiB,GACjD,wBAAwB,GACxB,gBAAgB,GAAG;IACjB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEJ,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,CAAC,EAAE,4BAA4B,GAAG,IAAI,CAAC;IAC9C,gBAAgB,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;CAC5C,CAAC;AAEF,UAAU,gBAAgB;IACxB,yBAAyB,CACvB,YAAY,EAAE,KAAK,EACnB,eAAe,EAAE,MAAM,EAAE,EACzB,KAAK,EAAE,MAAM,EAAE,EACf,iBAAiB,EAAE,OAAO,EAAE,EAC5B,iBAAiB,EAAE,OAAO,EAAE,EAC5B,QAAQ,CAAC,EAAE,MAAM,EAAE,GAClB,IAAI,CAAC;CACT;AAED;;GAEG;AACH,oBAAY,gBAAgB;IAC1B,eAAe,oBAAoB;IACnC,YAAY,iBAAiB;CAC9B;AAED;;GAEG;AACH,oBAAY,uBAAuB;IACjC,eAAe,qBAAqB;IACpC,eAAe,qBAAqB;IACpC,eAAe,sBAAsB;IACrC,gBAAgB,uBAAuB;IACvC,UAAU,gBAAgB;IAC1B,mBAAmB,2BAA2B;CAC/C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,yBAAyB,EAChC,WAAW,EAAE,iBAAiB,GAAG,wBAAwB,EACzD,OAAO,GAAE,mBAIR,EACD,EAAC,OAAO,EAAE,gBAAgB,EAAC,GAAE,sBAA2B,GACvD,yBAAyB,CAiE3B;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,yBAAyB,EAChC,IAAI,EAAE,IAAI,EACV,wBAAwB,CAAC,EAAE,wBAAwB,GAAG;IAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAAC,EACnF,EAAC,OAAO,EAAE,gBAAgB,EAAC,GAAE,sBAA2B,GACvD,yBAAyB,CAiB3B"}
1
+ {"version":3,"file":"stateTransition.d.ts","sourceRoot":"","sources":["../src/stateTransition.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,IAAI,EAAM,MAAM,iBAAiB,CAAC;AAE9F,OAAO,EAAC,iBAAiB,EAAiD,MAAM,yBAAyB,CAAC;AAE1G,OAAO,EAAC,gBAAgB,EAAC,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAuB,wBAAwB,EAAqB,MAAM,iCAAiC,CAAC;AAEnH,OAAO,EAAC,4BAA4B,EAA0C,MAAM,cAAc,CAAC;AAYnG,OAAO,EACL,yBAAyB,EAQ1B,MAAM,YAAY,CAAC;AAMpB,MAAM,MAAM,mBAAmB,GAAG,iBAAiB,GACjD,wBAAwB,GACxB,gBAAgB,GAAG;IACjB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEJ,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,CAAC,EAAE,4BAA4B,GAAG,IAAI,CAAC;IAC9C,gBAAgB,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;CAC5C,CAAC;AAEF,UAAU,gBAAgB;IACxB,yBAAyB,CACvB,YAAY,EAAE,KAAK,EACnB,eAAe,EAAE,MAAM,EAAE,EACzB,KAAK,EAAE,MAAM,EAAE,EACf,iBAAiB,EAAE,OAAO,EAAE,EAC5B,iBAAiB,EAAE,OAAO,EAAE,EAC5B,QAAQ,CAAC,EAAE,MAAM,EAAE,GAClB,IAAI,CAAC;CACT;AAED;;GAEG;AACH,oBAAY,gBAAgB;IAC1B,eAAe,oBAAoB;IACnC,YAAY,iBAAiB;CAC9B;AAED;;GAEG;AACH,oBAAY,uBAAuB;IACjC,eAAe,qBAAqB;IACpC,eAAe,qBAAqB;IACpC,eAAe,sBAAsB;IACrC,gBAAgB,uBAAuB;IACvC,UAAU,gBAAgB;IAC1B,mBAAmB,2BAA2B;CAC/C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,yBAAyB,EAChC,WAAW,EAAE,iBAAiB,GAAG,wBAAwB,EACzD,OAAO,GAAE,mBAIR,EACD,EAAC,OAAO,EAAE,gBAAgB,EAAC,GAAE,sBAA2B,GACvD,yBAAyB,CA8D3B;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,yBAAyB,EAChC,IAAI,EAAE,IAAI,EACV,wBAAwB,CAAC,EAAE,wBAAwB,GAAG;IAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAAC,EACnF,EAAC,OAAO,EAAE,gBAAgB,EAAC,GAAE,sBAA2B,GACvD,yBAAyB,CAiB3B"}
@@ -52,8 +52,7 @@ export function stateTransition(state, signedBlock, options = {
52
52
  // Includes state upgrades
53
53
  postState = processSlotsWithTransientCache(postState, blockSlot, options, { metrics, validatorMonitor });
54
54
  // Verify proposer signature only
55
- if (verifyProposer &&
56
- !verifyProposerSignature(postState.config, postState.epochCtx.index2pubkey, postState, signedBlock)) {
55
+ if (verifyProposer && !verifyProposerSignature(postState.config, postState.epochCtx.index2pubkey, signedBlock)) {
57
56
  throw new Error("Invalid block signature");
58
57
  }
59
58
  // Process block
@@ -1 +1 @@
1
- {"version":3,"file":"stateTransition.js","sourceRoot":"","sources":["../src/stateTransition.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stateTransition.js","sourceRoot":"","sources":["../src/stateTransition.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,16 @@
1
1
  import { ForkName, ForkPostBellatrix, ForkPreGloas, ForkSeq } from "@lodestar/params";
2
- import { BeaconBlock, BeaconBlockBody, BlindedBeaconBlockBody, ExecutionPayload, ExecutionPayloadHeader, capella } from "@lodestar/types";
2
+ import { BeaconBlock, BeaconBlockBody, BlindedBeaconBlock, BlindedBeaconBlockBody, ExecutionPayload, ExecutionPayloadHeader, capella } from "@lodestar/types";
3
3
  import { BeaconStateAllForks, BeaconStateCapella, BeaconStateExecutions, CachedBeaconStateAllForks, CachedBeaconStateExecutions } from "../types.js";
4
+ /**
5
+ * Execution enabled = merge is done.
6
+ * When (A) state has execution data OR (B) block has execution data
7
+ */
8
+ export declare function isExecutionEnabled(state: BeaconStateExecutions, block: BeaconBlock | BlindedBeaconBlock): boolean;
9
+ /**
10
+ * Merge is complete when the state includes execution layer data:
11
+ * state.latestExecutionPayloadHeader NOT EMPTY or state is post-capella
12
+ */
13
+ export declare function isMergeTransitionComplete(state: BeaconStateExecutions): boolean;
4
14
  /** Type guard for bellatrix.BeaconState */
5
15
  export declare function isExecutionStateType(state: BeaconStateAllForks): state is BeaconStateExecutions;
6
16
  /** Type guard for capella.BeaconState */
@@ -1 +1 @@
1
- {"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../../src/util/execution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAE,iBAAiB,EAAE,YAAY,EAAE,OAAO,EAAC,MAAM,kBAAkB,CAAC;AACpF,OAAO,EACL,WAAW,EACX,eAAe,EACf,sBAAsB,EACtB,gBAAgB,EAChB,sBAAsB,EAEtB,OAAO,EAIR,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,yBAAyB,EACzB,2BAA2B,EAC5B,MAAM,aAAa,CAAC;AAErB,2CAA2C;AAC3C,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,mBAAmB,GAAG,KAAK,IAAI,qBAAqB,CAE/F;AAED,yCAAyC;AACzC,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,mBAAmB,GAAG,KAAK,IAAI,kBAAkB,CAK1F;AAED,iDAAiD;AACjD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,yBAAyB,GAAG,KAAK,IAAI,2BAA2B,CAEjH;AAED,wCAAwC;AACxC,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,eAAe,GACzB,SAAS,IAAI,eAAe,CAAC,iBAAiB,GAAG,YAAY,CAAC,CAEhE;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,WAAW,GAAG,gBAAgB,GAAG,sBAAsB,CAErG;AAED,wBAAgB,+BAA+B,CAC7C,IAAI,EAAE,eAAe,GAAG,sBAAsB,GAC7C,gBAAgB,GAAG,sBAAsB,CAU3C;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,gBAAgB,GAAG,sBAAsB,GACjD,OAAO,IAAI,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,sBAAsB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAK1F;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,OAAO,CAAC,6BAA6B,GAC7C,OAAO,IAAI,OAAO,CAAC,sBAAsB,CAE3C;AAED,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,gBAAgB,GAAG,sBAAsB,CAuChH"}
1
+ {"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../../src/util/execution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAE,iBAAiB,EAAE,YAAY,EAAE,OAAO,EAAC,MAAM,kBAAkB,CAAC;AACpF,OAAO,EACL,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,EAChB,sBAAsB,EAEtB,OAAO,EAKR,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,mBAAmB,EAEnB,kBAAkB,EAClB,qBAAqB,EACrB,yBAAyB,EACzB,2BAA2B,EAC5B,MAAM,aAAa,CAAC;AAErB;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,qBAAqB,EAAE,KAAK,EAAE,WAAW,GAAG,kBAAkB,GAAG,OAAO,CAcjH;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAU/E;AAED,2CAA2C;AAC3C,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,mBAAmB,GAAG,KAAK,IAAI,qBAAqB,CAE/F;AAED,yCAAyC;AACzC,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,mBAAmB,GAAG,KAAK,IAAI,kBAAkB,CAK1F;AAED,iDAAiD;AACjD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,yBAAyB,GAAG,KAAK,IAAI,2BAA2B,CAEjH;AAED,wCAAwC;AACxC,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,eAAe,GACzB,SAAS,IAAI,eAAe,CAAC,iBAAiB,GAAG,YAAY,CAAC,CAEhE;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,WAAW,GAAG,gBAAgB,GAAG,sBAAsB,CAErG;AAED,wBAAgB,+BAA+B,CAC7C,IAAI,EAAE,eAAe,GAAG,sBAAsB,GAC7C,gBAAgB,GAAG,sBAAsB,CAU3C;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,gBAAgB,GAAG,sBAAsB,GACjD,OAAO,IAAI,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,sBAAsB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAK1F;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,OAAO,CAAC,6BAA6B,GAC7C,OAAO,IAAI,OAAO,CAAC,sBAAsB,CAE3C;AAED,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,gBAAgB,GAAG,sBAAsB,CAuChH"}
@@ -1,5 +1,30 @@
1
1
  import { ForkSeq } from "@lodestar/params";
2
- import { isBlindedBeaconBlockBody, ssz, } from "@lodestar/types";
2
+ import { isBlindedBeaconBlockBody, isExecutionPayload, ssz, } from "@lodestar/types";
3
+ /**
4
+ * Execution enabled = merge is done.
5
+ * When (A) state has execution data OR (B) block has execution data
6
+ */
7
+ export function isExecutionEnabled(state, block) {
8
+ if (isMergeTransitionComplete(state)) {
9
+ return true;
10
+ }
11
+ // Throws if not post-bellatrix block. A fork-guard before isExecutionEnabled() prevents this from happening
12
+ const payload = getFullOrBlindedPayload(block);
13
+ return isExecutionPayload(payload)
14
+ ? !ssz.bellatrix.ExecutionPayload.equals(payload, ssz.bellatrix.ExecutionPayload.defaultValue())
15
+ : !ssz.bellatrix.ExecutionPayloadHeader.equals(state.latestExecutionPayloadHeader, ssz.bellatrix.ExecutionPayloadHeader.defaultValue());
16
+ }
17
+ /**
18
+ * Merge is complete when the state includes execution layer data:
19
+ * state.latestExecutionPayloadHeader NOT EMPTY or state is post-capella
20
+ */
21
+ export function isMergeTransitionComplete(state) {
22
+ if (isCapellaStateType(state)) {
23
+ // All networks have completed the merge transition before capella
24
+ return true;
25
+ }
26
+ return !ssz.bellatrix.ExecutionPayloadHeader.equals(state.latestExecutionPayloadHeader, ssz.bellatrix.ExecutionPayloadHeader.defaultValue());
27
+ }
3
28
  /** Type guard for bellatrix.BeaconState */
4
29
  export function isExecutionStateType(state) {
5
30
  return state.latestExecutionPayloadHeader !== undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"execution.js","sourceRoot":"","sources":["../../src/util/execution.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"execution.js","sourceRoot":"","sources":["../../src/util/execution.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -11,7 +11,7 @@
11
11
  "bugs": {
12
12
  "url": "https://github.com/ChainSafe/lodestar/issues"
13
13
  },
14
- "version": "1.39.0-dev.c151a164f2",
14
+ "version": "1.39.0-dev.c630c55067",
15
15
  "type": "module",
16
16
  "exports": {
17
17
  ".": {
@@ -62,10 +62,10 @@
62
62
  "@chainsafe/pubkey-index-map": "^3.0.0",
63
63
  "@chainsafe/ssz": "^1.2.2",
64
64
  "@chainsafe/swap-or-not-shuffle": "^1.2.1",
65
- "@lodestar/config": "1.39.0-dev.c151a164f2",
66
- "@lodestar/params": "1.39.0-dev.c151a164f2",
67
- "@lodestar/types": "1.39.0-dev.c151a164f2",
68
- "@lodestar/utils": "1.39.0-dev.c151a164f2",
65
+ "@lodestar/config": "1.39.0-dev.c630c55067",
66
+ "@lodestar/params": "1.39.0-dev.c630c55067",
67
+ "@lodestar/types": "1.39.0-dev.c630c55067",
68
+ "@lodestar/utils": "1.39.0-dev.c630c55067",
69
69
  "bigint-buffer": "^1.1.5"
70
70
  },
71
71
  "keywords": [
@@ -74,5 +74,5 @@
74
74
  "beacon",
75
75
  "blockchain"
76
76
  ],
77
- "gitHead": "754677d50463b1608d590c4d1b10076b3000655c"
77
+ "gitHead": "ead055ee9d3179f198a25ba5c984e8509dea31d7"
78
78
  }
@@ -7,7 +7,7 @@ import {
7
7
  CachedBeaconStateCapella,
8
8
  CachedBeaconStateGloas,
9
9
  } from "../types.js";
10
- import {getFullOrBlindedPayload} from "../util/execution.js";
10
+ import {getFullOrBlindedPayload, isExecutionEnabled} from "../util/execution.js";
11
11
  import {BlockExternalData, DataAvailabilityStatus} from "./externalData.js";
12
12
  import {processBlobKzgCommitments} from "./processBlobKzgCommitments.js";
13
13
  import {processBlockHeader} from "./processBlockHeader.js";
@@ -67,7 +67,11 @@ export function processBlock(
67
67
  // The call to the process_execution_payload must happen before the call to the process_randao as the former depends
68
68
  // on the randao_mix computed with the reveal of the previous block.
69
69
  // TODO GLOAS: We call processExecutionPayload somewhere else post-gloas
70
- if (fork >= ForkSeq.bellatrix && fork < ForkSeq.gloas) {
70
+ if (
71
+ fork < ForkSeq.gloas &&
72
+ fork >= ForkSeq.bellatrix &&
73
+ isExecutionEnabled(state as CachedBeaconStateBellatrix, block)
74
+ ) {
71
75
  processExecutionPayload(fork, state as CachedBeaconStateBellatrix, block.body, externalData);
72
76
  }
73
77
 
@@ -21,7 +21,7 @@ export function isValidIndexedAttestation(
21
21
  }
22
22
 
23
23
  if (verifySignature) {
24
- return verifySignatureSet(getIndexedAttestationSignatureSet(config, index2pubkey, state, indexedAttestation));
24
+ return verifySignatureSet(getIndexedAttestationSignatureSet(config, index2pubkey, state.slot, indexedAttestation));
25
25
  }
26
26
  return true;
27
27
  }
@@ -38,7 +38,9 @@ export function isValidIndexedAttestationBigint(
38
38
  }
39
39
 
40
40
  if (verifySignature) {
41
- return verifySignatureSet(getIndexedAttestationBigintSignatureSet(config, index2pubkey, state, indexedAttestation));
41
+ return verifySignatureSet(
42
+ getIndexedAttestationBigintSignatureSet(config, index2pubkey, state.slot, indexedAttestation)
43
+ );
42
44
  }
43
45
  return true;
44
46
  }
@@ -67,7 +67,7 @@ export function processAttestationsAltair(
67
67
  const sigSet = getAttestationWithIndicesSignatureSet(
68
68
  state.config,
69
69
  epochCtx.index2pubkey,
70
- state,
70
+ state.slot,
71
71
  attestation,
72
72
  attestingIndices
73
73
  );
@@ -3,7 +3,11 @@ import {ForkName, ForkSeq, isForkPostDeneb} from "@lodestar/params";
3
3
  import {BeaconBlockBody, BlindedBeaconBlockBody, deneb, isExecutionPayload} from "@lodestar/types";
4
4
  import {toHex, toRootHex} from "@lodestar/utils";
5
5
  import {CachedBeaconStateBellatrix, CachedBeaconStateCapella} from "../types.js";
6
- import {executionPayloadToPayloadHeader, getFullOrBlindedPayloadFromBody} from "../util/execution.js";
6
+ import {
7
+ executionPayloadToPayloadHeader,
8
+ getFullOrBlindedPayloadFromBody,
9
+ isMergeTransitionComplete,
10
+ } from "../util/execution.js";
7
11
  import {computeEpochAtSlot, computeTimeAtSlot, getRandaoMix} from "../util/index.js";
8
12
  import {BlockExternalData, ExecutionPayloadStatus} from "./externalData.js";
9
13
 
@@ -17,13 +21,15 @@ export function processExecutionPayload(
17
21
  const forkName = ForkName[ForkSeq[fork] as ForkName];
18
22
  // Verify consistency of the parent hash, block number, base fee per gas and gas limit
19
23
  // with respect to the previous execution payload header
20
- const {latestExecutionPayloadHeader} = state;
21
- if (!byteArrayEquals(payload.parentHash, latestExecutionPayloadHeader.blockHash)) {
22
- throw Error(
23
- `Invalid execution payload parentHash ${toRootHex(payload.parentHash)} latest blockHash ${toRootHex(
24
- latestExecutionPayloadHeader.blockHash
25
- )}`
26
- );
24
+ if (isMergeTransitionComplete(state)) {
25
+ const {latestExecutionPayloadHeader} = state;
26
+ if (!byteArrayEquals(payload.parentHash, latestExecutionPayloadHeader.blockHash)) {
27
+ throw Error(
28
+ `Invalid execution payload parentHash ${toRootHex(payload.parentHash)} latest blockHash ${toRootHex(
29
+ latestExecutionPayloadHeader.blockHash
30
+ )}`
31
+ );
32
+ }
27
33
  }
28
34
 
29
35
  // Verify random
@@ -80,7 +80,7 @@ export function assertValidProposerSlashing(
80
80
  const signatureSets = getProposerSlashingSignatureSets(
81
81
  state.config,
82
82
  state.epochCtx.index2pubkey,
83
- state,
83
+ state.slot,
84
84
  proposerSlashing
85
85
  );
86
86
  for (let i = 0; i < signatureSets.length; i++) {
@@ -12,12 +12,12 @@ import {getRandaoMix} from "../util/index.js";
12
12
  * PERF: Fixed work independent of block contents.
13
13
  */
14
14
  export function processRandao(state: CachedBeaconStateAllForks, block: BeaconBlock, verifySignature = true): void {
15
- const {epochCtx} = state;
15
+ const {epochCtx, config} = state;
16
16
  const epoch = epochCtx.epoch;
17
17
  const randaoReveal = block.body.randaoReveal;
18
18
 
19
19
  // verify RANDAO reveal
20
- if (verifySignature && !verifyRandaoSignature(state.config, epochCtx.index2pubkey, state, block)) {
20
+ if (verifySignature && !verifyRandaoSignature(config, epochCtx.index2pubkey, block)) {
21
21
  throw new Error("RANDAO reveal is an invalid signature");
22
22
  }
23
23
 
@@ -3,6 +3,7 @@ import {BeaconConfig} from "@lodestar/config";
3
3
  import {DOMAIN_SYNC_COMMITTEE, SYNC_COMMITTEE_SIZE} from "@lodestar/params";
4
4
  import {altair, ssz} from "@lodestar/types";
5
5
  import {Index2PubkeyCache} from "../cache/pubkeyCache.js";
6
+ import {SyncCommitteeCache} from "../cache/syncCommitteeCache.js";
6
7
  import {G2_POINT_AT_INFINITY} from "../constants/index.js";
7
8
  import {CachedBeaconStateAllForks} from "../types.js";
8
9
  import {
@@ -28,7 +29,7 @@ export function processSyncAggregate(
28
29
  const signatureSet = getSyncCommitteeSignatureSet(
29
30
  state.config,
30
31
  state.epochCtx.index2pubkey,
31
- state,
32
+ state.epochCtx.currentSyncCommitteeIndexed,
32
33
  block,
33
34
  participantIndices
34
35
  );
@@ -73,7 +74,7 @@ export function processSyncAggregate(
73
74
  export function getSyncCommitteeSignatureSet(
74
75
  config: BeaconConfig,
75
76
  index2pubkey: Index2PubkeyCache,
76
- state: CachedBeaconStateAllForks,
77
+ currentSyncCommitteeIndexed: SyncCommitteeCache,
77
78
  block: altair.BeaconBlock,
78
79
  /** Optional parameter to prevent computing it twice */
79
80
  participantIndices?: number[]
@@ -101,7 +102,7 @@ export function getSyncCommitteeSignatureSet(
101
102
  const rootSigned = block.parentRoot;
102
103
 
103
104
  if (!participantIndices) {
104
- const committeeIndices = state.epochCtx.currentSyncCommitteeIndexed.validatorIndices;
105
+ const committeeIndices = currentSyncCommitteeIndexed.validatorIndices;
105
106
  participantIndices = syncAggregate.syncCommitteeBits.intersectValues(committeeIndices);
106
107
  }
107
108
 
@@ -115,7 +116,9 @@ export function getSyncCommitteeSignatureSet(
115
116
  throw Error("Empty sync committee signature is not infinity");
116
117
  }
117
118
 
118
- const domain = config.getDomain(state.slot, DOMAIN_SYNC_COMMITTEE, previousSlot);
119
+ // the getDomain() api requires the state slot as 1st param, however it's the same to block.slot in state-transition
120
+ // and the same epoch when we verify blocks in batch in beacon-node. So we can safely use block.slot here.
121
+ const domain = config.getDomain(block.slot, DOMAIN_SYNC_COMMITTEE, previousSlot);
119
122
 
120
123
  return {
121
124
  type: SignatureSetType.aggregate,
@@ -76,7 +76,7 @@ export function getVoluntaryExitValidity(
76
76
 
77
77
  if (
78
78
  verifySignature &&
79
- !verifyVoluntaryExitSignature(state.config, epochCtx.index2pubkey, state, signedVoluntaryExit)
79
+ !verifyVoluntaryExitSignature(state.config, epochCtx.index2pubkey, state.slot, signedVoluntaryExit)
80
80
  ) {
81
81
  return VoluntaryExitValidity.invalidSignature;
82
82
  }
package/src/index.ts CHANGED
@@ -27,8 +27,7 @@ export {
27
27
  createEmptyEpochCacheImmutableData,
28
28
  } from "./cache/epochCache.js";
29
29
  export {type EpochTransitionCache, beforeProcessEpoch} from "./cache/epochTransitionCache.js";
30
- // Aux data-structures
31
- export {type Index2PubkeyCache} from "./cache/pubkeyCache.js";
30
+ export {type Index2PubkeyCache, syncPubkeys} from "./cache/pubkeyCache.js";
32
31
  // Main state caches
33
32
  export {
34
33
  type BeaconStateCache,
@@ -41,6 +40,7 @@ export {
41
40
  export * from "./constants/index.js";
42
41
  export type {EpochTransitionStep} from "./epoch/index.js";
43
42
  export {type BeaconStateTransitionMetrics, getMetrics} from "./metrics.js";
43
+ export * from "./rewards/index.js";
44
44
  export * from "./signatureSets/index.js";
45
45
  export * from "./stateTransition.js";
46
46
  export type {
@@ -0,0 +1,200 @@
1
+ import {PubkeyIndexMap} from "@chainsafe/pubkey-index-map";
2
+ import {BeaconConfig} from "@lodestar/config";
3
+ import {
4
+ EFFECTIVE_BALANCE_INCREMENT,
5
+ ForkName,
6
+ INACTIVITY_PENALTY_QUOTIENT_ALTAIR,
7
+ MAX_EFFECTIVE_BALANCE,
8
+ MAX_EFFECTIVE_BALANCE_ELECTRA,
9
+ PARTICIPATION_FLAG_WEIGHTS,
10
+ TIMELY_HEAD_FLAG_INDEX,
11
+ TIMELY_SOURCE_FLAG_INDEX,
12
+ TIMELY_TARGET_FLAG_INDEX,
13
+ WEIGHT_DENOMINATOR,
14
+ isForkPostElectra,
15
+ } from "@lodestar/params";
16
+ import {ValidatorIndex, rewards} from "@lodestar/types";
17
+ import {fromHex} from "@lodestar/utils";
18
+ import {EpochTransitionCache, beforeProcessEpoch} from "../cache/epochTransitionCache.js";
19
+ import {CachedBeaconStateAllForks, CachedBeaconStateAltair} from "../types.js";
20
+ import {
21
+ FLAG_ELIGIBLE_ATTESTER,
22
+ FLAG_PREV_HEAD_ATTESTER_UNSLASHED,
23
+ FLAG_PREV_SOURCE_ATTESTER_UNSLASHED,
24
+ FLAG_PREV_TARGET_ATTESTER_UNSLASHED,
25
+ hasMarkers,
26
+ isInInactivityLeak,
27
+ } from "../util/index.js";
28
+
29
+ /** Attestations penalty with respect to effective balance in Gwei */
30
+ type AttestationsPenalty = {target: number; source: number; effectiveBalance: number};
31
+
32
+ const defaultAttestationsReward = {head: 0, target: 0, source: 0, inclusionDelay: 0, inactivity: 0};
33
+ const defaultAttestationsPenalty = {target: 0, source: 0};
34
+
35
+ export async function computeAttestationsRewards(
36
+ config: BeaconConfig,
37
+ pubkey2index: PubkeyIndexMap,
38
+ state: CachedBeaconStateAllForks,
39
+ validatorIds?: (ValidatorIndex | string)[]
40
+ ): Promise<rewards.AttestationsRewards> {
41
+ const fork = config.getForkName(state.slot);
42
+ if (fork === ForkName.phase0) {
43
+ throw Error("Unsupported fork. Attestations rewards calculation is not available in phase0");
44
+ }
45
+
46
+ const stateAltair = state as CachedBeaconStateAltair;
47
+ const transitionCache = beforeProcessEpoch(stateAltair);
48
+
49
+ const [idealRewards, penalties] = computeIdealAttestationsRewardsAndPenaltiesAltair(
50
+ config,
51
+ stateAltair,
52
+ transitionCache
53
+ );
54
+ const totalRewards = computeTotalAttestationsRewardsAltair(
55
+ config,
56
+ pubkey2index,
57
+ stateAltair,
58
+ transitionCache,
59
+ idealRewards,
60
+ penalties,
61
+ validatorIds
62
+ );
63
+
64
+ return {idealRewards, totalRewards};
65
+ }
66
+
67
+ function computeIdealAttestationsRewardsAndPenaltiesAltair(
68
+ config: BeaconConfig,
69
+ state: CachedBeaconStateAllForks,
70
+ transitionCache: EpochTransitionCache
71
+ ): [rewards.IdealAttestationsReward[], AttestationsPenalty[]] {
72
+ const baseRewardPerIncrement = transitionCache.baseRewardPerIncrement;
73
+ const activeBalanceByIncrement = transitionCache.totalActiveStakeByIncrement;
74
+ const fork = config.getForkName(state.slot);
75
+ const maxEffectiveBalance = isForkPostElectra(fork) ? MAX_EFFECTIVE_BALANCE_ELECTRA : MAX_EFFECTIVE_BALANCE;
76
+ const maxEffectiveBalanceByIncrement = Math.floor(maxEffectiveBalance / EFFECTIVE_BALANCE_INCREMENT);
77
+
78
+ const idealRewards = Array.from({length: maxEffectiveBalanceByIncrement + 1}, (_, effectiveBalanceByIncrement) => ({
79
+ ...defaultAttestationsReward,
80
+ effectiveBalance: effectiveBalanceByIncrement * EFFECTIVE_BALANCE_INCREMENT,
81
+ }));
82
+
83
+ const attestationsPenalties: AttestationsPenalty[] = Array.from(
84
+ {length: maxEffectiveBalanceByIncrement + 1},
85
+ (_, effectiveBalanceByIncrement) => ({
86
+ ...defaultAttestationsPenalty,
87
+ effectiveBalance: effectiveBalanceByIncrement * EFFECTIVE_BALANCE_INCREMENT,
88
+ })
89
+ );
90
+
91
+ for (let i = 0; i < PARTICIPATION_FLAG_WEIGHTS.length; i++) {
92
+ const weight = PARTICIPATION_FLAG_WEIGHTS[i];
93
+
94
+ let unslashedStakeByIncrement: number;
95
+ let flagName: keyof rewards.IdealAttestationsReward;
96
+
97
+ switch (i) {
98
+ case TIMELY_SOURCE_FLAG_INDEX: {
99
+ unslashedStakeByIncrement = transitionCache.prevEpochUnslashedStake.sourceStakeByIncrement;
100
+ flagName = "source";
101
+ break;
102
+ }
103
+ case TIMELY_TARGET_FLAG_INDEX: {
104
+ unslashedStakeByIncrement = transitionCache.prevEpochUnslashedStake.targetStakeByIncrement;
105
+ flagName = "target";
106
+ break;
107
+ }
108
+ case TIMELY_HEAD_FLAG_INDEX: {
109
+ unslashedStakeByIncrement = transitionCache.prevEpochUnslashedStake.headStakeByIncrement;
110
+ flagName = "head";
111
+ break;
112
+ }
113
+ default: {
114
+ throw Error(`Unable to retrieve unslashed stake. Unknown participation flag index: ${i}`);
115
+ }
116
+ }
117
+
118
+ for (
119
+ let effectiveBalanceByIncrement = 0;
120
+ effectiveBalanceByIncrement <= maxEffectiveBalanceByIncrement;
121
+ effectiveBalanceByIncrement++
122
+ ) {
123
+ const baseReward = effectiveBalanceByIncrement * baseRewardPerIncrement;
124
+ const rewardNumerator = baseReward * weight * unslashedStakeByIncrement;
125
+ // Both idealReward and penalty are rounded to nearest integer. Loss of precision is minimal as unit is gwei
126
+ const idealReward = Math.round(rewardNumerator / activeBalanceByIncrement / WEIGHT_DENOMINATOR);
127
+ const penalty = Math.round((baseReward * weight) / WEIGHT_DENOMINATOR); // Positive number indicates penalty
128
+
129
+ const idealAttestationsReward = idealRewards[effectiveBalanceByIncrement];
130
+ idealAttestationsReward[flagName] = isInInactivityLeak(state) ? 0 : idealReward; // No attestations rewards during inactivity leak
131
+
132
+ if (flagName !== "head") {
133
+ const attestationPenalty = attestationsPenalties[effectiveBalanceByIncrement];
134
+ attestationPenalty[flagName] = penalty;
135
+ }
136
+ }
137
+ }
138
+
139
+ return [idealRewards, attestationsPenalties];
140
+ }
141
+
142
+ // Same calculation as `getRewardsAndPenaltiesAltair` but returns the breakdown of rewards instead of aggregated
143
+ function computeTotalAttestationsRewardsAltair(
144
+ config: BeaconConfig,
145
+ pubkey2index: PubkeyIndexMap,
146
+ state: CachedBeaconStateAltair,
147
+ transitionCache: EpochTransitionCache,
148
+ idealRewards: rewards.IdealAttestationsReward[],
149
+ penalties: AttestationsPenalty[],
150
+ validatorIds: (ValidatorIndex | string)[] = []
151
+ ): rewards.TotalAttestationsReward[] {
152
+ const rewards = [];
153
+ const {flags} = transitionCache;
154
+ const {epochCtx} = state;
155
+ const validatorIndices = validatorIds
156
+ .map((id) => (typeof id === "number" ? id : pubkey2index.get(fromHex(id))))
157
+ .filter((index) => index !== undefined); // Validator indices to include in the result
158
+
159
+ const inactivityPenaltyDenominator = config.INACTIVITY_SCORE_BIAS * INACTIVITY_PENALTY_QUOTIENT_ALTAIR;
160
+
161
+ for (let i = 0; i < flags.length; i++) {
162
+ if (validatorIndices.length && !validatorIndices.includes(i)) {
163
+ continue;
164
+ }
165
+
166
+ const flag = flags[i];
167
+ if (!hasMarkers(flag, FLAG_ELIGIBLE_ATTESTER)) {
168
+ continue;
169
+ }
170
+
171
+ const effectiveBalanceIncrement = epochCtx.effectiveBalanceIncrements[i];
172
+
173
+ const currentRewards = {...defaultAttestationsReward, validatorIndex: i};
174
+
175
+ if (hasMarkers(flag, FLAG_PREV_SOURCE_ATTESTER_UNSLASHED)) {
176
+ currentRewards.source = idealRewards[effectiveBalanceIncrement].source;
177
+ } else {
178
+ currentRewards.source = penalties[effectiveBalanceIncrement].source * -1; // Negative reward to indicate penalty
179
+ }
180
+
181
+ if (hasMarkers(flag, FLAG_PREV_TARGET_ATTESTER_UNSLASHED)) {
182
+ currentRewards.target = idealRewards[effectiveBalanceIncrement].target;
183
+ } else {
184
+ currentRewards.target = penalties[effectiveBalanceIncrement].target * -1;
185
+
186
+ // Also incur inactivity penalty if not voting target correctly
187
+ const inactivityPenaltyNumerator =
188
+ effectiveBalanceIncrement * EFFECTIVE_BALANCE_INCREMENT * state.inactivityScores.get(i);
189
+ currentRewards.inactivity = Math.floor(inactivityPenaltyNumerator / inactivityPenaltyDenominator) * -1;
190
+ }
191
+
192
+ if (hasMarkers(flag, FLAG_PREV_HEAD_ATTESTER_UNSLASHED)) {
193
+ currentRewards.head = idealRewards[effectiveBalanceIncrement].head;
194
+ }
195
+
196
+ rewards.push(currentRewards);
197
+ }
198
+
199
+ return rewards;
200
+ }