@aztec/sequencer-client 0.67.1 → 0.68.1

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 (55) hide show
  1. package/dest/client/sequencer-client.d.ts +3 -1
  2. package/dest/client/sequencer-client.d.ts.map +1 -1
  3. package/dest/client/sequencer-client.js +17 -3
  4. package/dest/config.d.ts +3 -3
  5. package/dest/config.d.ts.map +1 -1
  6. package/dest/config.js +8 -56
  7. package/dest/index.d.ts +1 -1
  8. package/dest/index.d.ts.map +1 -1
  9. package/dest/index.js +2 -2
  10. package/dest/publisher/index.d.ts +0 -1
  11. package/dest/publisher/index.d.ts.map +1 -1
  12. package/dest/publisher/index.js +1 -2
  13. package/dest/publisher/l1-publisher-metrics.d.ts +5 -2
  14. package/dest/publisher/l1-publisher-metrics.d.ts.map +1 -1
  15. package/dest/publisher/l1-publisher-metrics.js +16 -1
  16. package/dest/publisher/l1-publisher.d.ts +4 -1
  17. package/dest/publisher/l1-publisher.d.ts.map +1 -1
  18. package/dest/publisher/l1-publisher.js +200 -44
  19. package/dest/publisher/utils.d.ts +1 -3
  20. package/dest/publisher/utils.d.ts.map +1 -1
  21. package/dest/publisher/utils.js +2 -8
  22. package/dest/sequencer/allowed.d.ts +3 -0
  23. package/dest/sequencer/allowed.d.ts.map +1 -0
  24. package/dest/sequencer/allowed.js +34 -0
  25. package/dest/sequencer/config.d.ts +1 -1
  26. package/dest/sequencer/config.d.ts.map +1 -1
  27. package/dest/sequencer/metrics.d.ts +2 -0
  28. package/dest/sequencer/metrics.d.ts.map +1 -1
  29. package/dest/sequencer/metrics.js +13 -2
  30. package/dest/sequencer/sequencer.d.ts +14 -11
  31. package/dest/sequencer/sequencer.d.ts.map +1 -1
  32. package/dest/sequencer/sequencer.js +160 -87
  33. package/dest/sequencer/utils.d.ts +2 -7
  34. package/dest/sequencer/utils.d.ts.map +1 -1
  35. package/dest/sequencer/utils.js +3 -11
  36. package/dest/tx_validator/gas_validator.d.ts +3 -4
  37. package/dest/tx_validator/gas_validator.d.ts.map +1 -1
  38. package/dest/tx_validator/gas_validator.js +25 -8
  39. package/dest/tx_validator/tx_validator_factory.d.ts.map +1 -1
  40. package/dest/tx_validator/tx_validator_factory.js +6 -4
  41. package/package.json +26 -23
  42. package/src/client/sequencer-client.ts +25 -5
  43. package/src/config.ts +10 -60
  44. package/src/index.ts +1 -1
  45. package/src/publisher/index.ts +0 -1
  46. package/src/publisher/l1-publisher-metrics.ts +24 -3
  47. package/src/publisher/l1-publisher.ts +241 -68
  48. package/src/publisher/utils.ts +1 -10
  49. package/src/sequencer/allowed.ts +36 -0
  50. package/src/sequencer/config.ts +1 -1
  51. package/src/sequencer/metrics.ts +15 -1
  52. package/src/sequencer/sequencer.ts +195 -109
  53. package/src/sequencer/utils.ts +2 -11
  54. package/src/tx_validator/gas_validator.ts +32 -6
  55. package/src/tx_validator/tx_validator_factory.ts +11 -3
@@ -26,13 +26,9 @@ export declare enum SequencerState {
26
26
  */
27
27
  CREATING_BLOCK = "CREATING_BLOCK",
28
28
  /**
29
- * Publishing blocks to validator peers. Will move to WAITING_FOR_ATTESTATIONS.
29
+ * Collecting attestations from its peers. Will move to PUBLISHING_BLOCK.
30
30
  */
31
- PUBLISHING_BLOCK_TO_PEERS = "PUBLISHING_BLOCK_TO_PEERS",
32
- /**
33
- * The block has been published to peers, and we are waiting for attestations. Will move to PUBLISHING_CONTRACT_DATA.
34
- */
35
- WAITING_FOR_ATTESTATIONS = "WAITING_FOR_ATTESTATIONS",
31
+ COLLECTING_ATTESTATIONS = "COLLECTING_ATTESTATIONS",
36
32
  /**
37
33
  * Sending the tx to L1 with the L2 block data and awaiting it to be mined. Will move to SYNCHRONIZING.
38
34
  */
@@ -48,5 +44,4 @@ export declare function sequencerStateToNumber(state: SequencerState): number;
48
44
  * @todo: perform this logic within the memory attestation store instead?
49
45
  */
50
46
  export declare function orderAttestations(attestations: BlockAttestation[], orderAddresses: EthAddress[]): Signature[];
51
- export declare function getSecondsIntoSlot(l1GenesisTime: number, aztecSlotDuration: number, slotNumber: number): number;
52
47
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/sequencer/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAE5D,oBAAY,cAAc;IACxB;;OAEG;IACH,OAAO,YAAY;IACnB;;OAEG;IACH,IAAI,SAAS;IACb;;OAEG;IACH,aAAa,kBAAkB;IAC/B;;OAEG;IACH,cAAc,mBAAmB;IACjC;;OAEG;IACH,eAAe,oBAAoB;IACnC;;OAEG;IACH,cAAc,mBAAmB;IACjC;;OAEG;IACH,yBAAyB,8BAA8B;IACvD;;OAEG;IACH,wBAAwB,6BAA6B;IACrD;;OAEG;IACH,gBAAgB,qBAAqB;CACtC;AAED,MAAM,MAAM,sBAAsB,GAAG,MAAM,cAAc,CAAC;AAE1D,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAEpE;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,gBAAgB,EAAE,EAAE,cAAc,EAAE,UAAU,EAAE,GAAG,SAAS,EAAE,CAkB7G;AAED,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAG/G"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/sequencer/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAE5D,oBAAY,cAAc;IACxB;;OAEG;IACH,OAAO,YAAY;IACnB;;OAEG;IACH,IAAI,SAAS;IACb;;OAEG;IACH,aAAa,kBAAkB;IAC/B;;OAEG;IACH,cAAc,mBAAmB;IACjC;;OAEG;IACH,eAAe,oBAAoB;IACnC;;OAEG;IACH,cAAc,mBAAmB;IACjC;;OAEG;IACH,uBAAuB,4BAA4B;IACnD;;OAEG;IACH,gBAAgB,qBAAqB;CACtC;AAED,MAAM,MAAM,sBAAsB,GAAG,MAAM,cAAc,CAAC;AAE1D,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAEpE;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,gBAAgB,EAAE,EAAE,cAAc,EAAE,UAAU,EAAE,GAAG,SAAS,EAAE,CAkB7G"}
@@ -26,13 +26,9 @@ export var SequencerState;
26
26
  */
27
27
  SequencerState["CREATING_BLOCK"] = "CREATING_BLOCK";
28
28
  /**
29
- * Publishing blocks to validator peers. Will move to WAITING_FOR_ATTESTATIONS.
29
+ * Collecting attestations from its peers. Will move to PUBLISHING_BLOCK.
30
30
  */
31
- SequencerState["PUBLISHING_BLOCK_TO_PEERS"] = "PUBLISHING_BLOCK_TO_PEERS";
32
- /**
33
- * The block has been published to peers, and we are waiting for attestations. Will move to PUBLISHING_CONTRACT_DATA.
34
- */
35
- SequencerState["WAITING_FOR_ATTESTATIONS"] = "WAITING_FOR_ATTESTATIONS";
31
+ SequencerState["COLLECTING_ATTESTATIONS"] = "COLLECTING_ATTESTATIONS";
36
32
  /**
37
33
  * Sending the tx to L1 with the L2 block data and awaiting it to be mined. Will move to SYNCHRONIZING.
38
34
  */
@@ -64,8 +60,4 @@ export function orderAttestations(attestations, orderAddresses) {
64
60
  });
65
61
  return orderedAttestations;
66
62
  }
67
- export function getSecondsIntoSlot(l1GenesisTime, aztecSlotDuration, slotNumber) {
68
- const slotStartTimestamp = l1GenesisTime + slotNumber * aztecSlotDuration;
69
- return Number((Date.now() / 1000 - slotStartTimestamp).toFixed(3));
70
- }
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VxdWVuY2VyL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU1RCxNQUFNLENBQU4sSUFBWSxjQXFDWDtBQXJDRCxXQUFZLGNBQWM7SUFDeEI7O09BRUc7SUFDSCxxQ0FBbUIsQ0FBQTtJQUNuQjs7T0FFRztJQUNILCtCQUFhLENBQUE7SUFDYjs7T0FFRztJQUNILGlEQUErQixDQUFBO0lBQy9COztPQUVHO0lBQ0gsbURBQWlDLENBQUE7SUFDakM7O09BRUc7SUFDSCxxREFBbUMsQ0FBQTtJQUNuQzs7T0FFRztJQUNILG1EQUFpQyxDQUFBO0lBQ2pDOztPQUVHO0lBQ0gseUVBQXVELENBQUE7SUFDdkQ7O09BRUc7SUFDSCx1RUFBcUQsQ0FBQTtJQUNyRDs7T0FFRztJQUNILHVEQUFxQyxDQUFBO0FBQ3ZDLENBQUMsRUFyQ1csY0FBYyxLQUFkLGNBQWMsUUFxQ3pCO0FBSUQsTUFBTSxVQUFVLHNCQUFzQixDQUFDLEtBQXFCO0lBQzFELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEQsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxZQUFnQyxFQUFFLGNBQTRCO0lBQzlGLHdEQUF3RDtJQUN4RCxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsRUFBNEIsQ0FBQztJQUUzRCxLQUFLLE1BQU0sV0FBVyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN2QyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsY0FBYyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDckQsQ0FBQztJQUNILENBQUM7SUFFRCx1RkFBdUY7SUFDdkYsTUFBTSxtQkFBbUIsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ3ZELE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6QyxPQUFPLGNBQWMsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUUsU0FBUyxJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMzRSxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sbUJBQW1CLENBQUM7QUFDN0IsQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxhQUFxQixFQUFFLGlCQUF5QixFQUFFLFVBQWtCO0lBQ3JHLE1BQU0sa0JBQWtCLEdBQUcsYUFBYSxHQUFHLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQztJQUMxRSxPQUFPLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyRSxDQUFDIn0=
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VxdWVuY2VyL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU1RCxNQUFNLENBQU4sSUFBWSxjQWlDWDtBQWpDRCxXQUFZLGNBQWM7SUFDeEI7O09BRUc7SUFDSCxxQ0FBbUIsQ0FBQTtJQUNuQjs7T0FFRztJQUNILCtCQUFhLENBQUE7SUFDYjs7T0FFRztJQUNILGlEQUErQixDQUFBO0lBQy9COztPQUVHO0lBQ0gsbURBQWlDLENBQUE7SUFDakM7O09BRUc7SUFDSCxxREFBbUMsQ0FBQTtJQUNuQzs7T0FFRztJQUNILG1EQUFpQyxDQUFBO0lBQ2pDOztPQUVHO0lBQ0gscUVBQW1ELENBQUE7SUFDbkQ7O09BRUc7SUFDSCx1REFBcUMsQ0FBQTtBQUN2QyxDQUFDLEVBakNXLGNBQWMsS0FBZCxjQUFjLFFBaUN6QjtBQUlELE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxLQUFxQjtJQUMxRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RELENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsWUFBZ0MsRUFBRSxjQUE0QjtJQUM5Rix3REFBd0Q7SUFDeEQsTUFBTSxjQUFjLEdBQUcsSUFBSSxHQUFHLEVBQTRCLENBQUM7SUFFM0QsS0FBSyxNQUFNLFdBQVcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN2QyxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDdkMsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLGNBQWMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3JELENBQUM7SUFDSCxDQUFDO0lBRUQsdUZBQXVGO0lBQ3ZGLE1BQU0sbUJBQW1CLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUN2RCxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDekMsT0FBTyxjQUFjLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFLFNBQVMsSUFBSSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDM0UsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLG1CQUFtQixDQUFDO0FBQzdCLENBQUMifQ==
@@ -1,14 +1,13 @@
1
1
  import { type Tx, type TxValidator } from '@aztec/circuit-types';
2
- import { type AztecAddress, type Fr } from '@aztec/circuits.js';
2
+ import { type AztecAddress, type Fr, type GasFees } from '@aztec/circuits.js';
3
3
  /** Provides a view into public contract state */
4
4
  export interface PublicStateSource {
5
5
  storageRead: (contractAddress: AztecAddress, slot: Fr) => Promise<Fr>;
6
6
  }
7
7
  export declare class GasTxValidator implements TxValidator<Tx> {
8
8
  #private;
9
- enforceFees: boolean;
10
- constructor(publicDataSource: PublicStateSource, feeJuiceAddress: AztecAddress, enforceFees: boolean);
11
- validateTxs(txs: Tx[]): Promise<[validTxs: Tx[], invalidTxs: Tx[]]>;
9
+ constructor(publicDataSource: PublicStateSource, feeJuiceAddress: AztecAddress, enforceFees: boolean, gasFees: GasFees);
10
+ validateTxs(txs: Tx[]): Promise<[validTxs: Tx[], invalidTxs: Tx[], skippedTxs: Tx[]]>;
12
11
  validateTx(tx: Tx): Promise<boolean>;
13
12
  }
14
13
  //# sourceMappingURL=gas_validator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gas_validator.d.ts","sourceRoot":"","sources":["../../src/tx_validator/gas_validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAoB,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,EAAE,EAAoB,MAAM,oBAAoB,CAAC;AAIlF,iDAAiD;AACjD,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,CAAC,eAAe,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC,CAAC;CACvE;AAED,qBAAa,cAAe,YAAW,WAAW,CAAC,EAAE,CAAC;;IAKmC,WAAW,EAAE,OAAO;gBAA/F,gBAAgB,EAAE,iBAAiB,EAAE,eAAe,EAAE,YAAY,EAAS,WAAW,EAAE,OAAO;IAKrG,WAAW,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;IAezE,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;CAgDrC"}
1
+ {"version":3,"file":"gas_validator.d.ts","sourceRoot":"","sources":["../../src/tx_validator/gas_validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAoB,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,EAAE,EAAoB,KAAK,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAIhG,iDAAiD;AACjD,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,CAAC,eAAe,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC,CAAC;CACvE;AAED,qBAAa,cAAe,YAAW,WAAW,CAAC,EAAE,CAAC;;gBAQlD,gBAAgB,EAAE,iBAAiB,EACnC,eAAe,EAAE,YAAY,EAC7B,WAAW,EAAE,OAAO,EACpB,OAAO,EAAE,OAAO;IAQZ,WAAW,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;IAkB3F,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;CA8DrC"}
@@ -1,41 +1,58 @@
1
- var _GasTxValidator_instances, _GasTxValidator_log, _GasTxValidator_publicDataSource, _GasTxValidator_feeJuiceAddress, _GasTxValidator_validateTxFee;
1
+ var _GasTxValidator_instances, _GasTxValidator_log, _GasTxValidator_publicDataSource, _GasTxValidator_feeJuiceAddress, _GasTxValidator_enforceFees, _GasTxValidator_gasFees, _GasTxValidator_shouldSkip, _GasTxValidator_validateTxFee;
2
2
  import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
3
3
  import { TxExecutionPhase } from '@aztec/circuit-types';
4
4
  import { FunctionSelector } from '@aztec/circuits.js';
5
5
  import { createLogger } from '@aztec/foundation/log';
6
6
  import { computeFeePayerBalanceStorageSlot, getExecutionRequestsByPhase } from '@aztec/simulator';
7
7
  export class GasTxValidator {
8
- constructor(publicDataSource, feeJuiceAddress, enforceFees) {
8
+ constructor(publicDataSource, feeJuiceAddress, enforceFees, gasFees) {
9
9
  _GasTxValidator_instances.add(this);
10
- this.enforceFees = enforceFees;
11
10
  _GasTxValidator_log.set(this, createLogger('sequencer:tx_validator:tx_gas'));
12
11
  _GasTxValidator_publicDataSource.set(this, void 0);
13
12
  _GasTxValidator_feeJuiceAddress.set(this, void 0);
13
+ _GasTxValidator_enforceFees.set(this, void 0);
14
+ _GasTxValidator_gasFees.set(this, void 0);
14
15
  __classPrivateFieldSet(this, _GasTxValidator_publicDataSource, publicDataSource, "f");
15
16
  __classPrivateFieldSet(this, _GasTxValidator_feeJuiceAddress, feeJuiceAddress, "f");
17
+ __classPrivateFieldSet(this, _GasTxValidator_enforceFees, enforceFees, "f");
18
+ __classPrivateFieldSet(this, _GasTxValidator_gasFees, gasFees, "f");
16
19
  }
17
20
  async validateTxs(txs) {
18
21
  const validTxs = [];
19
22
  const invalidTxs = [];
23
+ const skippedTxs = [];
20
24
  for (const tx of txs) {
21
- if (await __classPrivateFieldGet(this, _GasTxValidator_instances, "m", _GasTxValidator_validateTxFee).call(this, tx)) {
25
+ if (__classPrivateFieldGet(this, _GasTxValidator_instances, "m", _GasTxValidator_shouldSkip).call(this, tx)) {
26
+ skippedTxs.push(tx);
27
+ }
28
+ else if (await __classPrivateFieldGet(this, _GasTxValidator_instances, "m", _GasTxValidator_validateTxFee).call(this, tx)) {
22
29
  validTxs.push(tx);
23
30
  }
24
31
  else {
25
32
  invalidTxs.push(tx);
26
33
  }
27
34
  }
28
- return [validTxs, invalidTxs];
35
+ return [validTxs, invalidTxs, skippedTxs];
29
36
  }
30
37
  validateTx(tx) {
31
38
  return __classPrivateFieldGet(this, _GasTxValidator_instances, "m", _GasTxValidator_validateTxFee).call(this, tx);
32
39
  }
33
40
  }
34
- _GasTxValidator_log = new WeakMap(), _GasTxValidator_publicDataSource = new WeakMap(), _GasTxValidator_feeJuiceAddress = new WeakMap(), _GasTxValidator_instances = new WeakSet(), _GasTxValidator_validateTxFee = async function _GasTxValidator_validateTxFee(tx) {
41
+ _GasTxValidator_log = new WeakMap(), _GasTxValidator_publicDataSource = new WeakMap(), _GasTxValidator_feeJuiceAddress = new WeakMap(), _GasTxValidator_enforceFees = new WeakMap(), _GasTxValidator_gasFees = new WeakMap(), _GasTxValidator_instances = new WeakSet(), _GasTxValidator_shouldSkip = function _GasTxValidator_shouldSkip(tx) {
42
+ const gasSettings = tx.data.constants.txContext.gasSettings;
43
+ // Skip the tx if its max fees are not enough for the current block's gas fees.
44
+ const maxFeesPerGas = gasSettings.maxFeesPerGas;
45
+ const notEnoughMaxFees = maxFeesPerGas.feePerDaGas.lt(__classPrivateFieldGet(this, _GasTxValidator_gasFees, "f").feePerDaGas) ||
46
+ maxFeesPerGas.feePerL2Gas.lt(__classPrivateFieldGet(this, _GasTxValidator_gasFees, "f").feePerL2Gas);
47
+ if (notEnoughMaxFees) {
48
+ __classPrivateFieldGet(this, _GasTxValidator_log, "f").warn(`Skipping transaction ${tx.getTxHash()} due to insufficient fee per gas`);
49
+ }
50
+ return notEnoughMaxFees;
51
+ }, _GasTxValidator_validateTxFee = async function _GasTxValidator_validateTxFee(tx) {
35
52
  const feePayer = tx.data.feePayer;
36
53
  // TODO(@spalladino) Eventually remove the is_zero condition as we should always charge fees to every tx
37
54
  if (feePayer.isZero()) {
38
- if (this.enforceFees) {
55
+ if (__classPrivateFieldGet(this, _GasTxValidator_enforceFees, "f")) {
39
56
  __classPrivateFieldGet(this, _GasTxValidator_log, "f").warn(`Rejecting transaction ${tx.getTxHash()} due to missing fee payer`);
40
57
  }
41
58
  else {
@@ -66,4 +83,4 @@ _GasTxValidator_log = new WeakMap(), _GasTxValidator_publicDataSource = new Weak
66
83
  }
67
84
  return true;
68
85
  };
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FzX3ZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eF92YWxpZGF0b3IvZ2FzX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBVyxnQkFBZ0IsRUFBb0IsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRixPQUFPLEVBQThCLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBT2xHLE1BQU0sT0FBTyxjQUFjO0lBS3pCLFlBQVksZ0JBQW1DLEVBQUUsZUFBNkIsRUFBUyxXQUFvQjs7UUFBcEIsZ0JBQVcsR0FBWCxXQUFXLENBQVM7UUFKM0csOEJBQU8sWUFBWSxDQUFDLCtCQUErQixDQUFDLEVBQUM7UUFDckQsbURBQXFDO1FBQ3JDLGtEQUErQjtRQUc3Qix1QkFBQSxJQUFJLG9DQUFxQixnQkFBZ0IsTUFBQSxDQUFDO1FBQzFDLHVCQUFBLElBQUksbUNBQW9CLGVBQWUsTUFBQSxDQUFDO0lBQzFDLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQVM7UUFDekIsTUFBTSxRQUFRLEdBQVMsRUFBRSxDQUFDO1FBQzFCLE1BQU0sVUFBVSxHQUFTLEVBQUUsQ0FBQztRQUU1QixLQUFLLE1BQU0sRUFBRSxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLElBQUksTUFBTSx1QkFBQSxJQUFJLGdFQUFlLE1BQW5CLElBQUksRUFBZ0IsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDbEMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNwQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN0QixDQUFDO1FBQ0gsQ0FBQztR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
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FzX3ZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eF92YWxpZGF0b3IvZ2FzX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBVyxnQkFBZ0IsRUFBb0IsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRixPQUFPLEVBQThCLGdCQUFnQixFQUFnQixNQUFNLG9CQUFvQixDQUFDO0FBQ2hHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQU9sRyxNQUFNLE9BQU8sY0FBYztJQU96QixZQUNFLGdCQUFtQyxFQUNuQyxlQUE2QixFQUM3QixXQUFvQixFQUNwQixPQUFnQjs7UUFWbEIsOEJBQU8sWUFBWSxDQUFDLCtCQUErQixDQUFDLEVBQUM7UUFDckQsbURBQXFDO1FBQ3JDLGtEQUErQjtRQUMvQiw4Q0FBc0I7UUFDdEIsMENBQWtCO1FBUWhCLHVCQUFBLElBQUksb0NBQXFCLGdCQUFnQixNQUFBLENBQUM7UUFDMUMsdUJBQUEsSUFBSSxtQ0FBb0IsZUFBZSxNQUFBLENBQUM7UUFDeEMsdUJBQUEsSUFBSSwrQkFBZ0IsV0FBVyxNQUFBLENBQUM7UUFDaEMsdUJBQUEsSUFBSSwyQkFBWSxPQUFPLE1BQUEsQ0FBQztJQUMxQixDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFTO1FBQ3pCLE1BQU0sUUFBUSxHQUFTLEVBQUUsQ0FBQztRQUMxQixNQUFNLFVBQVUsR0FBUyxFQUFFLENBQUM7UUFDNUIsTUFBTSxVQUFVLEdBQVMsRUFBRSxDQUFDO1FBRTVCLEtBQUssTUFBTSxFQUFFLElBQUksR0FBRyxFQUFFLENBQUM7WUFDckIsSUFBSSx1QkFBQSxJQUFJLDZEQUFZLE1BQWhCLElBQUksRUFBYSxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUN6QixVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3RCLENBQUM7aUJBQU0sSUFBSSxNQUFNLHVCQUFBLElBQUksZ0VBQWUsTUFBbkIsSUFBSSxFQUFnQixFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUN6QyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3BCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3RCLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELFVBQVUsQ0FBQyxFQUFNO1FBQ2YsT0FBTyx1QkFBQSxJQUFJLGdFQUFlLE1BQW5CLElBQUksRUFBZ0IsRUFBRSxDQUFDLENBQUM7SUFDakMsQ0FBQztDQTRERjswVUExRGEsRUFBTTtJQUNoQixNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDO0lBRTVELCtFQUErRTtJQUMvRSxNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDO0lBQ2hELE1BQU0sZ0JBQWdCLEdBQ3BCLGFBQWEsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLHVCQUFBLElBQUksK0JBQVMsQ0FBQyxXQUFXLENBQUM7UUFDdkQsYUFBYSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsdUJBQUEsSUFBSSwrQkFBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzFELElBQUksZ0JBQWdCLEVBQUUsQ0FBQztRQUNyQix1QkFBQSxJQUFJLDJCQUFLLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUMsU0FBUyxFQUFFLGtDQUFrQyxDQUFDLENBQUM7SUFDM0YsQ0FBQztJQUNELE9BQU8sZ0JBQWdCLENBQUM7QUFDMUIsQ0FBQyxrQ0FFRCxLQUFLLHdDQUFnQixFQUFNO0lBQ3pCLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ2xDLHdHQUF3RztJQUN4RyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1FBQ3RCLElBQUksdUJBQUEsSUFBSSxtQ0FBYSxFQUFFLENBQUM7WUFDdEIsdUJBQUEsSUFBSSwyQkFBSyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLFNBQVMsRUFBRSwyQkFBMkIsQ0FBQyxDQUFDO1FBQ3JGLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVELHdGQUF3RjtJQUN4RixNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBRXZFLHVDQUF1QztJQUN2QyxNQUFNLGNBQWMsR0FBRyxNQUFNLHVCQUFBLElBQUksd0NBQWtCLENBQUMsV0FBVyxDQUM3RCx1QkFBQSxJQUFJLHVDQUFpQixFQUNyQixpQ0FBaUMsQ0FBQyxRQUFRLENBQUMsQ0FDNUMsQ0FBQztJQUVGLHNHQUFzRztJQUN0RyxNQUFNLFFBQVEsR0FBRywyQkFBMkIsQ0FBQyxFQUFFLEVBQUUsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekUsTUFBTSxpQkFBaUIsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUNyQyxFQUFFLENBQUMsRUFBRSxDQUNILEVBQUUsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyx1QkFBQSxJQUFJLHVDQUFpQixDQUFDO1FBQzVELEVBQUUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyx1QkFBQSxJQUFJLHVDQUFpQixDQUFDO1FBQ3RELEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUM7UUFDbEIsbUhBQW1IO1FBQ25ILEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3RHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNyQyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUMvQixDQUFDO0lBRUYsTUFBTSxPQUFPLEdBQUcsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQztJQUNuRyxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUN6Qix1QkFBQSxJQUFJLDJCQUFLLENBQUMsSUFBSSxDQUFDLDJEQUEyRCxFQUFFO1lBQzFFLFFBQVE7WUFDUixPQUFPLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRTtZQUMzQixRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVEsRUFBRTtTQUM5QixDQUFDLENBQUM7UUFDSCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"tx_validator_factory.d.ts","sourceRoot":"","sources":["../../src/tx_validator/tx_validator_factory.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,wBAAwB,EAC7B,KAAK,WAAW,EAChB,KAAK,EAAE,EACP,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAKL,KAAK,eAAe,EACrB,MAAM,YAAY,CAAC;AAIpB,OAAO,EAAkB,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAG5E,qBAAa,kBAAkB;IAI3B,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,WAAW;IALrB,eAAe,EAAE,eAAe,CAAC;IACjC,iBAAiB,EAAE,iBAAiB,CAAC;gBAE3B,WAAW,EAAE,wBAAwB,EACrC,kBAAkB,EAAE,kBAAkB,EACtC,WAAW,EAAE,OAAO;IAa9B,kBAAkB,CAAC,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,WAAW,CAAC,EAAE,CAAC;IAUvG,wBAAwB,CAAC,IAAI,EAAE,wBAAwB,GAAG,WAAW,CAAC,WAAW,CAAC;CAKnF"}
1
+ {"version":3,"file":"tx_validator_factory.d.ts","sourceRoot":"","sources":["../../src/tx_validator/tx_validator_factory.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,wBAAwB,EAC7B,KAAK,WAAW,EAChB,KAAK,EAAE,EACP,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAKL,KAAK,eAAe,EACrB,MAAM,YAAY,CAAC;AAIpB,OAAO,EAAkB,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAG5E,qBAAa,kBAAkB;IAI3B,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,WAAW;IALrB,eAAe,EAAE,eAAe,CAAC;IACjC,iBAAiB,EAAE,iBAAiB,CAAC;gBAE3B,WAAW,EAAE,wBAAwB,EACrC,kBAAkB,EAAE,kBAAkB,EACtC,WAAW,EAAE,OAAO;IAgB9B,kBAAkB,CAAC,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,WAAW,CAAC,EAAE,CAAC;IAevG,wBAAwB,CAAC,IAAI,EAAE,wBAAwB,GAAG,WAAW,CAAC,WAAW,CAAC;CAKnF"}
@@ -10,7 +10,9 @@ export class TxValidatorFactory {
10
10
  this.contractDataSource = contractDataSource;
11
11
  this.enforceFees = enforceFees;
12
12
  this.nullifierSource = {
13
- getNullifierIndex: nullifier => this.committedDb.findLeafIndex(MerkleTreeId.NULLIFIER_TREE, nullifier.toBuffer()),
13
+ getNullifierIndices: nullifiers => this.committedDb
14
+ .findLeafIndices(MerkleTreeId.NULLIFIER_TREE, nullifiers)
15
+ .then(x => x.filter(index => index !== undefined)),
14
16
  };
15
17
  this.publicStateSource = {
16
18
  storageRead: (contractAddress, slot) => {
@@ -19,12 +21,12 @@ export class TxValidatorFactory {
19
21
  };
20
22
  }
21
23
  validatorForNewTxs(globalVariables, setupAllowList) {
22
- return new AggregateTxValidator(new DataTxValidator(), new MetadataTxValidator(globalVariables.chainId, globalVariables.blockNumber), new DoubleSpendTxValidator(this.nullifierSource), new PhasesTxValidator(this.contractDataSource, setupAllowList), new GasTxValidator(this.publicStateSource, ProtocolContractAddress.FeeJuice, this.enforceFees));
24
+ return new AggregateTxValidator(new DataTxValidator(), new MetadataTxValidator(globalVariables.chainId, globalVariables.blockNumber), new DoubleSpendTxValidator(this.nullifierSource), new PhasesTxValidator(this.contractDataSource, setupAllowList), new GasTxValidator(this.publicStateSource, ProtocolContractAddress.FeeJuice, this.enforceFees, globalVariables.gasFees));
23
25
  }
24
26
  validatorForProcessedTxs(fork) {
25
27
  return new DoubleSpendTxValidator({
26
- getNullifierIndex: nullifier => fork.findLeafIndex(MerkleTreeId.NULLIFIER_TREE, nullifier.toBuffer()),
28
+ getNullifierIndices: nullifiers => fork.findLeafIndices(MerkleTreeId.NULLIFIER_TREE, nullifiers),
27
29
  });
28
30
  }
29
31
  }
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfdmFsaWRhdG9yX2ZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHhfdmFsaWRhdG9yL3R4X3ZhbGlkYXRvcl9mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxZQUFZLEdBS2IsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QixPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLGVBQWUsRUFDZixzQkFBc0IsRUFDdEIsbUJBQW1CLEdBRXBCLE1BQU0sWUFBWSxDQUFDO0FBQ3BCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsY0FBYyxFQUEwQixNQUFNLG9CQUFvQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELE1BQU0sT0FBTyxrQkFBa0I7SUFHN0IsWUFDVSxXQUFxQyxFQUNyQyxrQkFBc0MsRUFDdEMsV0FBb0I7UUFGcEIsZ0JBQVcsR0FBWCxXQUFXLENBQTBCO1FBQ3JDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsZ0JBQVcsR0FBWCxXQUFXLENBQVM7UUFFNUIsSUFBSSxDQUFDLGVBQWUsR0FBRztZQUNyQixpQkFBaUIsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ2xILENBQUM7UUFFRixJQUFJLENBQUMsaUJBQWlCLEdBQUc7WUFDdkIsV0FBVyxFQUFFLENBQUMsZUFBZSxFQUFFLElBQUksRUFBRSxFQUFFO2dCQUNyQyxPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNsRSxDQUFDO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxlQUFnQyxFQUFFLGNBQWdDO1FBQ25GLE9BQU8sSUFBSSxvQkFBb0IsQ0FDN0IsSUFBSSxlQUFlLEVBQUUsRUFDckIsSUFBSSxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLGVBQWUsQ0FBQyxXQUFXLENBQUMsRUFDN0UsSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQ2hELElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLGNBQWMsQ0FBQyxFQUM5RCxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsdUJBQXVCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FDL0YsQ0FBQztJQUNKLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxJQUE4QjtRQUNyRCxPQUFPLElBQUksc0JBQXNCLENBQUM7WUFDaEMsaUJBQWlCLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ3RHLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiJ9
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfdmFsaWRhdG9yX2ZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHhfdmFsaWRhdG9yL3R4X3ZhbGlkYXRvcl9mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxZQUFZLEdBS2IsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QixPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLGVBQWUsRUFDZixzQkFBc0IsRUFDdEIsbUJBQW1CLEdBRXBCLE1BQU0sWUFBWSxDQUFDO0FBQ3BCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsY0FBYyxFQUEwQixNQUFNLG9CQUFvQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELE1BQU0sT0FBTyxrQkFBa0I7SUFHN0IsWUFDVSxXQUFxQyxFQUNyQyxrQkFBc0MsRUFDdEMsV0FBb0I7UUFGcEIsZ0JBQVcsR0FBWCxXQUFXLENBQTBCO1FBQ3JDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsZ0JBQVcsR0FBWCxXQUFXLENBQVM7UUFFNUIsSUFBSSxDQUFDLGVBQWUsR0FBRztZQUNyQixtQkFBbUIsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUNoQyxJQUFJLENBQUMsV0FBVztpQkFDYixlQUFlLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxVQUFVLENBQUM7aUJBQ3hELElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFhLENBQUM7U0FDbkUsQ0FBQztRQUVGLElBQUksQ0FBQyxpQkFBaUIsR0FBRztZQUN2QixXQUFXLEVBQUUsQ0FBQyxlQUFlLEVBQUUsSUFBSSxFQUFFLEVBQUU7Z0JBQ3JDLE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsZUFBZSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xFLENBQUM7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELGtCQUFrQixDQUFDLGVBQWdDLEVBQUUsY0FBZ0M7UUFDbkYsT0FBTyxJQUFJLG9CQUFvQixDQUM3QixJQUFJLGVBQWUsRUFBRSxFQUNyQixJQUFJLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDLFdBQVcsQ0FBQyxFQUM3RSxJQUFJLHNCQUFzQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFDaEQsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsY0FBYyxDQUFDLEVBQzlELElBQUksY0FBYyxDQUNoQixJQUFJLENBQUMsaUJBQWlCLEVBQ3RCLHVCQUF1QixDQUFDLFFBQVEsRUFDaEMsSUFBSSxDQUFDLFdBQVcsRUFDaEIsZUFBZSxDQUFDLE9BQU8sQ0FDeEIsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELHdCQUF3QixDQUFDLElBQThCO1FBQ3JELE9BQU8sSUFBSSxzQkFBc0IsQ0FBQztZQUNoQyxtQkFBbUIsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxVQUFVLENBQUM7U0FDakcsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIn0=
package/package.json CHANGED
@@ -1,8 +1,11 @@
1
1
  {
2
2
  "name": "@aztec/sequencer-client",
3
- "version": "0.67.1",
3
+ "version": "0.68.1",
4
4
  "type": "module",
5
- "exports": "./dest/index.js",
5
+ "exports": {
6
+ ".": "./dest/index.js",
7
+ "./config": "./dest/config.js"
8
+ },
6
9
  "typedocOptions": {
7
10
  "entryPoints": [
8
11
  "./src/index.ts"
@@ -19,29 +22,29 @@
19
22
  "clean": "rm -rf ./dest .tsbuildinfo",
20
23
  "formatting": "run -T prettier --check ./src && run -T eslint ./src",
21
24
  "formatting:fix": "run -T eslint --fix ./src && run -T prettier -w ./src",
22
- "test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests",
25
+ "test": "HARDWARE_CONCURRENCY=${HARDWARE_CONCURRENCY:-16} RAYON_NUM_THREADS=${RAYON_NUM_THREADS:-4} NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests --maxWorkers=${JEST_MAX_WORKERS:-8}",
23
26
  "test:integration": "concurrently -k -s first -c reset,dim -n test,anvil \"yarn test:integration:run\" \"anvil\"",
24
27
  "test:integration:run": "NODE_NO_WARNINGS=1 node --experimental-vm-modules $(yarn bin jest) --no-cache --config jest.integration.config.json"
25
28
  },
26
29
  "dependencies": {
27
- "@aztec/aztec.js": "0.67.1",
28
- "@aztec/bb-prover": "0.67.1",
29
- "@aztec/circuit-types": "0.67.1",
30
- "@aztec/circuits.js": "0.67.1",
31
- "@aztec/ethereum": "0.67.1",
32
- "@aztec/foundation": "0.67.1",
33
- "@aztec/l1-artifacts": "0.67.1",
34
- "@aztec/merkle-tree": "0.67.1",
35
- "@aztec/noir-contracts.js": "0.67.1",
36
- "@aztec/noir-protocol-circuits-types": "0.67.1",
37
- "@aztec/p2p": "0.67.1",
38
- "@aztec/protocol-contracts": "0.67.1",
39
- "@aztec/prover-client": "0.67.1",
40
- "@aztec/simulator": "0.67.1",
41
- "@aztec/telemetry-client": "0.67.1",
42
- "@aztec/types": "0.67.1",
43
- "@aztec/validator-client": "0.67.1",
44
- "@aztec/world-state": "0.67.1",
30
+ "@aztec/aztec.js": "0.68.1",
31
+ "@aztec/bb-prover": "0.68.1",
32
+ "@aztec/circuit-types": "0.68.1",
33
+ "@aztec/circuits.js": "0.68.1",
34
+ "@aztec/ethereum": "0.68.1",
35
+ "@aztec/foundation": "0.68.1",
36
+ "@aztec/l1-artifacts": "0.68.1",
37
+ "@aztec/merkle-tree": "0.68.1",
38
+ "@aztec/noir-contracts.js": "0.68.1",
39
+ "@aztec/noir-protocol-circuits-types": "0.68.1",
40
+ "@aztec/p2p": "0.68.1",
41
+ "@aztec/protocol-contracts": "0.68.1",
42
+ "@aztec/prover-client": "0.68.1",
43
+ "@aztec/simulator": "0.68.1",
44
+ "@aztec/telemetry-client": "0.68.1",
45
+ "@aztec/types": "0.68.1",
46
+ "@aztec/validator-client": "0.68.1",
47
+ "@aztec/world-state": "0.68.1",
45
48
  "@noir-lang/acvm_js": "portal:../../noir/packages/acvm_js",
46
49
  "@noir-lang/types": "portal:../../noir/packages/types",
47
50
  "lodash.chunk": "^4.2.0",
@@ -104,9 +107,9 @@
104
107
  "rootDir": "./src",
105
108
  "reporters": [
106
109
  [
107
- "default",
110
+ "jest-silent-reporter",
108
111
  {
109
- "summaryThreshold": 9999
112
+ "useDots": true
110
113
  }
111
114
  ]
112
115
  ],
@@ -1,6 +1,8 @@
1
1
  import { type L1ToL2MessageSource, type L2BlockSource, type WorldStateSynchronizer } from '@aztec/circuit-types';
2
2
  import { type ContractDataSource } from '@aztec/circuits.js';
3
+ import { isAnvilTestChain } from '@aztec/ethereum';
3
4
  import { type EthAddress } from '@aztec/foundation/eth-address';
5
+ import { type DateProvider } from '@aztec/foundation/timer';
4
6
  import { type P2P } from '@aztec/p2p';
5
7
  import { LightweightBlockBuilderFactory } from '@aztec/prover-client/block-builder';
6
8
  import { PublicProcessorFactory } from '@aztec/simulator';
@@ -17,7 +19,7 @@ import { TxValidatorFactory } from '../tx_validator/tx_validator_factory.js';
17
19
  * Encapsulates the full sequencer and publisher.
18
20
  */
19
21
  export class SequencerClient {
20
- constructor(private sequencer: Sequencer) {}
22
+ constructor(protected sequencer: Sequencer) {}
21
23
 
22
24
  /**
23
25
  * Initializes and starts a new instance.
@@ -43,6 +45,7 @@ export class SequencerClient {
43
45
  l1ToL2MessageSource: L1ToL2MessageSource;
44
46
  telemetry: TelemetryClient;
45
47
  publisher?: L1Publisher;
48
+ dateProvider: DateProvider;
46
49
  },
47
50
  ) {
48
51
  const {
@@ -57,7 +60,7 @@ export class SequencerClient {
57
60
  const publisher = deps.publisher ?? new L1Publisher(config, telemetryClient);
58
61
  const globalsBuilder = new GlobalVariableBuilder(config);
59
62
 
60
- const publicProcessorFactory = new PublicProcessorFactory(contractDataSource, telemetryClient);
63
+ const publicProcessorFactory = new PublicProcessorFactory(contractDataSource, deps.dateProvider, telemetryClient);
61
64
 
62
65
  const rollup = publisher.getRollupContract();
63
66
  const [l1GenesisTime, slotDuration] = await Promise.all([
@@ -65,6 +68,23 @@ export class SequencerClient {
65
68
  rollup.read.SLOT_DURATION(),
66
69
  ] as const);
67
70
 
71
+ const ethereumSlotDuration = config.ethereumSlotDuration;
72
+
73
+ // When running in anvil, assume we can post a tx up until the very last second of an L1 slot.
74
+ // Otherwise, assume we must have broadcasted the tx before the slot started (we use a default
75
+ // maxL1TxInclusionTimeIntoSlot of zero) to get the tx into that L1 slot.
76
+ // In theory, the L1 slot has an initial 4s phase where the block is propagated, so we could
77
+ // make it with a propagation time into slot equal to 4s. However, we prefer being conservative.
78
+ // See https://www.blocknative.com/blog/anatomy-of-a-slot#7 for more info.
79
+ const maxL1TxInclusionTimeIntoSlot =
80
+ config.maxL1TxInclusionTimeIntoSlot ?? isAnvilTestChain(config.l1ChainId) ? ethereumSlotDuration : 0;
81
+
82
+ const l1Constants = {
83
+ l1GenesisTime,
84
+ slotDuration: Number(slotDuration),
85
+ ethereumSlotDuration,
86
+ };
87
+
68
88
  const sequencer = new Sequencer(
69
89
  publisher,
70
90
  validatorClient,
@@ -76,10 +96,10 @@ export class SequencerClient {
76
96
  l1ToL2MessageSource,
77
97
  publicProcessorFactory,
78
98
  new TxValidatorFactory(worldStateSynchronizer.getCommitted(), contractDataSource, !!config.enforceFees),
79
- Number(l1GenesisTime),
80
- Number(slotDuration),
99
+ l1Constants,
100
+ deps.dateProvider,
81
101
  telemetryClient,
82
- config,
102
+ { ...config, maxL1TxInclusionTimeIntoSlot },
83
103
  );
84
104
  await validatorClient?.start();
85
105
  await sequencer.start();
package/src/config.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { type AllowedElement } from '@aztec/circuit-types';
2
- import { AztecAddress, Fr, FunctionSelector, getContractClassFromArtifact } from '@aztec/circuits.js';
1
+ import { type AllowedElement, type SequencerConfig } from '@aztec/circuit-types/config';
2
+ import { AztecAddress, Fr, FunctionSelector } from '@aztec/circuits.js';
3
3
  import {
4
4
  type L1ContractsConfig,
5
5
  type L1ReaderConfig,
@@ -14,9 +14,6 @@ import {
14
14
  } from '@aztec/foundation/config';
15
15
  import { pickConfigMappings } from '@aztec/foundation/config';
16
16
  import { EthAddress } from '@aztec/foundation/eth-address';
17
- import { FPCContract } from '@aztec/noir-contracts.js/FPC';
18
- import { TokenContractArtifact } from '@aztec/noir-contracts.js/Token';
19
- import { ProtocolContractAddress } from '@aztec/protocol-contracts';
20
17
 
21
18
  import {
22
19
  type PublisherConfig,
@@ -24,7 +21,9 @@ import {
24
21
  getPublisherConfigMappings,
25
22
  getTxSenderConfigMappings,
26
23
  } from './publisher/config.js';
27
- import { type SequencerConfig } from './sequencer/config.js';
24
+
25
+ export * from './publisher/config.js';
26
+ export { SequencerConfig };
28
27
 
29
28
  /** Chain configuration. */
30
29
  type ChainConfig = {
@@ -60,17 +59,6 @@ export const sequencerConfigMappings: ConfigMappingsType<SequencerConfig> = {
60
59
  description: 'The minimum number of txs to include in a block.',
61
60
  ...numberConfigHelper(1),
62
61
  },
63
- minSecondsBetweenBlocks: {
64
- env: 'SEQ_MIN_SECONDS_BETWEEN_BLOCKS',
65
- description: 'The minimum number of seconds in-between consecutive blocks.',
66
- ...numberConfigHelper(0),
67
- },
68
- maxSecondsBetweenBlocks: {
69
- env: 'SEQ_MAX_SECONDS_BETWEEN_BLOCKS',
70
- description:
71
- 'The maximum number of seconds in-between consecutive blocks. Sequencer will produce a block with less than minTxsPerBlock once this threshold is reached.',
72
- ...numberConfigHelper(0),
73
- },
74
62
  coinbase: {
75
63
  env: 'COINBASE',
76
64
  parseEnv: (val: string) => EthAddress.fromString(val),
@@ -92,18 +80,10 @@ export const sequencerConfigMappings: ConfigMappingsType<SequencerConfig> = {
92
80
  allowedInSetup: {
93
81
  env: 'SEQ_ALLOWED_SETUP_FN',
94
82
  parseEnv: (val: string) => parseSequencerAllowList(val),
95
- defaultValue: getDefaultAllowedSetupFunctions(),
96
83
  description: 'The list of functions calls allowed to run in setup',
97
84
  printDefault: () =>
98
85
  'AuthRegistry, FeeJuice.increase_public_balance, Token.increase_public_balance, FPC.prepare_fee',
99
86
  },
100
- allowedInTeardown: {
101
- env: 'SEQ_ALLOWED_TEARDOWN_FN',
102
- parseEnv: (val: string) => parseSequencerAllowList(val),
103
- defaultValue: getDefaultAllowedTeardownFunctions(),
104
- description: 'The list of functions calls allowed to run teardown',
105
- printDefault: () => 'FPC.pay_refund',
106
- },
107
87
  maxBlockSizeInBytes: {
108
88
  env: 'SEQ_MAX_BLOCK_SIZE_IN_BYTES',
109
89
  description: 'Max block size',
@@ -126,6 +106,11 @@ export const sequencerConfigMappings: ConfigMappingsType<SequencerConfig> = {
126
106
  parseEnv: (val: string) => EthAddress.fromString(val),
127
107
  defaultValue: EthAddress.ZERO,
128
108
  },
109
+ maxL1TxInclusionTimeIntoSlot: {
110
+ env: 'SEQ_MAX_L1_TX_INCLUSION_TIME_INTO_SLOT',
111
+ description: 'How many seconds into an L1 slot we can still send a tx and get it mined.',
112
+ parseEnv: (val: string) => (val ? parseInt(val, 10) : undefined),
113
+ },
129
114
  };
130
115
 
131
116
  export const chainConfigMappings: ConfigMappingsType<ChainConfig> = {
@@ -202,38 +187,3 @@ export function parseSequencerAllowList(value: string): AllowedElement[] {
202
187
 
203
188
  return entries;
204
189
  }
205
-
206
- function getDefaultAllowedSetupFunctions(): AllowedElement[] {
207
- return [
208
- // needed for authwit support
209
- {
210
- address: ProtocolContractAddress.AuthRegistry,
211
- },
212
- // needed for claiming on the same tx as a spend
213
- {
214
- address: ProtocolContractAddress.FeeJuice,
215
- // We can't restrict the selector because public functions get routed via dispatch.
216
- // selector: FunctionSelector.fromSignature('_increase_public_balance((Field),Field)'),
217
- },
218
- // needed for private transfers via FPC
219
- {
220
- classId: getContractClassFromArtifact(TokenContractArtifact).id,
221
- // We can't restrict the selector because public functions get routed via dispatch.
222
- // selector: FunctionSelector.fromSignature('_increase_public_balance((Field),Field)'),
223
- },
224
- {
225
- classId: getContractClassFromArtifact(FPCContract.artifact).id,
226
- // We can't restrict the selector because public functions get routed via dispatch.
227
- // selector: FunctionSelector.fromSignature('prepare_fee((Field),Field,(Field),Field)'),
228
- },
229
- ];
230
- }
231
-
232
- function getDefaultAllowedTeardownFunctions(): AllowedElement[] {
233
- return [
234
- {
235
- classId: getContractClassFromArtifact(FPCContract.artifact).id,
236
- selector: FunctionSelector.fromSignature('pay_refund((Field),Field,(Field))'),
237
- },
238
- ];
239
- }
package/src/index.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  export * from './client/index.js';
2
2
  export * from './config.js';
3
3
  export * from './publisher/index.js';
4
- export * from './sequencer/index.js';
4
+ export { Sequencer, SequencerState } from './sequencer/index.js';
5
5
 
6
6
  // Used by the node to simulate public parts of transactions. Should these be moved to a shared library?
7
7
  // ISSUE(#9832)
@@ -1,3 +1,2 @@
1
1
  export { L1Publisher, L1SubmitEpochProofArgs } from './l1-publisher.js';
2
2
  export * from './test-l1-publisher.js';
3
- export * from './config.js';
@@ -1,4 +1,4 @@
1
- import type { L1PublishBlockStats, L1PublishProofStats } from '@aztec/circuit-types/stats';
1
+ import type { L1PublishBlockStats, L1PublishProofStats, L1PublishStats } from '@aztec/circuit-types/stats';
2
2
  import {
3
3
  Attributes,
4
4
  type Histogram,
@@ -10,7 +10,7 @@ import {
10
10
 
11
11
  import { formatEther } from 'viem/utils';
12
12
 
13
- export type L1TxType = 'submitProof' | 'process';
13
+ export type L1TxType = 'submitProof' | 'process' | 'claimEpochProofRight';
14
14
 
15
15
  export class L1PublisherMetrics {
16
16
  private gasPrice: Histogram;
@@ -20,6 +20,8 @@ export class L1PublisherMetrics {
20
20
  private txGas: Histogram;
21
21
  private txCalldataSize: Histogram;
22
22
  private txCalldataGas: Histogram;
23
+ private txBlobDataGasUsed: Histogram;
24
+ private txBlobDataGasCost: Histogram;
23
25
 
24
26
  constructor(client: TelemetryClient, name = 'L1Publisher') {
25
27
  const meter = client.getMeter(name);
@@ -57,6 +59,18 @@ export class L1PublisherMetrics {
57
59
  unit: 'gas',
58
60
  valueType: ValueType.INT,
59
61
  });
62
+
63
+ this.txBlobDataGasUsed = meter.createHistogram(Metrics.L1_PUBLISHER_TX_BLOBDATA_GAS_USED, {
64
+ description: 'The amount of blob gas used in transactions',
65
+ unit: 'gas',
66
+ valueType: ValueType.INT,
67
+ });
68
+
69
+ this.txBlobDataGasCost = meter.createHistogram(Metrics.L1_PUBLISHER_TX_BLOBDATA_GAS_COST, {
70
+ description: 'The gas cost of blobs in transactions',
71
+ unit: 'gwei',
72
+ valueType: ValueType.INT,
73
+ });
60
74
  }
61
75
 
62
76
  recordFailedTx(txType: L1TxType) {
@@ -74,7 +88,11 @@ export class L1PublisherMetrics {
74
88
  this.recordTx('process', durationMs, stats);
75
89
  }
76
90
 
77
- private recordTx(txType: L1TxType, durationMs: number, stats: Omit<L1PublishProofStats, 'eventName'>) {
91
+ recordClaimEpochProofRightTx(durationMs: number, stats: L1PublishStats) {
92
+ this.recordTx('claimEpochProofRight', durationMs, stats);
93
+ }
94
+
95
+ private recordTx(txType: L1TxType, durationMs: number, stats: L1PublishStats) {
78
96
  const attributes = {
79
97
  [Attributes.L1_TX_TYPE]: txType,
80
98
  [Attributes.L1_SENDER]: stats.sender,
@@ -94,6 +112,9 @@ export class L1PublisherMetrics {
94
112
  this.txCalldataGas.record(stats.calldataGas, attributes);
95
113
  this.txCalldataSize.record(stats.calldataSize, attributes);
96
114
 
115
+ this.txBlobDataGasCost.record(Number(stats.blobDataGas), attributes);
116
+ this.txBlobDataGasUsed.record(Number(stats.blobGasUsed), attributes);
117
+
97
118
  try {
98
119
  this.gasPrice.record(parseInt(formatEther(stats.gasPrice, 'gwei'), 10));
99
120
  } catch (e) {