@aztec/sequencer-client 0.28.1 → 0.30.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 (41) hide show
  1. package/dest/block_builder/index.d.ts +2 -4
  2. package/dest/block_builder/index.d.ts.map +1 -1
  3. package/dest/block_builder/solo_block_builder.d.ts +4 -7
  4. package/dest/block_builder/solo_block_builder.d.ts.map +1 -1
  5. package/dest/block_builder/solo_block_builder.js +18 -20
  6. package/dest/client/sequencer-client.d.ts +4 -3
  7. package/dest/client/sequencer-client.d.ts.map +1 -1
  8. package/dest/client/sequencer-client.js +2 -2
  9. package/dest/config.d.ts.map +1 -1
  10. package/dest/config.js +6 -2
  11. package/dest/sequencer/abstract_phase_manager.d.ts.map +1 -1
  12. package/dest/sequencer/abstract_phase_manager.js +10 -11
  13. package/dest/sequencer/hints_builder.d.ts +1 -1
  14. package/dest/sequencer/hints_builder.d.ts.map +1 -1
  15. package/dest/sequencer/hints_builder.js +4 -4
  16. package/dest/sequencer/processed_tx.d.ts.map +1 -1
  17. package/dest/sequencer/processed_tx.js +3 -3
  18. package/dest/sequencer/public_processor.d.ts +2 -1
  19. package/dest/sequencer/public_processor.d.ts.map +1 -1
  20. package/dest/sequencer/public_processor.js +1 -1
  21. package/dest/sequencer/sequencer.d.ts +6 -26
  22. package/dest/sequencer/sequencer.d.ts.map +1 -1
  23. package/dest/sequencer/sequencer.js +26 -101
  24. package/dest/sequencer/tx_validator.d.ts +22 -0
  25. package/dest/sequencer/tx_validator.d.ts.map +1 -0
  26. package/dest/sequencer/tx_validator.js +125 -0
  27. package/dest/simulator/public_executor.d.ts +3 -5
  28. package/dest/simulator/public_executor.d.ts.map +1 -1
  29. package/dest/simulator/public_executor.js +18 -34
  30. package/package.json +13 -13
  31. package/src/block_builder/index.ts +2 -8
  32. package/src/block_builder/solo_block_builder.ts +18 -29
  33. package/src/client/sequencer-client.ts +3 -1
  34. package/src/config.ts +6 -0
  35. package/src/sequencer/abstract_phase_manager.ts +9 -12
  36. package/src/sequencer/hints_builder.ts +2 -8
  37. package/src/sequencer/processed_tx.ts +2 -0
  38. package/src/sequencer/public_processor.ts +2 -1
  39. package/src/sequencer/sequencer.ts +31 -117
  40. package/src/sequencer/tx_validator.ts +189 -0
  41. package/src/simulator/public_executor.ts +15 -42
@@ -0,0 +1,125 @@
1
+ var _TxValidator_instances, _TxValidator_log, _TxValidator_globalVariables, _TxValidator_nullifierSource, _TxValidator_publicStateSource, _TxValidator_gasPortalAddress, _TxValidator_validateMetadata, _TxValidator_validateNullifiers, _TxValidator_validateFee;
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, gasPortalAddress, globalVariables, 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_gasPortalAddress.set(this, void 0);
24
+ __classPrivateFieldSet(this, _TxValidator_nullifierSource, nullifierSource, "f");
25
+ __classPrivateFieldSet(this, _TxValidator_globalVariables, globalVariables, "f");
26
+ __classPrivateFieldSet(this, _TxValidator_publicStateSource, publicStateSource, "f");
27
+ __classPrivateFieldSet(this, _TxValidator_gasPortalAddress, gasPortalAddress, "f");
28
+ __classPrivateFieldSet(this, _TxValidator_log, log, "f");
29
+ }
30
+ /**
31
+ * Validates a list of transactions.
32
+ * @param txs - The transactions to validate.
33
+ * @returns A tuple of valid and invalid transactions.
34
+ */
35
+ async validateTxs(txs) {
36
+ const validTxs = [];
37
+ const invalidTxs = [];
38
+ const thisBlockNullifiers = new Set();
39
+ for (const tx of txs) {
40
+ if (__classPrivateFieldGet(this, _TxValidator_instances, "m", _TxValidator_validateMetadata).call(this, tx) === INVALID_TX) {
41
+ invalidTxs.push(tx);
42
+ continue;
43
+ }
44
+ if ((await __classPrivateFieldGet(this, _TxValidator_instances, "m", _TxValidator_validateNullifiers).call(this, tx, thisBlockNullifiers)) === INVALID_TX) {
45
+ invalidTxs.push(tx);
46
+ continue;
47
+ }
48
+ // skip already processed transactions
49
+ if (tx instanceof Tx && (await __classPrivateFieldGet(this, _TxValidator_instances, "m", _TxValidator_validateFee).call(this, tx)) === INVALID_TX) {
50
+ invalidTxs.push(tx);
51
+ continue;
52
+ }
53
+ validTxs.push(tx);
54
+ }
55
+ return [validTxs, invalidTxs];
56
+ }
57
+ }
58
+ _TxValidator_log = new WeakMap(), _TxValidator_globalVariables = new WeakMap(), _TxValidator_nullifierSource = new WeakMap(), _TxValidator_publicStateSource = new WeakMap(), _TxValidator_gasPortalAddress = new WeakMap(), _TxValidator_instances = new WeakSet(), _TxValidator_validateMetadata = function _TxValidator_validateMetadata(tx) {
59
+ if (!tx.data.constants.txContext.chainId.equals(__classPrivateFieldGet(this, _TxValidator_globalVariables, "f").chainId)) {
60
+ __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()}`);
61
+ return INVALID_TX;
62
+ }
63
+ return VALID_TX;
64
+ }, _TxValidator_validateNullifiers =
65
+ /**
66
+ * It looks for duplicate nullifiers:
67
+ * - in the same transaction
68
+ * - in the same block
69
+ * - in the nullifier tree
70
+ *
71
+ * Nullifiers prevent double spends in a private context.
72
+ *
73
+ * @param tx - The transaction.
74
+ * @returns Whether this is a problematic double spend that the L1 contract would reject.
75
+ */
76
+ async function _TxValidator_validateNullifiers(tx, thisBlockNullifiers) {
77
+ const newNullifiers = [...tx.data.endNonRevertibleData.newNullifiers, ...tx.data.end.newNullifiers]
78
+ .filter(x => !x.isEmpty())
79
+ .map(x => x.value.toBigInt());
80
+ // Ditch this tx if it has repeated nullifiers
81
+ const uniqueNullifiers = new Set(newNullifiers);
82
+ if (uniqueNullifiers.size !== newNullifiers.length) {
83
+ __classPrivateFieldGet(this, _TxValidator_log, "f").warn(`Rejecting tx ${Tx.getHash(tx)} for emitting duplicate nullifiers`);
84
+ return INVALID_TX;
85
+ }
86
+ for (const nullifier of newNullifiers) {
87
+ if (thisBlockNullifiers.has(nullifier)) {
88
+ __classPrivateFieldGet(this, _TxValidator_log, "f").warn(`Rejecting tx ${Tx.getHash(tx)} for repeating a nullifier in the same block`);
89
+ return INVALID_TX;
90
+ }
91
+ thisBlockNullifiers.add(nullifier);
92
+ }
93
+ const nullifierIndexes = await Promise.all(newNullifiers.map(n => __classPrivateFieldGet(this, _TxValidator_nullifierSource, "f").getNullifierIndex(new Fr(n))));
94
+ const hasDuplicates = nullifierIndexes.some(index => index !== undefined);
95
+ if (hasDuplicates) {
96
+ __classPrivateFieldGet(this, _TxValidator_log, "f").warn(`Rejecting tx ${Tx.getHash(tx)} for repeating nullifiers present in state trees`);
97
+ return INVALID_TX;
98
+ }
99
+ return VALID_TX;
100
+ }, _TxValidator_validateFee = async function _TxValidator_validateFee(tx) {
101
+ if (!tx.data.needsTeardown) {
102
+ // TODO check if fees are mandatory and reject this tx
103
+ __classPrivateFieldGet(this, _TxValidator_log, "f").debug(`Tx ${Tx.getHash(tx)} doesn't pay for gas`);
104
+ return VALID_TX;
105
+ }
106
+ const {
107
+ // TODO what if there's more than one function call?
108
+ // if we're to enshrine that teardown = 1 function call, then we should turn this into a single function call
109
+ [PublicKernelPhase.TEARDOWN]: [teardownFn], } = AbstractPhaseManager.extractEnqueuedPublicCallsByPhase(tx.data, tx.enqueuedPublicFunctionCalls);
110
+ if (!teardownFn) {
111
+ __classPrivateFieldGet(this, _TxValidator_log, "f").warn(`Rejecting tx ${Tx.getHash(tx)} because it should pay for gas but has no enqueued teardown function call`);
112
+ return INVALID_TX;
113
+ }
114
+ // TODO(#1204) if a generator index is used for the derived storage slot of a map, update it here as well
115
+ const slot = pedersenHash([GAS_TOKEN_BALANCES_SLOT.toBuffer(), teardownFn.callContext.msgSender.toBuffer()]);
116
+ const gasBalance = await __classPrivateFieldGet(this, _TxValidator_publicStateSource, "f").storageRead(getCanonicalGasTokenAddress(__classPrivateFieldGet(this, _TxValidator_gasPortalAddress, "f")), slot);
117
+ // TODO(#5004) calculate fee needed based on tx limits and gas prices
118
+ const gasAmountNeeded = new Fr(1);
119
+ if (gasBalance.lt(gasAmountNeeded)) {
120
+ __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()}`);
121
+ return INVALID_TX;
122
+ }
123
+ return VALID_TX;
124
+ };
125
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfdmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcXVlbmNlci90eF92YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDMUMsT0FBTyxFQUE0QixFQUFFLEVBQW1CLE1BQU0sb0JBQW9CLENBQUM7QUFDbkYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFBVSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRWxGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBYXRGLG1FQUFtRTtBQUNuRSx1REFBdUQ7QUFDdkQsMEVBQTBFO0FBQzFFLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNwQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7QUFJeEMsc0RBQXNEO0FBQ3RELE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFMUMsTUFBTSxPQUFPLFdBQVc7SUFPdEIsWUFDRSxlQUFnQyxFQUNoQyxpQkFBb0MsRUFDcEMsZ0JBQTRCLEVBQzVCLGVBQWdDLEVBQ2hDLEdBQUcsR0FBRyxpQkFBaUIsQ0FBQyw4QkFBOEIsQ0FBQzs7UUFYekQsbUNBQWE7UUFDYiwrQ0FBa0M7UUFDbEMsK0NBQWtDO1FBQ2xDLGlEQUFzQztRQUN0QyxnREFBOEI7UUFTNUIsdUJBQUEsSUFBSSxnQ0FBb0IsZUFBZSxNQUFBLENBQUM7UUFDeEMsdUJBQUEsSUFBSSxnQ0FBb0IsZUFBZSxNQUFBLENBQUM7UUFDeEMsdUJBQUEsSUFBSSxrQ0FBc0IsaUJBQWlCLE1BQUEsQ0FB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
@@ -1,17 +1,15 @@
1
1
  /// <reference types="node" resolution-mode="require"/>
2
- import { ContractDataSource, L1ToL2MessageSource, NullifierMembershipWitness, Tx } from '@aztec/circuit-types';
2
+ import { L1ToL2MessageSource, NullifierMembershipWitness, Tx } from '@aztec/circuit-types';
3
3
  import { AztecAddress, EthAddress, Fr, FunctionSelector, L1_TO_L2_MSG_TREE_HEIGHT } from '@aztec/circuits.js';
4
4
  import { CommitmentsDB, MessageLoadOracleInputs, PublicContractsDB, PublicStateDB } from '@aztec/simulator';
5
- import { ContractInstanceWithAddress } from '@aztec/types/contracts';
5
+ import { ContractClassPublic, ContractDataSource, ContractInstanceWithAddress } from '@aztec/types/contracts';
6
6
  import { MerkleTreeOperations } from '@aztec/world-state';
7
7
  /**
8
8
  * Implements the PublicContractsDB using a ContractDataSource.
9
9
  * Progressively records contracts in transaction as they are processed in a block.
10
10
  */
11
11
  export declare class ContractsDataSourcePublicDB implements PublicContractsDB {
12
- #private;
13
12
  private db;
14
- private cache;
15
13
  private instanceCache;
16
14
  private classCache;
17
15
  private log;
@@ -27,8 +25,8 @@ export declare class ContractsDataSourcePublicDB implements PublicContractsDB {
27
25
  */
28
26
  removeNewContracts(tx: Tx): Promise<void>;
29
27
  getContractInstance(address: AztecAddress): Promise<ContractInstanceWithAddress | undefined>;
28
+ getContractClass(contractClassId: Fr): Promise<ContractClassPublic | undefined>;
30
29
  getBytecode(address: AztecAddress, selector: FunctionSelector): Promise<Buffer | undefined>;
31
- getIsInternal(address: AztecAddress, selector: FunctionSelector): Promise<boolean | undefined>;
32
30
  getPortalContractAddress(address: AztecAddress): Promise<EthAddress | undefined>;
33
31
  }
34
32
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"public_executor.d.ts","sourceRoot":"","sources":["../../src/simulator/public_executor.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,kBAAkB,EAElB,mBAAmB,EAEnB,0BAA0B,EAC1B,EAAE,EAEH,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,YAAY,EAGZ,UAAU,EACV,EAAE,EACF,gBAAgB,EAChB,wBAAwB,EAIzB,MAAM,oBAAoB,CAAC;AAK5B,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC5G,OAAO,EAAuB,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D;;;GAGG;AACH,qBAAa,2BAA4B,YAAW,iBAAiB;;IAOvD,OAAO,CAAC,EAAE;IANtB,OAAO,CAAC,KAAK,CAA2C;IACxD,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;IAcnC,mBAAmB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,2BAA2B,GAAG,SAAS,CAAC;IAInG,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAK3F,aAAa,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAK9F,wBAAwB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;CA+BvF;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;IAAwB,OAAO,CAAC,mBAAmB;gBAArD,EAAE,EAAE,oBAAoB,EAAU,mBAAmB,EAAE,mBAAmB;IAEjF,0CAA0C,CACrD,SAAS,EAAE,EAAE,GACZ,OAAO,CAAC,0BAA0B,GAAG,SAAS,CAAC;IAqBrC,0BAA0B,CACrC,QAAQ,EAAE,EAAE,GACX,OAAO,CAAC,uBAAuB,CAAC,OAAO,wBAAwB,CAAC,CAAC;IAYvD,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
+ {"version":3,"file":"public_executor.d.ts","sourceRoot":"","sources":["../../src/simulator/public_executor.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,mBAAmB,EAEnB,0BAA0B,EAC1B,EAAE,EAEH,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,YAAY,EAGZ,UAAU,EACV,EAAE,EACF,gBAAgB,EAChB,wBAAwB,EAIzB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC5G,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAC9G,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D;;;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;IAAwB,OAAO,CAAC,mBAAmB;gBAArD,EAAE,EAAE,oBAAoB,EAAU,mBAAmB,EAAE,mBAAmB;IAEjF,0CAA0C,CACrD,SAAS,EAAE,EAAE,GACZ,OAAO,CAAC,0BAA0B,GAAG,SAAS,CAAC;IAqBrC,0BAA0B,CACrC,QAAQ,EAAE,EAAE,GACX,OAAO,CAAC,uBAAuB,CAAC,OAAO,wBAAwB,CAAC,CAAC;IAYvD,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,11 +1,8 @@
1
- var _ContractsDataSourcePublicDB_instances, _ContractsDataSourcePublicDB_getContract, _ContractsDataSourcePublicDB_makeExtendedContractDataFor;
2
- import { __classPrivateFieldGet } from "tslib";
3
- import { ExtendedContractData, MerkleTreeId, NullifierMembershipWitness, UnencryptedL2Log, } from '@aztec/circuit-types';
1
+ import { MerkleTreeId, NullifierMembershipWitness, UnencryptedL2Log, } from '@aztec/circuit-types';
4
2
  import { ContractClassRegisteredEvent, ContractInstanceDeployedEvent, Fr, } from '@aztec/circuits.js';
5
3
  import { computePublicDataTreeLeafSlot } from '@aztec/circuits.js/hash';
6
4
  import { createDebugLogger } from '@aztec/foundation/log';
7
5
  import { ClassRegistererAddress } from '@aztec/protocol-contracts/class-registerer';
8
- import { InstanceDeployerAddress } from '@aztec/protocol-contracts/instance-deployer';
9
6
  import { MessageLoadOracleInputs } from '@aztec/simulator';
10
7
  /**
11
8
  * Implements the PublicContractsDB using a ContractDataSource.
@@ -13,9 +10,7 @@ import { MessageLoadOracleInputs } from '@aztec/simulator';
13
10
  */
14
11
  export class ContractsDataSourcePublicDB {
15
12
  constructor(db) {
16
- _ContractsDataSourcePublicDB_instances.add(this);
17
13
  this.db = db;
18
- this.cache = new Map();
19
14
  this.instanceCache = new Map();
20
15
  this.classCache = new Map();
21
16
  this.log = createDebugLogger('aztec:sequencer:contracts-data-source');
@@ -31,7 +26,7 @@ export class ContractsDataSourcePublicDB {
31
26
  this.log(`Adding class ${e.contractClassId.toString()} to public execution contract cache`);
32
27
  this.classCache.set(e.contractClassId.toString(), e.toContractClassPublic());
33
28
  });
34
- ContractInstanceDeployedEvent.fromLogs(logs, InstanceDeployerAddress).forEach(e => {
29
+ ContractInstanceDeployedEvent.fromLogs(logs).forEach(e => {
35
30
  this.log(`Adding instance ${e.address.toString()} with class ${e.contractClassId.toString()} to public execution contract cache`);
36
31
  this.instanceCache.set(e.address.toString(), e.toContractInstance());
37
32
  });
@@ -47,42 +42,31 @@ export class ContractsDataSourcePublicDB {
47
42
  // wouldn't that accidentally remove the contract added on the first one?
48
43
  const logs = tx.unencryptedLogs.unrollLogs().map(UnencryptedL2Log.fromBuffer);
49
44
  ContractClassRegisteredEvent.fromLogs(logs, ClassRegistererAddress).forEach(e => this.classCache.delete(e.contractClassId.toString()));
50
- ContractInstanceDeployedEvent.fromLogs(logs, InstanceDeployerAddress).forEach(e => this.instanceCache.delete(e.address.toString()));
45
+ ContractInstanceDeployedEvent.fromLogs(logs).forEach(e => this.instanceCache.delete(e.address.toString()));
51
46
  return Promise.resolve();
52
47
  }
53
48
  async getContractInstance(address) {
54
49
  return this.instanceCache.get(address.toString()) ?? (await this.db.getContract(address));
55
50
  }
56
- async getBytecode(address, selector) {
57
- const contract = await __classPrivateFieldGet(this, _ContractsDataSourcePublicDB_instances, "m", _ContractsDataSourcePublicDB_getContract).call(this, address);
58
- return contract?.getPublicFunction(selector)?.bytecode;
51
+ async getContractClass(contractClassId) {
52
+ return this.classCache.get(contractClassId.toString()) ?? (await this.db.getContractClass(contractClassId));
59
53
  }
60
- async getIsInternal(address, selector) {
61
- const contract = await __classPrivateFieldGet(this, _ContractsDataSourcePublicDB_instances, "m", _ContractsDataSourcePublicDB_getContract).call(this, address);
62
- return contract?.getPublicFunction(selector)?.isInternal;
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;
63
64
  }
64
65
  async getPortalContractAddress(address) {
65
- const contract = await __classPrivateFieldGet(this, _ContractsDataSourcePublicDB_instances, "m", _ContractsDataSourcePublicDB_getContract).call(this, address);
66
- return contract?.contractData.portalContractAddress;
66
+ const contract = await this.getContractInstance(address);
67
+ return contract?.portalContractAddress;
67
68
  }
68
69
  }
69
- _ContractsDataSourcePublicDB_instances = new WeakSet(), _ContractsDataSourcePublicDB_getContract = async function _ContractsDataSourcePublicDB_getContract(address) {
70
- return (this.cache.get(address.toString()) ??
71
- (await __classPrivateFieldGet(this, _ContractsDataSourcePublicDB_instances, "m", _ContractsDataSourcePublicDB_makeExtendedContractDataFor).call(this, address)) ??
72
- (await this.db.getExtendedContractData(address)));
73
- }, _ContractsDataSourcePublicDB_makeExtendedContractDataFor = async function _ContractsDataSourcePublicDB_makeExtendedContractDataFor(address) {
74
- const instance = this.instanceCache.get(address.toString());
75
- if (!instance) {
76
- return undefined;
77
- }
78
- const contractClass = this.classCache.get(instance.contractClassId.toString()) ??
79
- (await this.db.getContractClass(instance.contractClassId));
80
- if (!contractClass) {
81
- this.log.warn(`Contract class ${instance.contractClassId.toString()} for address ${address.toString()} not found`);
82
- return undefined;
83
- }
84
- return ExtendedContractData.fromClassAndInstance(contractClass, instance);
85
- };
86
70
  /**
87
71
  * Implements the PublicStateDB using a world-state database.
88
72
  */
@@ -202,4 +186,4 @@ export class WorldStateDB {
202
186
  return await this.db.findLeafIndex(MerkleTreeId.NULLIFIER_TREE, nullifier.toBuffer());
203
187
  }
204
188
  }
205
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2V4ZWN1dG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NpbXVsYXRvci9wdWJsaWNfZXhlY3V0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBRUwsb0JBQW9CLEVBRXBCLFlBQVksRUFDWiwwQkFBMEIsRUFFMUIsZ0JBQWdCLEdBQ2pCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUVMLDRCQUE0QixFQUM1Qiw2QkFBNkIsRUFFN0IsRUFBRSxHQU1ILE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDcEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdEYsT0FBTyxFQUFpQix1QkFBdUIsRUFBb0MsTUFBTSxrQkFBa0IsQ0FBQztBQUk1Rzs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sMkJBQTJCO0lBT3RDLFlBQW9CLEVBQXNCOztRQUF0QixPQUFFLEdBQUYsRUFBRSxDQUFvQjtRQU5sQyxVQUFLLEdBQUcsSUFBSSxHQUFHLEVBQWdDLENBQUM7UUFDaEQsa0JBQWEsR0FBRyxJQUFJLEdBQUcsRUFBdUMsQ0FBQztRQUMvRCxlQUFVLEdBQUcsSUFBSSxHQUFHLEVBQStCLENBQUM7UUFFcEQsUUFBRyxHQUFHLGlCQUFpQixDQUFDLHVDQUF1QyxDQUFDLENBQUM7SUFFNUIsQ0FBQztJQUU5Qzs7O09BR0c7SUFDSSxlQUFlLENBQUMsRUFBTTtRQUMzQixxRkFBcUY7UUFDckYsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDOUUsNEJBQTRCLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxzQkFBc0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUM5RSxJQUFJLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxxQ0FBcUMsQ0FBQyxDQUFDO1lBQzVGLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQztRQUMvRSxDQUFDLENBQUMsQ0FBQztRQUNILDZCQUE2QixDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsdUJBQXVCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDaEYsSUFBSSxDQUFDLEdBQUcsQ0FDTixtQkFBbUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxxQ0FBcUMsQ0FDeEgsQ0FBQztZQUNGLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQztRQUN2RSxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxrQkFBa0IsQ0FBQyxFQUFNO1FBQzlCLHlGQUF5RjtRQUN6RixnR0FBZ0c7UUFDaEcseUVBQXlFO1FBQ3pFLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzlFLDRCQUE0QixDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsc0JBQXNCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDOUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUNyRCxDQUFDO1FBQ0YsNkJBQTZCLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSx1QkFBdUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUNoRixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQ2hELENBQUM7UUFDRixPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRU0sS0FBSyxDQUFDLG1CQUFtQixDQUFDLE9BQXFCO1FBQ3BELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDNUYsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBcUIsRUFBRSxRQUEwQjtRQUNqRSxNQUFNLFFBQVEsR0FBRyxNQUFNLHVCQUFBLElBQUksd0ZBQWEsTUFBakIsSUFBSSxFQUFjLE9BQU8sQ0FBQyxDQUFDO1FBQ2xELE9BQU8sUUFBUSxFQUFFLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxFQUFFLFFBQVEsQ0FBQztJQUN6RCxDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxPQUFxQixFQUFFLFFBQTBCO1FBQ25FLE1BQU0sUUFBUSxHQUFHLE1BQU0sdUJBQUEsSUFBSSx3RkFBYSxNQUFqQixJQUFJLEVBQWMsT0FBTyxDQUFDLENBQUM7UUFDbEQsT0FBTyxRQUFRLEVBQUUsaUJBQWlCLENBQUMsUUFBUSxDQUFDLEVBQUUsVUFBVSxDQUFDO0lBQzNELENBQUM7SUFFRCxLQUFLLENBQUMsd0JBQXdCLENBQUMsT0FBcUI7UUFDbEQsTUFBTSxRQUFRLEdBQUcsTUFBTSx1QkFBQSxJQUFJLHdGQUFhLE1BQWpCLElBQUksRUFBYyxPQUFPLENBQUMsQ0FBQztRQUNsRCxPQUFPLFFBQVEsRUFBRSxZQUFZLENBQUMscUJBQXFCLENBQUM7SUFDdEQsQ0FBQztDQTRCRjttR0ExQkMsS0FBSyxtREFBYyxPQUFxQjtJQUN0QyxPQUFPLENBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2xDLENBQUMsTUFBTSx1QkFBQSxJQUFJLHdHQUE2QixNQUFqQyxJQUFJLEVBQThCLE9BQU8sQ0FBQyxDQUFDO1FBQ2xELENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQ2pELENBQUM7QUFDSixDQUFDLDZEQUVELEtBQUssbUVBQThCLE9BQXFCO0lBQ3RELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzVELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNkLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxNQUFNLGFBQWEsR0FDakIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN4RCxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUM3RCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQ1gsa0JBQWtCLFFBQVEsQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLGdCQUFnQixPQUFPLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FDcEcsQ0FBQztRQUNGLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxPQUFPLG9CQUFvQixDQUFDLG9CQUFvQixDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUM1RSxDQUFDO0FBR0g7O0dBRUc7QUFDSCxNQUFNLE9BQU8sa0JBQWtCO0lBSzdCLFlBQW9CLEVBQXdCO1FBQXhCLE9BQUUsR0FBRixFQUFFLENBQXNCO1FBSnBDLHdCQUFtQixHQUFvQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2pELDJCQUFzQixHQUFvQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3BELDBCQUFxQixHQUFvQixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRVosQ0FBQztJQUVoRDs7Ozs7T0FLRztJQUNJLEtBQUssQ0FBQyxXQUFXLENBQUMsUUFBc0IsRUFBRSxJQUFRO1FBQ3ZELE1BQU0sUUFBUSxHQUFHLDZCQUE2QixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDckUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3RCxJQUFJLFdBQVcsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM5QixPQUFPLFdBQVcsQ0FBQztRQUNyQixDQUFDO1FBQ0QsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMvRCxJQUFJLFlBQVksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMvQixPQUFPLFlBQVksQ0FBQztRQUN0QixDQUFDO1FBQ0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6RCxJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM1QixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBRUQsTUFBTSxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLHFCQUFxQixDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNuRyxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3BELE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQztRQUNqQixDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUM3QyxZQUFZLENBQUMsZ0JBQWdCLEVBQzdCLGFBQWEsQ0FBQyxLQUFLLENBQ3BCLENBQStCLENBQUM7UUFFakMsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLFlBQVksQ0FBQyxRQUFzQixFQUFFLElBQVEsRUFBRSxRQUFZO1FBQ2hFLE1BQU0sS0FBSyxHQUFHLDZCQUE2QixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDbEUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDaEQsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU07UUFDSixLQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDakQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDckMsQ0FBQztRQUNELDhEQUE4RDtRQUM5RCxpQ0FBaUM7UUFDakMsS0FBSyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQ2hELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3JDLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsZ0JBQWdCO1FBQ3BCLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksR0FBRyxFQUFjLENBQUM7UUFDcEQsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELFVBQVU7UUFDUixLQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDaEQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDeEMsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVELG9CQUFvQjtRQUNsQixJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxHQUFHLEVBQWMsQ0FBQztRQUNuRCxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMzQixDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxZQUFZO0lBQ3ZCLFlBQW9CLEVBQXdCLEVBQVUsbUJBQXdDO1FBQTFFLE9BQUUsR0FBRixFQUFFLENBQXNCO1FBQVUsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtJQUFHLENBQUM7SUFFM0YsS0FBSyxDQUFDLDBDQUEwQyxDQUNyRCxTQUFhO1FBRWIsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzdGLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFFRCxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEYsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FDL0MsWUFBWSxDQUFDLGNBQWMsRUFDM0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUNkLENBQUM7UUFFRixNQUFNLENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLG1CQUFtQixFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQztRQUVqRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbEIsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUVELE9BQU8sSUFBSSwwQkFBMEIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsWUFBcUMsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUMzRyxDQUFDO0lBRU0sS0FBSyxDQUFDLDBCQUEwQixDQUNyQyxRQUFZO1FBRVosTUFBTSxLQUFLLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxxQkFBcUIsRUFBRSxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBRSxDQUFDO1FBQ3RHLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxRQUFRLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzlELENBQUM7UUFDRCxNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUM5QyxZQUFZLENBQUMscUJBQXFCLEVBQ2xDLEtBQUssQ0FDTixDQUFDO1FBQ0YsT0FBTyxJQUFJLHVCQUF1QixDQUFrQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDMUYsQ0FBQztJQUVNLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxVQUFjO1FBQzVDLE9BQU8sTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7SUFFTSxLQUFLLENBQUMsaUJBQWlCLENBQUMsU0FBYTtRQUMxQyxPQUFPLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUN4RixDQUFDO0NBQ0YifQ==
189
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2V4ZWN1dG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NpbXVsYXRvci9wdWJsaWNfZXhlY3V0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFlBQVksRUFDWiwwQkFBMEIsRUFFMUIsZ0JBQWdCLEdBQ2pCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUVMLDRCQUE0QixFQUM1Qiw2QkFBNkIsRUFFN0IsRUFBRSxHQU1ILE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDcEYsT0FBTyxFQUFpQix1QkFBdUIsRUFBb0MsTUFBTSxrQkFBa0IsQ0FBQztBQUk1Rzs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sMkJBQTJCO0lBTXRDLFlBQW9CLEVBQXNCO1FBQXRCLE9BQUUsR0FBRixFQUFFLENBQW9CO1FBTGxDLGtCQUFhLEdBQUcsSUFBSSxHQUFHLEVBQXVDLENBQUM7UUFDL0QsZUFBVSxHQUFHLElBQUksR0FBRyxFQUErQixDQUFDO1FBRXBELFFBQUcsR0FBRyxpQkFBaUIsQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO0lBRTVCLENBQUM7SUFFOUM7OztPQUdHO0lBQ0ksZUFBZSxDQUFDLEVBQU07UUFDM0IscUZBQXFGO1FBQ3JGLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzlFLDRCQUE0QixDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsc0JBQXNCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDOUUsSUFBSSxDQUFDLEdB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/sequencer-client",
3
- "version": "0.28.1",
3
+ "version": "0.30.0",
4
4
  "type": "module",
5
5
  "exports": "./dest/index.js",
6
6
  "typedocOptions": {
@@ -21,18 +21,18 @@
21
21
  "test:integration:run": "NODE_NO_WARNINGS=1 node --experimental-vm-modules $(yarn bin jest) --no-cache --config jest.integration.config.json"
22
22
  },
23
23
  "dependencies": {
24
- "@aztec/circuit-types": "0.28.1",
25
- "@aztec/circuits.js": "0.28.1",
26
- "@aztec/ethereum": "0.28.1",
27
- "@aztec/foundation": "0.28.1",
28
- "@aztec/l1-artifacts": "0.28.1",
29
- "@aztec/merkle-tree": "0.28.1",
30
- "@aztec/noir-protocol-circuits-types": "0.28.1",
31
- "@aztec/p2p": "0.28.1",
32
- "@aztec/protocol-contracts": "0.28.1",
33
- "@aztec/simulator": "0.28.1",
34
- "@aztec/types": "0.28.1",
35
- "@aztec/world-state": "0.28.1",
24
+ "@aztec/circuit-types": "0.30.0",
25
+ "@aztec/circuits.js": "0.30.0",
26
+ "@aztec/ethereum": "0.30.0",
27
+ "@aztec/foundation": "0.30.0",
28
+ "@aztec/l1-artifacts": "0.30.0",
29
+ "@aztec/merkle-tree": "0.30.0",
30
+ "@aztec/noir-protocol-circuits-types": "0.30.0",
31
+ "@aztec/p2p": "0.30.0",
32
+ "@aztec/protocol-contracts": "0.30.0",
33
+ "@aztec/simulator": "0.30.0",
34
+ "@aztec/types": "0.30.0",
35
+ "@aztec/world-state": "0.30.0",
36
36
  "@noir-lang/acvm_js": "portal:../../noir/packages/acvm_js",
37
37
  "@noir-lang/types": "portal:../../noir/packages/types",
38
38
  "lodash.chunk": "^4.2.0",
@@ -13,14 +13,8 @@ export interface BlockBuilder {
13
13
  * Note that the number of txs need to be a power of two.
14
14
  * @param globalVariables - Global variables to include in the block.
15
15
  * @param txs - Processed txs to include.
16
- * @param newModelL1ToL2Messages - L1 to L2 messages emitted by the new inbox.
17
- * @param newL1ToL2Messages - L1 to L2 messages to be part of the block.
16
+ * @param l1ToL2Messages - L1 to L2 messages to be part of the block.
18
17
  * @returns The new L2 block along with its proof from the root circuit.
19
18
  */
20
- buildL2Block(
21
- globalVariables: GlobalVariables,
22
- txs: ProcessedTx[],
23
- newModelL1ToL2Messages: Fr[], // TODO(#4492): Rename this when purging the old inbox
24
- newL1ToL2Messages: Fr[], // TODO(#4492): Nuke this when purging the old inbox
25
- ): Promise<[L2Block, Proof]>;
19
+ buildL2Block(globalVariables: GlobalVariables, txs: ProcessedTx[], l1ToL2Messages: Fr[]): Promise<[L2Block, Proof]>;
26
20
  }
@@ -89,32 +89,28 @@ export class SoloBlockBuilder implements BlockBuilder {
89
89
  * Builds an L2 block with the given number containing the given txs, updating state trees.
90
90
  * @param globalVariables - Global variables to be used in the block.
91
91
  * @param txs - Processed transactions to include in the block.
92
- * @param newModelL1ToL2Messages - L1 to L2 messages emitted by the new inbox.
93
- * @param newL1ToL2Messages - L1 to L2 messages to be part of the block.
92
+ * @param l1ToL2Messages - L1 to L2 messages to be part of the block.
94
93
  * @param timestamp - Timestamp of the block.
95
94
  * @returns The new L2 block and a correctness proof as returned by the root rollup circuit.
96
95
  */
97
96
  public async buildL2Block(
98
97
  globalVariables: GlobalVariables,
99
98
  txs: ProcessedTx[],
100
- newModelL1ToL2Messages: Fr[], // TODO(#4492): Rename this when purging the old inbox
101
- newL1ToL2Messages: Fr[],
99
+ l1ToL2Messages: Fr[],
102
100
  ): Promise<[L2Block, Proof]> {
103
101
  // Check txs are good for processing by checking if all the tree snapshots in header are non-empty
104
102
  this.validateTxs(txs);
105
103
 
104
+ // We pad the messages as the circuits expect that.
105
+ const l1ToL2MessagesPadded = padArrayEnd(l1ToL2Messages, Fr.ZERO, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP);
106
+
106
107
  // We fill the tx batch with empty txs, we process only one tx at a time for now
107
- const [circuitsOutput, proof] = await this.runCircuits(
108
- globalVariables,
109
- txs,
110
- newModelL1ToL2Messages,
111
- newL1ToL2Messages,
112
- );
108
+ const [circuitsOutput, proof] = await this.runCircuits(globalVariables, txs, l1ToL2MessagesPadded);
113
109
 
114
110
  // Collect all new nullifiers, commitments, and contracts from all txs in this block
115
111
  const txEffects: TxEffect[] = txs.map(tx => toTxEffect(tx));
116
112
 
117
- const blockBody = new Body(padArrayEnd(newL1ToL2Messages, Fr.ZERO, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP), txEffects);
113
+ const blockBody = new Body(l1ToL2MessagesPadded, txEffects);
118
114
 
119
115
  const l2Block = L2Block.fromFields({
120
116
  archive: circuitsOutput.archive,
@@ -160,8 +156,7 @@ export class SoloBlockBuilder implements BlockBuilder {
160
156
  protected async runCircuits(
161
157
  globalVariables: GlobalVariables,
162
158
  txs: ProcessedTx[],
163
- newModelL1ToL2Messages: Fr[], // TODO(#4492): Rename this when purging the old inbox
164
- newL1ToL2Messages: Fr[], // TODO(#4492): Nuke this when purging the old inbox
159
+ l1ToL2Messages: Tuple<Fr, typeof NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP>,
165
160
  ): Promise<[RootRollupPublicInputs, Proof]> {
166
161
  // Check that the length of the array of txs is a power of two
167
162
  // See https://graphics.stanford.edu/~seander/bithacks.html#DetermineIfPowerOf2
@@ -170,16 +165,13 @@ export class SoloBlockBuilder implements BlockBuilder {
170
165
  }
171
166
 
172
167
  // BASE PARITY CIRCUIT (run in parallel)
168
+ // Note: In the future we will want to cache the results of empty base and root parity circuits so that we don't
169
+ // have to run them. (It will most likely be quite common that some base parity circuits will be "empty")
173
170
  let baseParityInputs: BaseParityInputs[] = [];
174
171
  let elapsedBaseParityOutputsPromise: Promise<[number, RootParityInput[]]>;
175
172
  {
176
- const newModelL1ToL2MessagesTuple = padArrayEnd(
177
- newModelL1ToL2Messages,
178
- Fr.ZERO,
179
- NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP,
180
- );
181
173
  baseParityInputs = Array.from({ length: NUM_BASE_PARITY_PER_ROOT_PARITY }, (_, i) =>
182
- BaseParityInputs.fromSlice(newModelL1ToL2MessagesTuple, i),
174
+ BaseParityInputs.fromSlice(l1ToL2Messages, i),
183
175
  );
184
176
 
185
177
  const baseParityOutputs: Promise<RootParityInput>[] = [];
@@ -189,9 +181,6 @@ export class SoloBlockBuilder implements BlockBuilder {
189
181
  elapsedBaseParityOutputsPromise = elapsed(() => Promise.all(baseParityOutputs));
190
182
  }
191
183
 
192
- // padArrayEnd throws if the array is already full. Otherwise it pads till we reach the required size
193
- const newL1ToL2MessagesTuple = padArrayEnd(newL1ToL2Messages, Fr.ZERO, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP);
194
-
195
184
  // BASE ROLLUP CIRCUIT (run in parallel)
196
185
  let elapsedBaseRollupOutputsPromise: Promise<[number, [BaseOrMergeRollupPublicInputs, Proof][]]>;
197
186
  const baseRollupInputs: BaseRollupInputs[] = [];
@@ -302,7 +291,7 @@ export class SoloBlockBuilder implements BlockBuilder {
302
291
  outputSize: rootParityOutput.toBuffer().length,
303
292
  } satisfies CircuitSimulationStats);
304
293
 
305
- return this.rootRollupCircuit(mergeOutputLeft, mergeOutputRight, rootParityOutput, newL1ToL2MessagesTuple);
294
+ return this.rootRollupCircuit(mergeOutputLeft, mergeOutputRight, rootParityOutput, l1ToL2Messages);
306
295
  }
307
296
 
308
297
  protected async baseParityCircuit(inputs: BaseParityInputs): Promise<RootParityInput> {
@@ -365,15 +354,15 @@ export class SoloBlockBuilder implements BlockBuilder {
365
354
  left: [BaseOrMergeRollupPublicInputs, Proof],
366
355
  right: [BaseOrMergeRollupPublicInputs, Proof],
367
356
  l1ToL2Roots: RootParityInput,
368
- newL1ToL2Messages: Tuple<Fr, typeof NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP>,
357
+ l1ToL2Messages: Tuple<Fr, typeof NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP>,
369
358
  ): Promise<[RootRollupPublicInputs, Proof]> {
370
359
  this.debug(`Running root rollup circuit`);
371
- const rootInput = await this.getRootRollupInput(...left, ...right, l1ToL2Roots, newL1ToL2Messages);
360
+ const rootInput = await this.getRootRollupInput(...left, ...right, l1ToL2Roots, l1ToL2Messages);
372
361
 
373
- // Update the local trees to include the new l1 to l2 messages
362
+ // Update the local trees to include the l1 to l2 messages
374
363
  await this.db.appendLeaves(
375
364
  MerkleTreeId.L1_TO_L2_MESSAGE_TREE,
376
- newL1ToL2Messages.map(m => m.toBuffer()),
365
+ l1ToL2Messages.map(m => m.toBuffer()),
377
366
  );
378
367
 
379
368
  // Simulate and get proof for the root circuit
@@ -690,8 +679,8 @@ export class SoloBlockBuilder implements BlockBuilder {
690
679
  const newPublicDataReadsPreimages: Tuple<PublicDataTreeLeafPreimage, typeof MAX_PUBLIC_DATA_READS_PER_TX> =
691
680
  makeTuple(MAX_PUBLIC_DATA_READS_PER_TX, () => PublicDataTreeLeafPreimage.empty());
692
681
 
693
- for (const i in tx.data.combinedData.publicDataReads) {
694
- const leafSlot = tx.data.combinedData.publicDataReads[i].leafSlot.value;
682
+ for (const i in tx.data.validationRequests.publicDataReads) {
683
+ const leafSlot = tx.data.validationRequests.publicDataReads[i].leafSlot.value;
695
684
  const lowLeafResult = await this.db.getPreviousValueIndex(MerkleTreeId.PUBLIC_DATA_TREE, leafSlot);
696
685
  if (!lowLeafResult) {
697
686
  throw new Error(`Public data tree should have one initial leaf`);
@@ -1,6 +1,7 @@
1
- import { ContractDataSource, L1ToL2MessageSource, L2BlockSource } from '@aztec/circuit-types';
1
+ import { L1ToL2MessageSource, L2BlockSource } from '@aztec/circuit-types';
2
2
  import { createDebugLogger } from '@aztec/foundation/log';
3
3
  import { P2P } from '@aztec/p2p';
4
+ import { ContractDataSource } from '@aztec/types/contracts';
4
5
  import { WorldStateSynchronizer } from '@aztec/world-state';
5
6
 
6
7
  import * as fs from 'fs/promises';
@@ -94,6 +95,7 @@ export class SequencerClient {
94
95
  l1ToL2MessageSource,
95
96
  publicProcessorFactory,
96
97
  config,
98
+ config.l1Contracts.gasPortalAddress,
97
99
  );
98
100
 
99
101
  await sequencer.start();
package/src/config.ts CHANGED
@@ -45,6 +45,8 @@ export function getConfigEnvVars(): SequencerClientConfig {
45
45
  REGISTRY_CONTRACT_ADDRESS,
46
46
  INBOX_CONTRACT_ADDRESS,
47
47
  OUTBOX_CONTRACT_ADDRESS,
48
+ GAS_TOKEN_CONTRACT_ADDRESS,
49
+ GAS_PORTAL_CONTRACT_ADDRESS,
48
50
  COINBASE,
49
51
  FEE_RECIPIENT,
50
52
  ACVM_WORKING_DIRECTORY,
@@ -63,6 +65,10 @@ export function getConfigEnvVars(): SequencerClientConfig {
63
65
  registryAddress: REGISTRY_CONTRACT_ADDRESS ? EthAddress.fromString(REGISTRY_CONTRACT_ADDRESS) : EthAddress.ZERO,
64
66
  inboxAddress: INBOX_CONTRACT_ADDRESS ? EthAddress.fromString(INBOX_CONTRACT_ADDRESS) : EthAddress.ZERO,
65
67
  outboxAddress: OUTBOX_CONTRACT_ADDRESS ? EthAddress.fromString(OUTBOX_CONTRACT_ADDRESS) : EthAddress.ZERO,
68
+ gasTokenAddress: GAS_TOKEN_CONTRACT_ADDRESS ? EthAddress.fromString(GAS_TOKEN_CONTRACT_ADDRESS) : EthAddress.ZERO,
69
+ gasPortalAddress: GAS_PORTAL_CONTRACT_ADDRESS
70
+ ? EthAddress.fromString(GAS_PORTAL_CONTRACT_ADDRESS)
71
+ : EthAddress.ZERO,
66
72
  };
67
73
 
68
74
  return {
@@ -11,14 +11,13 @@ import {
11
11
  MAX_NEW_L2_TO_L1_MSGS_PER_CALL,
12
12
  MAX_NEW_NOTE_HASHES_PER_CALL,
13
13
  MAX_NEW_NULLIFIERS_PER_CALL,
14
- MAX_NON_REVERTIBLE_PUBLIC_DATA_READS_PER_TX,
15
14
  MAX_NON_REVERTIBLE_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX,
16
15
  MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL,
17
16
  MAX_NULLIFIER_READ_REQUESTS_PER_CALL,
18
17
  MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL,
19
18
  MAX_PUBLIC_DATA_READS_PER_CALL,
19
+ MAX_PUBLIC_DATA_READS_PER_TX,
20
20
  MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL,
21
- MAX_REVERTIBLE_PUBLIC_DATA_READS_PER_TX,
22
21
  MAX_REVERTIBLE_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX,
23
22
  MembershipWitness,
24
23
  PrivateKernelTailCircuitPublicInputs,
@@ -291,15 +290,14 @@ export abstract class AbstractPhaseManager {
291
290
  const previousKernel = this.getPreviousKernelData(previousOutput, previousProof);
292
291
 
293
292
  if (this.phase === PublicKernelPhase.TAIL) {
294
- const { endNonRevertibleData, end } = previousOutput;
293
+ const { validationRequests, endNonRevertibleData, end } = previousOutput;
295
294
  const nullifierReadRequestHints = await this.hintsBuilder.getNullifierReadRequestHints(
296
- endNonRevertibleData.nullifierReadRequests,
297
- end.nullifierReadRequests,
295
+ validationRequests.nullifierReadRequests,
298
296
  endNonRevertibleData.newNullifiers,
299
297
  end.newNullifiers,
300
298
  );
301
299
  const nullifierNonExistentReadRequestHints = await this.hintsBuilder.getNullifierNonExistentReadRequestHints(
302
- endNonRevertibleData.nullifierNonExistentReadRequests,
300
+ validationRequests.nullifierNonExistentReadRequests,
303
301
  endNonRevertibleData.newNullifiers,
304
302
  end.newNullifiers,
305
303
  );
@@ -479,9 +477,8 @@ function patchPublicStorageActionOrdering(
479
477
  execResult: PublicExecutionResult,
480
478
  phase: PublicKernelPhase,
481
479
  ) {
482
- const { publicDataReads, publicDataUpdateRequests } = PhaseIsRevertible[phase]
483
- ? publicInputs.end
484
- : publicInputs.endNonRevertibleData;
480
+ const { publicDataUpdateRequests } = PhaseIsRevertible[phase] ? publicInputs.end : publicInputs.endNonRevertibleData;
481
+ const { publicDataReads } = publicInputs.validationRequests;
485
482
 
486
483
  // Convert ContractStorage* objects to PublicData* objects and sort them in execution order.
487
484
  // Note, this only pulls simulated reads/writes from the current phase,
@@ -518,14 +515,14 @@ function patchPublicStorageActionOrdering(
518
515
 
519
516
  const numReadsInKernel = arrayNonEmptyLength(publicDataReads, f => f.isEmpty());
520
517
  const numReadsBeforeThisEnqueuedCall = numReadsInKernel - simPublicDataReads.length;
521
- publicInputs[effectSet].publicDataReads = padArrayEnd(
518
+ publicInputs.validationRequests.publicDataReads = padArrayEnd(
522
519
  [
523
520
  // do not mess with items from previous top/enqueued calls in kernel output
524
- ...publicInputs[effectSet].publicDataReads.slice(0, numReadsBeforeThisEnqueuedCall),
521
+ ...publicInputs.validationRequests.publicDataReads.slice(0, numReadsBeforeThisEnqueuedCall),
525
522
  ...simPublicDataReads,
526
523
  ],
527
524
  PublicDataRead.empty(),
528
- PhaseIsRevertible[phase] ? MAX_REVERTIBLE_PUBLIC_DATA_READS_PER_TX : MAX_NON_REVERTIBLE_PUBLIC_DATA_READS_PER_TX,
525
+ MAX_PUBLIC_DATA_READS_PER_TX,
529
526
  );
530
527
 
531
528
  const numUpdatesInKernel = arrayNonEmptyLength(publicDataUpdateRequests, f => f.isEmpty());
@@ -13,7 +13,6 @@ import {
13
13
  buildNullifierNonExistentReadRequestHints,
14
14
  buildNullifierReadRequestHints,
15
15
  concatAccumulatedData,
16
- mergeAccumulatedData,
17
16
  } from '@aztec/circuits.js';
18
17
  import { Tuple } from '@aztec/foundation/serialize';
19
18
  import { MerkleTreeOperations } from '@aztec/world-state';
@@ -22,18 +21,13 @@ export class HintsBuilder {
22
21
  constructor(private db: MerkleTreeOperations) {}
23
22
 
24
23
  getNullifierReadRequestHints(
25
- nullifierReadRequestsNonRevertible: Tuple<ReadRequestContext, typeof MAX_NULLIFIER_READ_REQUESTS_PER_TX>,
26
- nullifierReadRequestsRevertible: Tuple<ReadRequestContext, typeof MAX_NULLIFIER_READ_REQUESTS_PER_TX>,
24
+ nullifierReadRequests: Tuple<ReadRequestContext, typeof MAX_NULLIFIER_READ_REQUESTS_PER_TX>,
27
25
  nullifiersNonRevertible: Tuple<SideEffectLinkedToNoteHash, typeof MAX_NON_REVERTIBLE_NULLIFIERS_PER_TX>,
28
26
  nullifiersRevertible: Tuple<SideEffectLinkedToNoteHash, typeof MAX_REVERTIBLE_NULLIFIERS_PER_TX>,
29
27
  ) {
30
28
  return buildNullifierReadRequestHints(
31
29
  this,
32
- mergeAccumulatedData(
33
- MAX_NULLIFIER_READ_REQUESTS_PER_TX,
34
- nullifierReadRequestsNonRevertible,
35
- nullifierReadRequestsRevertible,
36
- ),
30
+ nullifierReadRequests,
37
31
  concatAccumulatedData(MAX_NEW_NULLIFIERS_PER_TX, nullifiersNonRevertible, nullifiersRevertible),
38
32
  );
39
33
  }