@lodestar/beacon-node 1.43.0-rc.5 → 1.44.0-dev.1a8c38ee36

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 (111) hide show
  1. package/lib/api/impl/beacon/pool/index.d.ts.map +1 -1
  2. package/lib/api/impl/beacon/pool/index.js +46 -5
  3. package/lib/api/impl/beacon/pool/index.js.map +1 -1
  4. package/lib/api/impl/validator/index.d.ts.map +1 -1
  5. package/lib/api/impl/validator/index.js +26 -12
  6. package/lib/api/impl/validator/index.js.map +1 -1
  7. package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
  8. package/lib/chain/blocks/importExecutionPayload.js +4 -2
  9. package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
  10. package/lib/chain/chain.d.ts +2 -1
  11. package/lib/chain/chain.d.ts.map +1 -1
  12. package/lib/chain/chain.js +3 -1
  13. package/lib/chain/chain.js.map +1 -1
  14. package/lib/chain/errors/executionPayloadBid.d.ts +24 -1
  15. package/lib/chain/errors/executionPayloadBid.d.ts.map +1 -1
  16. package/lib/chain/errors/executionPayloadBid.js +4 -0
  17. package/lib/chain/errors/executionPayloadBid.js.map +1 -1
  18. package/lib/chain/forkChoice/index.d.ts.map +1 -1
  19. package/lib/chain/forkChoice/index.js +14 -4
  20. package/lib/chain/forkChoice/index.js.map +1 -1
  21. package/lib/chain/interface.d.ts +2 -1
  22. package/lib/chain/interface.d.ts.map +1 -1
  23. package/lib/chain/interface.js.map +1 -1
  24. package/lib/chain/lightClient/index.d.ts.map +1 -1
  25. package/lib/chain/lightClient/index.js +1 -1
  26. package/lib/chain/lightClient/index.js.map +1 -1
  27. package/lib/chain/opPools/index.d.ts +1 -0
  28. package/lib/chain/opPools/index.d.ts.map +1 -1
  29. package/lib/chain/opPools/index.js +1 -0
  30. package/lib/chain/opPools/index.js.map +1 -1
  31. package/lib/chain/opPools/payloadAttestationPool.d.ts +1 -1
  32. package/lib/chain/opPools/payloadAttestationPool.d.ts.map +1 -1
  33. package/lib/chain/opPools/payloadAttestationPool.js +30 -10
  34. package/lib/chain/opPools/payloadAttestationPool.js.map +1 -1
  35. package/lib/chain/opPools/proposerPreferencesPool.d.ts +29 -0
  36. package/lib/chain/opPools/proposerPreferencesPool.d.ts.map +1 -0
  37. package/lib/chain/opPools/proposerPreferencesPool.js +56 -0
  38. package/lib/chain/opPools/proposerPreferencesPool.js.map +1 -0
  39. package/lib/chain/produceBlock/produceBlockBody.d.ts +4 -0
  40. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  41. package/lib/chain/produceBlock/produceBlockBody.js +48 -2
  42. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  43. package/lib/chain/validation/executionPayloadBid.d.ts +7 -3
  44. package/lib/chain/validation/executionPayloadBid.d.ts.map +1 -1
  45. package/lib/chain/validation/executionPayloadBid.js +85 -21
  46. package/lib/chain/validation/executionPayloadBid.js.map +1 -1
  47. package/lib/chain/validation/payloadAttestationMessage.d.ts +1 -1
  48. package/lib/chain/validation/payloadAttestationMessage.d.ts.map +1 -1
  49. package/lib/chain/validation/payloadAttestationMessage.js +5 -3
  50. package/lib/chain/validation/payloadAttestationMessage.js.map +1 -1
  51. package/lib/chain/validatorMonitor.d.ts +1 -0
  52. package/lib/chain/validatorMonitor.d.ts.map +1 -1
  53. package/lib/chain/validatorMonitor.js +16 -0
  54. package/lib/chain/validatorMonitor.js.map +1 -1
  55. package/lib/execution/builder/index.d.ts +1 -2
  56. package/lib/execution/builder/index.d.ts.map +1 -1
  57. package/lib/execution/builder/index.js +0 -1
  58. package/lib/execution/builder/index.js.map +1 -1
  59. package/lib/execution/engine/interface.d.ts +1 -0
  60. package/lib/execution/engine/interface.d.ts.map +1 -1
  61. package/lib/execution/engine/types.d.ts +2 -0
  62. package/lib/execution/engine/types.d.ts.map +1 -1
  63. package/lib/execution/engine/types.js +2 -0
  64. package/lib/execution/engine/types.js.map +1 -1
  65. package/lib/metrics/metrics/lodestar.d.ts +1 -1
  66. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  67. package/lib/metrics/metrics/lodestar.js +4 -3
  68. package/lib/metrics/metrics/lodestar.js.map +1 -1
  69. package/lib/network/gossip/topic.d.ts +1 -1
  70. package/lib/network/interface.d.ts +1 -0
  71. package/lib/network/interface.d.ts.map +1 -1
  72. package/lib/network/network.d.ts +1 -0
  73. package/lib/network/network.d.ts.map +1 -1
  74. package/lib/network/network.js +5 -0
  75. package/lib/network/network.js.map +1 -1
  76. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  77. package/lib/network/processor/gossipHandlers.js +18 -5
  78. package/lib/network/processor/gossipHandlers.js.map +1 -1
  79. package/lib/util/dependentRoot.d.ts +6 -2
  80. package/lib/util/dependentRoot.d.ts.map +1 -1
  81. package/lib/util/dependentRoot.js +20 -16
  82. package/lib/util/dependentRoot.js.map +1 -1
  83. package/package.json +14 -15
  84. package/src/api/impl/beacon/pool/index.ts +56 -3
  85. package/src/api/impl/validator/index.ts +28 -12
  86. package/src/chain/blocks/importExecutionPayload.ts +7 -1
  87. package/src/chain/chain.ts +3 -0
  88. package/src/chain/errors/executionPayloadBid.ts +25 -1
  89. package/src/chain/forkChoice/index.ts +14 -4
  90. package/src/chain/interface.ts +2 -0
  91. package/src/chain/lightClient/index.ts +6 -6
  92. package/src/chain/opPools/index.ts +1 -0
  93. package/src/chain/opPools/payloadAttestationPool.ts +34 -10
  94. package/src/chain/opPools/proposerPreferencesPool.ts +59 -0
  95. package/src/chain/produceBlock/produceBlockBody.ts +75 -7
  96. package/src/chain/validation/executionPayloadBid.ts +94 -26
  97. package/src/chain/validation/payloadAttestationMessage.ts +6 -4
  98. package/src/chain/validatorMonitor.ts +18 -0
  99. package/src/execution/builder/index.ts +1 -4
  100. package/src/execution/engine/interface.ts +1 -0
  101. package/src/execution/engine/types.ts +4 -0
  102. package/src/metrics/metrics/lodestar.ts +4 -3
  103. package/src/network/interface.ts +1 -0
  104. package/src/network/network.ts +11 -0
  105. package/src/network/processor/gossipHandlers.ts +21 -4
  106. package/src/util/dependentRoot.ts +22 -18
  107. package/lib/execution/builder/utils.d.ts +0 -5
  108. package/lib/execution/builder/utils.d.ts.map +0 -1
  109. package/lib/execution/builder/utils.js +0 -17
  110. package/lib/execution/builder/utils.js.map +0 -1
  111. package/src/execution/builder/utils.ts +0 -19
@@ -66,6 +66,7 @@ export type ValidatorMonitor = {
66
66
  delaySec: Seconds,
67
67
  envelope: gloas.SignedExecutionPayloadEnvelope
68
68
  ): void;
69
+ registerExecutionPayloadBid(src: OpSource, proposerIndex: ValidatorIndex, bid: gloas.ExecutionPayloadBid): void;
69
70
  registerImportedBlock(block: BeaconBlock, data: {proposerBalanceDelta: number}): void;
70
71
  onPoolSubmitUnaggregatedAttestation(
71
72
  seenTimestampSec: number,
@@ -459,6 +460,23 @@ export function createValidatorMonitor(
459
460
  // TODO GLOAS: implement execution payload envelope monitoring
460
461
  },
461
462
 
463
+ registerExecutionPayloadBid(src, proposerIndex, bid) {
464
+ if (!validators.has(proposerIndex)) {
465
+ return;
466
+ }
467
+ log("Received an execution payload bid for monitored proposer", {
468
+ slot: bid.slot,
469
+ proposerIndex,
470
+ src,
471
+ builderIndex: bid.builderIndex,
472
+ gasLimit: bid.gasLimit,
473
+ value: bid.value.toString(),
474
+ parentBlockRoot: toRootHex(bid.parentBlockRoot),
475
+ parentBlockHash: toRootHex(bid.parentBlockHash),
476
+ blockHash: toRootHex(bid.blockHash),
477
+ });
478
+ },
479
+
462
480
  registerImportedBlock(block, {proposerBalanceDelta}) {
463
481
  const validator = validators.get(block.proposerIndex);
464
482
  if (validator) {
@@ -1,11 +1,8 @@
1
1
  import {ChainForkConfig} from "@lodestar/config";
2
2
  import {Logger} from "@lodestar/logger";
3
3
  import {Metrics} from "../../metrics/metrics.js";
4
- import {IExecutionBuilder} from "./interface.js";
5
-
6
- export {getExpectedGasLimit} from "./utils.js";
7
-
8
4
  import {ExecutionBuilderHttp, ExecutionBuilderHttpOpts, defaultExecutionBuilderHttpOpts} from "./http.js";
5
+ import {IExecutionBuilder} from "./interface.js";
9
6
 
10
7
  export {ExecutionBuilderHttp, defaultExecutionBuilderHttpOpts};
11
8
 
@@ -88,6 +88,7 @@ export type PayloadAttributes = {
88
88
  withdrawals?: capella.Withdrawal[];
89
89
  parentBeaconBlockRoot?: Uint8Array;
90
90
  slotNumber?: number; // EIP-7843
91
+ targetGasLimit?: number; // GLOAS (PayloadAttributesV4, execution-apis#796)
91
92
  };
92
93
 
93
94
  export type VersionedHashes = Uint8Array[];
@@ -245,6 +245,8 @@ export type PayloadAttributesRpc = {
245
245
  parentBeaconBlockRoot?: DATA;
246
246
  /** QUANTITY, 64 Bits - value for the slot number field of the new payload (EIP-7843) */
247
247
  slotNumber?: QUANTITY;
248
+ /** QUANTITY, 64 Bits - target value for the gasLimit field of the new payload (GLOAS, execution-apis#796) */
249
+ targetGasLimit?: QUANTITY;
248
250
  };
249
251
 
250
252
  export type ClientVersionRpc = {
@@ -425,6 +427,7 @@ export function serializePayloadAttributes(data: PayloadAttributes): PayloadAttr
425
427
  withdrawals: data.withdrawals?.map(serializeWithdrawal),
426
428
  parentBeaconBlockRoot: data.parentBeaconBlockRoot ? bytesToData(data.parentBeaconBlockRoot) : undefined,
427
429
  slotNumber: data.slotNumber !== undefined ? numToQuantity(data.slotNumber) : undefined,
430
+ targetGasLimit: data.targetGasLimit !== undefined ? numToQuantity(data.targetGasLimit) : undefined,
428
431
  };
429
432
  }
430
433
 
@@ -442,6 +445,7 @@ export function deserializePayloadAttributes(data: PayloadAttributesRpc): Payloa
442
445
  withdrawals: data.withdrawals?.map((withdrawal) => deserializeWithdrawal(withdrawal)),
443
446
  parentBeaconBlockRoot: data.parentBeaconBlockRoot ? dataToBytes(data.parentBeaconBlockRoot, 32) : undefined,
444
447
  slotNumber: data.slotNumber !== undefined ? quantityToNum(data.slotNumber) : undefined,
448
+ targetGasLimit: data.targetGasLimit !== undefined ? quantityToNum(data.targetGasLimit) : undefined,
445
449
  };
446
450
  }
447
451
 
@@ -987,10 +987,11 @@ export function createLodestarMetrics(
987
987
  }),
988
988
  },
989
989
  importPayload: {
990
- bySource: register.gauge<{source: PayloadEnvelopeInputSource}>({
991
- name: "lodestar_import_payload_by_source_total",
992
- help: "Total number of imported execution payload envelopes by source",
990
+ elapsedTimeTillImported: register.histogram<{source: PayloadEnvelopeInputSource}>({
991
+ name: "lodestar_import_payload_elapsed_time_till_imported_seconds",
992
+ help: "Time elapsed between slot time and the time execution payload envelope is imported (added to fork choice)",
993
993
  labelNames: ["source"],
994
+ buckets: [1, 2, 3, 6, 9, 12],
994
995
  }),
995
996
  columnsBySource: register.gauge<{source: PayloadEnvelopeInputSource}>({
996
997
  name: "lodestar_import_payload_columns_by_source_total",
@@ -114,6 +114,7 @@ export interface INetwork extends INetworkCorePublic {
114
114
  publishLightClientOptimisticUpdate(update: LightClientOptimisticUpdate): Promise<number>;
115
115
  publishSignedExecutionPayloadEnvelope(signedEnvelope: gloas.SignedExecutionPayloadEnvelope): Promise<number>;
116
116
  publishPayloadAttestationMessage(payloadAttestationMessage: gloas.PayloadAttestationMessage): Promise<number>;
117
+ publishProposerPreferences(signedProposerPreferences: gloas.SignedProposerPreferences): Promise<number>;
117
118
 
118
119
  // Debug
119
120
  dumpGossipQueue(gossipType: GossipType): Promise<PendingGossipsubMessage[]>;
@@ -526,6 +526,17 @@ export class Network implements INetwork {
526
526
  );
527
527
  }
528
528
 
529
+ async publishProposerPreferences(signedProposerPreferences: gloas.SignedProposerPreferences): Promise<number> {
530
+ const epoch = computeEpochAtSlot(signedProposerPreferences.message.proposalSlot);
531
+ const boundary = this.config.getForkBoundaryAtEpoch(epoch);
532
+
533
+ return this.publishGossip<GossipType.proposer_preferences>(
534
+ {type: GossipType.proposer_preferences, boundary},
535
+ signedProposerPreferences,
536
+ {ignoreDuplicatePublishError: true}
537
+ );
538
+ }
539
+
529
540
  private async publishGossip<K extends GossipType>(
530
541
  topic: GossipTopicMap[K],
531
542
  object: GossipTypeMap[K],
@@ -1117,7 +1117,16 @@ function getSequentialHandlers(modules: ValidatorFnsModules, options: GossipHand
1117
1117
  }
1118
1118
 
1119
1119
  const slot = envelope.payload.slotNumber;
1120
- const delaySec = seenTimestampSec - computeTimeAtSlot(config, slot, chain.genesisTime);
1120
+ const delaySec = chain.clock.secFromSlot(slot, seenTimestampSec);
1121
+
1122
+ logger.debug("Received gossip payload envelope", {
1123
+ currentSlot: chain.clock.currentSlot,
1124
+ peerId: peerIdStr,
1125
+ slot,
1126
+ blockRoot: toRootHex(envelope.beaconBlockRoot),
1127
+ delaySec,
1128
+ });
1129
+
1121
1130
  metrics?.gossipExecutionPayloadEnvelope.elapsedTimeTillReceived.observe({source: OpSource.gossip}, delaySec);
1122
1131
  chain.validatorMonitor?.registerExecutionPayloadEnvelope(OpSource.gossip, delaySec, signedEnvelope);
1123
1132
 
@@ -1197,7 +1206,7 @@ function getSequentialHandlers(modules: ValidatorFnsModules, options: GossipHand
1197
1206
  const insertOutcome = chain.payloadAttestationPool.add(
1198
1207
  payloadAttestationMessage,
1199
1208
  validationResult.attDataRootHex,
1200
- validationResult.validatorCommitteeIndex
1209
+ validationResult.validatorCommitteeIndices
1201
1210
  );
1202
1211
  metrics?.opPool.payloadAttestationPool.gossipInsertOutcome.inc({insertOutcome});
1203
1212
  } catch (e) {
@@ -1205,7 +1214,7 @@ function getSequentialHandlers(modules: ValidatorFnsModules, options: GossipHand
1205
1214
  }
1206
1215
  chain.forkChoice.notifyPtcMessages(
1207
1216
  toRootHex(payloadAttestationMessage.data.beaconBlockRoot),
1208
- [validationResult.validatorCommitteeIndex],
1217
+ validationResult.validatorCommitteeIndices,
1209
1218
  payloadAttestationMessage.data.payloadPresent
1210
1219
  );
1211
1220
  },
@@ -1215,7 +1224,7 @@ function getSequentialHandlers(modules: ValidatorFnsModules, options: GossipHand
1215
1224
  }: GossipHandlerParamGeneric<GossipType.execution_payload_bid>) => {
1216
1225
  const {serializedData} = gossipData;
1217
1226
  const executionPayloadBid = sszDeserialize(topic, serializedData);
1218
- await validateGossipExecutionPayloadBid(chain, executionPayloadBid);
1227
+ const {proposerIndex} = await validateGossipExecutionPayloadBid(chain, executionPayloadBid);
1219
1228
 
1220
1229
  // Handle valid payload bid by storing in a bid pool
1221
1230
  try {
@@ -1225,6 +1234,8 @@ function getSequentialHandlers(modules: ValidatorFnsModules, options: GossipHand
1225
1234
  logger.error("Error adding to executionPayloadBid pool", {}, e as Error);
1226
1235
  }
1227
1236
 
1237
+ chain.validatorMonitor?.registerExecutionPayloadBid(OpSource.gossip, proposerIndex, executionPayloadBid.message);
1238
+
1228
1239
  chain.emitter.emit(routes.events.EventType.executionPayloadBid, {
1229
1240
  version: config.getForkName(executionPayloadBid.message.slot),
1230
1241
  data: executionPayloadBid,
@@ -1237,6 +1248,12 @@ function getSequentialHandlers(modules: ValidatorFnsModules, options: GossipHand
1237
1248
  const {serializedData} = gossipData;
1238
1249
  const signedProposerPreferences = sszDeserialize(topic, serializedData);
1239
1250
  await validateGossipProposerPreferences(chain, signedProposerPreferences);
1251
+
1252
+ chain.proposerPreferencesPool.add(signedProposerPreferences);
1253
+ chain.emitter.emit(routes.events.EventType.proposerPreferences, {
1254
+ version: ForkName.gloas,
1255
+ data: signedProposerPreferences,
1256
+ });
1240
1257
  },
1241
1258
  };
1242
1259
  }
@@ -2,45 +2,49 @@ import {EpochDifference, IForkChoice, ProtoBlock} from "@lodestar/fork-choice";
2
2
  import {Epoch, RootHex} from "@lodestar/types";
3
3
 
4
4
  /**
5
- * Get dependent root of a shuffling given attestation epoch and head block.
5
+ * Get dependent root of a shuffling given a message epoch and a proto block.
6
+ *
7
+ * Pre-gloas, this is used for attestation validation
8
+ * Post-gloas, this is also used for execution_payload_bid validation because post-fulu,
9
+ * a dependent root of a proposal duties is 1-epoch look ahead (instead of 0 as of pre-fulu)
6
10
  */
7
11
  export function getShufflingDependentRoot(
8
12
  forkChoice: IForkChoice,
9
- attEpoch: Epoch,
10
- blockEpoch: Epoch,
11
- attHeadBlock: ProtoBlock
13
+ msgEpoch: Epoch,
14
+ protoBlockEpoch: Epoch,
15
+ protoBlock: ProtoBlock
12
16
  ): RootHex {
13
17
  let shufflingDependentRoot: RootHex;
14
- if (blockEpoch === attEpoch) {
18
+ if (protoBlockEpoch === msgEpoch) {
15
19
  // current shuffling, this is equivalent to `headState.currentShuffling`
16
- // given blockEpoch = attEpoch = n
20
+ // given protoBlockEpoch = msgEpoch = n
17
21
  // epoch: (n-2) (n-1) n (n+1)
18
22
  // |-------|-------|-------|-------|
19
- // attHeadBlock ------------------------^
23
+ // protoBlock ------------------------^
20
24
  // shufflingDependentRoot ------^
21
- shufflingDependentRoot = forkChoice.getDependentRoot(attHeadBlock, EpochDifference.previous);
22
- } else if (blockEpoch === attEpoch - 1) {
25
+ shufflingDependentRoot = forkChoice.getDependentRoot(protoBlock, EpochDifference.previous);
26
+ } else if (protoBlockEpoch === msgEpoch - 1) {
23
27
  // next shuffling, this is equivalent to `headState.nextShuffling`
24
- // given blockEpoch = n-1, attEpoch = n
28
+ // given protoBlockEpoch = n-1, msgEpoch = n
25
29
  // epoch: (n-2) (n-1) n (n+1)
26
30
  // |-------|-------|-------|-------|
27
- // attHeadBlock -------------------^
31
+ // protoBlock -------------------^
28
32
  // shufflingDependentRoot ------^
29
- shufflingDependentRoot = forkChoice.getDependentRoot(attHeadBlock, EpochDifference.current);
30
- } else if (blockEpoch < attEpoch - 1) {
33
+ shufflingDependentRoot = forkChoice.getDependentRoot(protoBlock, EpochDifference.current);
34
+ } else if (protoBlockEpoch < msgEpoch - 1) {
31
35
  // this never happens with default chain option of maxSkipSlots = 32, however we still need to handle it
32
36
  // check the verifyHeadBlockAndTargetRoot() function above
33
- // given blockEpoch = n-2, attEpoch = n
37
+ // given protoBlockEpoch = n-2, msgEpoch = n
34
38
  // epoch: (n-2) (n-1) n (n+1)
35
39
  // |-------|-------|-------|-------|
36
- // attHeadBlock -----------^
40
+ // protoBlock -----------^
37
41
  // shufflingDependentRoot -----^
38
- shufflingDependentRoot = attHeadBlock.blockRoot;
42
+ shufflingDependentRoot = protoBlock.blockRoot;
39
43
  // use lodestar_gossip_attestation_head_slot_to_attestation_slot metric to track this case
40
44
  } else {
41
- // blockEpoch > attEpoch
45
+ // protoBlockEpoch > msgEpoch
42
46
  // should not happen, handled in verifyAttestationTargetRoot
43
- throw Error(`attestation epoch ${attEpoch} is before head block epoch ${blockEpoch}`);
47
+ throw Error(`message epoch ${msgEpoch} is before proto block epoch ${protoBlockEpoch}`);
44
48
  }
45
49
 
46
50
  return shufflingDependentRoot;
@@ -1,5 +0,0 @@
1
- /**
2
- * Calculates expected gas limit based on parent gas limit and target gas limit
3
- */
4
- export declare function getExpectedGasLimit(parentGasLimit: number, targetGasLimit: number): number;
5
- //# sourceMappingURL=utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/execution/builder/utils.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAU1F"}
@@ -1,17 +0,0 @@
1
- /**
2
- * From https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1559.md
3
- */
4
- const gasLimitAdjustmentFactor = 1024;
5
- /**
6
- * Calculates expected gas limit based on parent gas limit and target gas limit
7
- */
8
- export function getExpectedGasLimit(parentGasLimit, targetGasLimit) {
9
- const maxGasLimitDifference = Math.max(Math.floor(parentGasLimit / gasLimitAdjustmentFactor) - 1, 0);
10
- if (targetGasLimit > parentGasLimit) {
11
- const gasDiff = targetGasLimit - parentGasLimit;
12
- return parentGasLimit + Math.min(gasDiff, maxGasLimitDifference);
13
- }
14
- const gasDiff = parentGasLimit - targetGasLimit;
15
- return parentGasLimit - Math.min(gasDiff, maxGasLimitDifference);
16
- }
17
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/execution/builder/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAEtC;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,cAAsB,EAAE,cAAsB,EAAU;IAC1F,MAAM,qBAAqB,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,wBAAwB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAErG,IAAI,cAAc,GAAG,cAAc,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,cAAc,GAAG,cAAc,CAAC;QAChD,OAAO,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;IACnE,CAAC;IAED,MAAM,OAAO,GAAG,cAAc,GAAG,cAAc,CAAC;IAChD,OAAO,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;AAAA,CAClE"}
@@ -1,19 +0,0 @@
1
- /**
2
- * From https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1559.md
3
- */
4
- const gasLimitAdjustmentFactor = 1024;
5
-
6
- /**
7
- * Calculates expected gas limit based on parent gas limit and target gas limit
8
- */
9
- export function getExpectedGasLimit(parentGasLimit: number, targetGasLimit: number): number {
10
- const maxGasLimitDifference = Math.max(Math.floor(parentGasLimit / gasLimitAdjustmentFactor) - 1, 0);
11
-
12
- if (targetGasLimit > parentGasLimit) {
13
- const gasDiff = targetGasLimit - parentGasLimit;
14
- return parentGasLimit + Math.min(gasDiff, maxGasLimitDifference);
15
- }
16
-
17
- const gasDiff = parentGasLimit - targetGasLimit;
18
- return parentGasLimit - Math.min(gasDiff, maxGasLimitDifference);
19
- }