@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
@@ -1,174 +0,0 @@
1
- var _TxValidator_instances, _a, _TxValidator_log, _TxValidator_globalVariables, _TxValidator_nullifierSource, _TxValidator_publicStateSource, _TxValidator_contractDataSource, _TxValidator_feeValidationConfig, _TxValidator_validateMetadata, _TxValidator_validateNullifiers, _TxValidator_validateGasBalance, _TxValidator_validateMaxBlockNumber, _TxValidator_validateFee, _TxValidator_extractFeeExecutionCall;
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 { getCanonicalGasTokenAddress } from '@aztec/protocol-contracts/gas-token';
8
- import { AbstractPhaseManager, PublicKernelPhase } from './abstract_phase_manager.js';
9
- // prefer symbols over booleans so it's clear what the intention is
10
- // vs returning true/false is tied to the function name
11
- // eg. isDoubleSpend vs isValidChain assign different meanings to booleans
12
- const VALID_TX = Symbol('valid_tx');
13
- const INVALID_TX = Symbol('invalid_tx');
14
- // the storage slot associated with "storage.balances"
15
- const GAS_TOKEN_BALANCES_SLOT = new Fr(1);
16
- export class TxValidator {
17
- constructor(nullifierSource, publicStateSource, contractDataSource, globalVariables, feeValidationConfig, log = createDebugLogger('aztec:sequencer:tx_validator')) {
18
- _TxValidator_instances.add(this);
19
- _TxValidator_log.set(this, void 0);
20
- _TxValidator_globalVariables.set(this, void 0);
21
- _TxValidator_nullifierSource.set(this, void 0);
22
- _TxValidator_publicStateSource.set(this, void 0);
23
- _TxValidator_contractDataSource.set(this, void 0);
24
- _TxValidator_feeValidationConfig.set(this, void 0);
25
- __classPrivateFieldSet(this, _TxValidator_nullifierSource, nullifierSource, "f");
26
- __classPrivateFieldSet(this, _TxValidator_publicStateSource, publicStateSource, "f");
27
- __classPrivateFieldSet(this, _TxValidator_contractDataSource, contractDataSource, "f");
28
- __classPrivateFieldSet(this, _TxValidator_globalVariables, globalVariables, "f");
29
- __classPrivateFieldSet(this, _TxValidator_feeValidationConfig, feeValidationConfig, "f");
30
- __classPrivateFieldSet(this, _TxValidator_log, log, "f");
31
- }
32
- /**
33
- * Validates a list of transactions.
34
- * @param txs - The transactions to validate.
35
- * @returns A tuple of valid and invalid transactions.
36
- */
37
- async validateTxs(txs) {
38
- const validTxs = [];
39
- const invalidTxs = [];
40
- const thisBlockNullifiers = new Set();
41
- for (const tx of txs) {
42
- if (__classPrivateFieldGet(this, _TxValidator_instances, "m", _TxValidator_validateMetadata).call(this, tx) === INVALID_TX) {
43
- invalidTxs.push(tx);
44
- continue;
45
- }
46
- if ((await __classPrivateFieldGet(this, _TxValidator_instances, "m", _TxValidator_validateNullifiers).call(this, tx, thisBlockNullifiers)) === INVALID_TX) {
47
- invalidTxs.push(tx);
48
- continue;
49
- }
50
- // skip already processed transactions
51
- if (tx instanceof Tx) {
52
- if ((await __classPrivateFieldGet(this, _TxValidator_instances, "m", _TxValidator_validateFee).call(this, tx)) === INVALID_TX) {
53
- invalidTxs.push(tx);
54
- continue;
55
- }
56
- if ((await __classPrivateFieldGet(this, _TxValidator_instances, "m", _TxValidator_validateGasBalance).call(this, tx)) === INVALID_TX) {
57
- invalidTxs.push(tx);
58
- continue;
59
- }
60
- }
61
- if (__classPrivateFieldGet(this, _TxValidator_instances, "m", _TxValidator_validateMaxBlockNumber).call(this, tx) === INVALID_TX) {
62
- invalidTxs.push(tx);
63
- continue;
64
- }
65
- validTxs.push(tx);
66
- }
67
- return [validTxs, invalidTxs];
68
- }
69
- }
70
- _a = TxValidator, _TxValidator_log = new WeakMap(), _TxValidator_globalVariables = new WeakMap(), _TxValidator_nullifierSource = new WeakMap(), _TxValidator_publicStateSource = new WeakMap(), _TxValidator_contractDataSource = new WeakMap(), _TxValidator_feeValidationConfig = new WeakMap(), _TxValidator_instances = new WeakSet(), _TxValidator_validateMetadata = function _TxValidator_validateMetadata(tx) {
71
- if (!tx.data.constants.txContext.chainId.equals(__classPrivateFieldGet(this, _TxValidator_globalVariables, "f").chainId)) {
72
- __classPrivateFieldGet(this, _TxValidator_log, "f").warn(`Rejecting tx ${Tx.getHash(tx)} because of incorrect chain ${tx.data.constants.txContext.chainId.toString()} != ${__classPrivateFieldGet(this, _TxValidator_globalVariables, "f").chainId.toString()}`);
73
- return INVALID_TX;
74
- }
75
- return VALID_TX;
76
- }, _TxValidator_validateNullifiers =
77
- /**
78
- * It looks for duplicate nullifiers:
79
- * - in the same transaction
80
- * - in the same block
81
- * - in the nullifier tree
82
- *
83
- * Nullifiers prevent double spends in a private context.
84
- *
85
- * @param tx - The transaction.
86
- * @returns Whether this is a problematic double spend that the L1 contract would reject.
87
- */
88
- async function _TxValidator_validateNullifiers(tx, thisBlockNullifiers) {
89
- const newNullifiers = tx.data.getNonEmptyNullifiers().map(x => x.toBigInt());
90
- // Ditch this tx if it has repeated nullifiers
91
- const uniqueNullifiers = new Set(newNullifiers);
92
- if (uniqueNullifiers.size !== newNullifiers.length) {
93
- __classPrivateFieldGet(this, _TxValidator_log, "f").warn(`Rejecting tx ${Tx.getHash(tx)} for emitting duplicate nullifiers`);
94
- return INVALID_TX;
95
- }
96
- for (const nullifier of newNullifiers) {
97
- if (thisBlockNullifiers.has(nullifier)) {
98
- __classPrivateFieldGet(this, _TxValidator_log, "f").warn(`Rejecting tx ${Tx.getHash(tx)} for repeating a nullifier in the same block`);
99
- return INVALID_TX;
100
- }
101
- thisBlockNullifiers.add(nullifier);
102
- }
103
- const nullifierIndexes = await Promise.all(newNullifiers.map(n => __classPrivateFieldGet(this, _TxValidator_nullifierSource, "f").getNullifierIndex(new Fr(n))));
104
- const hasDuplicates = nullifierIndexes.some(index => index !== undefined);
105
- if (hasDuplicates) {
106
- __classPrivateFieldGet(this, _TxValidator_log, "f").warn(`Rejecting tx ${Tx.getHash(tx)} for repeating nullifiers present in state trees`);
107
- return INVALID_TX;
108
- }
109
- return VALID_TX;
110
- }, _TxValidator_validateGasBalance = async function _TxValidator_validateGasBalance(tx) {
111
- if (!tx.data.forPublic || !tx.data.forPublic.needsTeardown) {
112
- return VALID_TX;
113
- }
114
- const teardownFn = __classPrivateFieldGet(_a, _a, "m", _TxValidator_extractFeeExecutionCall).call(_a, tx);
115
- // TODO(#1204) if a generator index is used for the derived storage slot of a map, update it here as well
116
- const slot = pedersenHash([GAS_TOKEN_BALANCES_SLOT, teardownFn.callContext.msgSender]);
117
- const gasBalance = await __classPrivateFieldGet(this, _TxValidator_publicStateSource, "f").storageRead(getCanonicalGasTokenAddress(__classPrivateFieldGet(this, _TxValidator_feeValidationConfig, "f").gasPortalAddress), slot);
118
- // TODO(#5004) calculate fee needed based on tx limits and gas prices
119
- const gasAmountNeeded = new Fr(1);
120
- if (gasBalance.lt(gasAmountNeeded)) {
121
- __classPrivateFieldGet(this, _TxValidator_log, "f").warn(`Rejecting tx ${Tx.getHash(tx)} because it should pay for gas but has insufficient balance ${gasBalance.toShortString()} < ${gasAmountNeeded.toShortString()}`);
122
- return INVALID_TX;
123
- }
124
- return VALID_TX;
125
- }, _TxValidator_validateMaxBlockNumber = function _TxValidator_validateMaxBlockNumber(tx) {
126
- const target = tx instanceof Tx
127
- ? tx.data.forRollup?.rollupValidationRequests || tx.data.forPublic.validationRequests.forRollup
128
- : tx.data.rollupValidationRequests;
129
- const maxBlockNumber = target.maxBlockNumber;
130
- if (maxBlockNumber.isSome && maxBlockNumber.value < __classPrivateFieldGet(this, _TxValidator_globalVariables, "f").blockNumber) {
131
- __classPrivateFieldGet(this, _TxValidator_log, "f").warn(`Rejecting tx ${Tx.getHash(tx)} for low max block number`);
132
- return INVALID_TX;
133
- }
134
- else {
135
- return VALID_TX;
136
- }
137
- }, _TxValidator_validateFee = async function _TxValidator_validateFee(tx) {
138
- if (!tx.data.forPublic || !tx.data.forPublic.needsTeardown) {
139
- // TODO check if fees are mandatory and reject this tx
140
- __classPrivateFieldGet(this, _TxValidator_log, "f").debug(`Tx ${Tx.getHash(tx)} doesn't pay for gas`);
141
- return VALID_TX;
142
- }
143
- const teardownFn = __classPrivateFieldGet(_a, _a, "m", _TxValidator_extractFeeExecutionCall).call(_a, tx);
144
- if (!teardownFn) {
145
- __classPrivateFieldGet(this, _TxValidator_log, "f").warn(`Rejecting tx ${Tx.getHash(tx)} because it should pay for gas but has no enqueued teardown function call`);
146
- return INVALID_TX;
147
- }
148
- const fpcAddress = teardownFn.contractAddress;
149
- const contractClass = await __classPrivateFieldGet(this, _TxValidator_contractDataSource, "f").getContract(fpcAddress);
150
- if (!contractClass) {
151
- return INVALID_TX;
152
- }
153
- if (fpcAddress.equals(getCanonicalGasTokenAddress(__classPrivateFieldGet(this, _TxValidator_feeValidationConfig, "f").gasPortalAddress))) {
154
- return VALID_TX;
155
- }
156
- for (const allowedContract of __classPrivateFieldGet(this, _TxValidator_feeValidationConfig, "f").allowedFeePaymentContractInstances) {
157
- if (fpcAddress.equals(allowedContract)) {
158
- return VALID_TX;
159
- }
160
- }
161
- for (const allowedContractClass of __classPrivateFieldGet(this, _TxValidator_feeValidationConfig, "f").allowedFeePaymentContractClasses) {
162
- if (contractClass.contractClassId.equals(allowedContractClass)) {
163
- return VALID_TX;
164
- }
165
- }
166
- return INVALID_TX;
167
- }, _TxValidator_extractFeeExecutionCall = function _TxValidator_extractFeeExecutionCall(tx) {
168
- const {
169
- // TODO what if there's more than one function call?
170
- // if we're to enshrine that teardown = 1 function call, then we should turn this into a single function call
171
- [PublicKernelPhase.TEARDOWN]: [teardownFn], } = AbstractPhaseManager.extractEnqueuedPublicCallsByPhase(tx.data, tx.enqueuedPublicFunctionCalls);
172
- return teardownFn;
173
- };
174
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfdmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcXVlbmNlci90eF92YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQW9CLEVBQUUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzVELE9BQU8sRUFHTCxFQUFFLEdBR0gsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFlLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFHbEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFZdEYsbUVBQW1FO0FBQ25FLHVEQUF1RDtBQUN2RCwwRUFBMEU7QUFDMUUsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3BDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUl4QyxzREFBc0Q7QUFDdEQsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQVExQyxNQUFNLE9BQU8sV0FBVztJQVF0QixZQUNFLGVBQWdDLEVBQ2hDLGlCQUFvQyxFQUNwQyxrQkFBc0MsRUFDdEMsZUFBZ0MsRUFDaEMsbUJBQXdDLEVBQ3hDLEdBQUcsR0FBRyxpQkFBaUIsQ0FBQyw4QkFBOEIsQ0FBQzs7UUFiekQsbUNBQWE7UUFDYiwrQ0FBa0M7UUFDbEMsK0NBQWtDO1FBQ2xDLGlEQUFzQztRQUN0QyxrREFBd0M7UUFDeEMsbURBQTBDO1FBVXhDLHVCQUFBLElBQUksZ0NBQW9CLGVBQWUsTUFBQSxDQUFDO1FBQ3hDLHVCQUFBLElBQUksa0NBQXNCLGlCQUFpQixNQUFBLENBQUM7UUFDNUMsdUJBQUEs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
@@ -1,12 +0,0 @@
1
- import { type AztecAddress, type EthAddress, type Fr, type GlobalVariables } from '@aztec/circuits.js';
2
- import { type ContractDataSource } from '@aztec/types/contracts';
3
- import { type MerkleTreeOperations } from '@aztec/world-state';
4
- import { TxValidator } from './tx_validator.js';
5
- export declare class TxValidatorFactory {
6
- private merkleTreeDb;
7
- private contractDataSource;
8
- private gasPortalAddress;
9
- constructor(merkleTreeDb: MerkleTreeOperations, contractDataSource: ContractDataSource, gasPortalAddress: EthAddress);
10
- buildTxValidator(globalVariables: GlobalVariables, allowedFeePaymentContractClasses: Fr[], allowedFeePaymentContractInstances: AztecAddress[]): TxValidator;
11
- }
12
- //# sourceMappingURL=tx_validator_factory.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tx_validator_factory.d.ts","sourceRoot":"","sources":["../../src/sequencer/tx_validator_factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,UAAU,EAAE,KAAK,EAAE,EAAE,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACvG,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAG/D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,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,gBAAgB,CACd,eAAe,EAAE,eAAe,EAChC,gCAAgC,EAAE,EAAE,EAAE,EACtC,kCAAkC,EAAE,YAAY,EAAE,GACjD,WAAW;CAaf"}
@@ -1,17 +0,0 @@
1
- import { WorldStateDB, WorldStatePublicDB } from '../simulator/public_executor.js';
2
- import { TxValidator } from './tx_validator.js';
3
- export class TxValidatorFactory {
4
- constructor(merkleTreeDb, contractDataSource, gasPortalAddress) {
5
- this.merkleTreeDb = merkleTreeDb;
6
- this.contractDataSource = contractDataSource;
7
- this.gasPortalAddress = gasPortalAddress;
8
- }
9
- buildTxValidator(globalVariables, allowedFeePaymentContractClasses, allowedFeePaymentContractInstances) {
10
- return new TxValidator(new WorldStateDB(this.merkleTreeDb), new WorldStatePublicDB(this.merkleTreeDb), this.contractDataSource, globalVariables, {
11
- allowedFeePaymentContractClasses,
12
- allowedFeePaymentContractInstances,
13
- gasPortalAddress: this.gasPortalAddress,
14
- });
15
- }
16
- }
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfdmFsaWRhdG9yX2ZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VxdWVuY2VyL3R4X3ZhbGlkYXRvcl9mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFaEQsTUFBTSxPQUFPLGtCQUFrQjtJQUM3QixZQUNVLFlBQWtDLEVBQ2xDLGtCQUFzQyxFQUN0QyxnQkFBNEI7UUFGNUIsaUJBQVksR0FBWixZQUFZLENBQXNCO1FBQ2xDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFZO0lBQ25DLENBQUM7SUFFSixnQkFBZ0IsQ0FDZCxlQUFnQyxFQUNoQyxnQ0FBc0MsRUFDdEMsa0NBQWtEO1FBRWxELE9BQU8sSUFBSSxXQUFXLENBQ3BCLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDbkMsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQ3pDLElBQUksQ0FBQyxrQkFBa0IsRUFDdkIsZUFBZSxFQUNmO1lBQ0UsZ0NBQWdDO1lBQ2hDLGtDQUFrQztZQUNsQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO1NBQ3hDLENBQ0YsQ0FBQztJQUNKLENBQUM7Q0FDRiJ9
@@ -1,8 +0,0 @@
1
- import { type Tx } from '@aztec/circuit-types';
2
- /**
3
- * Looks at the side effects of a transaction and returns the highest counter
4
- * @param tx - A transaction
5
- * @returns The highest side effect counter in the transaction so far
6
- */
7
- export declare function lastSideEffectCounter(tx: Tx): number;
8
- //# sourceMappingURL=utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/sequencer/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,sBAAsB,CAAC;AAG/C;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,CAsBpD"}
@@ -1,29 +0,0 @@
1
- import { CallRequest } from '@aztec/circuits.js';
2
- /**
3
- * Looks at the side effects of a transaction and returns the highest counter
4
- * @param tx - A transaction
5
- * @returns The highest side effect counter in the transaction so far
6
- */
7
- export function lastSideEffectCounter(tx) {
8
- const data = tx.data.forPublic;
9
- const sideEffectCounters = [
10
- ...data.endNonRevertibleData.newNoteHashes,
11
- ...data.endNonRevertibleData.newNullifiers,
12
- ...data.endNonRevertibleData.publicCallStack,
13
- ...data.end.newNoteHashes,
14
- ...data.end.newNullifiers,
15
- ...data.end.publicCallStack,
16
- ];
17
- let max = 0;
18
- for (const sideEffect of sideEffectCounters) {
19
- if (sideEffect instanceof CallRequest) {
20
- // look at both start and end counters because for enqueued public calls start > 0 while end === 0
21
- max = Math.max(max, sideEffect.startSideEffectCounter.toNumber(), sideEffect.endSideEffectCounter.toNumber());
22
- }
23
- else {
24
- max = Math.max(max, sideEffect.counter.toNumber());
25
- }
26
- }
27
- return max;
28
- }
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VxdWVuY2VyL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVqRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUFDLEVBQU07SUFDMUMsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFVLENBQUM7SUFDaEMsTUFBTSxrQkFBa0IsR0FBRztRQUN6QixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhO1FBQzFDLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGFBQWE7UUFDMUMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZTtRQUM1QyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYTtRQUN6QixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYTtRQUN6QixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsZUFBZTtLQUM1QixDQUFDO0lBRUYsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ1osS0FBSyxNQUFNLFVBQVUsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBQzVDLElBQUksVUFBVSxZQUFZLFdBQVcsRUFBRSxDQUFDO1lBQ3RDLGtHQUFrRztZQUNsRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxFQUFFLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ2hILENBQUM7YUFBTSxDQUFDO1lBQ04sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNyRCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyJ9
@@ -1,31 +0,0 @@
1
- import { type KernelCircuitPublicInputs, type PublicKernelCircuitPrivateInputs, type PublicKernelCircuitPublicInputs, type PublicKernelTailCircuitPrivateInputs } from '@aztec/circuits.js';
2
- /**
3
- * Circuit simulator for the public kernel circuits.
4
- */
5
- export interface PublicKernelCircuitSimulator {
6
- /**
7
- * Simulates the public kernel setup circuit from its inputs.
8
- * @param inputs - Inputs to the circuit.
9
- * @returns The public inputs as outputs of the simulation.
10
- */
11
- publicKernelCircuitSetup(inputs: PublicKernelCircuitPrivateInputs): Promise<PublicKernelCircuitPublicInputs>;
12
- /**
13
- * Simulates the public kernel app logic circuit from its inputs.
14
- * @param inputs - Inputs to the circuit.
15
- * @returns The public inputs as outputs of the simulation.
16
- */
17
- publicKernelCircuitAppLogic(inputs: PublicKernelCircuitPrivateInputs): Promise<PublicKernelCircuitPublicInputs>;
18
- /**
19
- * Simulates the public kernel teardown circuit from its inputs.
20
- * @param inputs - Inputs to the circuit.
21
- * @returns The public inputs as outputs of the simulation.
22
- */
23
- publicKernelCircuitTeardown(inputs: PublicKernelCircuitPrivateInputs): Promise<PublicKernelCircuitPublicInputs>;
24
- /**
25
- * Simulates the public kernel tail circuit from its inputs.
26
- * @param inputs - Inputs to the circuit.
27
- * @returns The public inputs as outputs of the simulation.
28
- */
29
- publicKernelCircuitTail(inputs: PublicKernelTailCircuitPrivateInputs): Promise<KernelCircuitPublicInputs>;
30
- }
31
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/simulator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,yBAAyB,EAC9B,KAAK,gCAAgC,EACrC,KAAK,+BAA+B,EACpC,KAAK,oCAAoC,EAC1C,MAAM,oBAAoB,CAAC;AAE5B;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C;;;;OAIG;IACH,wBAAwB,CAAC,MAAM,EAAE,gCAAgC,GAAG,OAAO,CAAC,+BAA+B,CAAC,CAAC;IAC7G;;;;OAIG;IACH,2BAA2B,CAAC,MAAM,EAAE,gCAAgC,GAAG,OAAO,CAAC,+BAA+B,CAAC,CAAC;IAChH;;;;OAIG;IACH,2BAA2B,CAAC,MAAM,EAAE,gCAAgC,GAAG,OAAO,CAAC,+BAA+B,CAAC,CAAC;IAChH;;;;OAIG;IACH,uBAAuB,CAAC,MAAM,EAAE,oCAAoC,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAC;CAC3G"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2ltdWxhdG9yL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
@@ -1,79 +0,0 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
- import { NullifierMembershipWitness, type Tx } from '@aztec/circuit-types';
3
- import { type AztecAddress, type EthAddress, Fr, type FunctionSelector, type L1_TO_L2_MSG_TREE_HEIGHT } from '@aztec/circuits.js';
4
- import { type CommitmentsDB, MessageLoadOracleInputs, type PublicContractsDB, type PublicStateDB } from '@aztec/simulator';
5
- import { type ContractClassPublic, type ContractDataSource, type ContractInstanceWithAddress } from '@aztec/types/contracts';
6
- import { type MerkleTreeOperations } from '@aztec/world-state';
7
- /**
8
- * Implements the PublicContractsDB using a ContractDataSource.
9
- * Progressively records contracts in transaction as they are processed in a block.
10
- */
11
- export declare class ContractsDataSourcePublicDB implements PublicContractsDB {
12
- private db;
13
- private instanceCache;
14
- private classCache;
15
- private log;
16
- constructor(db: ContractDataSource);
17
- /**
18
- * Add new contracts from a transaction
19
- * @param tx - The transaction to add contracts from.
20
- */
21
- addNewContracts(tx: Tx): Promise<void>;
22
- /**
23
- * Removes new contracts added from transactions
24
- * @param tx - The tx's contracts to be removed
25
- */
26
- removeNewContracts(tx: Tx): Promise<void>;
27
- getContractInstance(address: AztecAddress): Promise<ContractInstanceWithAddress | undefined>;
28
- getContractClass(contractClassId: Fr): Promise<ContractClassPublic | undefined>;
29
- getBytecode(address: AztecAddress, selector: FunctionSelector): Promise<Buffer | undefined>;
30
- getPortalContractAddress(address: AztecAddress): Promise<EthAddress | undefined>;
31
- }
32
- /**
33
- * Implements the PublicStateDB using a world-state database.
34
- */
35
- export declare class WorldStatePublicDB implements PublicStateDB {
36
- private db;
37
- private committedWriteCache;
38
- private checkpointedWriteCache;
39
- private uncommittedWriteCache;
40
- constructor(db: MerkleTreeOperations);
41
- /**
42
- * Reads a value from public storage, returning zero if none.
43
- * @param contract - Owner of the storage.
44
- * @param slot - Slot to read in the contract storage.
45
- * @returns The current value in the storage slot.
46
- */
47
- storageRead(contract: AztecAddress, slot: Fr): Promise<Fr>;
48
- /**
49
- * Records a write to public storage.
50
- * @param contract - Owner of the storage.
51
- * @param slot - Slot to read in the contract storage.
52
- * @param newValue - The new value to store.
53
- */
54
- storageWrite(contract: AztecAddress, slot: Fr, newValue: Fr): Promise<void>;
55
- /**
56
- * Commit the pending changes to the DB.
57
- * @returns Nothing.
58
- */
59
- commit(): Promise<void>;
60
- /**
61
- * Rollback the pending changes.
62
- * @returns Nothing.
63
- */
64
- rollbackToCommit(): Promise<void>;
65
- checkpoint(): Promise<void>;
66
- rollbackToCheckpoint(): Promise<void>;
67
- }
68
- /**
69
- * Implements WorldState db using a world state database.
70
- */
71
- export declare class WorldStateDB implements CommitmentsDB {
72
- private db;
73
- constructor(db: MerkleTreeOperations);
74
- getNullifierMembershipWitnessAtLatestBlock(nullifier: Fr): Promise<NullifierMembershipWitness | undefined>;
75
- getL1ToL2MembershipWitness(contractAddress: AztecAddress, messageHash: Fr, secret: Fr): Promise<MessageLoadOracleInputs<typeof L1_TO_L2_MSG_TREE_HEIGHT>>;
76
- getCommitmentIndex(commitment: Fr): Promise<bigint | undefined>;
77
- getNullifierIndex(nullifier: Fr): Promise<bigint | undefined>;
78
- }
79
- //# sourceMappingURL=public_executor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"public_executor.d.ts","sourceRoot":"","sources":["../../src/simulator/public_executor.ts"],"names":[],"mappings":";AAAA,OAAO,EAAgB,0BAA0B,EAAE,KAAK,EAAE,EAAE,MAAM,sBAAsB,CAAC;AACzF,OAAO,EACL,KAAK,YAAY,EAGjB,KAAK,UAAU,EACf,EAAE,EACF,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,EAI9B,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EACL,KAAK,aAAa,EAClB,uBAAuB,EACvB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,2BAA2B,EACjC,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE/D;;;GAGG;AACH,qBAAa,2BAA4B,YAAW,iBAAiB;IAMvD,OAAO,CAAC,EAAE;IALtB,OAAO,CAAC,aAAa,CAAkD;IACvE,OAAO,CAAC,UAAU,CAA0C;IAE5D,OAAO,CAAC,GAAG,CAA8D;gBAErD,EAAE,EAAE,kBAAkB;IAE1C;;;OAGG;IACI,eAAe,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB7C;;;OAGG;IACI,kBAAkB,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAYnC,mBAAmB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,2BAA2B,GAAG,SAAS,CAAC;IAI5F,gBAAgB,CAAC,eAAe,EAAE,EAAE,GAAG,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC;IAItF,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAY3F,wBAAwB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;CAIvF;AAED;;GAEG;AACH,qBAAa,kBAAmB,YAAW,aAAa;IAK1C,OAAO,CAAC,EAAE;IAJtB,OAAO,CAAC,mBAAmB,CAA8B;IACzD,OAAO,CAAC,sBAAsB,CAA8B;IAC5D,OAAO,CAAC,qBAAqB,CAA8B;gBAEvC,EAAE,EAAE,oBAAoB;IAE5C;;;;;OAKG;IACU,WAAW,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;IA4BvE;;;;;OAKG;IACI,YAAY,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAMlF;;;OAGG;IACH,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAYvB;;;OAGG;IACG,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAMvC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3B,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;CAItC;AAED;;GAEG;AACH,qBAAa,YAAa,YAAW,aAAa;IACpC,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,oBAAoB;IAE/B,0CAA0C,CACrD,SAAS,EAAE,EAAE,GACZ,OAAO,CAAC,0BAA0B,GAAG,SAAS,CAAC;IAqBrC,0BAA0B,CACrC,eAAe,EAAE,YAAY,EAC7B,WAAW,EAAE,EAAE,EACf,MAAM,EAAE,EAAE,GACT,OAAO,CAAC,uBAAuB,CAAC,OAAO,wBAAwB,CAAC,CAAC;IA2BvD,kBAAkB,CAAC,UAAU,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAI/D,iBAAiB,CAAC,SAAS,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CAG3E"}
@@ -1,198 +0,0 @@
1
- import { MerkleTreeId, NullifierMembershipWitness } from '@aztec/circuit-types';
2
- import { ContractClassRegisteredEvent, ContractInstanceDeployedEvent, Fr, } from '@aztec/circuits.js';
3
- import { computeL1ToL2MessageNullifier, computePublicDataTreeLeafSlot } from '@aztec/circuits.js/hash';
4
- import { createDebugLogger } from '@aztec/foundation/log';
5
- import { getCanonicalClassRegistererAddress } from '@aztec/protocol-contracts/class-registerer';
6
- import { MessageLoadOracleInputs, } from '@aztec/simulator';
7
- /**
8
- * Implements the PublicContractsDB using a ContractDataSource.
9
- * Progressively records contracts in transaction as they are processed in a block.
10
- */
11
- export class ContractsDataSourcePublicDB {
12
- constructor(db) {
13
- this.db = db;
14
- this.instanceCache = new Map();
15
- this.classCache = new Map();
16
- this.log = createDebugLogger('aztec:sequencer:contracts-data-source');
17
- }
18
- /**
19
- * Add new contracts from a transaction
20
- * @param tx - The transaction to add contracts from.
21
- */
22
- addNewContracts(tx) {
23
- // Extract contract class and instance data from logs and add to cache for this block
24
- const logs = tx.unencryptedLogs.unrollLogs();
25
- ContractClassRegisteredEvent.fromLogs(logs, getCanonicalClassRegistererAddress()).forEach(e => {
26
- this.log(`Adding class ${e.contractClassId.toString()} to public execution contract cache`);
27
- this.classCache.set(e.contractClassId.toString(), e.toContractClassPublic());
28
- });
29
- ContractInstanceDeployedEvent.fromLogs(logs).forEach(e => {
30
- this.log(`Adding instance ${e.address.toString()} with class ${e.contractClassId.toString()} to public execution contract cache`);
31
- this.instanceCache.set(e.address.toString(), e.toContractInstance());
32
- });
33
- return Promise.resolve();
34
- }
35
- /**
36
- * Removes new contracts added from transactions
37
- * @param tx - The tx's contracts to be removed
38
- */
39
- removeNewContracts(tx) {
40
- // TODO(@spalladino): Can this inadvertently delete a valid contract added by another tx?
41
- // Let's say we have two txs adding the same contract on the same block. If the 2nd one reverts,
42
- // wouldn't that accidentally remove the contract added on the first one?
43
- const logs = tx.unencryptedLogs.unrollLogs();
44
- ContractClassRegisteredEvent.fromLogs(logs, getCanonicalClassRegistererAddress()).forEach(e => this.classCache.delete(e.contractClassId.toString()));
45
- ContractInstanceDeployedEvent.fromLogs(logs).forEach(e => this.instanceCache.delete(e.address.toString()));
46
- return Promise.resolve();
47
- }
48
- async getContractInstance(address) {
49
- return this.instanceCache.get(address.toString()) ?? (await this.db.getContract(address));
50
- }
51
- async getContractClass(contractClassId) {
52
- return this.classCache.get(contractClassId.toString()) ?? (await this.db.getContractClass(contractClassId));
53
- }
54
- async getBytecode(address, selector) {
55
- const instance = await this.getContractInstance(address);
56
- if (!instance) {
57
- throw new Error(`Contract ${address.toString()} not found`);
58
- }
59
- const contractClass = await this.getContractClass(instance.contractClassId);
60
- if (!contractClass) {
61
- throw new Error(`Contract class ${instance.contractClassId.toString()} for ${address.toString()} not found`);
62
- }
63
- return contractClass.publicFunctions.find(f => f.selector.equals(selector))?.bytecode;
64
- }
65
- async getPortalContractAddress(address) {
66
- const contract = await this.getContractInstance(address);
67
- return contract?.portalContractAddress;
68
- }
69
- }
70
- /**
71
- * Implements the PublicStateDB using a world-state database.
72
- */
73
- export class WorldStatePublicDB {
74
- constructor(db) {
75
- this.db = db;
76
- this.committedWriteCache = new Map();
77
- this.checkpointedWriteCache = new Map();
78
- this.uncommittedWriteCache = new Map();
79
- }
80
- /**
81
- * Reads a value from public storage, returning zero if none.
82
- * @param contract - Owner of the storage.
83
- * @param slot - Slot to read in the contract storage.
84
- * @returns The current value in the storage slot.
85
- */
86
- async storageRead(contract, slot) {
87
- const leafSlot = computePublicDataTreeLeafSlot(contract, slot).value;
88
- const uncommitted = this.uncommittedWriteCache.get(leafSlot);
89
- if (uncommitted !== undefined) {
90
- return uncommitted;
91
- }
92
- const checkpointed = this.checkpointedWriteCache.get(leafSlot);
93
- if (checkpointed !== undefined) {
94
- return checkpointed;
95
- }
96
- const committed = this.committedWriteCache.get(leafSlot);
97
- if (committed !== undefined) {
98
- return committed;
99
- }
100
- const lowLeafResult = await this.db.getPreviousValueIndex(MerkleTreeId.PUBLIC_DATA_TREE, leafSlot);
101
- if (!lowLeafResult || !lowLeafResult.alreadyPresent) {
102
- return Fr.ZERO;
103
- }
104
- const preimage = (await this.db.getLeafPreimage(MerkleTreeId.PUBLIC_DATA_TREE, lowLeafResult.index));
105
- return preimage.value;
106
- }
107
- /**
108
- * Records a write to public storage.
109
- * @param contract - Owner of the storage.
110
- * @param slot - Slot to read in the contract storage.
111
- * @param newValue - The new value to store.
112
- */
113
- storageWrite(contract, slot, newValue) {
114
- const index = computePublicDataTreeLeafSlot(contract, slot).value;
115
- this.uncommittedWriteCache.set(index, newValue);
116
- return Promise.resolve();
117
- }
118
- /**
119
- * Commit the pending changes to the DB.
120
- * @returns Nothing.
121
- */
122
- commit() {
123
- for (const [k, v] of this.checkpointedWriteCache) {
124
- this.committedWriteCache.set(k, v);
125
- }
126
- // uncommitted writes take precedence over checkpointed writes
127
- // since they are the most recent
128
- for (const [k, v] of this.uncommittedWriteCache) {
129
- this.committedWriteCache.set(k, v);
130
- }
131
- return this.rollbackToCommit();
132
- }
133
- /**
134
- * Rollback the pending changes.
135
- * @returns Nothing.
136
- */
137
- async rollbackToCommit() {
138
- await this.rollbackToCheckpoint();
139
- this.checkpointedWriteCache = new Map();
140
- return Promise.resolve();
141
- }
142
- checkpoint() {
143
- for (const [k, v] of this.uncommittedWriteCache) {
144
- this.checkpointedWriteCache.set(k, v);
145
- }
146
- return this.rollbackToCheckpoint();
147
- }
148
- rollbackToCheckpoint() {
149
- this.uncommittedWriteCache = new Map();
150
- return Promise.resolve();
151
- }
152
- }
153
- /**
154
- * Implements WorldState db using a world state database.
155
- */
156
- export class WorldStateDB {
157
- constructor(db) {
158
- this.db = db;
159
- }
160
- async getNullifierMembershipWitnessAtLatestBlock(nullifier) {
161
- const index = await this.db.findLeafIndex(MerkleTreeId.NULLIFIER_TREE, nullifier.toBuffer());
162
- if (!index) {
163
- return undefined;
164
- }
165
- const leafPreimagePromise = this.db.getLeafPreimage(MerkleTreeId.NULLIFIER_TREE, index);
166
- const siblingPathPromise = this.db.getSiblingPath(MerkleTreeId.NULLIFIER_TREE, BigInt(index));
167
- const [leafPreimage, siblingPath] = await Promise.all([leafPreimagePromise, siblingPathPromise]);
168
- if (!leafPreimage) {
169
- return undefined;
170
- }
171
- return new NullifierMembershipWitness(BigInt(index), leafPreimage, siblingPath);
172
- }
173
- async getL1ToL2MembershipWitness(contractAddress, messageHash, secret) {
174
- let nullifierIndex;
175
- let messageIndex;
176
- let startIndex = 0n;
177
- // We iterate over messages until we find one whose nullifier is not in the nullifier tree --> we need to check
178
- // for nullifiers because messages can have duplicates.
179
- do {
180
- messageIndex = (await this.db.findLeafIndexAfter(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, messageHash, startIndex));
181
- if (messageIndex === undefined) {
182
- throw new Error(`No non-nullified L1 to L2 message found for message hash ${messageHash.toString()}`);
183
- }
184
- const messageNullifier = computeL1ToL2MessageNullifier(contractAddress, messageHash, secret, messageIndex);
185
- nullifierIndex = await this.getNullifierIndex(messageNullifier);
186
- startIndex = messageIndex + 1n;
187
- } while (nullifierIndex !== undefined);
188
- const siblingPath = await this.db.getSiblingPath(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, messageIndex);
189
- return new MessageLoadOracleInputs(messageIndex, siblingPath);
190
- }
191
- async getCommitmentIndex(commitment) {
192
- return await this.db.findLeafIndex(MerkleTreeId.NOTE_HASH_TREE, commitment);
193
- }
194
- async getNullifierIndex(nullifier) {
195
- return await this.db.findLeafIndex(MerkleTreeId.NULLIFIER_TREE, nullifier.toBuffer());
196
- }
197
- }
198
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2V4ZWN1dG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NpbXVsYXRvci9wdWJsaWNfZXhlY3V0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSwwQkFBMEIsRUFBVyxNQUFNLHNCQUFzQixDQUFDO0FBQ3pGLE9BQU8sRUFFTCw0QkFBNEIsRUFDNUIsNkJBQTZCLEVBRTdCLEVBQUUsR0FNSCxNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ2hHLE9BQU8sRUFFTCx1QkFBdUIsR0FHeEIsTUFBTSxrQkFBa0IsQ0FBQztBQVExQjs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sMkJBQTJCO0lBTXRDLFlBQW9CLEVBQXNCO1FBQXRCLE9BQUUsR0FBRixFQUFFLENBQW9CO1FBTGxDLGtCQUFhLEdBQUcsSUFBSSxHQUFHLEVBQXVDLENBQUM7UUFDL0QsZUFBVSxHQUFHLElBQUksR0FBRyxFQUErQixDQUFDO1FBRXBELFFBQUcsR0FBRyxpQkFBaUIsQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO0lBRTVCLENBQUM7SUFFOUM7OztPQUdHO0lBQ0ksZUFBZSxDQUFDLEVBQU07UUFDM0IscUZBQXFGO1FBQ3JGLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDN0MsNEJBQTRCLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxrQ0FBa0MsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzVGLElBQUksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxlQUFlLENBQUMs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