@aztec/key-store 0.38.0 → 0.40.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.
@@ -1,5 +1,5 @@
1
1
  import { type KeyStore, type PublicKey } from '@aztec/circuit-types';
2
- import { AztecAddress, Fr, type GrumpkinPrivateKey, type PartialAddress, Point } from '@aztec/circuits.js';
2
+ import { AztecAddress, CompleteAddress, Fr, type GrumpkinPrivateKey, type PartialAddress } from '@aztec/circuits.js';
3
3
  import { type AztecKVStore } from '@aztec/kv-store';
4
4
  /**
5
5
  * TestKeyStore is an implementation of the KeyStore interface, used for managing key pairs in a testing environment.
@@ -10,16 +10,16 @@ export declare class TestKeyStore implements KeyStore {
10
10
  constructor(database: AztecKVStore);
11
11
  /**
12
12
  * Creates a new account from a randomly generated secret key.
13
- * @returns A promise that resolves to the newly created account's AztecAddress.
13
+ * @returns A promise that resolves to the newly created account's CompleteAddress.
14
14
  */
15
- createAccount(): Promise<AztecAddress>;
15
+ createAccount(): Promise<CompleteAddress>;
16
16
  /**
17
17
  * Adds an account to the key store from the provided secret key.
18
18
  * @param sk - The secret key of the account.
19
19
  * @param partialAddress - The partial address of the account.
20
- * @returns The account's address.
20
+ * @returns The account's complete address.
21
21
  */
22
- addAccount(sk: Fr, partialAddress: PartialAddress): Promise<AztecAddress>;
22
+ addAccount(sk: Fr, partialAddress: PartialAddress): Promise<CompleteAddress>;
23
23
  /**
24
24
  * Retrieves addresses of accounts stored in the key store.
25
25
  * @returns A Promise that resolves to an array of account addresses.
@@ -102,6 +102,5 @@ export declare class TestKeyStore implements KeyStore {
102
102
  * @returns A Promise that resolves to the public keys hash.
103
103
  */
104
104
  getPublicKeysHash(account: AztecAddress): Promise<Fr>;
105
- addPublicKeysForAccount(accountAddress: AztecAddress, masterNullifierPublicKey: Point, masterIncomingViewingPublicKey: Point, masterOutgoingViewingPublicKey: Point, masterTaggingPublicKey: Point): Promise<void>;
106
105
  }
107
106
  //# sourceMappingURL=test_key_store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"test_key_store.d.ts","sourceRoot":"","sources":["../src/test_key_store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EACL,YAAY,EACZ,EAAE,EAEF,KAAK,kBAAkB,EAEvB,KAAK,cAAc,EACnB,KAAK,EAGN,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,KAAK,YAAY,EAAiB,MAAM,iBAAiB,CAAC;AAEnE;;;GAGG;AACH,qBAAa,YAAa,YAAW,QAAQ;;gBAG/B,QAAQ,EAAE,YAAY;IAIlC;;;OAGG;IACI,aAAa,IAAI,OAAO,CAAC,YAAY,CAAC;IAM7C;;;;;OAKG;IACU,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,cAAc,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC;IAmCtF;;;OAGG;IACI,WAAW,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAO7C;;;;;OAKG;IACU,2BAA2B,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC;IAUnF;;;;;OAKG;IACU,iCAAiC,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC;IAUzF;;;;;OAKG;IACU,iCAAiC,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC;IAUzF;;;;;OAKG;IACU,yBAAyB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC;IAUjF;;;;;;OAMG;IACU,wBAAwB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,EAAE,CAAC;IAY5F;;;;;;OAMG;IACU,8BAA8B,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,EAAE,CAAC;IAmBlG;;;;;;OAMG;IACU,8BAA8B,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,EAAE,CAAC;IAmBlG;;;;;;;OAOG;IACI,uCAAuC,CAAC,wBAAwB,EAAE,SAAS,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAkBhH;;;;;;;OAOG;IACI,6CAA6C,CAClD,8BAA8B,EAAE,SAAS,GACxC,OAAO,CAAC,kBAAkB,CAAC;IAoB9B;;;;;OAKG;IACU,iBAAiB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,EAAE,CAAC;IAWrD,uBAAuB,CAClC,cAAc,EAAE,YAAY,EAC5B,wBAAwB,EAAE,KAAK,EAC/B,8BAA8B,EAAE,KAAK,EACrC,8BAA8B,EAAE,KAAK,EACrC,sBAAsB,EAAE,KAAK,GAC5B,OAAO,CAAC,IAAI,CAAC;CAMjB"}
1
+ {"version":3,"file":"test_key_store.d.ts","sourceRoot":"","sources":["../src/test_key_store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EACL,YAAY,EACZ,eAAe,EACf,EAAE,EAEF,KAAK,kBAAkB,EAEvB,KAAK,cAAc,EAKpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,KAAK,YAAY,EAAiB,MAAM,iBAAiB,CAAC;AAEnE;;;GAGG;AACH,qBAAa,YAAa,YAAW,QAAQ;;gBAG/B,QAAQ,EAAE,YAAY;IAIlC;;;OAGG;IACI,aAAa,IAAI,OAAO,CAAC,eAAe,CAAC;IAMhD;;;;;OAKG;IACU,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,cAAc,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IA6BzF;;;OAGG;IACI,WAAW,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAO7C;;;;;OAKG;IACU,2BAA2B,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC;IAUnF;;;;;OAKG;IACU,iCAAiC,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC;IAUzF;;;;;OAKG;IACU,iCAAiC,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC;IAUzF;;;;;OAKG;IACU,yBAAyB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC;IAUjF;;;;;;OAMG;IACU,wBAAwB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,EAAE,CAAC;IAY5F;;;;;;OAMG;IACU,8BAA8B,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,EAAE,CAAC;IAmBlG;;;;;;OAMG;IACU,8BAA8B,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,EAAE,CAAC;IAmBlG;;;;;;;OAOG;IACI,uCAAuC,CAAC,wBAAwB,EAAE,SAAS,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAkBhH;;;;;;;OAOG;IACI,6CAA6C,CAClD,8BAA8B,EAAE,SAAS,GACxC,OAAO,CAAC,kBAAkB,CAAC;IAoB9B;;;;;OAKG;IACU,iBAAiB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,EAAE,CAAC;CASnE"}
@@ -1,6 +1,6 @@
1
1
  var _TestKeyStore_keys;
2
2
  import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
3
- import { AztecAddress, Fr, GeneratorIndex, GrumpkinScalar, Point, computeAppNullifierSecretKey, deriveKeys, } from '@aztec/circuits.js';
3
+ import { AztecAddress, CompleteAddress, Fr, GeneratorIndex, GrumpkinScalar, Point, computeAddress, computeAppNullifierSecretKey, deriveKeys, } from '@aztec/circuits.js';
4
4
  import { poseidon2Hash } from '@aztec/foundation/crypto';
5
5
  /**
6
6
  * TestKeyStore is an implementation of the KeyStore interface, used for managing key pairs in a testing environment.
@@ -13,7 +13,7 @@ export class TestKeyStore {
13
13
  }
14
14
  /**
15
15
  * Creates a new account from a randomly generated secret key.
16
- * @returns A promise that resolves to the newly created account's AztecAddress.
16
+ * @returns A promise that resolves to the newly created account's CompleteAddress.
17
17
  */
18
18
  createAccount() {
19
19
  const sk = Fr.random();
@@ -24,26 +24,24 @@ export class TestKeyStore {
24
24
  * Adds an account to the key store from the provided secret key.
25
25
  * @param sk - The secret key of the account.
26
26
  * @param partialAddress - The partial address of the account.
27
- * @returns The account's address.
27
+ * @returns The account's complete address.
28
28
  */
29
29
  async addAccount(sk, partialAddress) {
30
- const { publicKeysHash, masterNullifierSecretKey, masterIncomingViewingSecretKey, masterOutgoingViewingSecretKey, masterTaggingSecretKey, masterNullifierPublicKey, masterIncomingViewingPublicKey, masterOutgoingViewingPublicKey, masterTaggingPublicKey, } = deriveKeys(sk);
31
- // We hash the partial address and the public keys hash to get the account address
32
- // TODO(#5726): Move the following line to AztecAddress class?
33
- const accountAddressFr = poseidon2Hash([publicKeysHash, partialAddress, GeneratorIndex.CONTRACT_ADDRESS_V1]);
34
- const accountAddress = AztecAddress.fromField(accountAddressFr);
30
+ const { masterNullifierSecretKey, masterIncomingViewingSecretKey, masterOutgoingViewingSecretKey, masterTaggingSecretKey, publicKeys, } = deriveKeys(sk);
31
+ const publicKeysHash = publicKeys.hash();
32
+ const accountAddress = computeAddress(publicKeysHash, partialAddress);
35
33
  // We save the keys to db
36
34
  await __classPrivateFieldGet(this, _TestKeyStore_keys, "f").set(`${accountAddress.toString()}-public_keys_hash`, publicKeysHash.toBuffer());
37
35
  await __classPrivateFieldGet(this, _TestKeyStore_keys, "f").set(`${accountAddress.toString()}-nsk_m`, masterNullifierSecretKey.toBuffer());
38
36
  await __classPrivateFieldGet(this, _TestKeyStore_keys, "f").set(`${accountAddress.toString()}-ivsk_m`, masterIncomingViewingSecretKey.toBuffer());
39
37
  await __classPrivateFieldGet(this, _TestKeyStore_keys, "f").set(`${accountAddress.toString()}-ovsk_m`, masterOutgoingViewingSecretKey.toBuffer());
40
38
  await __classPrivateFieldGet(this, _TestKeyStore_keys, "f").set(`${accountAddress.toString()}-tsk_m`, masterTaggingSecretKey.toBuffer());
41
- await __classPrivateFieldGet(this, _TestKeyStore_keys, "f").set(`${accountAddress.toString()}-npk_m`, masterNullifierPublicKey.toBuffer());
42
- await __classPrivateFieldGet(this, _TestKeyStore_keys, "f").set(`${accountAddress.toString()}-ivpk_m`, masterIncomingViewingPublicKey.toBuffer());
43
- await __classPrivateFieldGet(this, _TestKeyStore_keys, "f").set(`${accountAddress.toString()}-ovpk_m`, masterOutgoingViewingPublicKey.toBuffer());
44
- await __classPrivateFieldGet(this, _TestKeyStore_keys, "f").set(`${accountAddress.toString()}-tpk_m`, masterTaggingPublicKey.toBuffer());
39
+ await __classPrivateFieldGet(this, _TestKeyStore_keys, "f").set(`${accountAddress.toString()}-npk_m`, publicKeys.masterNullifierPublicKey.toBuffer());
40
+ await __classPrivateFieldGet(this, _TestKeyStore_keys, "f").set(`${accountAddress.toString()}-ivpk_m`, publicKeys.masterIncomingViewingPublicKey.toBuffer());
41
+ await __classPrivateFieldGet(this, _TestKeyStore_keys, "f").set(`${accountAddress.toString()}-ovpk_m`, publicKeys.masterOutgoingViewingPublicKey.toBuffer());
42
+ await __classPrivateFieldGet(this, _TestKeyStore_keys, "f").set(`${accountAddress.toString()}-tpk_m`, publicKeys.masterTaggingPublicKey.toBuffer());
45
43
  // At last, we return the newly derived account address
46
- return Promise.resolve(accountAddress);
44
+ return Promise.resolve(new CompleteAddress(accountAddress, publicKeys, partialAddress));
47
45
  }
48
46
  /**
49
47
  * Retrieves addresses of accounts stored in the key store.
@@ -224,13 +222,6 @@ export class TestKeyStore {
224
222
  }
225
223
  return Promise.resolve(Fr.fromBuffer(publicKeysHashBuffer));
226
224
  }
227
- // TODO(#5834): Re-add separation between recipients and accounts in keystore.
228
- async addPublicKeysForAccount(accountAddress, masterNullifierPublicKey, masterIncomingViewingPublicKey, masterOutgoingViewingPublicKey, masterTaggingPublicKey) {
229
- await __classPrivateFieldGet(this, _TestKeyStore_keys, "f").set(`${accountAddress.toString()}-npk_m`, masterNullifierPublicKey.toBuffer());
230
- await __classPrivateFieldGet(this, _TestKeyStore_keys, "f").set(`${accountAddress.toString()}-ivpk_m`, masterIncomingViewingPublicKey.toBuffer());
231
- await __classPrivateFieldGet(this, _TestKeyStore_keys, "f").set(`${accountAddress.toString()}-ovpk_m`, masterOutgoingViewingPublicKey.toBuffer());
232
- await __classPrivateFieldGet(this, _TestKeyStore_keys, "f").set(`${accountAddress.toString()}-tpk_m`, masterTaggingPublicKey.toBuffer());
233
- }
234
225
  }
235
226
  _TestKeyStore_keys = new WeakMap();
236
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdF9rZXlfc3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdGVzdF9rZXlfc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSxPQUFPLEVBQ0wsWUFBWSxFQUNaLEVBQUUsRUFDRixjQUFjLEVBRWQsY0FBYyxFQUVkLEtBQUssRUFDTCw0QkFBNEIsRUFDNUIsVUFBVSxHQUNYLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBR3pEOzs7R0FHRztBQUNILE1BQU0sT0FBTyxZQUFZO0lBR3ZCLFlBQVksUUFBc0I7UUFGbEMscUNBQWdDO1FBRzlCLHVCQUFBLElBQUksc0JBQVMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBQSxDQUFDO0lBQzdDLENBQUM7SUFFRDs7O09BR0c7SUFDSSxhQUFhO1FBQ2xCLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN2QixNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDbkMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQU0sRUFBRSxjQUE4QjtRQUM1RCxNQUFNLEVBQ0osY0FBYyxFQUNkLHdCQUF3QixFQUN4Qiw4QkFBOEIsRUFDOUIsOEJBQThCLEVBQzlCLHNCQUFzQixFQUN0Qix3QkFBd0IsRUFDeEIsOEJBQThCLEVBQzlCLDhCQUE4QixFQUM5QixzQkFBc0IsR0FDdkIsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFbkIsa0ZBQWtGO1FBQ2xGLDhEQUE4RDtRQUM5RCxNQUFNLGdCQUFnQixHQUFHLGFBQWEsQ0FBQyxDQUFDLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxDQUFDLG1CQUFt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
227
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdF9rZXlfc3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdGVzdF9rZXlfc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSxPQUFPLEVBQ0wsWUFBWSxFQUNaLGVBQWUsRUFDZixFQUFFLEVBQ0YsY0FBYyxFQUVkLGNBQWMsRUFFZCxLQUFLLEVBQ0wsY0FBYyxFQUNkLDRCQUE0QixFQUM1QixVQUFVLEdBQ1gsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHekQ7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLFlBQVk7SUFHdkIsWUFBWSxRQUFzQjtRQUZsQyxxQ0FBZ0M7UUFHOUIsdUJBQUEsSUFBSSxzQkFBUyxRQUFRLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFBLENBQUM7SUFDN0MsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGFBQWE7UUFDbEIsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNuQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBTSxFQUFFLGNBQThCO1FBQzVELE1BQU0sRUFDSix3QkFBd0IsRUFDeEIsOEJBQThCLEVBQzlCLDhCQUE4QixFQUM5QixzQkFBc0IsRUFDdEIsVUFBVSxHQUNYLEdBQUcsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRW5CLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN6QyxNQUFNLGNBQWMsR0FBRyxjQUFjLENBQUMsY0FBYyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBRXRFLHlCQUF5QjtRQUN6QixNQUFNLHVCQUFB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/key-store",
3
- "version": "0.38.0",
3
+ "version": "0.40.0",
4
4
  "type": "module",
5
5
  "exports": "./dest/index.js",
6
6
  "typedocOptions": {
@@ -45,10 +45,10 @@
45
45
  ]
46
46
  },
47
47
  "dependencies": {
48
- "@aztec/circuit-types": "0.38.0",
49
- "@aztec/circuits.js": "0.38.0",
50
- "@aztec/foundation": "0.38.0",
51
- "@aztec/kv-store": "0.38.0",
48
+ "@aztec/circuit-types": "0.40.0",
49
+ "@aztec/circuits.js": "0.40.0",
50
+ "@aztec/foundation": "0.40.0",
51
+ "@aztec/kv-store": "0.40.0",
52
52
  "tslib": "^2.4.0"
53
53
  },
54
54
  "devDependencies": {
@@ -1,12 +1,14 @@
1
1
  import { type KeyStore, type PublicKey } from '@aztec/circuit-types';
2
2
  import {
3
3
  AztecAddress,
4
+ CompleteAddress,
4
5
  Fr,
5
6
  GeneratorIndex,
6
7
  type GrumpkinPrivateKey,
7
8
  GrumpkinScalar,
8
9
  type PartialAddress,
9
10
  Point,
11
+ computeAddress,
10
12
  computeAppNullifierSecretKey,
11
13
  deriveKeys,
12
14
  } from '@aztec/circuits.js';
@@ -26,9 +28,9 @@ export class TestKeyStore implements KeyStore {
26
28
 
27
29
  /**
28
30
  * Creates a new account from a randomly generated secret key.
29
- * @returns A promise that resolves to the newly created account's AztecAddress.
31
+ * @returns A promise that resolves to the newly created account's CompleteAddress.
30
32
  */
31
- public createAccount(): Promise<AztecAddress> {
33
+ public createAccount(): Promise<CompleteAddress> {
32
34
  const sk = Fr.random();
33
35
  const partialAddress = Fr.random();
34
36
  return this.addAccount(sk, partialAddress);
@@ -38,25 +40,19 @@ export class TestKeyStore implements KeyStore {
38
40
  * Adds an account to the key store from the provided secret key.
39
41
  * @param sk - The secret key of the account.
40
42
  * @param partialAddress - The partial address of the account.
41
- * @returns The account's address.
43
+ * @returns The account's complete address.
42
44
  */
43
- public async addAccount(sk: Fr, partialAddress: PartialAddress): Promise<AztecAddress> {
45
+ public async addAccount(sk: Fr, partialAddress: PartialAddress): Promise<CompleteAddress> {
44
46
  const {
45
- publicKeysHash,
46
47
  masterNullifierSecretKey,
47
48
  masterIncomingViewingSecretKey,
48
49
  masterOutgoingViewingSecretKey,
49
50
  masterTaggingSecretKey,
50
- masterNullifierPublicKey,
51
- masterIncomingViewingPublicKey,
52
- masterOutgoingViewingPublicKey,
53
- masterTaggingPublicKey,
51
+ publicKeys,
54
52
  } = deriveKeys(sk);
55
53
 
56
- // We hash the partial address and the public keys hash to get the account address
57
- // TODO(#5726): Move the following line to AztecAddress class?
58
- const accountAddressFr = poseidon2Hash([publicKeysHash, partialAddress, GeneratorIndex.CONTRACT_ADDRESS_V1]);
59
- const accountAddress = AztecAddress.fromField(accountAddressFr);
54
+ const publicKeysHash = publicKeys.hash();
55
+ const accountAddress = computeAddress(publicKeysHash, partialAddress);
60
56
 
61
57
  // We save the keys to db
62
58
  await this.#keys.set(`${accountAddress.toString()}-public_keys_hash`, publicKeysHash.toBuffer());
@@ -66,13 +62,13 @@ export class TestKeyStore implements KeyStore {
66
62
  await this.#keys.set(`${accountAddress.toString()}-ovsk_m`, masterOutgoingViewingSecretKey.toBuffer());
67
63
  await this.#keys.set(`${accountAddress.toString()}-tsk_m`, masterTaggingSecretKey.toBuffer());
68
64
 
69
- await this.#keys.set(`${accountAddress.toString()}-npk_m`, masterNullifierPublicKey.toBuffer());
70
- await this.#keys.set(`${accountAddress.toString()}-ivpk_m`, masterIncomingViewingPublicKey.toBuffer());
71
- await this.#keys.set(`${accountAddress.toString()}-ovpk_m`, masterOutgoingViewingPublicKey.toBuffer());
72
- await this.#keys.set(`${accountAddress.toString()}-tpk_m`, masterTaggingPublicKey.toBuffer());
65
+ await this.#keys.set(`${accountAddress.toString()}-npk_m`, publicKeys.masterNullifierPublicKey.toBuffer());
66
+ await this.#keys.set(`${accountAddress.toString()}-ivpk_m`, publicKeys.masterIncomingViewingPublicKey.toBuffer());
67
+ await this.#keys.set(`${accountAddress.toString()}-ovpk_m`, publicKeys.masterOutgoingViewingPublicKey.toBuffer());
68
+ await this.#keys.set(`${accountAddress.toString()}-tpk_m`, publicKeys.masterTaggingPublicKey.toBuffer());
73
69
 
74
70
  // At last, we return the newly derived account address
75
- return Promise.resolve(accountAddress);
71
+ return Promise.resolve(new CompleteAddress(accountAddress, publicKeys, partialAddress));
76
72
  }
77
73
 
78
74
  /**
@@ -292,18 +288,4 @@ export class TestKeyStore implements KeyStore {
292
288
  }
293
289
  return Promise.resolve(Fr.fromBuffer(publicKeysHashBuffer));
294
290
  }
295
-
296
- // TODO(#5834): Re-add separation between recipients and accounts in keystore.
297
- public async addPublicKeysForAccount(
298
- accountAddress: AztecAddress,
299
- masterNullifierPublicKey: Point,
300
- masterIncomingViewingPublicKey: Point,
301
- masterOutgoingViewingPublicKey: Point,
302
- masterTaggingPublicKey: Point,
303
- ): Promise<void> {
304
- await this.#keys.set(`${accountAddress.toString()}-npk_m`, masterNullifierPublicKey.toBuffer());
305
- await this.#keys.set(`${accountAddress.toString()}-ivpk_m`, masterIncomingViewingPublicKey.toBuffer());
306
- await this.#keys.set(`${accountAddress.toString()}-ovpk_m`, masterOutgoingViewingPublicKey.toBuffer());
307
- await this.#keys.set(`${accountAddress.toString()}-tpk_m`, masterTaggingPublicKey.toBuffer());
308
- }
309
291
  }