@lodestar/beacon-node 1.50.0-dev.cc4428df4b → 1.50.0-dev.d86161f63c

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/api/impl/beacon/pool/index.js +4 -4
  2. package/lib/api/impl/beacon/pool/index.js.map +1 -1
  3. package/lib/chain/archiveStore/archiveStore.d.ts +1 -0
  4. package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
  5. package/lib/chain/archiveStore/archiveStore.js +6 -2
  6. package/lib/chain/archiveStore/archiveStore.js.map +1 -1
  7. package/lib/chain/archiveStore/utils/pruneHistory.d.ts +4 -1
  8. package/lib/chain/archiveStore/utils/pruneHistory.d.ts.map +1 -1
  9. package/lib/chain/archiveStore/utils/pruneHistory.js +4 -3
  10. package/lib/chain/archiveStore/utils/pruneHistory.js.map +1 -1
  11. package/lib/chain/chain.js +3 -3
  12. package/lib/chain/chain.js.map +1 -1
  13. package/lib/chain/initState.d.ts +2 -9
  14. package/lib/chain/initState.d.ts.map +1 -1
  15. package/lib/chain/initState.js +5 -38
  16. package/lib/chain/initState.js.map +1 -1
  17. package/lib/chain/opPools/opPool.d.ts +5 -4
  18. package/lib/chain/opPools/opPool.d.ts.map +1 -1
  19. package/lib/chain/opPools/opPool.js +62 -18
  20. package/lib/chain/opPools/opPool.js.map +1 -1
  21. package/lib/chain/opPools/utils.d.ts +4 -1
  22. package/lib/chain/opPools/utils.d.ts.map +1 -1
  23. package/lib/chain/opPools/utils.js +11 -1
  24. package/lib/chain/opPools/utils.js.map +1 -1
  25. package/lib/chain/validation/attesterSlashing.d.ts +4 -4
  26. package/lib/chain/validation/attesterSlashing.d.ts.map +1 -1
  27. package/lib/chain/validation/attesterSlashing.js +3 -0
  28. package/lib/chain/validation/attesterSlashing.js.map +1 -1
  29. package/lib/chain/validation/proposerSlashing.d.ts +3 -3
  30. package/lib/chain/validation/proposerSlashing.d.ts.map +1 -1
  31. package/lib/chain/validation/proposerSlashing.js +3 -0
  32. package/lib/chain/validation/proposerSlashing.js.map +1 -1
  33. package/lib/db/beacon.d.ts.map +1 -1
  34. package/lib/db/beacon.js +2 -0
  35. package/lib/db/beacon.js.map +1 -1
  36. package/lib/db/repositories/proposerSlashing.d.ts +1 -0
  37. package/lib/db/repositories/proposerSlashing.d.ts.map +1 -1
  38. package/lib/db/repositories/proposerSlashing.js +5 -1
  39. package/lib/db/repositories/proposerSlashing.js.map +1 -1
  40. package/lib/execution/engine/http.d.ts.map +1 -1
  41. package/lib/execution/engine/http.js +5 -4
  42. package/lib/execution/engine/http.js.map +1 -1
  43. package/lib/index.d.ts +1 -1
  44. package/lib/index.d.ts.map +1 -1
  45. package/lib/index.js +1 -1
  46. package/lib/index.js.map +1 -1
  47. package/lib/metrics/metrics/beacon.d.ts +1 -1
  48. package/lib/metrics/metrics/beacon.d.ts.map +1 -1
  49. package/lib/metrics/metrics/beacon.js.map +1 -1
  50. package/lib/network/metadata.d.ts +1 -1
  51. package/lib/network/metadata.d.ts.map +1 -1
  52. package/lib/network/metadata.js +17 -17
  53. package/lib/network/metadata.js.map +1 -1
  54. package/lib/network/peers/datastore.d.ts +9 -9
  55. package/lib/network/peers/datastore.d.ts.map +1 -1
  56. package/lib/network/peers/datastore.js +36 -36
  57. package/lib/network/peers/datastore.js.map +1 -1
  58. package/lib/network/processor/gossipHandlers.js +4 -4
  59. package/lib/network/processor/gossipHandlers.js.map +1 -1
  60. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.d.ts.map +1 -1
  61. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.js +41 -26
  62. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.js.map +1 -1
  63. package/lib/sync/unknownBlock.d.ts +9 -5
  64. package/lib/sync/unknownBlock.d.ts.map +1 -1
  65. package/lib/sync/unknownBlock.js +83 -42
  66. package/lib/sync/unknownBlock.js.map +1 -1
  67. package/lib/util/execution.d.ts +2 -0
  68. package/lib/util/execution.d.ts.map +1 -1
  69. package/lib/util/execution.js +6 -6
  70. package/lib/util/execution.js.map +1 -1
  71. package/package.json +15 -15
  72. package/src/api/impl/beacon/pool/index.ts +4 -4
  73. package/src/chain/archiveStore/archiveStore.ts +9 -3
  74. package/src/chain/archiveStore/utils/pruneHistory.ts +6 -4
  75. package/src/chain/chain.ts +3 -3
  76. package/src/chain/initState.ts +8 -60
  77. package/src/chain/opPools/opPool.ts +91 -18
  78. package/src/chain/opPools/utils.ts +31 -3
  79. package/src/chain/validation/attesterSlashing.ts +7 -4
  80. package/src/chain/validation/proposerSlashing.ts +7 -4
  81. package/src/db/beacon.ts +2 -0
  82. package/src/db/repositories/proposerSlashing.ts +6 -1
  83. package/src/execution/engine/http.ts +6 -4
  84. package/src/index.ts +1 -1
  85. package/src/metrics/metrics/beacon.ts +1 -1
  86. package/src/network/metadata.ts +17 -17
  87. package/src/network/peers/datastore.ts +36 -36
  88. package/src/network/processor/gossipHandlers.ts +4 -4
  89. package/src/network/reqresp/handlers/executionPayloadEnvelopesByRoot.ts +42 -28
  90. package/src/sync/unknownBlock.ts +94 -46
  91. package/src/util/execution.ts +10 -6
@@ -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.50.0-dev.cc4428df4b",
14
+ "version": "1.50.0-dev.d86161f63c",
15
15
  "type": "module",
16
16
  "exports": {
17
17
  ".": {
@@ -127,17 +127,17 @@
127
127
  "@libp2p/prometheus-metrics": "^5.0.28",
128
128
  "@libp2p/tcp": "^11.0.27",
129
129
  "@libp2p/utils": "^7.4.0",
130
- "@lodestar/api": "^1.50.0-dev.cc4428df4b",
131
- "@lodestar/config": "^1.50.0-dev.cc4428df4b",
132
- "@lodestar/db": "^1.50.0-dev.cc4428df4b",
133
- "@lodestar/fork-choice": "^1.50.0-dev.cc4428df4b",
134
- "@lodestar/logger": "^1.50.0-dev.cc4428df4b",
135
- "@lodestar/params": "^1.50.0-dev.cc4428df4b",
136
- "@lodestar/reqresp": "^1.50.0-dev.cc4428df4b",
137
- "@lodestar/state-transition": "^1.50.0-dev.cc4428df4b",
138
- "@lodestar/types": "^1.50.0-dev.cc4428df4b",
139
- "@lodestar/utils": "^1.50.0-dev.cc4428df4b",
140
- "@lodestar/validator": "^1.50.0-dev.cc4428df4b",
130
+ "@lodestar/api": "^1.50.0-dev.d86161f63c",
131
+ "@lodestar/config": "^1.50.0-dev.d86161f63c",
132
+ "@lodestar/db": "^1.50.0-dev.d86161f63c",
133
+ "@lodestar/fork-choice": "^1.50.0-dev.d86161f63c",
134
+ "@lodestar/logger": "^1.50.0-dev.d86161f63c",
135
+ "@lodestar/params": "^1.50.0-dev.d86161f63c",
136
+ "@lodestar/reqresp": "^1.50.0-dev.d86161f63c",
137
+ "@lodestar/state-transition": "^1.50.0-dev.d86161f63c",
138
+ "@lodestar/types": "^1.50.0-dev.d86161f63c",
139
+ "@lodestar/utils": "^1.50.0-dev.d86161f63c",
140
+ "@lodestar/validator": "^1.50.0-dev.d86161f63c",
141
141
  "@multiformats/multiaddr": "^13.0.1",
142
142
  "datastore-core": "^12.0.1",
143
143
  "datastore-level": "^13.0.1",
@@ -158,8 +158,8 @@
158
158
  "devDependencies": {
159
159
  "@libp2p/interface-internal": "^3.1.12",
160
160
  "@libp2p/logger": "^6.2.13",
161
- "@lodestar/spec-test-util": "^1.50.0-dev.cc4428df4b",
162
- "@lodestar/test-utils": "^1.50.0-dev.cc4428df4b",
161
+ "@lodestar/spec-test-util": "^1.50.0-dev.d86161f63c",
162
+ "@lodestar/test-utils": "^1.50.0-dev.d86161f63c",
163
163
  "@types/js-yaml": "^4.0.5",
164
164
  "@types/qs": "^6.9.7",
165
165
  "@types/tmp": "^0.2.3",
@@ -174,5 +174,5 @@
174
174
  "beacon",
175
175
  "blockchain"
176
176
  ],
177
- "gitHead": "ba8738cc7b083430988db015fe499443a09a146f"
177
+ "gitHead": "baf89618cbef4e3c904f52171907659f3219c1cf"
178
178
  }
@@ -170,15 +170,15 @@ export function getBeaconPoolApi({
170
170
  },
171
171
 
172
172
  async submitPoolAttesterSlashingsV2({attesterSlashing}) {
173
- await validateApiAttesterSlashing(chain, attesterSlashing);
173
+ const verifiedDomains = await validateApiAttesterSlashing(chain, attesterSlashing);
174
174
  const fork = chain.config.getForkName(Number(attesterSlashing.attestation1.data.slot));
175
- chain.opPool.insertAttesterSlashing(fork, attesterSlashing);
175
+ chain.opPool.insertAttesterSlashing(fork, attesterSlashing, verifiedDomains);
176
176
  await network.publishAttesterSlashing(attesterSlashing);
177
177
  },
178
178
 
179
179
  async submitPoolProposerSlashings({proposerSlashing}) {
180
- await validateApiProposerSlashing(chain, proposerSlashing);
181
- chain.opPool.insertProposerSlashing(proposerSlashing);
180
+ const verifiedDomain = await validateApiProposerSlashing(chain, proposerSlashing);
181
+ chain.opPool.insertProposerSlashing(proposerSlashing, verifiedDomain);
182
182
  await network.publishProposerSlashing(proposerSlashing);
183
183
  },
184
184
 
@@ -1,6 +1,7 @@
1
1
  import {CheckpointWithHex} from "@lodestar/fork-choice";
2
2
  import {LoggerNode} from "@lodestar/logger/node";
3
3
  import {SLOTS_PER_EPOCH} from "@lodestar/params";
4
+ import {Slot} from "@lodestar/types";
4
5
  import {Checkpoint} from "@lodestar/types/phase0";
5
6
  import {callFnWhenAwait} from "@lodestar/utils";
6
7
  import {IBeaconDb} from "../../db/index.js";
@@ -47,6 +48,8 @@ export class ArchiveStore {
47
48
  private jobQueue: JobItemQueue<[CheckpointWithHex], void>;
48
49
 
49
50
  private archiveDataEpochs?: number;
51
+ // Finalized state writes are monotonic; reset on restart to include the newly persisted anchor.
52
+ private statePruneFromSlot: Slot = 0;
50
53
  private readonly statesArchiverStrategy: StateArchiveStrategy;
51
54
  private readonly chain: IBeaconChain;
52
55
  private readonly db: IBeaconDb;
@@ -103,7 +106,7 @@ export class ArchiveStore {
103
106
  if (this.opts.pruneHistory) {
104
107
  // prune ALL stale data before starting
105
108
  this.logger.info("Pruning historical data");
106
- await callFnWhenAwait(
109
+ const {stateCutoffSlot} = await callFnWhenAwait(
107
110
  pruneHistory(
108
111
  this.chain.config,
109
112
  this.db,
@@ -116,6 +119,7 @@ export class ArchiveStore {
116
119
  30_000,
117
120
  this.signal
118
121
  );
122
+ this.statePruneFromSlot = stateCutoffSlot;
119
123
  }
120
124
 
121
125
  // Initialize earliestAvailableSlot from the earliest block actually retained (after any pruning
@@ -255,14 +259,16 @@ export class ArchiveStore {
255
259
 
256
260
  if (this.opts.pruneHistory) {
257
261
  timer = this.metrics?.processFinalizedCheckpoint.durationByTask.startTimer();
258
- const blockCutoffSlot = await pruneHistory(
262
+ const {blockCutoffSlot, stateCutoffSlot} = await pruneHistory(
259
263
  this.chain.config,
260
264
  this.db,
261
265
  this.logger,
262
266
  this.metrics,
263
267
  finalizedEpoch,
264
- this.chain.clock.currentEpoch
268
+ this.chain.clock.currentEpoch,
269
+ this.statePruneFromSlot
265
270
  );
271
+ this.statePruneFromSlot = stateCutoffSlot;
266
272
  this.chain.earliestAvailableSlot = Math.max(this.chain.earliestAvailableSlot, blockCutoffSlot);
267
273
  timer?.({source: ArchiveStoreTask.PruneHistory});
268
274
  }
@@ -11,8 +11,9 @@ export async function pruneHistory(
11
11
  logger: Logger,
12
12
  metrics: Metrics | null | undefined,
13
13
  finalizedEpoch: Epoch,
14
- currentEpoch: Epoch
15
- ): Promise<Slot> {
14
+ currentEpoch: Epoch,
15
+ statePruneFromSlot: Slot = 0
16
+ ): Promise<{blockCutoffSlot: Slot; stateCutoffSlot: Slot}> {
16
17
  const blockCutoffEpoch = Math.min(
17
18
  // set by config, with underflow protection
18
19
  Math.max(currentEpoch - config.MIN_EPOCHS_FOR_BLOCK_REQUESTS, 0),
@@ -28,6 +29,7 @@ export async function pruneHistory(
28
29
  currentEpoch,
29
30
  finalizedEpoch,
30
31
  blockCutoffEpoch,
32
+ statePruneFromSlot,
31
33
  stateCutoffSlot,
32
34
  });
33
35
 
@@ -35,7 +37,7 @@ export async function pruneHistory(
35
37
  const [blocks, envelopes, states] = await Promise.all([
36
38
  db.blockArchive.keys({gte: 0, lt: blockCutoffSlot}),
37
39
  db.executionPayloadEnvelopeArchive.keys({gte: 0, lt: blockCutoffSlot}),
38
- db.stateArchive.keys({gte: 0, lt: stateCutoffSlot}),
40
+ stateCutoffSlot > statePruneFromSlot ? db.stateArchive.keys({gte: statePruneFromSlot, lt: stateCutoffSlot}) : [],
39
41
  ]);
40
42
  step0?.();
41
43
 
@@ -64,5 +66,5 @@ export async function pruneHistory(
64
66
 
65
67
  metrics?.pruneHistory.pruneCount.inc();
66
68
 
67
- return blockCutoffSlot;
69
+ return {blockCutoffSlot, stateCutoffSlot};
68
70
  }
@@ -611,7 +611,7 @@ export class BeaconChain implements IBeaconChain {
611
611
  /** Populate in-memory caches with persisted data. Call at least once on startup */
612
612
  async loadFromDisk(): Promise<void> {
613
613
  await this.regen.init();
614
- await this.opPool.fromPersisted(this.db);
614
+ await this.opPool.fromPersisted(this.db, this.getHeadState(), this.bls, this.clock.currentSlot);
615
615
  }
616
616
 
617
617
  /** Persist in-memory data to the DB. Call at least once before stopping the process */
@@ -1329,13 +1329,13 @@ export class BeaconChain implements IBeaconChain {
1329
1329
  };
1330
1330
 
1331
1331
  try {
1332
- await validateApiProposerSlashing(this, proposerSlashing);
1332
+ const verifiedDomain = await validateApiProposerSlashing(this, proposerSlashing);
1333
+ this.opPool.insertProposerSlashing(proposerSlashing, verifiedDomain);
1333
1334
  } catch (e) {
1334
1335
  this.logger.debug("Produced proposer slashing is not valid", {slot: blockSlot, proposerIndex}, e as Error);
1335
1336
  return;
1336
1337
  }
1337
1338
 
1338
- this.opPool.insertProposerSlashing(proposerSlashing);
1339
1339
  this.emitter.emit(routes.events.EventType.proposerSlashing, proposerSlashing);
1340
1340
  this.emitter.emit(ChainEvent.publishProposerSlashing, proposerSlashing);
1341
1341
  this.metrics?.opPool.proposerSlashingsProduced.inc();
@@ -1,14 +1,8 @@
1
1
  import {ChainForkConfig} from "@lodestar/config";
2
2
  import {ForkPostGloas, ForkSeq, ZERO_HASH} from "@lodestar/params";
3
- import {
4
- BeaconStateAllForks,
5
- BeaconStateGloas,
6
- IBeaconStateView,
7
- computeEpochAtSlot,
8
- computeStartSlotAtEpoch,
9
- } from "@lodestar/state-transition";
3
+ import {BeaconStateAllForks, IBeaconStateView, computeEpochAtSlot, isStatePostGloas} from "@lodestar/state-transition";
10
4
  import {SignedBeaconBlock, ssz} from "@lodestar/types";
11
- import {Logger, byteArrayEquals, toHex, toRootHex} from "@lodestar/utils";
5
+ import {LodestarError, Logger, byteArrayEquals, toRootHex} from "@lodestar/utils";
12
6
  import {GENESIS_SLOT} from "../constants/index.js";
13
7
  import {IBeaconDb} from "../db/index.js";
14
8
  import {Metrics} from "../metrics/index.js";
@@ -17,7 +11,7 @@ import {getStateTypeFromBytes} from "../util/multifork.js";
17
11
  export async function persistAnchorState(
18
12
  config: ChainForkConfig,
19
13
  db: IBeaconDb,
20
- anchorState: BeaconStateAllForks,
14
+ anchorState: IBeaconStateView,
21
15
  anchorStateBytes: Uint8Array
22
16
  ): Promise<void> {
23
17
  if (anchorState.slot === GENESIS_SLOT) {
@@ -33,7 +27,8 @@ export async function persistAnchorState(
33
27
  const latestBlockRoot = ssz.phase0.BeaconBlockHeader.hashTreeRoot(latestBlockHeader);
34
28
 
35
29
  if (!byteArrayEquals(blockRoot, latestBlockRoot)) {
36
- throw Error(
30
+ throw new LodestarError(
31
+ {code: "GENESIS_BLOCK_ROOT_MISMATCH"},
37
32
  `Genesis block root ${toRootHex(blockRoot)} does not match genesis state latest block root ${toRootHex(latestBlockRoot)}`
38
33
  );
39
34
  }
@@ -48,16 +43,15 @@ export async function persistAnchorState(
48
43
  }
49
44
  }
50
45
 
51
- export function createGenesisBlock(config: ChainForkConfig, genesisState: BeaconStateAllForks): SignedBeaconBlock {
46
+ export function createGenesisBlock(config: ChainForkConfig, genesisState: IBeaconStateView): SignedBeaconBlock {
52
47
  const types = config.getForkTypes(GENESIS_SLOT);
53
48
  const genesisBlock = types.SignedBeaconBlock.defaultValue();
54
49
  const stateRoot = genesisState.hashTreeRoot();
55
50
  genesisBlock.message.stateRoot = stateRoot;
56
51
 
57
- if (config.getForkSeq(GENESIS_SLOT) >= ForkSeq.gloas) {
52
+ if (config.getForkSeq(GENESIS_SLOT) >= ForkSeq.gloas && isStatePostGloas(genesisState)) {
58
53
  const gloasBlock = genesisBlock as SignedBeaconBlock<ForkPostGloas>;
59
- const gloasState = genesisState as BeaconStateGloas;
60
- gloasBlock.message.body.signedExecutionPayloadBid.message = gloasState.latestExecutionPayloadBid.toValue();
54
+ gloasBlock.message.body.signedExecutionPayloadBid.message = genesisState.latestExecutionPayloadBid;
61
55
  }
62
56
 
63
57
  return genesisBlock;
@@ -86,52 +80,6 @@ export async function initStateFromDb(
86
80
  return state;
87
81
  }
88
82
 
89
- /**
90
- * Initialize and persist an anchor state (either weak subjectivity or genesis)
91
- */
92
- export async function checkAndPersistAnchorState(
93
- config: ChainForkConfig,
94
- db: IBeaconDb,
95
- logger: Logger,
96
- anchorState: BeaconStateAllForks,
97
- anchorStateBytes: Uint8Array,
98
- {
99
- isWithinWeakSubjectivityPeriod,
100
- isCheckpointState,
101
- }: {isWithinWeakSubjectivityPeriod: boolean; isCheckpointState: boolean}
102
- ): Promise<void> {
103
- const expectedFork = config.getForkInfo(computeStartSlotAtEpoch(anchorState.fork.epoch));
104
- const expectedForkVersion = toHex(expectedFork.version);
105
- const stateFork = toHex(anchorState.fork.currentVersion);
106
- if (stateFork !== expectedForkVersion) {
107
- throw Error(
108
- `State current fork version ${stateFork} not equal to current config ${expectedForkVersion}. Maybe caused by importing a state from a different network`
109
- );
110
- }
111
-
112
- const stateInfo = isCheckpointState ? "checkpoint" : "db";
113
- if (isWithinWeakSubjectivityPeriod) {
114
- logger.info(`Initializing beacon from a valid ${stateInfo} state`, {
115
- slot: anchorState.slot,
116
- epoch: computeEpochAtSlot(anchorState.slot),
117
- stateRoot: toRootHex(anchorState.hashTreeRoot()),
118
- isWithinWeakSubjectivityPeriod,
119
- });
120
- } else {
121
- logger.warn(`Initializing from a stale ${stateInfo} state vulnerable to long range attacks`, {
122
- slot: anchorState.slot,
123
- epoch: computeEpochAtSlot(anchorState.slot),
124
- stateRoot: toRootHex(anchorState.hashTreeRoot()),
125
- isWithinWeakSubjectivityPeriod,
126
- });
127
- logger.warn("Checkpoint sync recommended, please use --help to see checkpoint sync options");
128
- }
129
-
130
- if (isCheckpointState || anchorState.slot === GENESIS_SLOT) {
131
- await persistAnchorState(config, db, anchorState, anchorStateBytes);
132
- }
133
- }
134
-
135
83
  export function initBeaconMetrics(metrics: Metrics, state: IBeaconStateView): void {
136
84
  metrics.headSlot.set(state.slot);
137
85
  metrics.previousJustifiedEpoch.set(state.previousJustifiedCheckpoint.epoch);
@@ -12,38 +12,54 @@ import {
12
12
  } from "@lodestar/params";
13
13
  import {
14
14
  IBeaconStateView,
15
+ assertValidAttesterSlashing,
15
16
  computeEpochAtSlot,
16
17
  computeStartSlotAtEpoch,
17
18
  getAttesterSlashableIndices,
19
+ getAttesterSlashingSignatureSets,
20
+ getProposerSlashingSignatureSets,
18
21
  } from "@lodestar/state-transition";
19
22
  import {
20
23
  AttesterSlashing,
24
+ Domain,
21
25
  Epoch,
22
26
  SignedBeaconBlock,
27
+ Slot,
23
28
  ValidatorIndex,
24
29
  capella,
25
30
  phase0,
31
+ ssz,
26
32
  sszTypesFor,
27
33
  } from "@lodestar/types";
28
- import {fromHex, toHex, toRootHex} from "@lodestar/utils";
34
+ import {byteArrayEquals, fromHex, toHex, toRootHex} from "@lodestar/utils";
29
35
  import {IBeaconDb} from "../../db/index.js";
30
36
  import {Metrics} from "../../metrics/metrics.js";
31
37
  import {SignedBLSToExecutionChangeVersioned} from "../../util/types.js";
38
+ import {IBlsVerifier} from "../bls/interface.js";
32
39
  import {BlockType} from "../interface.js";
33
40
  import {BlockProductionStep} from "../produceBlock/produceBlockBody.js";
34
- import {isValidBlsToExecutionChangeForBlockInclusion} from "./utils.js";
41
+ import {
42
+ getAttesterSlashingSignatureDomains,
43
+ getProposerSlashingSignatureDomain,
44
+ isValidBlsToExecutionChangeForBlockInclusion,
45
+ } from "./utils.js";
35
46
 
36
47
  type HexRoot = string;
37
48
  type AttesterSlashingCached = {
38
49
  attesterSlashing: AttesterSlashing;
39
50
  intersectingIndices: number[];
51
+ verifiedDomains: [Domain, Domain];
52
+ };
53
+ type ProposerSlashingCached = {
54
+ proposerSlashing: phase0.ProposerSlashing;
55
+ verifiedDomain: Domain;
40
56
  };
41
57
 
42
58
  export class OpPool {
43
59
  /** Map of uniqueId(AttesterSlashing) -> AttesterSlashing */
44
60
  private readonly attesterSlashings = new Map<HexRoot, AttesterSlashingCached>();
45
61
  /** Map of to slash validator index -> ProposerSlashing */
46
- private readonly proposerSlashings = new Map<ValidatorIndex, phase0.ProposerSlashing>();
62
+ private readonly proposerSlashings = new Map<ValidatorIndex, ProposerSlashingCached>();
47
63
  /** Map of to exit validator index -> SignedVoluntaryExit */
48
64
  private readonly voluntaryExits = new Map<ValidatorIndex, phase0.SignedVoluntaryExit>();
49
65
  /** Set of seen attester slashing indexes. No need to prune */
@@ -68,7 +84,7 @@ export class OpPool {
68
84
  return this.blsToExecutionChanges.size;
69
85
  }
70
86
 
71
- async fromPersisted(db: IBeaconDb): Promise<void> {
87
+ async fromPersisted(db: IBeaconDb, state: IBeaconStateView, bls: IBlsVerifier, currentSlot: Slot): Promise<void> {
72
88
  const [attesterSlashings, proposerSlashings, voluntaryExits, blsToExecutionChanges] = await Promise.all([
73
89
  db.attesterSlashing.entries(),
74
90
  db.proposerSlashing.values(),
@@ -76,11 +92,42 @@ export class OpPool {
76
92
  db.blsToExecutionChange.values(),
77
93
  ]);
78
94
 
79
- for (const attesterSlashing of attesterSlashings) {
80
- this.insertAttesterSlashing(ForkName.electra, attesterSlashing.value, attesterSlashing.key);
95
+ // Persisted operations have no verification context. Rebuild it before they can enter the pool.
96
+ // The startup anchor may precede a fork whose slashings are already persisted.
97
+ for (const {key, value: attesterSlashing} of attesterSlashings) {
98
+ try {
99
+ assertValidAttesterSlashing(this.config, currentSlot, state.validatorCount, attesterSlashing, false);
100
+ } catch {
101
+ continue;
102
+ }
103
+ const verifiedDomains = getAttesterSlashingSignatureDomains(this.config, currentSlot, attesterSlashing);
104
+ if (
105
+ !(await bls.verifySignatureSets(getAttesterSlashingSignatureSets(this.config, currentSlot, attesterSlashing)))
106
+ ) {
107
+ continue;
108
+ }
109
+ this.insertAttesterSlashing(ForkName.electra, attesterSlashing, verifiedDomains, key);
81
110
  }
82
111
  for (const proposerSlashing of proposerSlashings) {
83
- this.insertProposerSlashing(proposerSlashing);
112
+ const header1 = proposerSlashing.signedHeader1.message;
113
+ const header2 = proposerSlashing.signedHeader2.message;
114
+ // Startup may restore a state from before activation. Current slashability is checked
115
+ // when selecting operations, so it must not prevent restoring an otherwise valid slashing.
116
+ if (
117
+ header1.slot !== header2.slot ||
118
+ header1.proposerIndex !== header2.proposerIndex ||
119
+ header1.proposerIndex >= state.validatorCount ||
120
+ ssz.phase0.BeaconBlockHeaderBigint.equals(header1, header2)
121
+ ) {
122
+ continue;
123
+ }
124
+ const verifiedDomain = getProposerSlashingSignatureDomain(this.config, currentSlot, proposerSlashing);
125
+ if (
126
+ !(await bls.verifySignatureSets(getProposerSlashingSignatureSets(this.config, currentSlot, proposerSlashing)))
127
+ ) {
128
+ continue;
129
+ }
130
+ this.insertProposerSlashing(proposerSlashing, verifiedDomain);
84
131
  }
85
132
  for (const voluntaryExit of voluntaryExits) {
86
133
  this.insertVoluntaryExit(voluntaryExit);
@@ -102,8 +149,12 @@ export class OpPool {
102
149
  ),
103
150
  persistDiff(
104
151
  db.proposerSlashing,
105
- Array.from(this.proposerSlashings.entries()).map(([key, value]) => ({key, value})),
106
- (index) => index
152
+ Array.from(this.proposerSlashings.entries()).map(([key, value]) => ({key, value: value.proposerSlashing})),
153
+ (index) => index,
154
+ // A slashing invalidated by a fork may remain on disk after eviction from the pool.
155
+ // A new valid slashing for that validator has the same database key, so comparing
156
+ // keys alone would retain the invalid slashing and lose the replacement on restart.
157
+ {updateExisting: true}
107
158
  ),
108
159
  persistDiff(
109
160
  db.voluntaryExit,
@@ -143,7 +194,12 @@ export class OpPool {
143
194
  }
144
195
 
145
196
  /** Must be validated beforehand */
146
- insertAttesterSlashing(fork: ForkName, attesterSlashing: AttesterSlashing, rootHash?: Uint8Array): void {
197
+ insertAttesterSlashing(
198
+ fork: ForkName,
199
+ attesterSlashing: AttesterSlashing,
200
+ verifiedDomains: [Domain, Domain],
201
+ rootHash?: Uint8Array
202
+ ): void {
147
203
  if (!rootHash) {
148
204
  rootHash = sszTypesFor(fork).AttesterSlashing.hashTreeRoot(attesterSlashing);
149
205
  }
@@ -153,6 +209,7 @@ export class OpPool {
153
209
  this.attesterSlashings.set(toRootHex(rootHash), {
154
210
  attesterSlashing,
155
211
  intersectingIndices,
212
+ verifiedDomains,
156
213
  });
157
214
  for (const index of intersectingIndices) {
158
215
  this.attesterSlashingIndexes.add(index);
@@ -160,8 +217,11 @@ export class OpPool {
160
217
  }
161
218
 
162
219
  /** Must be validated beforehand */
163
- insertProposerSlashing(proposerSlashing: phase0.ProposerSlashing): void {
164
- this.proposerSlashings.set(proposerSlashing.signedHeader1.message.proposerIndex, proposerSlashing);
220
+ insertProposerSlashing(proposerSlashing: phase0.ProposerSlashing, verifiedDomain: Domain): void {
221
+ this.proposerSlashings.set(proposerSlashing.signedHeader1.message.proposerIndex, {
222
+ proposerSlashing,
223
+ verifiedDomain,
224
+ });
165
225
  }
166
226
 
167
227
  /** Must be validated beforehand */
@@ -204,7 +264,14 @@ export class OpPool {
204
264
  : metrics?.builderBlockProductionTimeSteps;
205
265
 
206
266
  const endProposerSlashing = stepsMetrics?.startTimer();
207
- for (const proposerSlashing of this.proposerSlashings.values()) {
267
+ for (const [key, {proposerSlashing, verifiedDomain}] of this.proposerSlashings) {
268
+ // A fork can change the required domain even for verified slashings, including those with future-slot headers.
269
+ if (
270
+ !byteArrayEquals(verifiedDomain, getProposerSlashingSignatureDomain(this.config, state.slot, proposerSlashing))
271
+ ) {
272
+ this.proposerSlashings.delete(key);
273
+ continue;
274
+ }
208
275
  const index = proposerSlashing.signedHeader1.message.proposerIndex;
209
276
  const validator = state.getValidator(index);
210
277
  if (!validator.slashed && validator.activationEpoch <= stateEpoch && stateEpoch < validator.withdrawableEpoch) {
@@ -223,7 +290,12 @@ export class OpPool {
223
290
  const endAttesterSlashings = stepsMetrics?.startTimer();
224
291
  const attesterSlashings: AttesterSlashing[] = [];
225
292
  const maxAttesterSlashings = stateFork >= ForkSeq.electra ? MAX_ATTESTER_SLASHINGS_ELECTRA : MAX_ATTESTER_SLASHINGS;
226
- attesterSlashing: for (const attesterSlashing of this.attesterSlashings.values()) {
293
+ attesterSlashing: for (const [key, attesterSlashing] of this.attesterSlashings) {
294
+ const domains = getAttesterSlashingSignatureDomains(this.config, state.slot, attesterSlashing.attesterSlashing);
295
+ if (!attesterSlashing.verifiedDomains.every((domain, i) => byteArrayEquals(domain, domains[i]))) {
296
+ this.attesterSlashings.delete(key);
297
+ continue;
298
+ }
227
299
  /** Indices slashable in this attester slashing */
228
300
  const slashableIndices = new Set<ValidatorIndex>();
229
301
  for (let i = 0; i < attesterSlashing.intersectingIndices.length; i++) {
@@ -303,7 +375,7 @@ export class OpPool {
303
375
 
304
376
  /** For beacon pool API */
305
377
  getAllProposerSlashings(): phase0.ProposerSlashing[] {
306
- return Array.from(this.proposerSlashings.values());
378
+ return Array.from(this.proposerSlashings.values()).map(({proposerSlashing}) => proposerSlashing);
307
379
  }
308
380
 
309
381
  /** For beacon pool API */
@@ -356,7 +428,7 @@ export class OpPool {
356
428
  */
357
429
  private pruneProposerSlashings(headState: IBeaconStateView): void {
358
430
  const finalizedEpoch = headState.finalizedCheckpoint.epoch;
359
- for (const [key, proposerSlashing] of this.proposerSlashings.entries()) {
431
+ for (const [key, {proposerSlashing}] of this.proposerSlashings.entries()) {
360
432
  const index = proposerSlashing.signedHeader1.message.proposerIndex;
361
433
  if (headState.getValidator(index).exitEpoch <= finalizedEpoch) {
362
434
  this.proposerSlashings.delete(key);
@@ -436,14 +508,15 @@ function isSlashableAtEpoch(validator: phase0.Validator, epoch: Epoch): boolean
436
508
  async function persistDiff<K extends Id, V>(
437
509
  dbRepo: Repository<K, V>,
438
510
  items: {key: K; value: V}[],
439
- serializeKey: (key: K) => number | string
511
+ serializeKey: (key: K) => number | string,
512
+ opts: {updateExisting?: boolean} = {}
440
513
  ): Promise<void> {
441
514
  const persistedKeys = await dbRepo.keys();
442
515
  const batch: DbBatch<K, V> = [];
443
516
 
444
517
  const persistedKeysSerialized = new Set(persistedKeys.map(serializeKey));
445
518
  for (const item of items) {
446
- if (!persistedKeysSerialized.has(serializeKey(item.key))) {
519
+ if (opts.updateExisting || !persistedKeysSerialized.has(serializeKey(item.key))) {
447
520
  batch.push({type: "put", key: item.key, value: item.value});
448
521
  }
449
522
  }
@@ -1,9 +1,37 @@
1
1
  import {Signature} from "@chainsafe/lodestar-z/blst";
2
- import {BLS_WITHDRAWAL_PREFIX} from "@lodestar/params";
3
- import {IBeaconStateView} from "@lodestar/state-transition";
4
- import {Slot, capella} from "@lodestar/types";
2
+ import {BeaconConfig} from "@lodestar/config";
3
+ import {BLS_WITHDRAWAL_PREFIX, DOMAIN_BEACON_ATTESTER, DOMAIN_BEACON_PROPOSER} from "@lodestar/params";
4
+ import {IBeaconStateView, computeStartSlotAtEpoch} from "@lodestar/state-transition";
5
+ import {AttesterSlashing, Domain, Slot, capella, phase0} from "@lodestar/types";
5
6
  import {AggregateFast, AggregateFastElectra} from "./attestationPool.js";
6
7
 
8
+ export function getProposerSlashingSignatureDomain(
9
+ config: BeaconConfig,
10
+ stateSlot: Slot,
11
+ slashing: phase0.ProposerSlashing
12
+ ): Domain {
13
+ return config.getDomain(stateSlot, DOMAIN_BEACON_PROPOSER, Number(slashing.signedHeader1.message.slot));
14
+ }
15
+
16
+ export function getAttesterSlashingSignatureDomains(
17
+ config: BeaconConfig,
18
+ stateSlot: Slot,
19
+ slashing: AttesterSlashing
20
+ ): [Domain, Domain] {
21
+ return [
22
+ config.getDomain(
23
+ stateSlot,
24
+ DOMAIN_BEACON_ATTESTER,
25
+ computeStartSlotAtEpoch(Number(slashing.attestation1.data.target.epoch))
26
+ ),
27
+ config.getDomain(
28
+ stateSlot,
29
+ DOMAIN_BEACON_ATTESTER,
30
+ computeStartSlotAtEpoch(Number(slashing.attestation2.data.target.epoch))
31
+ ),
32
+ ];
33
+ }
34
+
7
35
  /**
8
36
  * Prune a Map indexed by slot to keep the most recent slots, up to `slotsRetained`
9
37
  */