@aztec/txe 0.46.7 → 0.47.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.
@@ -1,5 +1,6 @@
1
+ import { SchnorrAccountContractArtifact } from '@aztec/accounts/schnorr';
1
2
  import { L2Block, MerkleTreeId, PublicDataWrite } from '@aztec/circuit-types';
2
- import { Fr, FunctionSelector, Header, KeyValidationRequest, PUBLIC_DATA_SUBTREE_HEIGHT, Point, PublicDataTreeLeaf, getContractInstanceFromDeployParams, } from '@aztec/circuits.js';
3
+ import { Fr, FunctionSelector, Header, KeyValidationRequest, PUBLIC_DATA_SUBTREE_HEIGHT, Point, PublicDataTreeLeaf, computePartialAddress, getContractInstanceFromDeployParams, } from '@aztec/circuits.js';
3
4
  import { computePublicDataTreeLeafSlot } from '@aztec/circuits.js/hash';
4
5
  import { NoteSelector } from '@aztec/foundation/abi';
5
6
  import { AztecAddress } from '@aztec/foundation/aztec-address';
@@ -66,20 +67,14 @@ export class TXEService {
66
67
  const keys = this.typedOracle.deriveKeys(fromSingle(secret));
67
68
  return toForeignCallResult(keys.publicKeys.toFields().map(toSingle));
68
69
  }
69
- async deploy(path, initializer, _length, args, publicKeysHash) {
70
- const pathStr = fromArray(path)
71
- .map(char => String.fromCharCode(char.toNumber()))
72
- .join('');
70
+ async deploy(artifact, initializer, _length, args, publicKeysHash) {
73
71
  const initializerStr = fromArray(initializer)
74
72
  .map(char => String.fromCharCode(char.toNumber()))
75
73
  .join('');
76
74
  const decodedArgs = fromArray(args);
77
75
  const publicKeysHashFr = fromSingle(publicKeysHash);
78
- this.logger.debug(`Deploy ${pathStr} with initializer ${initializerStr}(${decodedArgs}) and public keys hash ${publicKeysHashFr}`);
79
- const contractModule = await import(pathStr);
80
- // Hacky way of getting the class, the name of the Artifact is always longer
81
- const contractClass = contractModule[Object.keys(contractModule).sort((a, b) => a.length - b.length)[0]];
82
- const instance = getContractInstanceFromDeployParams(contractClass.artifact, {
76
+ this.logger.debug(`Deploy ${artifact.name} with initializer ${initializerStr}(${decodedArgs}) and public keys hash ${publicKeysHashFr}`);
77
+ const instance = getContractInstanceFromDeployParams(artifact, {
83
78
  constructorArgs: decodedArgs,
84
79
  skipArgsDecoding: true,
85
80
  salt: Fr.ONE,
@@ -87,9 +82,9 @@ export class TXEService {
87
82
  constructorArtifact: initializerStr ? initializerStr : undefined,
88
83
  deployer: AztecAddress.ZERO,
89
84
  });
90
- this.logger.debug(`Deployed ${contractClass.artifact.name} at ${instance.address}`);
85
+ this.logger.debug(`Deployed ${artifact.name} at ${instance.address}`);
91
86
  await this.typedOracle.addContractInstance(instance);
92
- await this.typedOracle.addContractArtifact(contractClass.artifact);
87
+ await this.typedOracle.addContractArtifact(artifact);
93
88
  return toForeignCallResult([
94
89
  toArray([
95
90
  instance.salt,
@@ -125,9 +120,24 @@ export class TXEService {
125
120
  ...completeAddress.publicKeys.toFields().map(toSingle),
126
121
  ]);
127
122
  }
128
- async addAccount(secret, partialAddress) {
123
+ async addAccount(secret) {
124
+ const keys = this.typedOracle.deriveKeys(fromSingle(secret));
125
+ const args = [keys.publicKeys.masterIncomingViewingPublicKey.x, keys.publicKeys.masterIncomingViewingPublicKey.y];
126
+ const hash = keys.publicKeys.hash();
127
+ const artifact = SchnorrAccountContractArtifact;
128
+ const instance = getContractInstanceFromDeployParams(artifact, {
129
+ constructorArgs: args,
130
+ skipArgsDecoding: true,
131
+ salt: Fr.ONE,
132
+ publicKeysHash: hash,
133
+ constructorArtifact: 'constructor',
134
+ deployer: AztecAddress.ZERO,
135
+ });
136
+ this.logger.debug(`Deployed ${artifact.name} at ${instance.address}`);
137
+ await this.typedOracle.addContractInstance(instance);
138
+ await this.typedOracle.addContractArtifact(artifact);
129
139
  const keyStore = this.typedOracle.getKeyStore();
130
- const completeAddress = await keyStore.addAccount(fromSingle(secret), fromSingle(partialAddress));
140
+ const completeAddress = await keyStore.addAccount(fromSingle(secret), computePartialAddress(instance));
131
141
  const accountStore = this.typedOracle.getTXEDatabase();
132
142
  await accountStore.setAccount(completeAddress.address, completeAddress);
133
143
  this.logger.debug(`Created account ${completeAddress.address}`);
@@ -360,11 +370,11 @@ export class TXEService {
360
370
  const keyValidationRequest = await this.typedOracle.getKeyValidationRequest(fromSingle(pkMHash));
361
371
  return toForeignCallResult([toArray(keyValidationRequest.toFields())]);
362
372
  }
363
- computeEncryptedNoteLog(contractAddress, storageSlot, noteTypeId, ovskApp, ovpkMX, ovpkMY, ovpkMIsInfinite, ivpkMX, ivpkMY, ivpkMIsInfinite, preimage) {
373
+ computeEncryptedNoteLog(contractAddress, storageSlot, noteTypeId, ovskApp, ovpkMX, ovpkMY, ovpkMIsInfinite, ivpkMX, ivpkMY, ivpkMIsInfinite, recipient, preimage) {
364
374
  const ovpkM = new Point(fromSingle(ovpkMX), fromSingle(ovpkMY), !fromSingle(ovpkMIsInfinite).isZero());
365
375
  const ovKeys = new KeyValidationRequest(ovpkM, Fr.fromString(fromSingle(ovskApp).toString()));
366
376
  const ivpkM = new Point(fromSingle(ivpkMX), fromSingle(ivpkMY), !fromSingle(ivpkMIsInfinite).isZero());
367
- const encLog = this.typedOracle.computeEncryptedNoteLog(AztecAddress.fromString(fromSingle(contractAddress).toString()), Fr.fromString(fromSingle(storageSlot).toString()), NoteSelector.fromField(Fr.fromString(fromSingle(noteTypeId).toString())), ovKeys, ivpkM, fromArray(preimage));
377
+ const encLog = this.typedOracle.computeEncryptedNoteLog(AztecAddress.fromString(fromSingle(contractAddress).toString()), Fr.fromString(fromSingle(storageSlot).toString()), NoteSelector.fromField(Fr.fromString(fromSingle(noteTypeId).toString())), ovKeys, ivpkM, AztecAddress.fromString(fromSingle(recipient).toString()), fromArray(preimage));
368
378
  const bytes = [];
369
379
  encLog.forEach(v => {
370
380
  bytes.push(new Fr(v));
@@ -382,7 +392,7 @@ export class TXEService {
382
392
  }
383
393
  async callPrivateFunction(targetContractAddress, functionSelector, argsHash, sideEffectCounter, isStaticCall, isDelegateCall) {
384
394
  const result = await this.typedOracle.callPrivateFunction(fromSingle(targetContractAddress), FunctionSelector.fromField(fromSingle(functionSelector)), fromSingle(argsHash), fromSingle(sideEffectCounter).toNumber(), fromSingle(isStaticCall).toBool(), fromSingle(isDelegateCall).toBool());
385
- return toForeignCallResult([toArray(result.toFields())]);
395
+ return toForeignCallResult([toArray([result.endSideEffectCounter, result.returnsHash])]);
386
396
  }
387
397
  async getNullifierMembershipWitness(blockNumber, nullifier) {
388
398
  const parsedBlockNumber = fromSingle(blockNumber).toNumber();
@@ -401,26 +411,12 @@ export class TXEService {
401
411
  return toForeignCallResult([toArray(authWitness)]);
402
412
  }
403
413
  async enqueuePublicFunctionCall(targetContractAddress, functionSelector, argsHash, sideEffectCounter, isStaticCall, isDelegateCall) {
404
- const publicCallRequest = await this.typedOracle.enqueuePublicFunctionCall(fromSingle(targetContractAddress), FunctionSelector.fromField(fromSingle(functionSelector)), fromSingle(argsHash), fromSingle(sideEffectCounter).toNumber(), fromSingle(isStaticCall).toBool(), fromSingle(isDelegateCall).toBool());
405
- const fields = [
406
- publicCallRequest.contractAddress.toField(),
407
- publicCallRequest.functionSelector.toField(),
408
- ...publicCallRequest.callContext.toFields(),
409
- fromSingle(sideEffectCounter),
410
- publicCallRequest.getArgsHash(),
411
- ];
412
- return toForeignCallResult([toArray(fields)]);
414
+ await this.typedOracle.enqueuePublicFunctionCall(fromSingle(targetContractAddress), FunctionSelector.fromField(fromSingle(functionSelector)), fromSingle(argsHash), fromSingle(sideEffectCounter).toNumber(), fromSingle(isStaticCall).toBool(), fromSingle(isDelegateCall).toBool());
415
+ return toForeignCallResult([]);
413
416
  }
414
417
  async setPublicTeardownFunctionCall(targetContractAddress, functionSelector, argsHash, sideEffectCounter, isStaticCall, isDelegateCall) {
415
- const publicTeardownCallRequest = await this.typedOracle.setPublicTeardownFunctionCall(fromSingle(targetContractAddress), FunctionSelector.fromField(fromSingle(functionSelector)), fromSingle(argsHash), fromSingle(sideEffectCounter).toNumber(), fromSingle(isStaticCall).toBool(), fromSingle(isDelegateCall).toBool());
416
- const fields = [
417
- publicTeardownCallRequest.contractAddress.toField(),
418
- publicTeardownCallRequest.functionSelector.toField(),
419
- ...publicTeardownCallRequest.callContext.toFields(),
420
- fromSingle(sideEffectCounter),
421
- publicTeardownCallRequest.getArgsHash(),
422
- ];
423
- return toForeignCallResult([toArray(fields)]);
418
+ await this.typedOracle.setPublicTeardownFunctionCall(fromSingle(targetContractAddress), FunctionSelector.fromField(fromSingle(functionSelector)), fromSingle(argsHash), fromSingle(sideEffectCounter).toNumber(), fromSingle(isStaticCall).toBool(), fromSingle(isDelegateCall).toBool());
419
+ return toForeignCallResult([]);
424
420
  }
425
421
  async getChainId() {
426
422
  return toForeignCallResult([toSingle(await this.typedOracle.getChainId())]);
@@ -437,4 +433,4 @@ export class TXEService {
437
433
  return toForeignCallResult([]);
438
434
  }
439
435
  }
440
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhlX3NlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHhlX3NlcnZpY2UvdHhlX3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUUsT0FBTyxFQUNMLEVBQUUsRUFDRixnQkFBZ0IsRUFDaEIsTUFBTSxFQUNOLG9CQUFvQixFQUNwQiwwQkFBMEIsRUFDMUIsS0FBSyxFQUNMLGtCQUFrQixFQUNsQixtQ0FBbUMsR0FDcEMsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRS9ELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFvQixNQUFNLGtCQUFrQixDQUFDO0FBQzNGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVqRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUMsT0FBTyxFQUdMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsT0FBTyxFQUNQLG1CQUFtQixFQUNuQixRQUFRLEdBQ1QsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFdEQsTUFBTSxPQUFPLFVBQVU7SUFDckIsWUFBb0IsTUFBYyxFQUFVLFdBQXdC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
436
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhlX3NlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHhlX3NlcnZpY2UvdHhlX3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekUsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUUsT0FBTyxFQUNMLEVBQUUsRUFDRixnQkFBZ0IsRUFDaEIsTUFBTSxFQUNOLG9CQUFvQixFQUNwQiwwQkFBMEIsRUFDMUIsS0FBSyxFQUNMLGtCQUFrQixFQUNsQixxQkFBcUIsRUFDckIsbUNBQW1DLEdBQ3BDLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEUsT0FBTyxFQUF5QixZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFL0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQW9CLE1BQU0sa0JBQWtCLENBQUM7QUFDM0YsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWpELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5QyxPQUFPLEVBR0wsU0FBUyxFQUNULFVBQVUsRUFDVixPQUFPLEVBQ1AsbUJBQW1CLEVBQ25CLFFBQVEsR0FDVCxNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/txe",
3
- "version": "0.46.7",
3
+ "version": "0.47.1",
4
4
  "type": "module",
5
5
  "exports": "./dest/index.js",
6
6
  "bin": "./dest/bin/index.js",
@@ -57,18 +57,18 @@
57
57
  ]
58
58
  },
59
59
  "dependencies": {
60
- "@aztec/archiver": "0.46.7",
61
- "@aztec/aztec.js": "0.46.7",
62
- "@aztec/circuit-types": "0.46.7",
63
- "@aztec/circuits.js": "0.46.7",
64
- "@aztec/foundation": "0.46.7",
65
- "@aztec/key-store": "0.46.7",
66
- "@aztec/kv-store": "0.46.7",
67
- "@aztec/noir-contracts.js": "0.46.7",
68
- "@aztec/pxe": "0.46.7",
69
- "@aztec/simulator": "0.46.7",
70
- "@aztec/types": "0.46.7",
71
- "@aztec/world-state": "0.46.7"
60
+ "@aztec/accounts": "0.47.1",
61
+ "@aztec/archiver": "0.47.1",
62
+ "@aztec/aztec.js": "0.47.1",
63
+ "@aztec/circuit-types": "0.47.1",
64
+ "@aztec/circuits.js": "0.47.1",
65
+ "@aztec/foundation": "0.47.1",
66
+ "@aztec/key-store": "0.47.1",
67
+ "@aztec/kv-store": "0.47.1",
68
+ "@aztec/pxe": "0.47.1",
69
+ "@aztec/simulator": "0.47.1",
70
+ "@aztec/types": "0.47.1",
71
+ "@aztec/world-state": "0.47.1"
72
72
  },
73
73
  "devDependencies": {
74
74
  "@jest/globals": "^29.5.0",
package/src/index.ts CHANGED
@@ -1,9 +1,13 @@
1
+ import { loadContractArtifact } from '@aztec/aztec.js';
1
2
  import { Fr } from '@aztec/foundation/fields';
2
3
  import { JsonRpcServer } from '@aztec/foundation/json-rpc/server';
3
4
  import { type Logger } from '@aztec/foundation/log';
4
5
 
6
+ import { readFile, readdir } from 'fs/promises';
7
+ import { join } from 'path';
8
+
5
9
  import { TXEService } from './txe_service/txe_service.js';
6
- import { type ForeignCallResult, toForeignCallResult } from './util/encoding.js';
10
+ import { type ForeignCallArray, type ForeignCallResult, fromArray, toForeignCallResult } from './util/encoding.js';
7
11
 
8
12
  const TXESessions = new Map<number, TXEService>();
9
13
 
@@ -14,18 +18,50 @@ type MethodNames<T> = {
14
18
  type TXEForeignCallInput = {
15
19
  session_id: number;
16
20
  function: MethodNames<TXEService> | 'reset';
21
+ root_path: string;
22
+ package_name: string;
17
23
  inputs: any[];
18
24
  };
19
25
 
20
26
  class TXEDispatcher {
21
27
  constructor(private logger: Logger) {}
22
28
 
29
+ async #processDeployInputs({ inputs, root_path: rootPath, package_name: packageName }: TXEForeignCallInput) {
30
+ const pathStr = fromArray(inputs[0] as ForeignCallArray)
31
+ .map(char => String.fromCharCode(char.toNumber()))
32
+ .join('');
33
+ const contractName = fromArray(inputs[1] as ForeignCallArray)
34
+ .map(char => String.fromCharCode(char.toNumber()))
35
+ .join('');
36
+ let artifactPath = '';
37
+ // We're deploying the contract under test
38
+ // env.deploy_self("contractName")
39
+ if (!pathStr) {
40
+ artifactPath = join(rootPath, './target', `${packageName}-${contractName}.json`);
41
+ } else {
42
+ // We're deploying a contract that belongs in a workspace
43
+ // env.deploy("../path/to/workspace/root@packageName", "contractName")
44
+ if (pathStr.includes('@')) {
45
+ const [workspace, pkg] = pathStr.split('@');
46
+ const targetPath = join(rootPath, workspace, './target');
47
+ this.logger.debug(`Looking for compiled artifact in workspace ${targetPath}`);
48
+ artifactPath = join(targetPath, `${pkg}-${contractName}.json`);
49
+ } else {
50
+ // We're deploying a standalone contract
51
+ // env.deploy("../path/to/contract/root", "contractName")
52
+ const targetPath = join(rootPath, pathStr, './target');
53
+ this.logger.debug(`Looking for compiled artifact in ${targetPath}`);
54
+ [artifactPath] = (await readdir(targetPath)).filter(file => file.endsWith(`-${contractName}.json`));
55
+ }
56
+ }
57
+ this.logger.debug(`Loading compiled artifact ${artifactPath}`);
58
+ const artifact = loadContractArtifact(JSON.parse(await readFile(artifactPath, 'utf-8')));
59
+ inputs.splice(0, 2, artifact);
60
+ }
61
+
23
62
  // eslint-disable-next-line camelcase
24
- async resolve_foreign_call({
25
- session_id: sessionId,
26
- function: functionName,
27
- inputs,
28
- }: TXEForeignCallInput): Promise<ForeignCallResult> {
63
+ async resolve_foreign_call(callData: TXEForeignCallInput): Promise<ForeignCallResult> {
64
+ const { session_id: sessionId, function: functionName, inputs } = callData;
29
65
  this.logger.debug(`Calling ${functionName} on session ${sessionId}`);
30
66
 
31
67
  if (!TXESessions.has(sessionId) && functionName != 'reset') {
@@ -33,14 +69,22 @@ class TXEDispatcher {
33
69
  TXESessions.set(sessionId, await TXEService.init(this.logger));
34
70
  }
35
71
 
36
- if (functionName === 'reset') {
37
- TXESessions.delete(sessionId) &&
38
- this.logger.info(`Called reset on session ${sessionId}, yeeting it out of existence`);
39
- return toForeignCallResult([]);
40
- } else {
41
- const txeService = TXESessions.get(sessionId);
42
- const response = await (txeService as any)[functionName](...inputs);
43
- return response;
72
+ switch (functionName) {
73
+ case 'reset': {
74
+ TXESessions.delete(sessionId) &&
75
+ this.logger.info(`Called reset on session ${sessionId}, yeeting it out of existence`);
76
+ return toForeignCallResult([]);
77
+ }
78
+ case 'deploy': {
79
+ // Modify inputs and fall through
80
+ await this.#processDeployInputs(callData);
81
+ }
82
+ // eslint-disable-next-line no-fallthrough
83
+ default: {
84
+ const txeService = TXESessions.get(sessionId);
85
+ const response = await (txeService as any)[functionName](...inputs);
86
+ return response;
87
+ }
44
88
  }
45
89
  }
46
90
  }