@aztec/txe 0.74.0 → 0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2

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 (36) hide show
  1. package/dest/bin/index.js +3 -5
  2. package/dest/index.js +112 -64
  3. package/dest/node/txe_node.js +292 -338
  4. package/dest/oracle/txe_oracle.js +208 -147
  5. package/dest/txe_service/txe_service.js +194 -118
  6. package/dest/util/encoding.js +16 -7
  7. package/dest/util/expected_failure_error.js +1 -2
  8. package/dest/util/txe_database.js +5 -9
  9. package/dest/util/txe_public_contract_data_source.js +21 -12
  10. package/dest/util/txe_world_state_db.js +7 -8
  11. package/package.json +14 -15
  12. package/src/index.ts +109 -35
  13. package/src/node/txe_node.ts +4 -0
  14. package/src/oracle/txe_oracle.ts +8 -29
  15. package/src/txe_service/txe_service.ts +14 -46
  16. package/src/util/encoding.ts +3 -3
  17. package/dest/bin/index.d.ts +0 -3
  18. package/dest/bin/index.d.ts.map +0 -1
  19. package/dest/index.d.ts +0 -8
  20. package/dest/index.d.ts.map +0 -1
  21. package/dest/node/txe_node.d.ts +0 -354
  22. package/dest/node/txe_node.d.ts.map +0 -1
  23. package/dest/oracle/txe_oracle.d.ts +0 -132
  24. package/dest/oracle/txe_oracle.d.ts.map +0 -1
  25. package/dest/txe_service/txe_service.d.ts +0 -204
  26. package/dest/txe_service/txe_service.d.ts.map +0 -1
  27. package/dest/util/encoding.d.ts +0 -29
  28. package/dest/util/encoding.d.ts.map +0 -1
  29. package/dest/util/expected_failure_error.d.ts +0 -4
  30. package/dest/util/expected_failure_error.d.ts.map +0 -1
  31. package/dest/util/txe_database.d.ts +0 -10
  32. package/dest/util/txe_database.d.ts.map +0 -1
  33. package/dest/util/txe_public_contract_data_source.d.ts +0 -18
  34. package/dest/util/txe_public_contract_data_source.d.ts.map +0 -1
  35. package/dest/util/txe_world_state_db.d.ts +0 -16
  36. package/dest/util/txe_world_state_db.d.ts.map +0 -1
@@ -1,4 +1,4 @@
1
- import { AztecAddress } from '@aztec/circuits.js';
1
+ import { AztecAddress, ContractInstanceWithAddressSchema } from '@aztec/circuits.js';
2
2
  import { ContractArtifactSchema } from '@aztec/foundation/abi';
3
3
  import { Fr } from '@aztec/foundation/fields';
4
4
  import { hexToBuffer } from '@aztec/foundation/string';
@@ -10,21 +10,30 @@ export function addressFromSingle(obj) {
10
10
  return new AztecAddress(fromSingle(obj));
11
11
  }
12
12
  export function fromArray(obj) {
13
- return obj.map(str => Fr.fromBuffer(hexToBuffer(str)));
13
+ return obj.map((str)=>Fr.fromBuffer(hexToBuffer(str)));
14
14
  }
15
15
  export function toSingle(obj) {
16
16
  return obj.toString().slice(2);
17
17
  }
18
18
  export function toArray(objs) {
19
- return objs.map(obj => obj.toString());
19
+ return objs.map((obj)=>obj.toString());
20
20
  }
21
21
  export function toForeignCallResult(obj) {
22
- return { values: obj };
22
+ return {
23
+ values: obj
24
+ };
23
25
  }
24
26
  export const ForeignCallSingleSchema = z.string();
25
27
  export const ForeignCallArraySchema = z.array(z.string());
26
- export const ForeignCallArgsSchema = z.array(z.union([ForeignCallSingleSchema, ForeignCallArraySchema, ContractArtifactSchema]));
28
+ export const ForeignCallArgsSchema = z.array(z.union([
29
+ ForeignCallSingleSchema,
30
+ ForeignCallArraySchema,
31
+ ContractArtifactSchema,
32
+ ContractInstanceWithAddressSchema
33
+ ]));
27
34
  export const ForeignCallResultSchema = z.object({
28
- values: z.array(z.union([ForeignCallSingleSchema, ForeignCallArraySchema])),
35
+ values: z.array(z.union([
36
+ ForeignCallSingleSchema,
37
+ ForeignCallArraySchema
38
+ ]))
29
39
  });
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5jb2RpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC9lbmNvZGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUF5QixzQkFBc0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdkQsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQVl4QixNQUFNLFVBQVUsVUFBVSxDQUFDLEdBQXNCO0lBQy9DLE9BQU8sRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFFRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsR0FBc0I7SUFDdEQsT0FBTyxJQUFJLFlBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBRUQsTUFBTSxVQUFVLFNBQVMsQ0FBQyxHQUFxQjtJQUM3QyxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekQsQ0FBQztBQUVELE1BQU0sVUFBVSxRQUFRLENBQUMsR0FBc0I7SUFDN0MsT0FBTyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLENBQUM7QUFFRCxNQUFNLFVBQVUsT0FBTyxDQUFDLElBQVU7SUFDaEMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFDekMsQ0FBQztBQUVELE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxHQUE2QztJQUMvRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3pCLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7QUFFbEQsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUUxRCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUMxQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsdUJBQXVCLEVBQUUsc0JBQXNCLEVBQUUsc0JBQXNCLENBQUMsQ0FBQyxDQUNuRixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM5QyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsdUJBQXVCLEVBQUUsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO0NBQzVFLENBQUMsQ0FBQyJ9
@@ -1,6 +1,5 @@
1
1
  export class ExpectedFailureError extends Error {
2
- constructor(message) {
2
+ constructor(message){
3
3
  super(message);
4
4
  }
5
5
  }
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwZWN0ZWRfZmFpbHVyZV9lcnJvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL2V4cGVjdGVkX2ZhaWx1cmVfZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLG9CQUFxQixTQUFRLEtBQUs7SUFDN0MsWUFBWSxPQUFlO1FBQ3pCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQixDQUFDO0NBQ0YifQ==
@@ -1,24 +1,20 @@
1
- var _TXEDatabase_accounts;
2
- import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
3
1
  import { CompleteAddress } from '@aztec/circuits.js';
4
2
  import { KVPxeDatabase } from '@aztec/pxe';
5
3
  export class TXEDatabase extends KVPxeDatabase {
6
- constructor(db) {
4
+ #accounts;
5
+ constructor(db){
7
6
  super(db);
8
- _TXEDatabase_accounts.set(this, void 0);
9
- __classPrivateFieldSet(this, _TXEDatabase_accounts, db.openMap('accounts'), "f");
7
+ this.#accounts = db.openMap('accounts');
10
8
  }
11
9
  async getAccount(key) {
12
- const completeAddress = await __classPrivateFieldGet(this, _TXEDatabase_accounts, "f").getAsync(key.toString());
10
+ const completeAddress = await this.#accounts.getAsync(key.toString());
13
11
  if (!completeAddress) {
14
12
  throw new Error(`Account not found: ${key.toString()}`);
15
13
  }
16
14
  return CompleteAddress.fromBuffer(completeAddress);
17
15
  }
18
16
  async setAccount(key, value) {
19
- await __classPrivateFieldGet(this, _TXEDatabase_accounts, "f").set(key.toString(), value.toBuffer());
17
+ await this.#accounts.set(key.toString(), value.toBuffer());
20
18
  await this.addCompleteAddress(value);
21
19
  }
22
20
  }
23
- _TXEDatabase_accounts = new WeakMap();
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhlX2RhdGFiYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWwvdHhlX2RhdGFiYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFxQixlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUV4RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRTNDLE1BQU0sT0FBTyxXQUFZLFNBQVEsYUFBYTtJQUc1QyxZQUFZLEVBQXFCO1FBQy9CLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUhaLHdDQUF5QztRQUl2Qyx1QkFBQSxJQUFJLHlCQUFhLEVBQUUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQUEsQ0FBQztJQUMxQyxDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFpQjtRQUNoQyxNQUFNLGVBQWUsR0FBRyxNQUFNLHVCQUFBLElBQUksNkJBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLEdBQUcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDMUQsQ0FBQztRQUNELE9BQU8sZUFBZSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFpQixFQUFFLEtBQXNCO1FBQ3hELE1BQU0sdUJBQUEsSUFBSSw2QkFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDM0QsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkMsQ0FBQztDQUNGIn0=
@@ -1,7 +1,8 @@
1
- import { Fr, FunctionSelector, PUBLIC_DISPATCH_SELECTOR, computePublicBytecodeCommitment, } from '@aztec/circuits.js';
1
+ import { Fr, FunctionSelector, PUBLIC_DISPATCH_SELECTOR, computePublicBytecodeCommitment } from '@aztec/circuits.js';
2
2
  import { PrivateFunctionsTree } from '@aztec/pxe';
3
3
  export class TXEPublicContractDataSource {
4
- constructor(txeOracle) {
4
+ txeOracle;
5
+ constructor(txeOracle){
5
6
  this.txeOracle = txeOracle;
6
7
  }
7
8
  async getPublicFunction(address, selector) {
@@ -9,7 +10,10 @@ export class TXEPublicContractDataSource {
9
10
  if (!bytecode) {
10
11
  return undefined;
11
12
  }
12
- return { bytecode, selector };
13
+ return {
14
+ bytecode,
15
+ selector
16
+ };
13
17
  }
14
18
  getBlockNumber() {
15
19
  return this.txeOracle.getBlockNumber();
@@ -23,7 +27,7 @@ export class TXEPublicContractDataSource {
23
27
  if (contractClass.packedBytecode.length > 0) {
24
28
  publicFunctions.push({
25
29
  selector: FunctionSelector.fromField(new Fr(PUBLIC_DISPATCH_SELECTOR)),
26
- bytecode: contractClass.packedBytecode,
30
+ bytecode: contractClass.packedBytecode
27
31
  });
28
32
  }
29
33
  return {
@@ -34,7 +38,7 @@ export class TXEPublicContractDataSource {
34
38
  privateFunctionsRoot: new Fr(privateFunctionsRoot.root),
35
39
  version: contractClass.version,
36
40
  privateFunctions: [],
37
- unconstrainedFunctions: [],
41
+ unconstrainedFunctions: []
38
42
  };
39
43
  }
40
44
  async getBytecodeCommitment(id) {
@@ -43,7 +47,10 @@ export class TXEPublicContractDataSource {
43
47
  }
44
48
  async getContract(address) {
45
49
  const instance = await this.txeOracle.getContractDataOracle().getContractInstance(address);
46
- return { ...instance, address };
50
+ return {
51
+ ...instance,
52
+ address
53
+ };
47
54
  }
48
55
  getContractClassIds() {
49
56
  throw new Error('Method not implemented.');
@@ -57,11 +64,14 @@ export class TXEPublicContractDataSource {
57
64
  if (!artifact) {
58
65
  return undefined;
59
66
  }
60
- const functionSelectorsAndNames = await Promise.all(artifact.functions.map(async (f) => ({
61
- name: f.name,
62
- selector: await FunctionSelector.fromNameAndParameters({ name: f.name, parameters: f.parameters }),
63
- })));
64
- const func = functionSelectorsAndNames.find(f => f.selector.equals(selector));
67
+ const functionSelectorsAndNames = await Promise.all(artifact.functions.map(async (f)=>({
68
+ name: f.name,
69
+ selector: await FunctionSelector.fromNameAndParameters({
70
+ name: f.name,
71
+ parameters: f.parameters
72
+ })
73
+ })));
74
+ const func = functionSelectorsAndNames.find((f)=>f.selector.equals(selector));
65
75
  return Promise.resolve(func?.name);
66
76
  }
67
77
  registerContractFunctionSignatures(_address, _signatures) {
@@ -73,4 +83,3 @@ export class TXEPublicContractDataSource {
73
83
  return Promise.resolve();
74
84
  }
75
85
  }
76
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhlX3B1YmxpY19jb250cmFjdF9kYXRhX3NvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL3R4ZV9wdWJsaWNfY29udHJhY3RfZGF0YV9zb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUtMLEVBQUUsRUFDRixnQkFBZ0IsRUFDaEIsd0JBQXdCLEVBRXhCLCtCQUErQixHQUNoQyxNQUFNLG9CQUFvQixDQUFDO0FBRTVCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUlsRCxNQUFNLE9BQU8sMkJBQTJCO0lBQ3RDLFlBQW9CLFNBQWM7UUFBZCxjQUFTLEdBQVQsU0FBUyxDQUFLO0lBQUcsQ0FBQztJQUV0QyxLQUFLLENBQUMsaUJBQWlCLENBQUMsT0FBcUIsRUFBRSxRQUEwQjtRQUN2RSxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzdGLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNkLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFDRCxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsRUFBTTtRQUMzQixNQUFNLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4RixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0RixN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
@@ -1,26 +1,26 @@
1
1
  import { MerkleTreeId } from '@aztec/circuit-types';
2
- import { Fr, PublicDataWrite, } from '@aztec/circuits.js';
2
+ import { Fr, PublicDataWrite } from '@aztec/circuits.js';
3
3
  import { computePublicDataTreeLeafSlot } from '@aztec/circuits.js/hash';
4
4
  import { WorldStateDB } from '@aztec/simulator/server';
5
5
  export class TXEWorldStateDB extends WorldStateDB {
6
- constructor(merkleDb, dataSource, txe) {
7
- super(merkleDb, dataSource);
8
- this.merkleDb = merkleDb;
9
- this.txe = txe;
6
+ merkleDb;
7
+ txe;
8
+ constructor(merkleDb, dataSource, txe){
9
+ super(merkleDb, dataSource), this.merkleDb = merkleDb, this.txe = txe;
10
10
  }
11
11
  async storageRead(contract, slot) {
12
12
  const leafSlot = (await computePublicDataTreeLeafSlot(contract, slot)).toBigInt();
13
13
  const lowLeafResult = await this.merkleDb.getPreviousValueIndex(MerkleTreeId.PUBLIC_DATA_TREE, leafSlot);
14
14
  let value = Fr.ZERO;
15
15
  if (lowLeafResult && lowLeafResult.alreadyPresent) {
16
- const preimage = (await this.merkleDb.getLeafPreimage(MerkleTreeId.PUBLIC_DATA_TREE, lowLeafResult.index));
16
+ const preimage = await this.merkleDb.getLeafPreimage(MerkleTreeId.PUBLIC_DATA_TREE, lowLeafResult.index);
17
17
  value = preimage.value;
18
18
  }
19
19
  return value;
20
20
  }
21
21
  async storageWrite(contract, slot, newValue) {
22
22
  await this.txe.addPublicDataWrites([
23
- new PublicDataWrite(await computePublicDataTreeLeafSlot(contract, slot), newValue),
23
+ new PublicDataWrite(await computePublicDataTreeLeafSlot(contract, slot), newValue)
24
24
  ]);
25
25
  return newValue.toBigInt();
26
26
  }
@@ -37,4 +37,3 @@ export class TXEWorldStateDB extends WorldStateDB {
37
37
  throw new Error('Cannot rollback');
38
38
  }
39
39
  }
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhlX3dvcmxkX3N0YXRlX2RiLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWwvdHhlX3dvcmxkX3N0YXRlX2RiLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQWtDLE1BQU0sc0JBQXNCLENBQUM7QUFDcEYsT0FBTyxFQUdMLEVBQUUsRUFFRixlQUFlLEdBQ2hCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBSXZELE1BQU0sT0FBTyxlQUFnQixTQUFRLFlBQVk7SUFDL0MsWUFBb0IsUUFBbUMsRUFBRSxVQUE4QixFQUFVLEdBQVE7UUFDdkcsS0FBSyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztRQURWLGFBQVEsR0FBUixRQUFRLENBQTJCO1FBQTBDLFFBQUcsR0FBSCxHQUFHLENBQUs7SUFFekcsQ0FBQztJQUVRLEtBQUssQ0FBQyxXQUFXLENBQUMsUUFBc0IsRUFBRSxJQUFRO1FBQ3pELE1BQU0sUUFBUSxHQUFHLENBQUMsTUFBTSw2QkFBNkIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUVsRixNQUFNLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUMsWUFBWSxDQUFDLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRXpHLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7UUFDcEIsSUFBSSxhQUFhLElBQUksYUFBYSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ2xELE1BQU0sUUFBUSxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FDbkQsWUFBWSxDQUFDLGdCQUFnQixFQUM3QixhQUFhLENBQUMsS0FBSyxDQUNwQixDQUErQixDQUFDO1lBQ2pDLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQ3pCLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFUSxLQUFLLENBQUMsWUFBWSxDQUFDLFFBQXNCLEVBQUUsSUFBUSxFQUFFLFFBQVk7UUFDeEUsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDO1lBQ2pDLElBQUksZUFBZSxDQUFDLE1BQU0sNkJBQTZCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLFFBQVEsQ0FBQztTQUNuRixDQUFDLENBQUM7UUFFSCxPQUFPLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRVEsVUFBVTtRQUNqQixPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBQ1Esb0JBQW9CO1FBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBQ1EsTUFBTTtRQUNiLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFDUSxnQkFBZ0I7UUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7Q0FDRiJ9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/txe",
3
- "version": "0.74.0",
3
+ "version": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
4
4
  "type": "module",
5
5
  "exports": "./dest/index.js",
6
6
  "bin": "./dest/bin/index.js",
@@ -17,7 +17,7 @@
17
17
  "clean": "rm -rf ./dest .tsbuildinfo",
18
18
  "formatting": "run -T prettier --check ./src && run -T eslint ./src",
19
19
  "formatting:fix": "run -T eslint --fix ./src && run -T prettier -w ./src",
20
- "test": "HARDWARE_CONCURRENCY=${HARDWARE_CONCURRENCY:-16} RAYON_NUM_THREADS=${RAYON_NUM_THREADS:-4} NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests --maxWorkers=${JEST_MAX_WORKERS:-8}",
20
+ "test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests --maxWorkers=${JEST_MAX_WORKERS:-8}",
21
21
  "dev": "LOG_LEVEL=debug node ./dest/bin/index.js",
22
22
  "start": "node --no-warnings ./dest/bin/index.js"
23
23
  },
@@ -59,19 +59,18 @@
59
59
  ]
60
60
  },
61
61
  "dependencies": {
62
- "@aztec/accounts": "0.74.0",
63
- "@aztec/aztec.js": "0.74.0",
64
- "@aztec/circuit-types": "0.74.0",
65
- "@aztec/circuits.js": "0.74.0",
66
- "@aztec/foundation": "0.74.0",
67
- "@aztec/key-store": "0.74.0",
68
- "@aztec/kv-store": "0.74.0",
69
- "@aztec/protocol-contracts": "0.74.0",
70
- "@aztec/pxe": "0.74.0",
71
- "@aztec/simulator": "0.74.0",
72
- "@aztec/telemetry-client": "0.74.0",
73
- "@aztec/types": "0.74.0",
74
- "@aztec/world-state": "0.74.0",
62
+ "@aztec/accounts": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
63
+ "@aztec/aztec.js": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
64
+ "@aztec/circuit-types": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
65
+ "@aztec/circuits.js": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
66
+ "@aztec/foundation": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
67
+ "@aztec/key-store": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
68
+ "@aztec/kv-store": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
69
+ "@aztec/protocol-contracts": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
70
+ "@aztec/pxe": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
71
+ "@aztec/simulator": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
72
+ "@aztec/types": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
73
+ "@aztec/world-state": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
75
74
  "zod": "^3.23.8"
76
75
  },
77
76
  "devDependencies": {
package/src/index.ts CHANGED
@@ -1,7 +1,17 @@
1
- import { loadContractArtifact } from '@aztec/aztec.js';
1
+ import { SchnorrAccountContractArtifact } from '@aztec/accounts/schnorr';
2
+ import {
3
+ AztecAddress,
4
+ type ContractArtifact,
5
+ type ContractInstanceWithAddress,
6
+ Fr,
7
+ PublicKeys,
8
+ deriveKeys,
9
+ getContractInstanceFromDeployParams,
10
+ loadContractArtifact,
11
+ } from '@aztec/aztec.js';
12
+ import { createSafeJsonRpcServer } from '@aztec/foundation/json-rpc/server';
2
13
  import { type Logger } from '@aztec/foundation/log';
3
14
  import { type ApiSchemaFor, type ZodFor } from '@aztec/foundation/schemas';
4
- import { createTracedJsonRpcServer } from '@aztec/telemetry-client';
5
15
 
6
16
  import { readFile, readdir } from 'fs/promises';
7
17
  import { join } from 'path';
@@ -14,12 +24,16 @@ import {
14
24
  type ForeignCallArray,
15
25
  type ForeignCallResult,
16
26
  ForeignCallResultSchema,
27
+ type ForeignCallSingle,
17
28
  fromArray,
29
+ fromSingle,
18
30
  toForeignCallResult,
19
31
  } from './util/encoding.js';
20
32
 
21
33
  const TXESessions = new Map<number, TXEService>();
22
34
 
35
+ const TXEArtifactsCache = new Map<string, { artifact: ContractArtifact; instance: ContractInstanceWithAddress }>();
36
+
23
37
  type MethodNames<T> = {
24
38
  [K in keyof T]: T[K] extends (...args: any[]) => any ? K : never;
25
39
  }[keyof T];
@@ -47,36 +61,94 @@ class TXEDispatcher {
47
61
  constructor(private logger: Logger) {}
48
62
 
49
63
  async #processDeployInputs({ inputs, root_path: rootPath, package_name: packageName }: TXEForeignCallInput) {
50
- const pathStr = fromArray(inputs[0] as ForeignCallArray)
51
- .map(char => String.fromCharCode(char.toNumber()))
52
- .join('');
53
- const contractName = fromArray(inputs[1] as ForeignCallArray)
54
- .map(char => String.fromCharCode(char.toNumber()))
55
- .join('');
56
- let artifactPath = '';
57
- // We're deploying the contract under test
58
- // env.deploy_self("contractName")
59
- if (!pathStr) {
60
- artifactPath = join(rootPath, './target', `${packageName}-${contractName}.json`);
64
+ const [pathStr, contractName, initializer] = inputs.slice(0, 3).map(input =>
65
+ fromArray(input as ForeignCallArray)
66
+ .map(char => String.fromCharCode(char.toNumber()))
67
+ .join(''),
68
+ );
69
+
70
+ const decodedArgs = fromArray(inputs[4] as ForeignCallArray);
71
+ const publicKeysHashFr = fromSingle(inputs[5] as ForeignCallSingle);
72
+
73
+ const cacheKey = `${pathStr}-${contractName}-${initializer}-${decodedArgs
74
+ .map(arg => arg.toString())
75
+ .join('-')}-${publicKeysHashFr}`;
76
+
77
+ let artifact;
78
+ let instance;
79
+
80
+ if (TXEArtifactsCache.has(cacheKey)) {
81
+ this.logger.debug(`Using cached artifact for ${cacheKey}`);
82
+ ({ artifact, instance } = TXEArtifactsCache.get(cacheKey)!);
61
83
  } else {
62
- // We're deploying a contract that belongs in a workspace
63
- // env.deploy("../path/to/workspace/root@packageName", "contractName")
64
- if (pathStr.includes('@')) {
65
- const [workspace, pkg] = pathStr.split('@');
66
- const targetPath = join(rootPath, workspace, './target');
67
- this.logger.debug(`Looking for compiled artifact in workspace ${targetPath}`);
68
- artifactPath = join(targetPath, `${pkg}-${contractName}.json`);
84
+ let artifactPath = '';
85
+ // We're deploying the contract under test
86
+ // env.deploy_self("contractName")
87
+ if (!pathStr) {
88
+ artifactPath = join(rootPath, './target', `${packageName}-${contractName}.json`);
69
89
  } else {
70
- // We're deploying a standalone contract
71
- // env.deploy("../path/to/contract/root", "contractName")
72
- const targetPath = join(rootPath, pathStr, './target');
73
- this.logger.debug(`Looking for compiled artifact in ${targetPath}`);
74
- [artifactPath] = (await readdir(targetPath)).filter(file => file.endsWith(`-${contractName}.json`));
90
+ // We're deploying a contract that belongs in a workspace
91
+ // env.deploy("../path/to/workspace/root@packageName", "contractName")
92
+ if (pathStr.includes('@')) {
93
+ const [workspace, pkg] = pathStr.split('@');
94
+ const targetPath = join(rootPath, workspace, './target');
95
+ this.logger.debug(`Looking for compiled artifact in workspace ${targetPath}`);
96
+ artifactPath = join(targetPath, `${pkg}-${contractName}.json`);
97
+ } else {
98
+ // We're deploying a standalone contract
99
+ // env.deploy("../path/to/contract/root", "contractName")
100
+ const targetPath = join(rootPath, pathStr, './target');
101
+ this.logger.debug(`Looking for compiled artifact in ${targetPath}`);
102
+ [artifactPath] = (await readdir(targetPath)).filter(file => file.endsWith(`-${contractName}.json`));
103
+ }
75
104
  }
105
+ this.logger.debug(`Loading compiled artifact ${artifactPath}`);
106
+ artifact = loadContractArtifact(JSON.parse(await readFile(artifactPath, 'utf-8')));
107
+ this.logger.debug(
108
+ `Deploy ${artifact.name} with initializer ${initializer}(${decodedArgs}) and public keys hash ${publicKeysHashFr}`,
109
+ );
110
+ instance = await getContractInstanceFromDeployParams(artifact, {
111
+ constructorArgs: decodedArgs,
112
+ skipArgsDecoding: true,
113
+ salt: Fr.ONE,
114
+ // TODO: Modify this to allow for passing public keys.
115
+ publicKeys: PublicKeys.default(),
116
+ constructorArtifact: initializer ? initializer : undefined,
117
+ deployer: AztecAddress.ZERO,
118
+ });
119
+ TXEArtifactsCache.set(cacheKey, { artifact, instance });
120
+ }
121
+
122
+ inputs.splice(0, 2, artifact, instance);
123
+ }
124
+
125
+ async #processAddAccountInputs({ inputs }: TXEForeignCallInput) {
126
+ const secret = fromSingle(inputs[0] as ForeignCallSingle);
127
+
128
+ const cacheKey = `SchnorrAccountContract-${secret}`;
129
+
130
+ let artifact;
131
+ let instance;
132
+
133
+ if (TXEArtifactsCache.has(cacheKey)) {
134
+ this.logger.debug(`Using cached artifact for ${cacheKey}`);
135
+ ({ artifact, instance } = TXEArtifactsCache.get(cacheKey)!);
136
+ } else {
137
+ const keys = await deriveKeys(secret);
138
+ const args = [keys.publicKeys.masterIncomingViewingPublicKey.x, keys.publicKeys.masterIncomingViewingPublicKey.y];
139
+ artifact = SchnorrAccountContractArtifact;
140
+ instance = await getContractInstanceFromDeployParams(artifact, {
141
+ constructorArgs: args,
142
+ skipArgsDecoding: true,
143
+ salt: Fr.ONE,
144
+ publicKeys: keys.publicKeys,
145
+ constructorArtifact: 'constructor',
146
+ deployer: AztecAddress.ZERO,
147
+ });
148
+ TXEArtifactsCache.set(cacheKey, { artifact, instance });
76
149
  }
77
- this.logger.debug(`Loading compiled artifact ${artifactPath}`);
78
- const artifact = loadContractArtifact(JSON.parse(await readFile(artifactPath, 'utf-8')));
79
- inputs.splice(0, 2, artifact);
150
+
151
+ inputs.splice(0, 0, artifact, instance);
80
152
  }
81
153
 
82
154
  // eslint-disable-next-line camelcase
@@ -96,16 +168,18 @@ class TXEDispatcher {
96
168
  return toForeignCallResult([]);
97
169
  }
98
170
  case 'deploy': {
99
- // Modify inputs and fall through
100
171
  await this.#processDeployInputs(callData);
172
+ break;
101
173
  }
102
- // eslint-disable-next-line no-fallthrough
103
- default: {
104
- const txeService = TXESessions.get(sessionId);
105
- const response = await (txeService as any)[functionName](...inputs);
106
- return response;
174
+ case 'addAccount': {
175
+ await this.#processAddAccountInputs(callData);
176
+ break;
107
177
  }
108
178
  }
179
+
180
+ const txeService = TXESessions.get(sessionId);
181
+ const response = await (txeService as any)[functionName](...inputs);
182
+ return response;
109
183
  }
110
184
  }
111
185
 
@@ -120,7 +194,7 @@ const TXEDispatcherApiSchema: ApiSchemaFor<TXEDispatcher> = {
120
194
  * @returns A TXE RPC server.
121
195
  */
122
196
  export function createTXERpcServer(logger: Logger) {
123
- return createTracedJsonRpcServer(new TXEDispatcher(logger), TXEDispatcherApiSchema, {
197
+ return createSafeJsonRpcServer(new TXEDispatcher(logger), TXEDispatcherApiSchema, {
124
198
  http200OnError: true,
125
199
  });
126
200
  }
@@ -568,6 +568,10 @@ export class TXENode implements AztecNode {
568
568
  throw new Error('TXE Node method getTxByHash not implemented');
569
569
  }
570
570
 
571
+ getTxsByHash(_txHashes: TxHash[]): Promise<Tx[]> {
572
+ throw new Error('TXE Node method getTxByHash not implemented');
573
+ }
574
+
571
575
  /**
572
576
  * Gets the storage value at the given contract storage slot.
573
577
  *
@@ -22,7 +22,6 @@ import {
22
22
  CallContext,
23
23
  type ContractInstance,
24
24
  type ContractInstanceWithAddress,
25
- DEPLOYER_CONTRACT_ADDRESS,
26
25
  Gas,
27
26
  GasFees,
28
27
  GlobalVariables,
@@ -44,10 +43,8 @@ import {
44
43
  type PublicDataTreeLeafPreimage,
45
44
  PublicDataWrite,
46
45
  type PublicLog,
47
- computeContractClassId,
48
46
  computeTaggingSecretPoint,
49
47
  deriveKeys,
50
- getContractClassFromArtifact,
51
48
  } from '@aztec/circuits.js';
52
49
  import { Schnorr } from '@aztec/circuits.js/barretenberg';
53
50
  import {
@@ -251,9 +248,8 @@ export class TXE implements TypedOracle {
251
248
  await this.txeDatabase.addContractInstance(contractInstance);
252
249
  }
253
250
 
254
- async addContractArtifact(artifact: ContractArtifact) {
255
- const contractClass = await getContractClassFromArtifact(artifact);
256
- await this.txeDatabase.addContractArtifact(await computeContractClassId(contractClass), artifact);
251
+ async addContractArtifact(contractClassId: Fr, artifact: ContractArtifact) {
252
+ await this.txeDatabase.addContractArtifact(contractClassId, artifact);
257
253
  }
258
254
 
259
255
  async getPrivateContextInputs(
@@ -502,6 +498,8 @@ export class TXE implements TypedOracle {
502
498
  Fr.ZERO,
503
499
  );
504
500
 
501
+ header.globalVariables.blockNumber = new Fr(blockNumber);
502
+
505
503
  return header;
506
504
  }
507
505
 
@@ -741,6 +739,8 @@ export class TXE implements TypedOracle {
741
739
  Fr.ZERO,
742
740
  );
743
741
 
742
+ header.globalVariables.blockNumber = new Fr(blockNumber);
743
+
744
744
  l2Block.header = header;
745
745
 
746
746
  await fork.updateArchive(l2Block.header);
@@ -888,7 +888,6 @@ export class TXE implements TypedOracle {
888
888
  const executionRequest = new PublicExecutionRequest(callContext, args);
889
889
 
890
890
  const db = this.baseFork;
891
- const worldStateDb = new TXEWorldStateDB(db, new TXEPublicContractDataSource(this), this);
892
891
 
893
892
  const globalVariables = GlobalVariables.empty();
894
893
  globalVariables.chainId = new Fr(await this.node.getChainId());
@@ -896,28 +895,9 @@ export class TXE implements TypedOracle {
896
895
  globalVariables.blockNumber = new Fr(this.blockNumber);
897
896
  globalVariables.gasFees = new GasFees(1, 1);
898
897
 
899
- const tempFork = await this.nativeWorldStateService.fork();
900
- // Apply current public data writes
901
- await tempFork.sequentialInsert(
902
- MerkleTreeId.PUBLIC_DATA_TREE,
903
- this.publicDataWrites.map(p => p.toBuffer()),
904
- );
905
-
906
- // If the contract instance exists in the TXE's world state, make sure its nullifier is present in the tree
907
- // so its nullifier check passes.
908
- if ((await worldStateDb.getContractInstance(callContext.contractAddress)) !== undefined) {
909
- const contractAddressNullifier = await siloNullifier(
910
- AztecAddress.fromNumber(DEPLOYER_CONTRACT_ADDRESS),
911
- callContext.contractAddress.toField(),
912
- );
913
- if ((await worldStateDb.getNullifierIndex(contractAddressNullifier)) === undefined) {
914
- await tempFork.batchInsert(MerkleTreeId.NULLIFIER_TREE, [contractAddressNullifier.toBuffer()], 0);
915
- }
916
- }
917
-
918
898
  const simulator = new PublicTxSimulator(
919
- tempFork,
920
- new TXEWorldStateDB(tempFork, new TXEPublicContractDataSource(this), this),
899
+ db,
900
+ new TXEWorldStateDB(db, new TXEPublicContractDataSource(this), this),
921
901
  globalVariables,
922
902
  );
923
903
 
@@ -954,7 +934,6 @@ export class TXE implements TypedOracle {
954
934
  ),
955
935
  );
956
936
 
957
- await tempFork.close();
958
937
  return Promise.resolve(result);
959
938
  }
960
939
 
@@ -1,14 +1,13 @@
1
- import { SchnorrAccountContractArtifact } from '@aztec/accounts/schnorr';
2
1
  import { MerkleTreeId, SimulationError } from '@aztec/circuit-types';
3
2
  import {
3
+ type ContractInstanceWithAddress,
4
+ DEPLOYER_CONTRACT_ADDRESS,
4
5
  Fr,
5
6
  FunctionSelector,
6
7
  PublicDataWrite,
7
- PublicKeys,
8
8
  computePartialAddress,
9
- getContractInstanceFromDeployParams,
10
9
  } from '@aztec/circuits.js';
11
- import { computePublicDataTreeLeafSlot } from '@aztec/circuits.js/hash';
10
+ import { computePublicDataTreeLeafSlot, siloNullifier } from '@aztec/circuits.js/hash';
12
11
  import { type ContractArtifact, NoteSelector } from '@aztec/foundation/abi';
13
12
  import { AztecAddress } from '@aztec/foundation/aztec-address';
14
13
  import { type Logger } from '@aztec/foundation/log';
@@ -89,35 +88,15 @@ export class TXEService {
89
88
  return toForeignCallResult(keys.publicKeys.toFields().map(toSingle));
90
89
  }
91
90
 
92
- async deploy(
93
- artifact: ContractArtifact,
94
- initializer: ForeignCallArray,
95
- _length: ForeignCallSingle,
96
- args: ForeignCallArray,
97
- publicKeysHash: ForeignCallSingle,
98
- ) {
99
- const initializerStr = fromArray(initializer)
100
- .map(char => String.fromCharCode(char.toNumber()))
101
- .join('');
102
- const decodedArgs = fromArray(args);
103
- const publicKeysHashFr = fromSingle(publicKeysHash);
104
- this.logger.debug(
105
- `Deploy ${artifact.name} with initializer ${initializerStr}(${decodedArgs}) and public keys hash ${publicKeysHashFr}`,
106
- );
107
-
108
- const instance = await getContractInstanceFromDeployParams(artifact, {
109
- constructorArgs: decodedArgs,
110
- skipArgsDecoding: true,
111
- salt: Fr.ONE,
112
- // TODO: Modify this to allow for passing public keys.
113
- publicKeys: PublicKeys.default(),
114
- constructorArtifact: initializerStr ? initializerStr : undefined,
115
- deployer: AztecAddress.ZERO,
116
- });
91
+ async deploy(artifact: ContractArtifact, instance: ContractInstanceWithAddress) {
92
+ // Emit deployment nullifier
93
+ (this.typedOracle as TXE).addSiloedNullifiersFromPublic([
94
+ await siloNullifier(AztecAddress.fromNumber(DEPLOYER_CONTRACT_ADDRESS), instance.address.toField()),
95
+ ]);
117
96
 
118
97
  this.logger.debug(`Deployed ${artifact.name} at ${instance.address}`);
119
98
  await (this.typedOracle as TXE).addContractInstance(instance);
120
- await (this.typedOracle as TXE).addContractArtifact(artifact);
99
+ await (this.typedOracle as TXE).addContractArtifact(instance.contractClassId, artifact);
121
100
  return toForeignCallResult([
122
101
  toArray([
123
102
  instance.salt,
@@ -151,9 +130,10 @@ export class TXEService {
151
130
  return toForeignCallResult([toArray(publicDataWrites.map(write => write.value))]);
152
131
  }
153
132
 
154
- async createAccount() {
133
+ async createAccount(secret: ForeignCallSingle) {
155
134
  const keyStore = (this.typedOracle as TXE).getKeyStore();
156
- const completeAddress = await keyStore.createAccount();
135
+ const secretFr = fromSingle(secret);
136
+ const completeAddress = await keyStore.addAccount(secretFr, secretFr);
157
137
  const accountStore = (this.typedOracle as TXE).getTXEDatabase();
158
138
  await accountStore.setAccount(completeAddress.address, completeAddress);
159
139
  this.logger.debug(`Created account ${completeAddress.address}`);
@@ -163,22 +143,10 @@ export class TXEService {
163
143
  ]);
164
144
  }
165
145
 
166
- async addAccount(secret: ForeignCallSingle) {
167
- const keys = await (this.typedOracle as TXE).deriveKeys(fromSingle(secret));
168
- const args = [keys.publicKeys.masterIncomingViewingPublicKey.x, keys.publicKeys.masterIncomingViewingPublicKey.y];
169
- const artifact = SchnorrAccountContractArtifact;
170
- const instance = await getContractInstanceFromDeployParams(artifact, {
171
- constructorArgs: args,
172
- skipArgsDecoding: true,
173
- salt: Fr.ONE,
174
- publicKeys: keys.publicKeys,
175
- constructorArtifact: 'constructor',
176
- deployer: AztecAddress.ZERO,
177
- });
178
-
146
+ async addAccount(artifact: ContractArtifact, instance: ContractInstanceWithAddress, secret: ForeignCallSingle) {
179
147
  this.logger.debug(`Deployed ${artifact.name} at ${instance.address}`);
180
148
  await (this.typedOracle as TXE).addContractInstance(instance);
181
- await (this.typedOracle as TXE).addContractArtifact(artifact);
149
+ await (this.typedOracle as TXE).addContractArtifact(instance.contractClassId, artifact);
182
150
 
183
151
  const keyStore = (this.typedOracle as TXE).getKeyStore();
184
152
  const completeAddress = await keyStore.addAccount(fromSingle(secret), await computePartialAddress(instance));