@aztec/sequencer-client 0.33.0 → 0.35.0

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 (102) hide show
  1. package/dest/client/sequencer-client.d.ts.map +1 -1
  2. package/dest/client/sequencer-client.js +3 -3
  3. package/dest/config.d.ts.map +1 -1
  4. package/dest/config.js +84 -7
  5. package/dest/global_variable_builder/global_builder.d.ts.map +1 -1
  6. package/dest/global_variable_builder/global_builder.js +5 -4
  7. package/dest/index.d.ts +0 -1
  8. package/dest/index.d.ts.map +1 -1
  9. package/dest/index.js +1 -2
  10. package/dest/publisher/l1-publisher.js +10 -10
  11. package/dest/publisher/viem-tx-sender.js +2 -2
  12. package/dest/sequencer/sequencer.d.ts +7 -8
  13. package/dest/sequencer/sequencer.d.ts.map +1 -1
  14. package/dest/sequencer/sequencer.js +22 -24
  15. package/dest/tx_validator/aggregate_tx_validator.d.ts +7 -0
  16. package/dest/tx_validator/aggregate_tx_validator.d.ts.map +1 -0
  17. package/dest/tx_validator/aggregate_tx_validator.js +23 -0
  18. package/dest/tx_validator/double_spend_validator.d.ts +11 -0
  19. package/dest/tx_validator/double_spend_validator.d.ts.map +1 -0
  20. package/dest/tx_validator/double_spend_validator.js +50 -0
  21. package/dest/tx_validator/gas_validator.d.ts +12 -0
  22. package/dest/tx_validator/gas_validator.d.ts.map +1 -0
  23. package/dest/tx_validator/gas_validator.js +62 -0
  24. package/dest/tx_validator/metadata_validator.d.ts +8 -0
  25. package/dest/tx_validator/metadata_validator.d.ts.map +1 -0
  26. package/dest/tx_validator/metadata_validator.js +50 -0
  27. package/dest/tx_validator/phases_validator.d.ts +13 -0
  28. package/dest/tx_validator/phases_validator.d.ts.map +1 -0
  29. package/dest/tx_validator/phases_validator.js +73 -0
  30. package/dest/tx_validator/tx_validator_factory.d.ts +13 -0
  31. package/dest/tx_validator/tx_validator_factory.d.ts.map +1 -0
  32. package/dest/tx_validator/tx_validator_factory.js +21 -0
  33. package/package.json +14 -13
  34. package/src/client/sequencer-client.ts +2 -3
  35. package/src/config.ts +93 -7
  36. package/src/global_variable_builder/global_builder.ts +4 -3
  37. package/src/index.ts +0 -1
  38. package/src/publisher/l1-publisher.ts +9 -9
  39. package/src/publisher/viem-tx-sender.ts +1 -1
  40. package/src/sequencer/sequencer.ts +39 -33
  41. package/src/tx_validator/aggregate_tx_validator.ts +24 -0
  42. package/src/tx_validator/double_spend_validator.ts +65 -0
  43. package/src/tx_validator/gas_validator.ts +81 -0
  44. package/src/tx_validator/metadata_validator.ts +60 -0
  45. package/src/tx_validator/phases_validator.ts +101 -0
  46. package/src/tx_validator/tx_validator_factory.ts +37 -0
  47. package/dest/sequencer/abstract_phase_manager.d.ts +0 -77
  48. package/dest/sequencer/abstract_phase_manager.d.ts.map +0 -1
  49. package/dest/sequencer/abstract_phase_manager.js +0 -307
  50. package/dest/sequencer/app_logic_phase_manager.d.ts +0 -28
  51. package/dest/sequencer/app_logic_phase_manager.d.ts.map +0 -1
  52. package/dest/sequencer/app_logic_phase_manager.js +0 -41
  53. package/dest/sequencer/hints_builder.d.ts +0 -23
  54. package/dest/sequencer/hints_builder.d.ts.map +0 -1
  55. package/dest/sequencer/hints_builder.js +0 -62
  56. package/dest/sequencer/phase_manager_factory.d.ts +0 -18
  57. package/dest/sequencer/phase_manager_factory.d.ts.map +0 -1
  58. package/dest/sequencer/phase_manager_factory.js +0 -56
  59. package/dest/sequencer/public_processor.d.ts +0 -54
  60. package/dest/sequencer/public_processor.d.ts.map +0 -1
  61. package/dest/sequencer/public_processor.js +0 -142
  62. package/dest/sequencer/setup_phase_manager.d.ts +0 -28
  63. package/dest/sequencer/setup_phase_manager.d.ts.map +0 -1
  64. package/dest/sequencer/setup_phase_manager.js +0 -30
  65. package/dest/sequencer/tail_phase_manager.d.ts +0 -29
  66. package/dest/sequencer/tail_phase_manager.d.ts.map +0 -1
  67. package/dest/sequencer/tail_phase_manager.js +0 -52
  68. package/dest/sequencer/teardown_phase_manager.d.ts +0 -28
  69. package/dest/sequencer/teardown_phase_manager.d.ts.map +0 -1
  70. package/dest/sequencer/teardown_phase_manager.js +0 -30
  71. package/dest/sequencer/tx_validator.d.ts +0 -28
  72. package/dest/sequencer/tx_validator.d.ts.map +0 -1
  73. package/dest/sequencer/tx_validator.js +0 -174
  74. package/dest/sequencer/tx_validator_factory.d.ts +0 -12
  75. package/dest/sequencer/tx_validator_factory.d.ts.map +0 -1
  76. package/dest/sequencer/tx_validator_factory.js +0 -17
  77. package/dest/sequencer/utils.d.ts +0 -8
  78. package/dest/sequencer/utils.d.ts.map +0 -1
  79. package/dest/sequencer/utils.js +0 -29
  80. package/dest/simulator/index.d.ts +0 -31
  81. package/dest/simulator/index.d.ts.map +0 -1
  82. package/dest/simulator/index.js +0 -2
  83. package/dest/simulator/public_executor.d.ts +0 -79
  84. package/dest/simulator/public_executor.d.ts.map +0 -1
  85. package/dest/simulator/public_executor.js +0 -198
  86. package/dest/simulator/public_kernel.d.ts +0 -37
  87. package/dest/simulator/public_kernel.d.ts.map +0 -1
  88. package/dest/simulator/public_kernel.js +0 -97
  89. package/src/sequencer/abstract_phase_manager.ts +0 -549
  90. package/src/sequencer/app_logic_phase_manager.ts +0 -62
  91. package/src/sequencer/hints_builder.ts +0 -119
  92. package/src/sequencer/phase_manager_factory.ts +0 -126
  93. package/src/sequencer/public_processor.ts +0 -209
  94. package/src/sequencer/setup_phase_manager.ts +0 -50
  95. package/src/sequencer/tail_phase_manager.ts +0 -111
  96. package/src/sequencer/teardown_phase_manager.ts +0 -50
  97. package/src/sequencer/tx_validator.ts +0 -265
  98. package/src/sequencer/tx_validator_factory.ts +0 -32
  99. package/src/sequencer/utils.ts +0 -31
  100. package/src/simulator/index.ts +0 -36
  101. package/src/simulator/public_executor.ts +0 -267
  102. package/src/simulator/public_kernel.ts +0 -139
@@ -0,0 +1,7 @@
1
+ import { type ProcessedTx, type Tx, type TxValidator } from '@aztec/circuit-types';
2
+ export declare class AggregateTxValidator<T extends Tx | ProcessedTx> implements TxValidator<T> {
3
+ #private;
4
+ constructor(...validators: TxValidator<T>[]);
5
+ validateTxs(txs: T[]): Promise<[validTxs: T[], invalidTxs: T[]]>;
6
+ }
7
+ //# sourceMappingURL=aggregate_tx_validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregate_tx_validator.d.ts","sourceRoot":"","sources":["../../src/tx_validator/aggregate_tx_validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,EAAE,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnF,qBAAa,oBAAoB,CAAC,CAAC,SAAS,EAAE,GAAG,WAAW,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;;gBAEzE,GAAG,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE;IAQrC,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;CAWvE"}
@@ -0,0 +1,23 @@
1
+ var _AggregateTxValidator_validators;
2
+ import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
3
+ export class AggregateTxValidator {
4
+ constructor(...validators) {
5
+ _AggregateTxValidator_validators.set(this, void 0);
6
+ if (validators.length === 0) {
7
+ throw new Error('At least one validator must be provided');
8
+ }
9
+ __classPrivateFieldSet(this, _AggregateTxValidator_validators, validators, "f");
10
+ }
11
+ async validateTxs(txs) {
12
+ const invalidTxs = [];
13
+ let txPool = txs;
14
+ for (const validator of __classPrivateFieldGet(this, _AggregateTxValidator_validators, "f")) {
15
+ const [valid, invalid] = await validator.validateTxs(txPool);
16
+ invalidTxs.push(...invalid);
17
+ txPool = valid;
18
+ }
19
+ return [txPool, invalidTxs];
20
+ }
21
+ }
22
+ _AggregateTxValidator_validators = new WeakMap();
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdncmVnYXRlX3R4X3ZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eF92YWxpZGF0b3IvYWdncmVnYXRlX3R4X3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLE1BQU0sT0FBTyxvQkFBb0I7SUFFL0IsWUFBWSxHQUFHLFVBQTRCO1FBRDNDLG1EQUE4QjtRQUU1QixJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1FBQzdELENBQUM7UUFFRCx1QkFBQSxJQUFJLG9DQUFlLFVBQVUsTUFBQSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQVE7UUFDeEIsTUFBTSxVQUFVLEdBQVEsRUFBRSxDQUFDO1FBQzNCLElBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQztRQUNqQixLQUFLLE1BQU0sU0FBUyxJQUFJLHVCQUFBLElBQUksd0NBQVksRUFBRSxDQUFDO1lBQ3pDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEdBQUcsTUFBTSxTQUFTLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdELFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztZQUM1QixNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLENBQUM7UUFFRCxPQUFPLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzlCLENBQUM7Q0FDRiJ9
@@ -0,0 +1,11 @@
1
+ import { type AnyTx, type TxValidator } from '@aztec/circuit-types';
2
+ import { Fr } from '@aztec/circuits.js';
3
+ export interface NullifierSource {
4
+ getNullifierIndex: (nullifier: Fr) => Promise<bigint | undefined>;
5
+ }
6
+ export declare class DoubleSpendTxValidator<T extends AnyTx> implements TxValidator<T> {
7
+ #private;
8
+ constructor(nullifierSource: NullifierSource);
9
+ validateTxs(txs: T[]): Promise<[validTxs: T[], invalidTxs: T[]]>;
10
+ }
11
+ //# sourceMappingURL=double_spend_validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"double_spend_validator.d.ts","sourceRoot":"","sources":["../../src/tx_validator/double_spend_validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAM,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAGxC,MAAM,WAAW,eAAe;IAC9B,iBAAiB,EAAE,CAAC,SAAS,EAAE,EAAE,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;CACnE;AAED,qBAAa,sBAAsB,CAAC,CAAC,SAAS,KAAK,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;;gBAIhE,eAAe,EAAE,eAAe;IAItC,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;CAgDvE"}
@@ -0,0 +1,50 @@
1
+ var _DoubleSpendTxValidator_instances, _DoubleSpendTxValidator_log, _DoubleSpendTxValidator_nullifierSource, _DoubleSpendTxValidator_uniqueNullifiers;
2
+ import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
3
+ import { Tx } from '@aztec/circuit-types';
4
+ import { Fr } from '@aztec/circuits.js';
5
+ import { createDebugLogger } from '@aztec/foundation/log';
6
+ export class DoubleSpendTxValidator {
7
+ constructor(nullifierSource) {
8
+ _DoubleSpendTxValidator_instances.add(this);
9
+ _DoubleSpendTxValidator_log.set(this, createDebugLogger('aztec:sequencer:tx_validator:tx_double_spend'));
10
+ _DoubleSpendTxValidator_nullifierSource.set(this, void 0);
11
+ __classPrivateFieldSet(this, _DoubleSpendTxValidator_nullifierSource, nullifierSource, "f");
12
+ }
13
+ async validateTxs(txs) {
14
+ const validTxs = [];
15
+ const invalidTxs = [];
16
+ const thisBlockNullifiers = new Set();
17
+ for (const tx of txs) {
18
+ if (!(await __classPrivateFieldGet(this, _DoubleSpendTxValidator_instances, "m", _DoubleSpendTxValidator_uniqueNullifiers).call(this, tx, thisBlockNullifiers))) {
19
+ invalidTxs.push(tx);
20
+ continue;
21
+ }
22
+ validTxs.push(tx);
23
+ }
24
+ return [validTxs, invalidTxs];
25
+ }
26
+ }
27
+ _DoubleSpendTxValidator_log = new WeakMap(), _DoubleSpendTxValidator_nullifierSource = new WeakMap(), _DoubleSpendTxValidator_instances = new WeakSet(), _DoubleSpendTxValidator_uniqueNullifiers = async function _DoubleSpendTxValidator_uniqueNullifiers(tx, thisBlockNullifiers) {
28
+ const newNullifiers = tx.data.getNonEmptyNullifiers().map(x => x.toBigInt());
29
+ // Ditch this tx if it has repeated nullifiers
30
+ const uniqueNullifiers = new Set(newNullifiers);
31
+ if (uniqueNullifiers.size !== newNullifiers.length) {
32
+ __classPrivateFieldGet(this, _DoubleSpendTxValidator_log, "f").warn(`Rejecting tx ${Tx.getHash(tx)} for emitting duplicate nullifiers`);
33
+ return false;
34
+ }
35
+ for (const nullifier of newNullifiers) {
36
+ if (thisBlockNullifiers.has(nullifier)) {
37
+ __classPrivateFieldGet(this, _DoubleSpendTxValidator_log, "f").warn(`Rejecting tx ${Tx.getHash(tx)} for repeating a nullifier in the same block`);
38
+ return false;
39
+ }
40
+ thisBlockNullifiers.add(nullifier);
41
+ }
42
+ const nullifierIndexes = await Promise.all(newNullifiers.map(n => __classPrivateFieldGet(this, _DoubleSpendTxValidator_nullifierSource, "f").getNullifierIndex(new Fr(n))));
43
+ const hasDuplicates = nullifierIndexes.some(index => index !== undefined);
44
+ if (hasDuplicates) {
45
+ __classPrivateFieldGet(this, _DoubleSpendTxValidator_log, "f").warn(`Rejecting tx ${Tx.getHash(tx)} for repeating nullifiers present in state trees`);
46
+ return false;
47
+ }
48
+ return true;
49
+ };
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG91YmxlX3NwZW5kX3ZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eF92YWxpZGF0b3IvZG91YmxlX3NwZW5kX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBYyxFQUFFLEVBQW9CLE1BQU0sc0JBQXNCLENBQUM7QUFDeEUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBTTFELE1BQU0sT0FBTyxzQkFBc0I7SUFJakMsWUFBWSxlQUFnQzs7UUFINUMsc0NBQU8saUJBQWlCLENBQUMsOENBQThDLENBQUMsRUFBQztRQUN6RSwwREFBa0M7UUFHaEMsdUJBQUEsSUFBSSwyQ0FBb0IsZUFBZSxNQUFBLENBQUM7SUFDMUMsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBUTtRQUN4QixNQUFNLFFBQVEsR0FBUSxFQUFFLENBQUM7UUFDekIsTUFBTSxVQUFVLEdBQVEsRUFBRSxDQUFDO1FBQzNCLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUU5QyxLQUFLLE1BQU0sRUFBRSxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxDQUFDLE1BQU0sdUJBQUEsSUFBSSxtRkFBa0IsTUFBdEIsSUFBSSxFQUFtQixFQUFFLEVBQUUsbUJBQW1CLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQzdELFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3BCLFNBQVM7WUFDWCxDQUFDO1lBRUQsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwQixDQUFDO1FBRUQsT0FBTyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNoQyxDQUFDO0NBaUNGO29NQS9CQyxLQUFLLG1EQUFtQixFQUFTLEVBQUUsbUJBQWdDO0lBQ2pFLE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUU3RSw4Q0FBOEM7SUFDOUMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNoRCxJQUFJLGdCQUFnQixDQUFDLElBQUksS0FBSyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDbkQsdUJBQUEsSUFBSSxtQ0FBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsb0NBQW9DLENBQUMsQ0FBQztRQUNuRixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxLQUFLLE1BQU0sU0FBUyxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQ3RDLElBQUksbUJBQW1CLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDdkMsdUJBQUEsSUFBSSxtQ0FBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsOENBQThDLENBQUMsQ0FBQztZQUM3RixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUN4QyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsdUJBQUEsSUFBSSwrQ0FBaUIsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQzNFLENBQUM7SUFFRixNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUM7SUFDMUUsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUNsQix1QkFBQSxJQUFJLG1DQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO1FBQ2pHLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyJ9
@@ -0,0 +1,12 @@
1
+ import { Tx, type TxValidator } from '@aztec/circuit-types';
2
+ import { type AztecAddress, Fr } from '@aztec/circuits.js';
3
+ /** Provides a view into public contract state */
4
+ export interface PublicStateSource {
5
+ storageRead: (contractAddress: AztecAddress, slot: Fr) => Promise<Fr>;
6
+ }
7
+ export declare class GasTxValidator implements TxValidator<Tx> {
8
+ #private;
9
+ constructor(publicDataSource: PublicStateSource, gasTokenAddress: AztecAddress, requireFees?: boolean);
10
+ validateTxs(txs: Tx[]): Promise<[validTxs: Tx[], invalidTxs: Tx[]]>;
11
+ }
12
+ //# sourceMappingURL=gas_validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gas_validator.d.ts","sourceRoot":"","sources":["../../src/tx_validator/gas_validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,KAAK,YAAY,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAM3D,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;;gBAMxC,gBAAgB,EAAE,iBAAiB,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,UAAQ;IAM7F,WAAW,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;CAwD1E"}
@@ -0,0 +1,62 @@
1
+ var _GasTxValidator_instances, _GasTxValidator_log, _GasTxValidator_publicDataSource, _GasTxValidator_gasTokenAddress, _GasTxValidator_requireFees, _GasTxValidator_validateTxFee;
2
+ import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
3
+ import { Tx } from '@aztec/circuit-types';
4
+ import { Fr } from '@aztec/circuits.js';
5
+ import { pedersenHash } from '@aztec/foundation/crypto';
6
+ import { createDebugLogger } from '@aztec/foundation/log';
7
+ import { GasTokenContract } from '@aztec/noir-contracts.js';
8
+ import { AbstractPhaseManager, PublicKernelPhase } from '@aztec/simulator';
9
+ export class GasTxValidator {
10
+ constructor(publicDataSource, gasTokenAddress, requireFees = false) {
11
+ _GasTxValidator_instances.add(this);
12
+ _GasTxValidator_log.set(this, createDebugLogger('aztec:sequencer:tx_validator:tx_gas'));
13
+ _GasTxValidator_publicDataSource.set(this, void 0);
14
+ _GasTxValidator_gasTokenAddress.set(this, void 0);
15
+ _GasTxValidator_requireFees.set(this, void 0);
16
+ __classPrivateFieldSet(this, _GasTxValidator_publicDataSource, publicDataSource, "f");
17
+ __classPrivateFieldSet(this, _GasTxValidator_gasTokenAddress, gasTokenAddress, "f");
18
+ __classPrivateFieldSet(this, _GasTxValidator_requireFees, requireFees, "f");
19
+ }
20
+ async validateTxs(txs) {
21
+ const validTxs = [];
22
+ const invalidTxs = [];
23
+ for (const tx of txs) {
24
+ if (await __classPrivateFieldGet(this, _GasTxValidator_instances, "m", _GasTxValidator_validateTxFee).call(this, tx)) {
25
+ validTxs.push(tx);
26
+ }
27
+ else {
28
+ invalidTxs.push(tx);
29
+ }
30
+ }
31
+ return [validTxs, invalidTxs];
32
+ }
33
+ }
34
+ _GasTxValidator_log = new WeakMap(), _GasTxValidator_publicDataSource = new WeakMap(), _GasTxValidator_gasTokenAddress = new WeakMap(), _GasTxValidator_requireFees = new WeakMap(), _GasTxValidator_instances = new WeakSet(), _GasTxValidator_validateTxFee = async function _GasTxValidator_validateTxFee(tx) {
35
+ const { [PublicKernelPhase.TEARDOWN]: teardownFns } = AbstractPhaseManager.extractEnqueuedPublicCallsByPhase(tx.data, tx.enqueuedPublicFunctionCalls);
36
+ if (teardownFns.length === 0) {
37
+ if (__classPrivateFieldGet(this, _GasTxValidator_requireFees, "f")) {
38
+ __classPrivateFieldGet(this, _GasTxValidator_log, "f").warn(`Rejecting tx ${Tx.getHash(tx)} because it should pay for gas but has no enqueued teardown functions`);
39
+ return false;
40
+ }
41
+ else {
42
+ __classPrivateFieldGet(this, _GasTxValidator_log, "f").debug(`Tx ${Tx.getHash(tx)} does not pay fees. Skipping balance check.`);
43
+ return true;
44
+ }
45
+ }
46
+ if (teardownFns.length > 1) {
47
+ __classPrivateFieldGet(this, _GasTxValidator_log, "f").warn(`Rejecting tx ${Tx.getHash(tx)} because it has multiple teardown functions`);
48
+ return false;
49
+ }
50
+ // check that the caller of the teardown function has enough balance to pay for tx costs
51
+ const teardownFn = teardownFns[0];
52
+ const slot = pedersenHash([GasTokenContract.storage.balances.slot, teardownFn.callContext.msgSender]);
53
+ const gasBalance = await __classPrivateFieldGet(this, _GasTxValidator_publicDataSource, "f").storageRead(__classPrivateFieldGet(this, _GasTxValidator_gasTokenAddress, "f"), slot);
54
+ // TODO(#5004) calculate fee needed based on tx limits and gas prices
55
+ const gasAmountNeeded = new Fr(1);
56
+ if (gasBalance.lt(gasAmountNeeded)) {
57
+ __classPrivateFieldGet(this, _GasTxValidator_log, "f").warn(`Rejecting tx ${Tx.getHash(tx)} because it should pay for gas but has insufficient balance ${gasBalance.toShortString()} < ${gasAmountNeeded.toShortString()}`);
58
+ return false;
59
+ }
60
+ return true;
61
+ };
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FzX3ZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eF92YWxpZGF0b3IvZ2FzX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBRSxFQUFFLEVBQW9CLE1BQU0sc0JBQXNCLENBQUM7QUFDNUQsT0FBTyxFQUFxQixFQUFFLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFPM0UsTUFBTSxPQUFPLGNBQWM7SUFNekIsWUFBWSxnQkFBbUMsRUFBRSxlQUE2QixFQUFFLFdBQVcsR0FBRyxLQUFLOztRQUxuRyw4QkFBTyxpQkFBaUIsQ0FBQyxxQ0FBcUMsQ0FBQyxFQUFDO1FBQ2hFLG1EQUFxQztRQUNyQyxrREFBK0I7UUFDL0IsOENBQXNCO1FBR3BCLHVCQUFBLElBQUksb0NBQXFCLGdCQUFnQixNQUFBLENBQUM7UUFDMUMsdUJBQUEsSUFBSSxtQ0FBb0IsZUFBZSxNQUFBLENBQUM7UUFDeEMsdUJBQUEsSUFBSSwrQkFBZ0IsV0FBVyxNQUFBLENBQUM7SUFDbEMsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBUztRQUN6QixNQUFNLFFBQVEsR0FBUyxFQUFFLENBQUM7UUFDMUIsTUFBTSxVQUFVLEdBQVMsRUFBRSxDQUFDO1FBRTVCLEtBQUssTUFBTSxFQUFFLElBQUksR0FBRyxFQUFFLENBQUM7WUFDckIsSUFBSSxNQUFNLHVCQUFBLElBQUksZ0VBQWUsTUFBbkIsSUFBSSxFQUFnQixFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUNsQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3BCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3RCLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNoQyxDQUFDO0NBMkNGO2dRQXpDQyxLQUFLLHdDQUFnQixFQUFNO0lBQ3pCLE1BQU0sRUFBRSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxFQUFFLFdBQVcsRUFBRSxHQUFHLG9CQUFvQixDQUFDLGlDQUFpQyxDQUMxRyxFQUFFLENBQUMsSUFBSSxFQUNQLEVBQUUsQ0FBQywyQkFBMkIsQ0FDL0IsQ0FBQztJQUVGLElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM3QixJQUFJLHVCQUFBLElBQUksbUNBQWEsRUFBRSxDQUFDO1lBQ3RCLHVCQUFBLElBQUksMkJBQUssQ0FBQyxJQUFJLENBQ1osZ0JBQWdCLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLHVFQUF1RSxDQUN0RyxDQUFDO1lBQ0YsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO2FBQU0sQ0FBQztZQUNOLHVCQUFBLElBQUksMkJBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO1lBQ25GLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDM0IsdUJBQUEsSUFBSSwyQkFBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsNkNBQTZDLENBQUMsQ0FBQztRQUM1RixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCx3RkFBd0Y7SUFDeEYsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUN0RyxNQUFNLFVBQVUsR0FBRyxNQUFNLHVCQUFBLElBQUksd0NBQWtCLENBQUMsV0FBVyxDQUFDLHVCQUFBLElBQUksdUNBQWlCLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFekYscUVBQXFFO0lBQ3JFLE1BQU0sZUFBZSxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO1FBQ25DLHVCQUFBLElBQUksMkJBQUssQ0FBQyxJQUFJLENBQ1osZ0JBQWdCLEVBQUUsQ0FBQyxPQUFPLENBQ3hCLEVBQUUsQ0FDSCwrREFBK0QsVUFBVSxDQUFDLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUNsSSxDQUFDO1FBQ0YsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIn0=
@@ -0,0 +1,8 @@
1
+ import { type AnyTx, type TxValidator } from '@aztec/circuit-types';
2
+ import { type GlobalVariables } from '@aztec/circuits.js';
3
+ export declare class MetadataTxValidator<T extends AnyTx> implements TxValidator<T> {
4
+ #private;
5
+ constructor(globalVariables: GlobalVariables);
6
+ validateTxs(txs: T[]): Promise<[validTxs: T[], invalidTxs: T[]]>;
7
+ }
8
+ //# sourceMappingURL=metadata_validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata_validator.d.ts","sourceRoot":"","sources":["../../src/tx_validator/metadata_validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAM,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAG1D,qBAAa,mBAAmB,CAAC,CAAC,SAAS,KAAK,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;;gBAI7D,eAAe,EAAE,eAAe;IAI5C,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;CA+CjE"}
@@ -0,0 +1,50 @@
1
+ var _MetadataTxValidator_instances, _MetadataTxValidator_log, _MetadataTxValidator_globalVariables, _MetadataTxValidator_hasCorrectChainId, _MetadataTxValidator_isValidForBlockNumber;
2
+ import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
3
+ import { Tx } from '@aztec/circuit-types';
4
+ import { createDebugLogger } from '@aztec/foundation/log';
5
+ export class MetadataTxValidator {
6
+ constructor(globalVariables) {
7
+ _MetadataTxValidator_instances.add(this);
8
+ _MetadataTxValidator_log.set(this, createDebugLogger('aztec:sequencer:tx_validator:tx_metadata'));
9
+ _MetadataTxValidator_globalVariables.set(this, void 0);
10
+ __classPrivateFieldSet(this, _MetadataTxValidator_globalVariables, globalVariables, "f");
11
+ }
12
+ validateTxs(txs) {
13
+ const validTxs = [];
14
+ const invalidTxs = [];
15
+ for (const tx of txs) {
16
+ if (!__classPrivateFieldGet(this, _MetadataTxValidator_instances, "m", _MetadataTxValidator_hasCorrectChainId).call(this, tx)) {
17
+ invalidTxs.push(tx);
18
+ continue;
19
+ }
20
+ if (!__classPrivateFieldGet(this, _MetadataTxValidator_instances, "m", _MetadataTxValidator_isValidForBlockNumber).call(this, tx)) {
21
+ invalidTxs.push(tx);
22
+ continue;
23
+ }
24
+ validTxs.push(tx);
25
+ }
26
+ return Promise.resolve([validTxs, invalidTxs]);
27
+ }
28
+ }
29
+ _MetadataTxValidator_log = new WeakMap(), _MetadataTxValidator_globalVariables = new WeakMap(), _MetadataTxValidator_instances = new WeakSet(), _MetadataTxValidator_hasCorrectChainId = function _MetadataTxValidator_hasCorrectChainId(tx) {
30
+ if (!tx.data.constants.txContext.chainId.equals(__classPrivateFieldGet(this, _MetadataTxValidator_globalVariables, "f").chainId)) {
31
+ __classPrivateFieldGet(this, _MetadataTxValidator_log, "f").warn(`Rejecting tx ${Tx.getHash(tx)} because of incorrect chain ${tx.data.constants.txContext.chainId.toNumber()} != ${__classPrivateFieldGet(this, _MetadataTxValidator_globalVariables, "f").chainId.toNumber()}`);
32
+ return false;
33
+ }
34
+ else {
35
+ return true;
36
+ }
37
+ }, _MetadataTxValidator_isValidForBlockNumber = function _MetadataTxValidator_isValidForBlockNumber(tx) {
38
+ const target = tx instanceof Tx
39
+ ? tx.data.forRollup?.rollupValidationRequests || tx.data.forPublic.validationRequests.forRollup
40
+ : tx.data.rollupValidationRequests;
41
+ const maxBlockNumber = target.maxBlockNumber;
42
+ if (maxBlockNumber.isSome && maxBlockNumber.value < __classPrivateFieldGet(this, _MetadataTxValidator_globalVariables, "f").blockNumber) {
43
+ __classPrivateFieldGet(this, _MetadataTxValidator_log, "f").warn(`Rejecting tx ${Tx.getHash(tx)} for low max block number`);
44
+ return false;
45
+ }
46
+ else {
47
+ return true;
48
+ }
49
+ };
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YWRhdGFfdmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R4X3ZhbGlkYXRvci9tZXRhZGF0YV92YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQWMsRUFBRSxFQUFvQixNQUFNLHNCQUFzQixDQUFDO0FBRXhFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELE1BQU0sT0FBTyxtQkFBbUI7SUFJOUIsWUFBWSxlQUFnQzs7UUFINUMsbUNBQU8saUJBQWlCLENBQUMsMENBQTBDLENBQUMsRUFBQztRQUNyRSx1REFBa0M7UUFHaEMsdUJBQUEsSUFBSSx3Q0FBb0IsZUFBZSxNQUFBLENBQUM7SUFDMUMsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFRO1FBQ2xCLE1BQU0sUUFBUSxHQUFRLEVBQUUsQ0FBQztRQUN6QixNQUFNLFVBQVUsR0FBUSxFQUFFLENBQUM7UUFDM0IsS0FBSyxNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsdUJBQUEsSUFBSSw4RUFBbUIsTUFBdkIsSUFBSSxFQUFvQixFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUNqQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNwQixTQUFTO1lBQ1gsQ0FBQztZQUVELElBQUksQ0FBQyx1QkFBQSxJQUFJLGtGQUF1QixNQUEzQixJQUFJLEVBQXdCLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3BCLFNBQVM7WUFDWCxDQUFDO1lBRUQsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwQixDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDakQsQ0FBQztDQTZCRjt5T0EzQm9CLEVBQUs7SUFDdEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLHVCQUFBLElBQUksNENBQWlCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUMvRSx1QkFBQSxJQUFJLGdDQUFLLENBQUMsSUFBSSxDQUNaLGdCQUFnQixFQUFFLENBQUMsT0FBTyxDQUN4QixFQUFFLENBQ0gsK0JBQStCLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLE9BQU8sdUJBQUEsSUFBSSw0Q0FBaUIsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FDaEksQ0FBQztRQUNGLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztTQUFNLENBQUM7UUFDTixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7QUFDSCxDQUFDLG1HQUVzQixFQUFLO0lBQzFCLE1BQU0sTUFBTSxHQUNWLEVBQUUsWUFBWSxFQUFFO1FBQ2QsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLHdCQUF3QixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBVSxDQUFDLGtCQUFrQixDQUFDLFNBQVM7UUFDaEcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUM7SUFDdkMsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQztJQUU3QyxJQUFJLGNBQWMsQ0FBQyxNQUFNLElBQUksY0FBYyxDQUFDLEtBQUssR0FBRyx1QkFBQSxJQUFJLDRDQUFpQixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3RGLHVCQUFBLElBQUksZ0NBQUssQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDMUUsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO1NBQU0sQ0FBQztRQUNOLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztBQUNILENBQUMifQ==
@@ -0,0 +1,13 @@
1
+ import { type AllowedFunction, Tx, type TxValidator } from '@aztec/circuit-types';
2
+ import { type PublicCallRequest } from '@aztec/circuits.js';
3
+ import { type ContractDataSource } from '@aztec/types/contracts';
4
+ export declare class PhasesTxValidator implements TxValidator<Tx> {
5
+ #private;
6
+ private contractDataSource;
7
+ private setupAllowList;
8
+ private teardownAllowList;
9
+ constructor(contractDataSource: ContractDataSource, setupAllowList: AllowedFunction[], teardownAllowList: AllowedFunction[]);
10
+ validateTxs(txs: Tx[]): Promise<[validTxs: Tx[], invalidTxs: Tx[]]>;
11
+ isOnAllowList(publicCall: PublicCallRequest, allowList: AllowedFunction[]): Promise<boolean>;
12
+ }
13
+ //# sourceMappingURL=phases_validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phases_validator.d.ts","sourceRoot":"","sources":["../../src/tx_validator/phases_validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAE,EAAE,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAG5D,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,qBAAa,iBAAkB,YAAW,WAAW,CAAC,EAAE,CAAC;;IAIrD,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,iBAAiB;gBAFjB,kBAAkB,EAAE,kBAAkB,EACtC,cAAc,EAAE,eAAe,EAAE,EACjC,iBAAiB,EAAE,eAAe,EAAE;IAGxC,WAAW,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;IAmDnE,aAAa,CAAC,UAAU,EAAE,iBAAiB,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;CAkCnG"}
@@ -0,0 +1,73 @@
1
+ var _PhasesTxValidator_instances, _PhasesTxValidator_log, _PhasesTxValidator_validateTx;
2
+ import { __classPrivateFieldGet } from "tslib";
3
+ import { Tx } from '@aztec/circuit-types';
4
+ import { createDebugLogger } from '@aztec/foundation/log';
5
+ import { AbstractPhaseManager, PublicKernelPhase } from '@aztec/simulator';
6
+ export class PhasesTxValidator {
7
+ constructor(contractDataSource, setupAllowList, teardownAllowList) {
8
+ _PhasesTxValidator_instances.add(this);
9
+ this.contractDataSource = contractDataSource;
10
+ this.setupAllowList = setupAllowList;
11
+ this.teardownAllowList = teardownAllowList;
12
+ _PhasesTxValidator_log.set(this, createDebugLogger('aztec:sequencer:tx_validator:tx_phases'));
13
+ }
14
+ async validateTxs(txs) {
15
+ const validTxs = [];
16
+ const invalidTxs = [];
17
+ for (const tx of txs) {
18
+ if (await __classPrivateFieldGet(this, _PhasesTxValidator_instances, "m", _PhasesTxValidator_validateTx).call(this, tx)) {
19
+ validTxs.push(tx);
20
+ }
21
+ else {
22
+ invalidTxs.push(tx);
23
+ }
24
+ }
25
+ return Promise.resolve([validTxs, invalidTxs]);
26
+ }
27
+ async isOnAllowList(publicCall, allowList) {
28
+ const { contractAddress, functionData: { selector }, } = publicCall;
29
+ // do these checks first since they don't require the contract class
30
+ for (const entry of allowList) {
31
+ if (!('address' in entry)) {
32
+ continue;
33
+ }
34
+ if (contractAddress.equals(entry.address) && entry.selector.equals(selector)) {
35
+ return true;
36
+ }
37
+ }
38
+ const contractClass = await this.contractDataSource.getContract(contractAddress);
39
+ if (!contractClass) {
40
+ throw new Error(`Contract not found: ${publicCall.contractAddress.toString()}`);
41
+ }
42
+ for (const entry of allowList) {
43
+ if (!('classId' in entry)) {
44
+ continue;
45
+ }
46
+ if (contractClass.contractClassId.equals(entry.classId) && entry.selector.equals(selector)) {
47
+ return true;
48
+ }
49
+ }
50
+ return false;
51
+ }
52
+ }
53
+ _PhasesTxValidator_log = new WeakMap(), _PhasesTxValidator_instances = new WeakSet(), _PhasesTxValidator_validateTx = async function _PhasesTxValidator_validateTx(tx) {
54
+ if (!tx.data.forPublic) {
55
+ __classPrivateFieldGet(this, _PhasesTxValidator_log, "f").debug(`Tx ${Tx.getHash(tx)} does not contain enqueued public functions. Skipping phases validation.`);
56
+ return true;
57
+ }
58
+ const { [PublicKernelPhase.SETUP]: setupFns, [PublicKernelPhase.TEARDOWN]: teardownFns } = AbstractPhaseManager.extractEnqueuedPublicCallsByPhase(tx.data, tx.enqueuedPublicFunctionCalls);
59
+ for (const setupFn of setupFns) {
60
+ if (!(await this.isOnAllowList(setupFn, this.setupAllowList))) {
61
+ __classPrivateFieldGet(this, _PhasesTxValidator_log, "f").warn(`Rejecting tx ${Tx.getHash(tx)} because it calls setup function not on allow list: ${setupFn.contractAddress}:${setupFn.functionData.selector}`);
62
+ return false;
63
+ }
64
+ }
65
+ for (const teardownFn of teardownFns) {
66
+ if (!(await this.isOnAllowList(teardownFn, this.teardownAllowList))) {
67
+ __classPrivateFieldGet(this, _PhasesTxValidator_log, "f").warn(`Rejecting tx ${Tx.getHash(tx)} because it calls teardown function not on allowlist: ${teardownFn.contractAddress}:${teardownFn.functionData.selector}`);
68
+ return false;
69
+ }
70
+ }
71
+ return true;
72
+ };
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhhc2VzX3ZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eF92YWxpZGF0b3IvcGhhc2VzX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBd0IsRUFBRSxFQUFvQixNQUFNLHNCQUFzQixDQUFDO0FBRWxGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRzNFLE1BQU0sT0FBTyxpQkFBaUI7SUFHNUIsWUFDVSxrQkFBc0MsRUFDdEMsY0FBaUMsRUFDakMsaUJBQW9DOztRQUZwQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQUNqQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBTDlDLGlDQUFPLGlCQUFpQixDQUFDLHdDQUF3QyxDQUFDLEVBQUM7SUFNaEUsQ0FBQztJQUVKLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBUztRQUN6QixNQUFNLFFBQVEsR0FBUyxFQUFFLENBQUM7UUFDMUIsTUFBTSxVQUFVLEdBQVMsRUFBRSxDQUFDO1FBRTVCLEtBQUssTUFBTSxFQUFFLElBQUksR0FBRyxFQUFFLENBQUM7WUFDckIsSUFBSSxNQUFNLHVCQUFBLElBQUksbUVBQVksTUFBaEIsSUFBSSxFQUFhLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQy9CLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDcEIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdEIsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFD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
@@ -0,0 +1,13 @@
1
+ import { type AllowedFunction, type ProcessedTx, type Tx, type TxValidator } from '@aztec/circuit-types';
2
+ import { type EthAddress, type GlobalVariables } from '@aztec/circuits.js';
3
+ import { type ContractDataSource } from '@aztec/types/contracts';
4
+ import { type MerkleTreeOperations } from '@aztec/world-state';
5
+ export declare class TxValidatorFactory {
6
+ private merkleTreeDb;
7
+ private contractDataSource;
8
+ private gasPortalAddress;
9
+ constructor(merkleTreeDb: MerkleTreeOperations, contractDataSource: ContractDataSource, gasPortalAddress: EthAddress);
10
+ validatorForNewTxs(globalVariables: GlobalVariables, setupAllowList: AllowedFunction[], teardownAllowList: AllowedFunction[]): TxValidator<Tx>;
11
+ validatorForProcessedTxs(): TxValidator<ProcessedTx>;
12
+ }
13
+ //# sourceMappingURL=tx_validator_factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tx_validator_factory.d.ts","sourceRoot":"","sources":["../../src/tx_validator/tx_validator_factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,WAAW,EAAE,KAAK,EAAE,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACzG,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAG3E,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAQ/D,qBAAa,kBAAkB;IAE3B,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,gBAAgB;gBAFhB,YAAY,EAAE,oBAAoB,EAClC,kBAAkB,EAAE,kBAAkB,EACtC,gBAAgB,EAAE,UAAU;IAGtC,kBAAkB,CAChB,eAAe,EAAE,eAAe,EAChC,cAAc,EAAE,eAAe,EAAE,EACjC,iBAAiB,EAAE,eAAe,EAAE,GACnC,WAAW,CAAC,EAAE,CAAC;IASlB,wBAAwB,IAAI,WAAW,CAAC,WAAW,CAAC;CAGrD"}
@@ -0,0 +1,21 @@
1
+ import { getCanonicalGasTokenAddress } from '@aztec/protocol-contracts/gas-token';
2
+ import { WorldStateDB, WorldStatePublicDB } from '@aztec/simulator';
3
+ import { AggregateTxValidator } from './aggregate_tx_validator.js';
4
+ import { DoubleSpendTxValidator } from './double_spend_validator.js';
5
+ import { GasTxValidator } from './gas_validator.js';
6
+ import { MetadataTxValidator } from './metadata_validator.js';
7
+ import { PhasesTxValidator } from './phases_validator.js';
8
+ export class TxValidatorFactory {
9
+ constructor(merkleTreeDb, contractDataSource, gasPortalAddress) {
10
+ this.merkleTreeDb = merkleTreeDb;
11
+ this.contractDataSource = contractDataSource;
12
+ this.gasPortalAddress = gasPortalAddress;
13
+ }
14
+ validatorForNewTxs(globalVariables, setupAllowList, teardownAllowList) {
15
+ return new AggregateTxValidator(new MetadataTxValidator(globalVariables), new DoubleSpendTxValidator(new WorldStateDB(this.merkleTreeDb)), new PhasesTxValidator(this.contractDataSource, setupAllowList, teardownAllowList), new GasTxValidator(new WorldStatePublicDB(this.merkleTreeDb), getCanonicalGasTokenAddress(this.gasPortalAddress)));
16
+ }
17
+ validatorForProcessedTxs() {
18
+ return new DoubleSpendTxValidator(new WorldStateDB(this.merkleTreeDb));
19
+ }
20
+ }
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfdmFsaWRhdG9yX2ZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHhfdmFsaWRhdG9yL3R4X3ZhbGlkYXRvcl9mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUlwRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsTUFBTSxPQUFPLGtCQUFrQjtJQUM3QixZQUNVLFlBQWtDLEVBQ2xDLGtCQUFzQyxFQUN0QyxnQkFBNEI7UUFGNUIsaUJBQVksR0FBWixZQUFZLENBQXNCO1FBQ2xDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFZO0lBQ25DLENBQUM7SUFFSixrQkFBa0IsQ0FDaEIsZUFBZ0MsRUFDaEMsY0FBaUMsRUFDakMsaUJBQW9DO1FBRXBDLE9BQU8sSUFBSSxvQkFBb0IsQ0FDN0IsSUFBSSxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsRUFDeEMsSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsRUFDL0QsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixDQUFDLEVBQ2pGLElBQUksY0FBYyxDQUFDLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLDJCQUEyQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQ2xILENBQUM7SUFDSixDQUFDO0lBRUQsd0JBQXdCO1FBQ3RCLE9BQU8sSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUN6RSxDQUFDO0NBQ0YifQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/sequencer-client",
3
- "version": "0.33.0",
3
+ "version": "0.35.0",
4
4
  "type": "module",
5
5
  "exports": "./dest/index.js",
6
6
  "typedocOptions": {
@@ -24,18 +24,19 @@
24
24
  "test:integration:run": "NODE_NO_WARNINGS=1 node --experimental-vm-modules $(yarn bin jest) --no-cache --config jest.integration.config.json"
25
25
  },
26
26
  "dependencies": {
27
- "@aztec/circuit-types": "0.33.0",
28
- "@aztec/circuits.js": "0.33.0",
29
- "@aztec/ethereum": "0.33.0",
30
- "@aztec/foundation": "0.33.0",
31
- "@aztec/l1-artifacts": "0.33.0",
32
- "@aztec/merkle-tree": "0.33.0",
33
- "@aztec/noir-protocol-circuits-types": "0.33.0",
34
- "@aztec/p2p": "0.33.0",
35
- "@aztec/protocol-contracts": "0.33.0",
36
- "@aztec/simulator": "0.33.0",
37
- "@aztec/types": "0.33.0",
38
- "@aztec/world-state": "0.33.0",
27
+ "@aztec/circuit-types": "0.35.0",
28
+ "@aztec/circuits.js": "0.35.0",
29
+ "@aztec/ethereum": "0.35.0",
30
+ "@aztec/foundation": "0.35.0",
31
+ "@aztec/l1-artifacts": "0.35.0",
32
+ "@aztec/merkle-tree": "0.35.0",
33
+ "@aztec/noir-contracts.js": "0.35.0",
34
+ "@aztec/noir-protocol-circuits-types": "0.35.0",
35
+ "@aztec/p2p": "0.35.0",
36
+ "@aztec/protocol-contracts": "0.35.0",
37
+ "@aztec/simulator": "0.35.0",
38
+ "@aztec/types": "0.35.0",
39
+ "@aztec/world-state": "0.35.0",
39
40
  "@noir-lang/acvm_js": "portal:../../noir/packages/acvm_js",
40
41
  "@noir-lang/types": "portal:../../noir/packages/types",
41
42
  "lodash.chunk": "^4.2.0",
@@ -1,7 +1,7 @@
1
1
  import { type L1ToL2MessageSource, type L2BlockSource } from '@aztec/circuit-types';
2
2
  import { type BlockProver } from '@aztec/circuit-types/interfaces';
3
3
  import { type P2P } from '@aztec/p2p';
4
- import { type SimulationProvider } from '@aztec/simulator';
4
+ import { PublicProcessorFactory, type SimulationProvider } from '@aztec/simulator';
5
5
  import { type ContractDataSource } from '@aztec/types/contracts';
6
6
  import { type WorldStateSynchronizer } from '@aztec/world-state';
7
7
 
@@ -9,8 +9,7 @@ import { type SequencerClientConfig } from '../config.js';
9
9
  import { getGlobalVariableBuilder } from '../global_variable_builder/index.js';
10
10
  import { getL1Publisher } from '../publisher/index.js';
11
11
  import { Sequencer, type SequencerConfig } from '../sequencer/index.js';
12
- import { PublicProcessorFactory } from '../sequencer/public_processor.js';
13
- import { TxValidatorFactory } from '../sequencer/tx_validator_factory.js';
12
+ import { TxValidatorFactory } from '../tx_validator/tx_validator_factory.js';
14
13
 
15
14
  /**
16
15
  * Encapsulates the full sequencer and publisher.
package/src/config.ts CHANGED
@@ -1,6 +1,14 @@
1
- import { AztecAddress, Fr } from '@aztec/circuits.js';
1
+ import { type AllowedFunction } from '@aztec/circuit-types';
2
+ import { AztecAddress, Fr, FunctionSelector, getContractClassFromArtifact } from '@aztec/circuits.js';
2
3
  import { type L1ContractAddresses, NULL_KEY } from '@aztec/ethereum';
3
4
  import { EthAddress } from '@aztec/foundation/eth-address';
5
+ import { EcdsaAccountContractArtifact } from '@aztec/noir-contracts.js/EcdsaAccount';
6
+ import { FPCContract } from '@aztec/noir-contracts.js/FPC';
7
+ import { GasTokenContract } from '@aztec/noir-contracts.js/GasToken';
8
+ import { SchnorrAccountContractArtifact } from '@aztec/noir-contracts.js/SchnorrAccount';
9
+ import { SchnorrHardcodedAccountContractArtifact } from '@aztec/noir-contracts.js/SchnorrHardcodedAccount';
10
+ import { SchnorrSingleKeyAccountContractArtifact } from '@aztec/noir-contracts.js/SchnorrSingleKeyAccount';
11
+ import { TokenContractArtifact } from '@aztec/noir-contracts.js/Token';
4
12
 
5
13
  import { type Hex } from 'viem';
6
14
 
@@ -40,8 +48,8 @@ export function getConfigEnvVars(): SequencerClientConfig {
40
48
  SEQ_TX_POLLING_INTERVAL_MS,
41
49
  SEQ_MAX_TX_PER_BLOCK,
42
50
  SEQ_MIN_TX_PER_BLOCK,
43
- SEQ_FPC_CLASSES,
44
- SEQ_FPC_INSTANCES,
51
+ SEQ_ALLOWED_SETUP_FN,
52
+ SEQ_ALLOWED_TEARDOWN_FN,
45
53
  AVAILABILITY_ORACLE_CONTRACT_ADDRESS,
46
54
  ROLLUP_CONTRACT_ADDRESS,
47
55
  REGISTRY_CONTRACT_ADDRESS,
@@ -90,9 +98,87 @@ export function getConfigEnvVars(): SequencerClientConfig {
90
98
  feeRecipient: FEE_RECIPIENT ? AztecAddress.fromString(FEE_RECIPIENT) : undefined,
91
99
  acvmWorkingDirectory: ACVM_WORKING_DIRECTORY ? ACVM_WORKING_DIRECTORY : undefined,
92
100
  acvmBinaryPath: ACVM_BINARY_PATH ? ACVM_BINARY_PATH : undefined,
93
- allowedFeePaymentContractClasses: SEQ_FPC_CLASSES ? SEQ_FPC_CLASSES.split(',').map(Fr.fromString) : [],
94
- allowedFeePaymentContractInstances: SEQ_FPC_INSTANCES
95
- ? SEQ_FPC_INSTANCES.split(',').map(AztecAddress.fromString)
96
- : [],
101
+ allowedFunctionsInSetup: SEQ_ALLOWED_SETUP_FN
102
+ ? parseSequencerAllowList(SEQ_ALLOWED_SETUP_FN)
103
+ : getDefaultAllowedSetupFunctions(),
104
+ allowedFunctionsInTeardown: SEQ_ALLOWED_TEARDOWN_FN
105
+ ? parseSequencerAllowList(SEQ_ALLOWED_TEARDOWN_FN)
106
+ : getDefaultAllowedTeardownFunctions(),
97
107
  };
98
108
  }
109
+
110
+ function parseSequencerAllowList(value: string): AllowedFunction[] {
111
+ const entries: AllowedFunction[] = [];
112
+
113
+ if (!value) {
114
+ return entries;
115
+ }
116
+
117
+ for (const val of value.split(',')) {
118
+ const [identifierString, selectorString] = val.split(':');
119
+ const selector = FunctionSelector.fromString(selectorString);
120
+
121
+ if (identifierString.startsWith('0x')) {
122
+ entries.push({
123
+ address: AztecAddress.fromString(identifierString),
124
+ selector,
125
+ });
126
+ } else {
127
+ entries.push({
128
+ classId: Fr.fromString(identifierString),
129
+ selector,
130
+ });
131
+ }
132
+ }
133
+
134
+ return entries;
135
+ }
136
+
137
+ function getDefaultAllowedSetupFunctions(): AllowedFunction[] {
138
+ return [
139
+ {
140
+ classId: getContractClassFromArtifact(SchnorrAccountContractArtifact).id,
141
+ selector: FunctionSelector.fromSignature('approve_public_authwit(Field)'),
142
+ },
143
+ {
144
+ classId: getContractClassFromArtifact(SchnorrHardcodedAccountContractArtifact).id,
145
+ selector: FunctionSelector.fromSignature('approve_public_authwit(Field)'),
146
+ },
147
+ {
148
+ classId: getContractClassFromArtifact(SchnorrSingleKeyAccountContractArtifact).id,
149
+ selector: FunctionSelector.fromSignature('approve_public_authwit(Field)'),
150
+ },
151
+ {
152
+ classId: getContractClassFromArtifact(EcdsaAccountContractArtifact).id,
153
+ selector: FunctionSelector.fromSignature('approve_public_authwit(Field)'),
154
+ },
155
+
156
+ // needed for private transfers via FPC
157
+ {
158
+ classId: getContractClassFromArtifact(TokenContractArtifact).id,
159
+ selector: FunctionSelector.fromSignature('_increase_public_balance((Field),Field)'),
160
+ },
161
+
162
+ {
163
+ classId: getContractClassFromArtifact(FPCContract.artifact).id,
164
+ selector: FunctionSelector.fromSignature('prepare_fee((Field),Field,(Field),Field)'),
165
+ },
166
+ ];
167
+ }
168
+
169
+ function getDefaultAllowedTeardownFunctions(): AllowedFunction[] {
170
+ return [
171
+ {
172
+ classId: getContractClassFromArtifact(GasTokenContract.artifact).id,
173
+ selector: FunctionSelector.fromSignature('pay_fee(Field)'),
174
+ },
175
+ {
176
+ classId: getContractClassFromArtifact(FPCContract.artifact).id,
177
+ selector: FunctionSelector.fromSignature('pay_fee((Field),Field,(Field))'),
178
+ },
179
+ {
180
+ classId: getContractClassFromArtifact(FPCContract.artifact).id,
181
+ selector: FunctionSelector.fromSignature('pay_fee_with_shielded_rebate(Field,(Field),Field)'),
182
+ },
183
+ ];
184
+ }
@@ -1,4 +1,4 @@
1
- import { type AztecAddress, type EthAddress, GlobalVariables } from '@aztec/circuits.js';
1
+ import { type AztecAddress, type EthAddress, GasFees, GlobalVariables } from '@aztec/circuits.js';
2
2
  import { Fr } from '@aztec/foundation/fields';
3
3
  import { createDebugLogger } from '@aztec/foundation/log';
4
4
 
@@ -86,10 +86,11 @@ export class SimpleTestGlobalVariableBuilder implements GlobalVariableBuilder {
86
86
  lastTimestamp = new Fr(lastTimestamp.value + 1n);
87
87
  }
88
88
 
89
- this.log(
89
+ this.log.debug(
90
90
  `Built global variables for block ${blockNumber}: (${chainId}, ${version}, ${blockNumber}, ${lastTimestamp}, ${coinbase}, ${feeRecipient})`,
91
91
  );
92
92
 
93
- return new GlobalVariables(chainId, version, blockNumber, lastTimestamp, coinbase, feeRecipient);
93
+ const gasFees = GasFees.default();
94
+ return new GlobalVariables(chainId, version, blockNumber, lastTimestamp, coinbase, feeRecipient, gasFees);
94
95
  }
95
96
  }
package/src/index.ts CHANGED
@@ -5,4 +5,3 @@ export * 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
  export * from './global_variable_builder/index.js';
8
- export * from './sequencer/public_processor.js';