@aztec/sequencer-client 0.55.0 → 0.56.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 (62) hide show
  1. package/dest/block_builder/index.d.ts +4 -23
  2. package/dest/block_builder/index.d.ts.map +1 -1
  3. package/dest/block_builder/index.js +3 -40
  4. package/dest/block_builder/light.d.ts +30 -0
  5. package/dest/block_builder/light.d.ts.map +1 -0
  6. package/dest/block_builder/light.js +65 -0
  7. package/dest/block_builder/orchestrator.d.ts +26 -0
  8. package/dest/block_builder/orchestrator.d.ts.map +1 -0
  9. package/dest/block_builder/orchestrator.js +40 -0
  10. package/dest/client/sequencer-client.d.ts +3 -3
  11. package/dest/client/sequencer-client.d.ts.map +1 -1
  12. package/dest/client/sequencer-client.js +3 -3
  13. package/dest/global_variable_builder/global_builder.d.ts +2 -1
  14. package/dest/global_variable_builder/global_builder.d.ts.map +1 -1
  15. package/dest/global_variable_builder/global_builder.js +1 -1
  16. package/dest/index.d.ts +0 -4
  17. package/dest/index.d.ts.map +1 -1
  18. package/dest/index.js +1 -5
  19. package/dest/publisher/l1-publisher.d.ts +2 -1
  20. package/dest/publisher/l1-publisher.d.ts.map +1 -1
  21. package/dest/publisher/l1-publisher.js +6 -6
  22. package/dest/sequencer/sequencer.d.ts +5 -3
  23. package/dest/sequencer/sequencer.d.ts.map +1 -1
  24. package/dest/sequencer/sequencer.js +10 -7
  25. package/dest/tx_validator/gas_validator.d.ts +1 -0
  26. package/dest/tx_validator/gas_validator.d.ts.map +1 -1
  27. package/dest/tx_validator/gas_validator.js +7 -4
  28. package/dest/tx_validator/phases_validator.d.ts +1 -0
  29. package/dest/tx_validator/phases_validator.d.ts.map +1 -1
  30. package/dest/tx_validator/phases_validator.js +20 -20
  31. package/dest/tx_validator/test_utils.js +4 -4
  32. package/dest/tx_validator/tx_validator_factory.d.ts.map +1 -1
  33. package/dest/tx_validator/tx_validator_factory.js +6 -8
  34. package/package.json +19 -19
  35. package/src/block_builder/index.ts +5 -49
  36. package/src/block_builder/light.ts +111 -0
  37. package/src/block_builder/orchestrator.ts +51 -0
  38. package/src/client/sequencer-client.ts +5 -5
  39. package/src/global_variable_builder/global_builder.ts +2 -1
  40. package/src/index.ts +0 -4
  41. package/src/publisher/l1-publisher.ts +7 -7
  42. package/src/sequencer/sequencer.ts +9 -8
  43. package/src/tx_validator/gas_validator.ts +7 -3
  44. package/src/tx_validator/phases_validator.ts +5 -6
  45. package/src/tx_validator/test_utils.ts +3 -3
  46. package/src/tx_validator/tx_validator_factory.ts +7 -9
  47. package/dest/tx_validator/aggregate_tx_validator.d.ts +0 -7
  48. package/dest/tx_validator/aggregate_tx_validator.d.ts.map +0 -1
  49. package/dest/tx_validator/aggregate_tx_validator.js +0 -23
  50. package/dest/tx_validator/data_validator.d.ts +0 -6
  51. package/dest/tx_validator/data_validator.d.ts.map +0 -1
  52. package/dest/tx_validator/data_validator.js +0 -47
  53. package/dest/tx_validator/double_spend_validator.d.ts +0 -11
  54. package/dest/tx_validator/double_spend_validator.d.ts.map +0 -1
  55. package/dest/tx_validator/double_spend_validator.js +0 -50
  56. package/dest/tx_validator/metadata_validator.d.ts +0 -8
  57. package/dest/tx_validator/metadata_validator.d.ts.map +0 -1
  58. package/dest/tx_validator/metadata_validator.js +0 -50
  59. package/src/tx_validator/aggregate_tx_validator.ts +0 -24
  60. package/src/tx_validator/data_validator.ts +0 -61
  61. package/src/tx_validator/double_spend_validator.ts +0 -63
  62. package/src/tx_validator/metadata_validator.ts +0 -60
@@ -0,0 +1,51 @@
1
+ import { TestCircuitProver } from '@aztec/bb-prover';
2
+ import {
3
+ type BlockSimulator,
4
+ type MerkleTreeOperations,
5
+ type ProcessedTx,
6
+ type ProvingTicket,
7
+ type SimulationBlockResult,
8
+ } from '@aztec/circuit-types';
9
+ import { type Fr, type GlobalVariables } from '@aztec/circuits.js';
10
+ import { ProvingOrchestrator } from '@aztec/prover-client/orchestrator';
11
+ import { type SimulationProvider } from '@aztec/simulator';
12
+ import { type TelemetryClient } from '@aztec/telemetry-client';
13
+ import { NoopTelemetryClient } from '@aztec/telemetry-client/noop';
14
+
15
+ /**
16
+ * Implements a block simulator using a test circuit prover under the hood, which just simulates circuits and outputs empty proofs.
17
+ * This class is temporary and should die once we switch from tx effects to tx objects submissions, since sequencers won't have
18
+ * the need to create L2 block headers to submit to L1. When we do that, we should also remove the references to the
19
+ * prover-client and bb-prover packages from this package.
20
+ */
21
+ export class OrchestratorBlockBuilder implements BlockSimulator {
22
+ private orchestrator: ProvingOrchestrator;
23
+ constructor(db: MerkleTreeOperations, simulationProvider: SimulationProvider, telemetry: TelemetryClient) {
24
+ const testProver = new TestCircuitProver(telemetry, simulationProvider);
25
+ this.orchestrator = new ProvingOrchestrator(db, testProver, telemetry);
26
+ }
27
+
28
+ startNewBlock(numTxs: number, globalVariables: GlobalVariables, l1ToL2Messages: Fr[]): Promise<ProvingTicket> {
29
+ return this.orchestrator.startNewBlock(numTxs, globalVariables, l1ToL2Messages);
30
+ }
31
+ cancel(): void {
32
+ this.orchestrator.cancel();
33
+ }
34
+ finaliseBlock(): Promise<SimulationBlockResult> {
35
+ return this.orchestrator.finaliseBlock();
36
+ }
37
+ setBlockCompleted(): Promise<void> {
38
+ return this.orchestrator.setBlockCompleted();
39
+ }
40
+ addNewTx(tx: ProcessedTx): Promise<void> {
41
+ return this.orchestrator.addNewTx(tx);
42
+ }
43
+ }
44
+
45
+ export class OrchestratorBlockBuilderFactory {
46
+ constructor(private simulationProvider: SimulationProvider, private telemetry?: TelemetryClient) {}
47
+
48
+ create(db: MerkleTreeOperations): BlockSimulator {
49
+ return new OrchestratorBlockBuilder(db, this.simulationProvider, this.telemetry ?? new NoopTelemetryClient());
50
+ }
51
+ }
@@ -1,12 +1,12 @@
1
- import { type L1ToL2MessageSource, type L2BlockSource } from '@aztec/circuit-types';
1
+ import { type L1ToL2MessageSource, type L2BlockSource, type WorldStateSynchronizer } from '@aztec/circuit-types';
2
+ import { type EthAddress } from '@aztec/foundation/eth-address';
2
3
  import { type P2P } from '@aztec/p2p';
3
4
  import { PublicProcessorFactory, type SimulationProvider } from '@aztec/simulator';
4
5
  import { type TelemetryClient } from '@aztec/telemetry-client';
5
6
  import { type ContractDataSource } from '@aztec/types/contracts';
6
7
  import { type ValidatorClient } from '@aztec/validator-client';
7
- import { type WorldStateSynchronizer } from '@aztec/world-state';
8
8
 
9
- import { BlockBuilderFactory } from '../block_builder/index.js';
9
+ import { LightweightBlockBuilderFactory } from '../block_builder/index.js';
10
10
  import { type SequencerClientConfig } from '../config.js';
11
11
  import { GlobalVariableBuilder } from '../global_variable_builder/index.js';
12
12
  import { L1Publisher } from '../publisher/index.js';
@@ -60,7 +60,7 @@ export class SequencerClient {
60
60
  globalsBuilder,
61
61
  p2pClient,
62
62
  worldStateSynchronizer,
63
- new BlockBuilderFactory(simulationProvider, telemetryClient),
63
+ new LightweightBlockBuilderFactory(telemetryClient),
64
64
  l2BlockSource,
65
65
  l1ToL2MessageSource,
66
66
  publicProcessorFactory,
@@ -100,7 +100,7 @@ export class SequencerClient {
100
100
  this.sequencer.restart();
101
101
  }
102
102
 
103
- get coinbase() {
103
+ get coinbase(): EthAddress {
104
104
  return this.sequencer.coinbase;
105
105
  }
106
106
 
@@ -1,3 +1,4 @@
1
+ import { type GlobalVariableBuilder as GlobalVariableBuilderInterface } from '@aztec/circuit-types';
1
2
  import {
2
3
  type AztecAddress,
3
4
  ETHEREUM_SLOT_DURATION,
@@ -24,7 +25,7 @@ import type * as chains from 'viem/chains';
24
25
  /**
25
26
  * Simple global variables builder.
26
27
  */
27
- export class GlobalVariableBuilder {
28
+ export class GlobalVariableBuilder implements GlobalVariableBuilderInterface {
28
29
  private log = createDebugLogger('aztec:sequencer:global_variable_builder');
29
30
 
30
31
  private rollupContract: GetContractReturnType<typeof RollupAbi, PublicClient<HttpTransport, chains.Chain>>;
package/src/index.ts CHANGED
@@ -2,10 +2,6 @@ export * from './client/index.js';
2
2
  export * from './config.js';
3
3
  export * from './publisher/index.js';
4
4
  export * from './sequencer/index.js';
5
- export * from './tx_validator/aggregate_tx_validator.js';
6
- export * from './tx_validator/data_validator.js';
7
- export * from './tx_validator/double_spend_validator.js';
8
- export * from './tx_validator/metadata_validator.js';
9
5
 
10
6
  // Used by the node to simulate public parts of transactions. Should these be moved to a shared library?
11
7
  export * from './global_variable_builder/index.js';
@@ -1,8 +1,8 @@
1
- import { type L2Block, type Signature, type TxHash } from '@aztec/circuit-types';
2
- import { getHashedSignaturePayload } from '@aztec/circuit-types';
1
+ import { ConsensusPayload, type L2Block, type TxHash, getHashedSignaturePayload } from '@aztec/circuit-types';
3
2
  import { type L1PublishBlockStats, type L1PublishProofStats } from '@aztec/circuit-types/stats';
4
3
  import { ETHEREUM_SLOT_DURATION, EthAddress, type Header, type Proof } from '@aztec/circuits.js';
5
4
  import { createEthereumChain } from '@aztec/ethereum';
5
+ import { type Signature } from '@aztec/foundation/eth-signature';
6
6
  import { type Fr } from '@aztec/foundation/fields';
7
7
  import { createDebugLogger } from '@aztec/foundation/log';
8
8
  import { serializeToBuffer } from '@aztec/foundation/serialize';
@@ -236,7 +236,9 @@ export class L1Publisher {
236
236
  blockHash: block.hash().toString(),
237
237
  };
238
238
 
239
- const digest = getHashedSignaturePayload(block.archive.root, txHashes ?? []);
239
+ const consensusPayload = new ConsensusPayload(block.header, block.archive.root, txHashes ?? []);
240
+
241
+ const digest = getHashedSignaturePayload(consensusPayload);
240
242
  const proposeTxArgs = {
241
243
  header: block.header.toBuffer(),
242
244
  archive: block.archive.root.toBuffer(),
@@ -255,7 +257,7 @@ export class L1Publisher {
255
257
  // By simulation issue, I mean the fact that the block.timestamp is equal to the last block, not the next, which
256
258
  // make time consistency checks break.
257
259
  await this.validateBlockForSubmission(block.header, {
258
- digest,
260
+ digest: digest.toBuffer(),
259
261
  signatures: attestations ?? [],
260
262
  });
261
263
 
@@ -405,14 +407,12 @@ export class L1Publisher {
405
407
  }),
406
408
  });
407
409
 
408
- const min = (a: bigint, b: bigint) => (a > b ? b : a);
409
-
410
410
  // @note We perform this guesstimate instead of the usual `gasEstimate` since
411
411
  // viem will use the current state to simulate against, which means that
412
412
  // we will fail estimation in the case where we are simulating for the
413
413
  // first ethereum block within our slot (as current time is not in the
414
414
  // slot yet).
415
- const gasGuesstimate = min(computeTxsEffectsHashGas + L1Publisher.PROPOSE_GAS_GUESS, 15_000_000n);
415
+ const gasGuesstimate = computeTxsEffectsHashGas + L1Publisher.PROPOSE_GAS_GUESS;
416
416
 
417
417
  const attestations = encodedData.attestations
418
418
  ? encodedData.attestations.map(attest => attest.toViemSignature())
@@ -4,22 +4,24 @@ import {
4
4
  type L2Block,
5
5
  type L2BlockSource,
6
6
  type ProcessedTx,
7
- Signature,
8
7
  Tx,
9
8
  type TxHash,
10
9
  type TxValidator,
10
+ type WorldStateStatus,
11
+ type WorldStateSynchronizer,
11
12
  } from '@aztec/circuit-types';
12
13
  import { type AllowedElement, BlockProofError, PROVING_STATUS } from '@aztec/circuit-types/interfaces';
13
14
  import { type L2BlockBuiltStats } from '@aztec/circuit-types/stats';
14
15
  import {
15
16
  AppendOnlyTreeSnapshot,
16
- AztecAddress,
17
17
  ContentCommitment,
18
- EthAddress,
19
18
  GENESIS_ARCHIVE_ROOT,
20
19
  Header,
21
20
  StateReference,
22
21
  } from '@aztec/circuits.js';
22
+ import { AztecAddress } from '@aztec/foundation/aztec-address';
23
+ import { EthAddress } from '@aztec/foundation/eth-address';
24
+ import { Signature } from '@aztec/foundation/eth-signature';
23
25
  import { Fr } from '@aztec/foundation/fields';
24
26
  import { createDebugLogger } from '@aztec/foundation/log';
25
27
  import { RunningPromise } from '@aztec/foundation/running-promise';
@@ -28,7 +30,6 @@ import { type P2P } from '@aztec/p2p';
28
30
  import { type PublicProcessorFactory } from '@aztec/simulator';
29
31
  import { Attributes, type TelemetryClient, type Tracer, trackSpan } from '@aztec/telemetry-client';
30
32
  import { type ValidatorClient } from '@aztec/validator-client';
31
- import { type WorldStateStatus, type WorldStateSynchronizer } from '@aztec/world-state';
32
33
 
33
34
  import { type BlockBuilderFactory } from '../block_builder/index.js';
34
35
  import { type GlobalVariableBuilder } from '../global_variable_builder/global_builder.js';
@@ -442,7 +443,7 @@ export class Sequencer {
442
443
  processedTxsCount: processedTxs.length,
443
444
  })
444
445
  ) {
445
- blockBuilder.cancelBlock();
446
+ blockBuilder.cancel();
446
447
  throw new Error('Should not propose the block');
447
448
  }
448
449
 
@@ -536,7 +537,7 @@ export class Sequencer {
536
537
  this.log.verbose(`Collected attestations from validators, number of attestations: ${attestations.length}`);
537
538
 
538
539
  // note: the smart contract requires that the signatures are provided in the order of the committee
539
- return await orderAttestations(attestations, committee);
540
+ return orderAttestations(attestations, committee);
540
541
  }
541
542
 
542
543
  /**
@@ -665,12 +666,12 @@ export enum SequencerState {
665
666
  *
666
667
  * @todo: perform this logic within the memory attestation store instead?
667
668
  */
668
- async function orderAttestations(attestations: BlockAttestation[], orderAddresses: EthAddress[]): Promise<Signature[]> {
669
+ function orderAttestations(attestations: BlockAttestation[], orderAddresses: EthAddress[]): Signature[] {
669
670
  // Create a map of sender addresses to BlockAttestations
670
671
  const attestationMap = new Map<string, BlockAttestation>();
671
672
 
672
673
  for (const attestation of attestations) {
673
- const sender = await attestation.getSender();
674
+ const sender = attestation.getSender();
674
675
  if (sender) {
675
676
  attestationMap.set(sender.toString(), attestation);
676
677
  }
@@ -1,8 +1,8 @@
1
- import { PublicKernelType, type Tx, type TxValidator } from '@aztec/circuit-types';
1
+ import { PublicKernelPhase, type Tx, type TxValidator } from '@aztec/circuit-types';
2
2
  import { type AztecAddress, type Fr } from '@aztec/circuits.js';
3
3
  import { createDebugLogger } from '@aztec/foundation/log';
4
4
  import { FeeJuiceArtifact } from '@aztec/protocol-contracts/fee-juice';
5
- import { AbstractPhaseManager, computeFeePayerBalanceStorageSlot } from '@aztec/simulator';
5
+ import { EnqueuedCallsProcessor, computeFeePayerBalanceStorageSlot } from '@aztec/simulator';
6
6
 
7
7
  /** Provides a view into public contract state */
8
8
  export interface PublicStateSource {
@@ -34,6 +34,10 @@ export class GasTxValidator implements TxValidator<Tx> {
34
34
  return [validTxs, invalidTxs];
35
35
  }
36
36
 
37
+ validateTx(tx: Tx): Promise<boolean> {
38
+ return this.#validateTxFee(tx);
39
+ }
40
+
37
41
  async #validateTxFee(tx: Tx): Promise<boolean> {
38
42
  const feePayer = tx.data.feePayer;
39
43
  // TODO(@spalladino) Eventually remove the is_zero condition as we should always charge fees to every tx
@@ -55,7 +59,7 @@ export class GasTxValidator implements TxValidator<Tx> {
55
59
  );
56
60
 
57
61
  // If there is a claim in this tx that increases the fee payer balance in Fee Juice, add it to balance
58
- const { [PublicKernelType.SETUP]: setupFns } = AbstractPhaseManager.extractEnqueuedPublicCallsByPhase(tx);
62
+ const setupFns = EnqueuedCallsProcessor.getExecutionRequestsByPhase(tx, PublicKernelPhase.SETUP);
59
63
  const claimFunctionCall = setupFns.find(
60
64
  fn =>
61
65
  fn.contractAddress.equals(this.#feeJuiceAddress) &&
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  type AllowedElement,
3
3
  type PublicExecutionRequest,
4
- PublicKernelType,
4
+ PublicKernelPhase,
5
5
  Tx,
6
6
  type TxValidator,
7
7
  } from '@aztec/circuit-types';
8
8
  import { createDebugLogger } from '@aztec/foundation/log';
9
- import { AbstractPhaseManager, ContractsDataSourcePublicDB } from '@aztec/simulator';
9
+ import { ContractsDataSourcePublicDB, EnqueuedCallsProcessor } from '@aztec/simulator';
10
10
  import { type ContractDataSource } from '@aztec/types/contracts';
11
11
 
12
12
  export class PhasesTxValidator implements TxValidator<Tx> {
@@ -27,7 +27,7 @@ export class PhasesTxValidator implements TxValidator<Tx> {
27
27
  // which is what we're trying to do as part of the current txs.
28
28
  await this.contractDataSource.addNewContracts(tx);
29
29
 
30
- if (await this.#validateTx(tx)) {
30
+ if (await this.validateTx(tx)) {
31
31
  validTxs.push(tx);
32
32
  } else {
33
33
  invalidTxs.push(tx);
@@ -39,14 +39,13 @@ export class PhasesTxValidator implements TxValidator<Tx> {
39
39
  return Promise.resolve([validTxs, invalidTxs]);
40
40
  }
41
41
 
42
- async #validateTx(tx: Tx): Promise<boolean> {
42
+ async validateTx(tx: Tx): Promise<boolean> {
43
43
  if (!tx.data.forPublic) {
44
44
  this.#log.debug(`Tx ${Tx.getHash(tx)} does not contain enqueued public functions. Skipping phases validation.`);
45
45
  return true;
46
46
  }
47
47
 
48
- const { [PublicKernelType.SETUP]: setupFns } = AbstractPhaseManager.extractEnqueuedPublicCallsByPhase(tx);
49
-
48
+ const setupFns = EnqueuedCallsProcessor.getExecutionRequestsByPhase(tx, PublicKernelPhase.SETUP);
50
49
  for (const setupFn of setupFns) {
51
50
  if (!(await this.isOnAllowList(setupFn, this.setupAllowList))) {
52
51
  this.#log.warn(
@@ -32,9 +32,9 @@ function patchFn(
32
32
  tx.enqueuedPublicFunctionCalls[index] = fn;
33
33
 
34
34
  const request = tx.data.forPublic![where].publicCallStack[index];
35
- request.item.contractAddress = fn.contractAddress;
36
- request.item.callContext = fn.callContext;
37
- request.item.argsHash = computeVarArgsHash(fn.args);
35
+ request.contractAddress = fn.contractAddress;
36
+ request.callContext = fn.callContext;
37
+ request.argsHash = computeVarArgsHash(fn.args);
38
38
  tx.data.forPublic![where].publicCallStack[index] = request;
39
39
 
40
40
  return {
@@ -1,15 +1,12 @@
1
1
  import { type AllowedElement, type ProcessedTx, type Tx, type TxValidator } from '@aztec/circuit-types';
2
2
  import { type GlobalVariables } from '@aztec/circuits.js';
3
+ import { AggregateTxValidator, DataTxValidator, DoubleSpendTxValidator, MetadataTxValidator } from '@aztec/p2p';
3
4
  import { FeeJuiceAddress } from '@aztec/protocol-contracts/fee-juice';
4
- import { WorldStateDB, WorldStatePublicDB } from '@aztec/simulator';
5
+ import { WorldStateDB } from '@aztec/simulator';
5
6
  import { type ContractDataSource } from '@aztec/types/contracts';
6
7
  import { type MerkleTreeOperations } from '@aztec/world-state';
7
8
 
8
- import { AggregateTxValidator } from './aggregate_tx_validator.js';
9
- import { DataTxValidator } from './data_validator.js';
10
- import { DoubleSpendTxValidator } from './double_spend_validator.js';
11
9
  import { GasTxValidator } from './gas_validator.js';
12
- import { MetadataTxValidator } from './metadata_validator.js';
13
10
  import { PhasesTxValidator } from './phases_validator.js';
14
11
 
15
12
  export class TxValidatorFactory {
@@ -20,16 +17,17 @@ export class TxValidatorFactory {
20
17
  ) {}
21
18
 
22
19
  validatorForNewTxs(globalVariables: GlobalVariables, setupAllowList: AllowedElement[]): TxValidator<Tx> {
20
+ const worldStateDB = new WorldStateDB(this.merkleTreeDb, this.contractDataSource);
23
21
  return new AggregateTxValidator(
24
22
  new DataTxValidator(),
25
- new MetadataTxValidator(globalVariables),
26
- new DoubleSpendTxValidator(new WorldStateDB(this.merkleTreeDb)),
23
+ new MetadataTxValidator(globalVariables.chainId, globalVariables.blockNumber),
24
+ new DoubleSpendTxValidator(worldStateDB),
27
25
  new PhasesTxValidator(this.contractDataSource, setupAllowList),
28
- new GasTxValidator(new WorldStatePublicDB(this.merkleTreeDb), FeeJuiceAddress, this.enforceFees),
26
+ new GasTxValidator(worldStateDB, FeeJuiceAddress, this.enforceFees),
29
27
  );
30
28
  }
31
29
 
32
30
  validatorForProcessedTxs(): TxValidator<ProcessedTx> {
33
- return new DoubleSpendTxValidator(new WorldStateDB(this.merkleTreeDb));
31
+ return new DoubleSpendTxValidator(new WorldStateDB(this.merkleTreeDb, this.contractDataSource));
34
32
  }
35
33
  }
@@ -1,7 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,23 +0,0 @@
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
@@ -1,6 +0,0 @@
1
- import { Tx, type TxValidator } from '@aztec/circuit-types';
2
- export declare class DataTxValidator implements TxValidator<Tx> {
3
- #private;
4
- validateTxs(txs: Tx[]): Promise<[validTxs: Tx[], invalidTxs: Tx[]]>;
5
- }
6
- //# sourceMappingURL=data_validator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"data_validator.d.ts","sourceRoot":"","sources":["../../src/tx_validator/data_validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAG5D,qBAAa,eAAgB,YAAW,WAAW,CAAC,EAAE,CAAC;;IAGrD,WAAW,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;CAsDpE"}
@@ -1,47 +0,0 @@
1
- var _DataTxValidator_instances, _DataTxValidator_log, _DataTxValidator_hasCorrectExecutionRequests;
2
- import { __classPrivateFieldGet } from "tslib";
3
- import { Tx } from '@aztec/circuit-types';
4
- import { createDebugLogger } from '@aztec/foundation/log';
5
- export class DataTxValidator {
6
- constructor() {
7
- _DataTxValidator_instances.add(this);
8
- _DataTxValidator_log.set(this, createDebugLogger('aztec:sequencer:tx_validator:tx_data'));
9
- // TODO: Check logs.
10
- }
11
- validateTxs(txs) {
12
- const validTxs = [];
13
- const invalidTxs = [];
14
- for (const tx of txs) {
15
- if (!__classPrivateFieldGet(this, _DataTxValidator_instances, "m", _DataTxValidator_hasCorrectExecutionRequests).call(this, tx)) {
16
- invalidTxs.push(tx);
17
- continue;
18
- }
19
- validTxs.push(tx);
20
- }
21
- return Promise.resolve([validTxs, invalidTxs]);
22
- }
23
- }
24
- _DataTxValidator_log = new WeakMap(), _DataTxValidator_instances = new WeakSet(), _DataTxValidator_hasCorrectExecutionRequests = function _DataTxValidator_hasCorrectExecutionRequests(tx) {
25
- const callRequests = [
26
- ...tx.data.getRevertiblePublicCallRequests(),
27
- ...tx.data.getNonRevertiblePublicCallRequests(),
28
- ];
29
- if (callRequests.length !== tx.enqueuedPublicFunctionCalls.length) {
30
- __classPrivateFieldGet(this, _DataTxValidator_log, "f").warn(`Rejecting tx ${Tx.getHash(tx)} because of mismatch number of execution requests for public calls. Expected ${callRequests.length}. Got ${tx.enqueuedPublicFunctionCalls.length}.`);
31
- return false;
32
- }
33
- const invalidExecutionRequestIndex = tx.enqueuedPublicFunctionCalls.findIndex((execRequest, i) => !execRequest.isForCallRequest(callRequests[i]));
34
- if (invalidExecutionRequestIndex !== -1) {
35
- __classPrivateFieldGet(this, _DataTxValidator_log, "f").warn(`Rejecting tx ${Tx.getHash(tx)} because of incorrect execution requests for public call at index ${invalidExecutionRequestIndex}.`);
36
- return false;
37
- }
38
- const teardownCallRequest = tx.data.getTeardownPublicCallRequest();
39
- const isInvalidTeardownExecutionRequest = (!teardownCallRequest && !tx.publicTeardownFunctionCall.isEmpty()) ||
40
- (teardownCallRequest && !tx.publicTeardownFunctionCall.isForCallRequest(teardownCallRequest));
41
- if (isInvalidTeardownExecutionRequest) {
42
- __classPrivateFieldGet(this, _DataTxValidator_log, "f").warn(`Rejecting tx ${Tx.getHash(tx)} because of incorrect teardown execution requests.`);
43
- return false;
44
- }
45
- return true;
46
- };
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YV92YWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHhfdmFsaWRhdG9yL2RhdGFfdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFFLEVBQUUsRUFBb0IsTUFBTSxzQkFBc0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxNQUFNLE9BQU8sZUFBZTtJQUE1Qjs7UUFDRSwrQkFBTyxpQkFBaUIsQ0FBQyxzQ0FBc0MsQ0FBQyxFQUFDO1FBdURqRSxvQkFBb0I7SUFDdEIsQ0FBQztJQXREQyxXQUFXLENBQUMsR0FBUztRQUNuQixNQUFNLFFBQVEsR0FBUyxFQUFFLENBQUM7UUFDMUIsTUFBTSxVQUFVLEdBQVMsRUFBRSxDQUFDO1FBQzVCLEtBQUssTUFBTSxFQUFFLElBQUksR0FBRyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLHVCQUFBLElBQUksZ0ZBQTZCLE1BQWpDLElBQUksRUFBOEIsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDM0MsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDcEIsU0FBUztZQUNYLENBQUM7WUFFRCxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BCLENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDO0NBeUNGO3VMQXZDOEIsRUFBTTtJQUNqQyxNQUFNLFlBQVksR0FBRztRQUNuQixHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsK0JBQStCLEVBQUU7UUFDNUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGtDQUFrQyxFQUFFO0tBQ2hELENBQUM7SUFDRixJQUFJLFlBQVksQ0FBQyxNQUFNLEtBQUssRUFBRSxDQUFDLDJCQUEyQixDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2xFLHVCQUFBLElBQUksNEJBQUssQ0FBQyxJQUFJLENBQ1osZ0JBQWdCLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLGdGQUM1QixZQUFZLENBQUMsTUFDZixTQUFTLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQyxNQUFNLEdBQUcsQ0FDbEQsQ0FBQztRQUNGLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sNEJBQTRCLEdBQUcsRUFBRSxDQUFDLDJCQUEyQixDQUFDLFNBQVMsQ0FDM0UsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDbkUsQ0FBQztJQUNGLElBQUksNEJBQTRCLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN4Qyx1QkFBQSxJQUFJLDRCQUFLLENBQUMsSUFBSSxDQUNaLGdCQUFnQixFQUFFLENBQUMsT0FBTyxDQUN4QixFQUFFLENBQ0gscUVBQXFFLDRCQUE0QixHQUFHLENBQ3RHLENBQUM7UUFDRixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxNQUFNLG1CQUFtQixHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztJQUNuRSxNQUFNLGlDQUFpQyxHQUNyQyxDQUFDLENBQUMsbUJBQW1CLElBQUksQ0FBQyxFQUFFLENBQUMsMEJBQTBCLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbEUsQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7SUFDaEcsSUFBSSxpQ0FBaUMsRUFBRSxDQUFDO1FBQ3RDLHVCQUFBLElBQUksNEJBQUssQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLG9EQUFvRCxDQUFDLENBQUM7UUFDbkcsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIn0=
@@ -1,11 +0,0 @@
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
@@ -1 +0,0 @@
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;CA8CvE"}
@@ -1,50 +0,0 @@
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 nullifiers = tx.data.getNonEmptyNullifiers().map(x => x.toBigInt());
29
- // Ditch this tx if it has repeated nullifiers
30
- const uniqueNullifiers = new Set(nullifiers);
31
- if (uniqueNullifiers.size !== nullifiers.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 nullifiers) {
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(nullifiers.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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG91YmxlX3NwZW5kX3ZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eF92YWxpZGF0b3IvZG91YmxlX3NwZW5kX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBYyxFQUFFLEVBQW9CLE1BQU0sc0JBQXNCLENBQUM7QUFDeEUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBTTFELE1BQU0sT0FBTyxzQkFBc0I7SUFJakMsWUFBWSxlQUFnQzs7UUFINUMsc0NBQU8saUJBQWlCLENBQUMsOENBQThDLENBQUMsRUFBQztRQUN6RSwwREFBa0M7UUFHaEMsdUJBQUEsSUFBSSwyQ0FBb0IsZUFBZSxNQUFBLENBQUM7SUFDMUMsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBUTtRQUN4QixNQUFNLFFBQVEsR0FBUSxFQUFFLENBQUM7UUFDekIsTUFBTSxVQUFVLEdBQVEsRUFBRSxDQUFDO1FBQzNCLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUU5QyxLQUFLLE1BQU0sRUFBRSxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxDQUFDLE1BQU0sdUJBQUEsSUFBSSxtRkFBa0IsTUFBdEIsSUFBSSxFQUFtQixFQUFFLEVBQUUsbUJBQW1CLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQzdELFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3BCLFNBQVM7WUFDWCxDQUFDO1lBRUQsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwQixDQUFDO1FBRUQsT0FBTyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNoQyxDQUFDO0NBK0JGO29NQTdCQyxLQUFLLG1EQUFtQixFQUFTLEVBQUUsbUJBQWdDO0lBQ2pFLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUUxRSw4Q0FBOEM7SUFDOUMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM3QyxJQUFJLGdCQUFnQixDQUFDLElBQUksS0FBSyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDaEQsdUJBQUEsSUFBSSxtQ0FBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsb0NBQW9DLENBQUMsQ0FBQztRQUNuRixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ25DLElBQUksbUJBQW1CLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDdkMsdUJBQUEsSUFBSSxtQ0FBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsOENBQThDLENBQUMsQ0FBQztZQUM3RixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyx1QkFBQSxJQUFJLCtDQUFpQixDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXBILE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQztJQUMxRSxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQ2xCLHVCQUFBLElBQUksbUNBQUssQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLGtEQUFrRCxDQUFDLENBQUM7UUFDakcsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIn0=
@@ -1,8 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,50 +0,0 @@
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==
@@ -1,24 +0,0 @@
1
- import { type ProcessedTx, type Tx, type TxValidator } from '@aztec/circuit-types';
2
-
3
- export class AggregateTxValidator<T extends Tx | ProcessedTx> implements TxValidator<T> {
4
- #validators: TxValidator<T>[];
5
- constructor(...validators: TxValidator<T>[]) {
6
- if (validators.length === 0) {
7
- throw new Error('At least one validator must be provided');
8
- }
9
-
10
- this.#validators = validators;
11
- }
12
-
13
- async validateTxs(txs: T[]): Promise<[validTxs: T[], invalidTxs: T[]]> {
14
- const invalidTxs: T[] = [];
15
- let txPool = txs;
16
- for (const validator of this.#validators) {
17
- const [valid, invalid] = await validator.validateTxs(txPool);
18
- invalidTxs.push(...invalid);
19
- txPool = valid;
20
- }
21
-
22
- return [txPool, invalidTxs];
23
- }
24
- }