@aztec/txe 4.0.0-devnet.1-patch.1 → 4.0.0-devnet.2-patch.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/dest/index.d.ts +1 -1
  2. package/dest/index.d.ts.map +1 -1
  3. package/dest/index.js +82 -50
  4. package/dest/oracle/txe_oracle_top_level_context.d.ts +4 -5
  5. package/dest/oracle/txe_oracle_top_level_context.d.ts.map +1 -1
  6. package/dest/oracle/txe_oracle_top_level_context.js +15 -16
  7. package/dest/rpc_translator.d.ts +3 -3
  8. package/dest/rpc_translator.d.ts.map +1 -1
  9. package/dest/rpc_translator.js +3 -3
  10. package/dest/state_machine/dummy_p2p_client.d.ts +5 -3
  11. package/dest/state_machine/dummy_p2p_client.d.ts.map +1 -1
  12. package/dest/state_machine/dummy_p2p_client.js +9 -3
  13. package/dest/state_machine/index.d.ts +1 -1
  14. package/dest/state_machine/index.d.ts.map +1 -1
  15. package/dest/state_machine/index.js +1 -1
  16. package/dest/txe_session.d.ts +4 -6
  17. package/dest/txe_session.d.ts.map +1 -1
  18. package/dest/txe_session.js +10 -14
  19. package/dest/util/txe_public_contract_data_source.d.ts +2 -3
  20. package/dest/util/txe_public_contract_data_source.d.ts.map +1 -1
  21. package/dest/util/txe_public_contract_data_source.js +5 -22
  22. package/package.json +15 -15
  23. package/src/index.ts +83 -49
  24. package/src/oracle/txe_oracle_top_level_context.ts +19 -17
  25. package/src/rpc_translator.ts +3 -3
  26. package/src/state_machine/dummy_p2p_client.ts +13 -5
  27. package/src/state_machine/index.ts +1 -0
  28. package/src/txe_session.ts +10 -13
  29. package/src/util/txe_public_contract_data_source.ts +10 -36
  30. package/dest/util/txe_contract_store.d.ts +0 -12
  31. package/dest/util/txe_contract_store.d.ts.map +0 -1
  32. package/dest/util/txe_contract_store.js +0 -22
  33. package/src/util/txe_contract_store.ts +0 -36
@@ -16,7 +16,7 @@ import type {
16
16
  StatusMessage,
17
17
  } from '@aztec/p2p';
18
18
  import type { EthAddress, L2BlockStreamEvent, L2Tips } from '@aztec/stdlib/block';
19
- import type { PeerInfo } from '@aztec/stdlib/interfaces/server';
19
+ import type { ITxProvider, PeerInfo } from '@aztec/stdlib/interfaces/server';
20
20
  import type { BlockProposal, CheckpointAttestation, CheckpointProposal } from '@aztec/stdlib/p2p';
21
21
  import type { BlockHeader, Tx, TxHash } from '@aztec/stdlib/tx';
22
22
 
@@ -99,6 +99,10 @@ export class DummyP2P implements P2P {
99
99
  throw new Error('DummyP2P does not implement "iteratePendingTxs"');
100
100
  }
101
101
 
102
+ public iterateEligiblePendingTxs(): AsyncIterableIterator<Tx> {
103
+ throw new Error('DummyP2P does not implement "iterateEligiblePendingTxs"');
104
+ }
105
+
102
106
  public getPendingTxCount(): Promise<number> {
103
107
  throw new Error('DummyP2P does not implement "getPendingTxCount"');
104
108
  }
@@ -127,6 +131,10 @@ export class DummyP2P implements P2P {
127
131
  throw new Error('DummyP2P does not implement "isP2PClient"');
128
132
  }
129
133
 
134
+ public getTxProvider(): ITxProvider {
135
+ throw new Error('DummyP2P does not implement "getTxProvider"');
136
+ }
137
+
130
138
  public getTxsByHash(_txHashes: TxHash[]): Promise<Tx[]> {
131
139
  throw new Error('DummyP2P does not implement "getTxsByHash"');
132
140
  }
@@ -167,10 +175,6 @@ export class DummyP2P implements P2P {
167
175
  throw new Error('DummyP2P does not implement "hasTxsInPool"');
168
176
  }
169
177
 
170
- public addTxsToPool(_txs: Tx[]): Promise<number> {
171
- throw new Error('DummyP2P does not implement "addTxs"');
172
- }
173
-
174
178
  public getSyncedLatestBlockNum(): Promise<number> {
175
179
  throw new Error('DummyP2P does not implement "getSyncedLatestBlockNum"');
176
180
  }
@@ -212,4 +216,8 @@ export class DummyP2P implements P2P {
212
216
  public registerDuplicateAttestationCallback(_callback: P2PDuplicateAttestationCallback): void {
213
217
  throw new Error('DummyP2P does not implement "registerDuplicateAttestationCallback"');
214
218
  }
219
+
220
+ public hasBlockProposalsForSlot(_slot: SlotNumber): Promise<boolean> {
221
+ throw new Error('DummyP2P does not implement "hasBlockProposalsForSlot"');
222
+ }
215
223
  }
@@ -50,6 +50,7 @@ export class TXEStateMachine {
50
50
  undefined,
51
51
  undefined,
52
52
  undefined,
53
+ undefined,
53
54
  VERSION,
54
55
  CHAIN_ID,
55
56
  new TXEGlobalVariablesBuilder(),
@@ -3,11 +3,12 @@ import { Fr } from '@aztec/foundation/curves/bn254';
3
3
  import { type Logger, createLogger } from '@aztec/foundation/log';
4
4
  import { KeyStore } from '@aztec/key-store';
5
5
  import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
6
- import type { ProtocolContract } from '@aztec/protocol-contracts';
6
+ import type { AccessScopes } from '@aztec/pxe/client/lazy';
7
7
  import {
8
8
  AddressStore,
9
9
  AnchorBlockStore,
10
10
  CapsuleStore,
11
+ ContractStore,
11
12
  JobCoordinator,
12
13
  NoteService,
13
14
  NoteStore,
@@ -54,7 +55,6 @@ import { TXEArchiver } from './state_machine/archiver.js';
54
55
  import { TXEStateMachine } from './state_machine/index.js';
55
56
  import type { ForeignCallArgs, ForeignCallResult } from './util/encoding.js';
56
57
  import { TXEAccountStore } from './util/txe_account_store.js';
57
- import { TXEContractStore } from './util/txe_contract_store.js';
58
58
  import { getSingleTxBlockRequestHash, insertTxEffectIntoWorldTrees, makeTXEBlock } from './utils/block_creation.js';
59
59
  import { makeTxEffect } from './utils/tx_effect_creation.js';
60
60
 
@@ -131,7 +131,7 @@ export class TXESession implements TXESessionStateHandler {
131
131
  | IPrivateExecutionOracle
132
132
  | IAvmExecutionOracle
133
133
  | ITxeExecutionOracle,
134
- private contractStore: TXEContractStore,
134
+ private contractStore: ContractStore,
135
135
  private noteStore: NoteStore,
136
136
  private keyStore: KeyStore,
137
137
  private addressStore: AddressStore,
@@ -148,12 +148,11 @@ export class TXESession implements TXESessionStateHandler {
148
148
  private nextBlockTimestamp: bigint,
149
149
  ) {}
150
150
 
151
- static async init(protocolContracts: ProtocolContract[]) {
151
+ static async init(contractStore: ContractStore) {
152
152
  const store = await openTmpStore('txe-session');
153
153
 
154
154
  const addressStore = new AddressStore(store);
155
155
  const privateEventStore = new PrivateEventStore(store);
156
- const contractStore = new TXEContractStore(store);
157
156
  const noteStore = new NoteStore(store);
158
157
  const senderTaggingStore = new SenderTaggingStore(store);
159
158
  const recipientTaggingStore = new RecipientTaggingStore(store);
@@ -172,12 +171,6 @@ export class TXESession implements TXESessionStateHandler {
172
171
  noteStore,
173
172
  ]);
174
173
 
175
- // Register protocol contracts.
176
- for (const { contractClass, instance, artifact } of protocolContracts) {
177
- await contractStore.addContractArtifact(contractClass.id, artifact);
178
- await contractStore.addContractInstance(instance);
179
- }
180
-
181
174
  const archiver = new TXEArchiver(store);
182
175
  const anchorBlockStore = new AnchorBlockStore(store);
183
176
  const stateMachine = await TXEStateMachine.create(archiver, anchorBlockStore, contractStore, noteStore);
@@ -323,6 +316,7 @@ export class TXESession implements TXESessionStateHandler {
323
316
 
324
317
  await new NoteService(this.noteStore, this.stateMachine.node, anchorBlock!, this.currentJobId).syncNoteNullifiers(
325
318
  contractAddress,
319
+ 'ALL_SCOPES',
326
320
  );
327
321
  const latestBlock = await this.stateMachine.node.getBlockHeader('latest');
328
322
 
@@ -362,6 +356,7 @@ export class TXESession implements TXESessionStateHandler {
362
356
  privateEventStore: this.privateEventStore,
363
357
  contractSyncService: this.stateMachine.contractSyncService,
364
358
  jobId: this.currentJobId,
359
+ scopes: 'ALL_SCOPES',
365
360
  });
366
361
 
367
362
  // We store the note and tagging index caches fed into the PrivateExecutionOracle (along with some other auxiliary
@@ -414,7 +409,7 @@ export class TXESession implements TXESessionStateHandler {
414
409
  this.stateMachine.node,
415
410
  anchorBlockHeader,
416
411
  this.currentJobId,
417
- ).syncNoteNullifiers(contractAddress);
412
+ ).syncNoteNullifiers(contractAddress, 'ALL_SCOPES');
418
413
 
419
414
  this.oracleHandler = new UtilityExecutionOracle({
420
415
  contractAddress,
@@ -431,6 +426,7 @@ export class TXESession implements TXESessionStateHandler {
431
426
  capsuleStore: this.capsuleStore,
432
427
  privateEventStore: this.privateEventStore,
433
428
  jobId: this.currentJobId,
429
+ scopes: 'ALL_SCOPES',
434
430
  });
435
431
 
436
432
  this.state = { name: 'UTILITY' };
@@ -499,7 +495,7 @@ export class TXESession implements TXESessionStateHandler {
499
495
  }
500
496
 
501
497
  private utilityExecutorForContractSync(anchorBlock: any) {
502
- return async (call: FunctionCall) => {
498
+ return async (call: FunctionCall, scopes: AccessScopes) => {
503
499
  const entryPointArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(call.to, call.selector);
504
500
  if (entryPointArtifact.functionType !== FunctionType.UTILITY) {
505
501
  throw new Error(`Cannot run ${entryPointArtifact.functionType} function as utility`);
@@ -521,6 +517,7 @@ export class TXESession implements TXESessionStateHandler {
521
517
  capsuleStore: this.capsuleStore,
522
518
  privateEventStore: this.privateEventStore,
523
519
  jobId: this.currentJobId,
520
+ scopes,
524
521
  });
525
522
  await new WASMSimulator()
526
523
  .executeUserCircuit(toACVMWitness(0, call.args), entryPointArtifact, new Oracle(oracle).toACIRCallback())
@@ -1,19 +1,11 @@
1
1
  import { BlockNumber } from '@aztec/foundation/branded-types';
2
2
  import { Fr } from '@aztec/foundation/curves/bn254';
3
3
  import type { ContractStore } from '@aztec/pxe/server';
4
- import { type ContractArtifact, FunctionSelector, FunctionType } from '@aztec/stdlib/abi';
4
+ import { type ContractArtifact, FunctionSelector } from '@aztec/stdlib/abi';
5
5
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
6
- import {
7
- type ContractClassPublic,
8
- type ContractDataSource,
9
- type ContractInstanceWithAddress,
10
- computePrivateFunctionsRoot,
11
- computePublicBytecodeCommitment,
12
- getContractClassPrivateFunctionFromArtifact,
13
- } from '@aztec/stdlib/contract';
6
+ import type { ContractClassPublic, ContractDataSource, ContractInstanceWithAddress } from '@aztec/stdlib/contract';
14
7
 
15
8
  export class TXEPublicContractDataSource implements ContractDataSource {
16
- #privateFunctionsRoot: Map<string, Buffer> = new Map();
17
9
  constructor(
18
10
  private blockNumber: BlockNumber,
19
11
  private contractStore: ContractStore,
@@ -24,42 +16,24 @@ export class TXEPublicContractDataSource implements ContractDataSource {
24
16
  }
25
17
 
26
18
  async getContractClass(id: Fr): Promise<ContractClassPublic | undefined> {
27
- const contractClass = await this.contractStore.getContractClass(id);
19
+ const contractClass = await this.contractStore.getContractClassWithPreimage(id);
28
20
  if (!contractClass) {
29
21
  return;
30
22
  }
31
- const artifact = await this.contractStore.getContractArtifact(id);
32
- if (!artifact) {
33
- return;
34
- }
35
-
36
- let privateFunctionsRoot;
37
- if (!this.#privateFunctionsRoot.has(id.toString())) {
38
- const privateFunctions = await Promise.all(
39
- artifact.functions
40
- .filter(fn => fn.functionType === FunctionType.PRIVATE)
41
- .map(fn => getContractClassPrivateFunctionFromArtifact(fn)),
42
- );
43
- privateFunctionsRoot = await computePrivateFunctionsRoot(privateFunctions);
44
- this.#privateFunctionsRoot.set(id.toString(), privateFunctionsRoot.toBuffer());
45
- } else {
46
- privateFunctionsRoot = Fr.fromBuffer(this.#privateFunctionsRoot.get(id.toString())!);
47
- }
48
-
49
23
  return {
50
- id,
51
- artifactHash: contractClass!.artifactHash,
52
- packedBytecode: contractClass!.packedBytecode,
53
- privateFunctionsRoot,
54
- version: contractClass!.version,
24
+ id: contractClass.id,
25
+ artifactHash: contractClass.artifactHash,
26
+ packedBytecode: contractClass.packedBytecode,
27
+ privateFunctionsRoot: contractClass.privateFunctionsRoot,
28
+ version: contractClass.version,
55
29
  privateFunctions: [],
56
30
  utilityFunctions: [],
57
31
  };
58
32
  }
59
33
 
60
34
  async getBytecodeCommitment(id: Fr): Promise<Fr | undefined> {
61
- const contractClass = await this.contractStore.getContractClass(id);
62
- return contractClass && computePublicBytecodeCommitment(contractClass.packedBytecode);
35
+ const contractClass = await this.contractStore.getContractClassWithPreimage(id);
36
+ return contractClass?.publicBytecodeCommitment;
63
37
  }
64
38
 
65
39
  async getContract(address: AztecAddress): Promise<ContractInstanceWithAddress | undefined> {
@@ -1,12 +0,0 @@
1
- import type { ContractArtifact } from '@aztec/aztec.js/abi';
2
- import { Fr } from '@aztec/aztec.js/fields';
3
- import { ContractStore } from '@aztec/pxe/server';
4
- export type ContractArtifactWithHash = ContractArtifact & {
5
- artifactHash: Fr;
6
- };
7
- export declare class TXEContractStore extends ContractStore {
8
- #private;
9
- addContractArtifact(id: Fr, artifact: ContractArtifact | ContractArtifactWithHash): Promise<void>;
10
- getContractArtifact(contractClassId: Fr): Promise<ContractArtifact | ContractArtifactWithHash | undefined>;
11
- }
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhlX2NvbnRyYWN0X3N0b3JlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC90eGVfY29udHJhY3Rfc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWxELE1BQU0sTUFBTSx3QkFBd0IsR0FBRyxnQkFBZ0IsR0FBRztJQUFFLFlBQVksRUFBRSxFQUFFLENBQUE7Q0FBRSxDQUFDO0FBTy9FLHFCQUFhLGdCQUFpQixTQUFRLGFBQWE7O0lBRzNCLG1CQUFtQixDQUN2QyxFQUFFLEVBQUUsRUFBRSxFQUNOLFFBQVEsRUFBRSxnQkFBZ0IsR0FBRyx3QkFBd0IsR0FDcEQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUtmO0lBRXFCLG1CQUFtQixDQUN2QyxlQUFlLEVBQUUsRUFBRSxHQUNsQixPQUFPLENBQUMsZ0JBQWdCLEdBQUcsd0JBQXdCLEdBQUcsU0FBUyxDQUFDLENBUWxFO0NBQ0YifQ==
@@ -1 +0,0 @@
1
- {"version":3,"file":"txe_contract_store.d.ts","sourceRoot":"","sources":["../../src/util/txe_contract_store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,MAAM,MAAM,wBAAwB,GAAG,gBAAgB,GAAG;IAAE,YAAY,EAAE,EAAE,CAAA;CAAE,CAAC;AAO/E,qBAAa,gBAAiB,SAAQ,aAAa;;IAG3B,mBAAmB,CACvC,EAAE,EAAE,EAAE,EACN,QAAQ,EAAE,gBAAgB,GAAG,wBAAwB,GACpD,OAAO,CAAC,IAAI,CAAC,CAKf;IAEqB,mBAAmB,CACvC,eAAe,EAAE,EAAE,GAClB,OAAO,CAAC,gBAAgB,GAAG,wBAAwB,GAAG,SAAS,CAAC,CAQlE;CACF"}
@@ -1,22 +0,0 @@
1
- import { Fr } from '@aztec/aztec.js/fields';
2
- import { ContractStore } from '@aztec/pxe/server';
3
- /*
4
- * A contract store that stores contract artifacts with their hashes. Since
5
- * TXE typically deploys the same contract again and again for multiple tests, caching
6
- * the *very* expensive artifact hash computation improves testing speed significantly.
7
- */ export class TXEContractStore extends ContractStore {
8
- #artifactHashes = new Map();
9
- async addContractArtifact(id, artifact) {
10
- if ('artifactHash' in artifact) {
11
- this.#artifactHashes.set(id.toString(), artifact.artifactHash.toBuffer());
12
- }
13
- await super.addContractArtifact(id, artifact);
14
- }
15
- async getContractArtifact(contractClassId) {
16
- const artifact = await super.getContractArtifact(contractClassId);
17
- if (artifact && this.#artifactHashes.has(contractClassId.toString())) {
18
- artifact.artifactHash = Fr.fromBuffer(this.#artifactHashes.get(contractClassId.toString()));
19
- }
20
- return artifact;
21
- }
22
- }
@@ -1,36 +0,0 @@
1
- import type { ContractArtifact } from '@aztec/aztec.js/abi';
2
- import { Fr } from '@aztec/aztec.js/fields';
3
- import { ContractStore } from '@aztec/pxe/server';
4
-
5
- export type ContractArtifactWithHash = ContractArtifact & { artifactHash: Fr };
6
-
7
- /*
8
- * A contract store that stores contract artifacts with their hashes. Since
9
- * TXE typically deploys the same contract again and again for multiple tests, caching
10
- * the *very* expensive artifact hash computation improves testing speed significantly.
11
- */
12
- export class TXEContractStore extends ContractStore {
13
- #artifactHashes: Map<string, Buffer> = new Map();
14
-
15
- public override async addContractArtifact(
16
- id: Fr,
17
- artifact: ContractArtifact | ContractArtifactWithHash,
18
- ): Promise<void> {
19
- if ('artifactHash' in artifact) {
20
- this.#artifactHashes.set(id.toString(), artifact.artifactHash.toBuffer());
21
- }
22
- await super.addContractArtifact(id, artifact);
23
- }
24
-
25
- public override async getContractArtifact(
26
- contractClassId: Fr,
27
- ): Promise<ContractArtifact | ContractArtifactWithHash | undefined> {
28
- const artifact = await super.getContractArtifact(contractClassId);
29
- if (artifact && this.#artifactHashes.has(contractClassId.toString())) {
30
- (artifact as ContractArtifactWithHash).artifactHash = Fr.fromBuffer(
31
- this.#artifactHashes.get(contractClassId.toString())!,
32
- );
33
- }
34
- return artifact;
35
- }
36
- }