@aztec/wallet-sdk 0.0.1-commit.21caa21 → 0.0.1-commit.3469e52

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 (40) hide show
  1. package/README.md +240 -266
  2. package/dest/base-wallet/base_wallet.d.ts +20 -10
  3. package/dest/base-wallet/base_wallet.d.ts.map +1 -1
  4. package/dest/base-wallet/base_wallet.js +51 -21
  5. package/dest/crypto.d.ts +183 -0
  6. package/dest/crypto.d.ts.map +1 -0
  7. package/dest/crypto.js +300 -0
  8. package/dest/manager/index.d.ts +4 -3
  9. package/dest/manager/index.d.ts.map +1 -1
  10. package/dest/manager/index.js +2 -0
  11. package/dest/manager/types.d.ts +22 -1
  12. package/dest/manager/types.d.ts.map +1 -1
  13. package/dest/manager/wallet_manager.d.ts +1 -1
  14. package/dest/manager/wallet_manager.d.ts.map +1 -1
  15. package/dest/manager/wallet_manager.js +34 -15
  16. package/dest/providers/extension/extension_provider.d.ts +53 -7
  17. package/dest/providers/extension/extension_provider.d.ts.map +1 -1
  18. package/dest/providers/extension/extension_provider.js +81 -13
  19. package/dest/providers/extension/extension_wallet.d.ts +140 -8
  20. package/dest/providers/extension/extension_wallet.d.ts.map +1 -1
  21. package/dest/providers/extension/extension_wallet.js +268 -46
  22. package/dest/providers/extension/index.d.ts +6 -4
  23. package/dest/providers/extension/index.d.ts.map +1 -1
  24. package/dest/providers/extension/index.js +2 -0
  25. package/dest/types.d.ts +92 -0
  26. package/dest/types.d.ts.map +1 -0
  27. package/dest/types.js +10 -0
  28. package/package.json +13 -11
  29. package/src/base-wallet/base_wallet.ts +67 -33
  30. package/src/crypto.ts +375 -0
  31. package/src/manager/index.ts +4 -8
  32. package/src/manager/types.ts +22 -0
  33. package/src/manager/wallet_manager.ts +43 -16
  34. package/src/providers/extension/extension_provider.ts +112 -17
  35. package/src/providers/extension/extension_wallet.ts +310 -55
  36. package/src/providers/extension/index.ts +5 -3
  37. package/src/{providers/types.ts → types.ts} +33 -6
  38. package/dest/providers/types.d.ts +0 -67
  39. package/dest/providers/types.d.ts.map +0 -1
  40. package/dest/providers/types.js +0 -3
@@ -1,2 +1,4 @@
1
1
  export { ExtensionWallet } from './extension_wallet.js';
2
2
  export { ExtensionProvider } from './extension_provider.js';
3
+ export * from '../../crypto.js';
4
+ export { WalletMessageType } from '../../types.js';
@@ -0,0 +1,92 @@
1
+ import type { ChainInfo } from '@aztec/aztec.js/account';
2
+ import type { ExportedPublicKey } from './crypto.js';
3
+ /**
4
+ * Message types for wallet SDK communication.
5
+ * All types are prefixed with 'aztec-wallet-' for namespacing.
6
+ */
7
+ export declare enum WalletMessageType {
8
+ /** Discovery request to find installed wallets */
9
+ DISCOVERY = "aztec-wallet-discovery",
10
+ /** Discovery response from a wallet */
11
+ DISCOVERY_RESPONSE = "aztec-wallet-discovery-response",
12
+ /** Session disconnected notification (unencrypted control message) */
13
+ SESSION_DISCONNECTED = "aztec-wallet-session-disconnected",
14
+ /** Explicit disconnect request from dApp */
15
+ DISCONNECT = "aztec-wallet-disconnect"
16
+ }
17
+ /**
18
+ * Information about an installed Aztec wallet
19
+ */
20
+ export interface WalletInfo {
21
+ /** Unique identifier for the wallet */
22
+ id: string;
23
+ /** Display name of the wallet */
24
+ name: string;
25
+ /** URL to the wallet's icon */
26
+ icon?: string;
27
+ /** Wallet version */
28
+ version: string;
29
+ /** Wallet's ECDH public key for secure channel establishment */
30
+ publicKey: ExportedPublicKey;
31
+ /**
32
+ * Hash of the shared secret for anti-MITM verification.
33
+ * Both dApp and wallet independently compute this from the ECDH shared secret.
34
+ * Use {@link hashToEmoji} to convert to a visual representation for user verification.
35
+ */
36
+ verificationHash?: string;
37
+ }
38
+ /**
39
+ * Message format for wallet communication (internal, before encryption)
40
+ */
41
+ export interface WalletMessage {
42
+ /** Unique message ID for tracking responses */
43
+ messageId: string;
44
+ /** The wallet method to call */
45
+ type: string;
46
+ /** Arguments for the method */
47
+ args: unknown[];
48
+ /** Chain information */
49
+ chainInfo: ChainInfo;
50
+ /** Application ID making the request */
51
+ appId: string;
52
+ /** Wallet ID to target a specific wallet */
53
+ walletId: string;
54
+ }
55
+ /**
56
+ * Response message from wallet
57
+ */
58
+ export interface WalletResponse {
59
+ /** Message ID matching the request */
60
+ messageId: string;
61
+ /** Result data (if successful) */
62
+ result?: unknown;
63
+ /** Error data (if failed) */
64
+ error?: unknown;
65
+ /** Wallet ID that sent the response */
66
+ walletId: string;
67
+ }
68
+ /**
69
+ * Discovery message for finding installed wallets (public, unencrypted)
70
+ */
71
+ export interface DiscoveryRequest {
72
+ /** Message type for discovery */
73
+ type: WalletMessageType.DISCOVERY;
74
+ /** Request ID */
75
+ requestId: string;
76
+ /** Chain information to check if wallet supports this network */
77
+ chainInfo: ChainInfo;
78
+ /** dApp's ECDH public key for deriving shared secret */
79
+ publicKey: ExportedPublicKey;
80
+ }
81
+ /**
82
+ * Discovery response from a wallet (public, unencrypted)
83
+ */
84
+ export interface DiscoveryResponse {
85
+ /** Message type for discovery response */
86
+ type: WalletMessageType.DISCOVERY_RESPONSE;
87
+ /** Request ID matching the discovery request */
88
+ requestId: string;
89
+ /** Wallet information */
90
+ walletInfo: WalletInfo;
91
+ }
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV6RCxPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVyRDs7O0dBR0c7QUFDSCxvQkFBWSxpQkFBaUI7SUFDM0Isa0RBQWtEO0lBQ2xELFNBQVMsMkJBQTJCO0lBQ3BDLHVDQUF1QztJQUN2QyxrQkFBa0Isb0NBQW9DO0lBQ3RELHNFQUFzRTtJQUN0RSxvQkFBb0Isc0NBQXNDO0lBQzFELDRDQUE0QztJQUM1QyxVQUFVLDRCQUE0QjtDQUN2QztBQUVEOztHQUVHO0FBQ0gsTUFBTSxXQUFXLFVBQVU7SUFDekIsdUNBQXVDO0lBQ3ZDLEVBQUUsRUFBRSxNQUFNLENBQUM7SUFDWCxpQ0FBaUM7SUFDakMsSUFBSSxFQUFFLE1BQU0sQ0FBQztJQUNiLCtCQUErQjtJQUMvQixJQUFJLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDZCxxQkFBcUI7SUFDckIsT0FBTyxFQUFFLE1BQU0sQ0FBQztJQUNoQixnRUFBZ0U7SUFDaEUsU0FBUyxFQUFFLGlCQUFpQixDQUFDO0lBQzdCOzs7O09BSUc7SUFDSCxnQkFBZ0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQztDQUMzQjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxXQUFXLGFBQWE7SUFDNUIsK0NBQStDO0lBQy9DLFNBQVMsRUFBRSxNQUFNLENBQUM7SUFDbEIsZ0NBQWdDO0lBQ2hDLElBQUksRUFBRSxNQUFNLENBQUM7SUFDYiwrQkFBK0I7SUFDL0IsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ2hCLHdCQUF3QjtJQUN4QixTQUFTLEVBQUUsU0FBUyxDQUFDO0lBQ3JCLHdDQUF3QztJQUN4QyxLQUFLLEVBQUUsTUFBTSxDQUFDO0lBQ2QsNENBQTRDO0lBQzVDLFFBQVEsRUFBRSxNQUFNLENBQUM7Q0FDbEI7QUFFRDs7R0FFRztBQUNILE1BQU0sV0FBVyxjQUFjO0lBQzdCLHNDQUFzQztJQUN0QyxTQUFTLEVBQUUsTUFBTSxDQUFDO0lBQ2xCLGtDQUFrQztJQUNsQyxNQUFNLENBQUMsRUFBRSxPQUFPLENBQUM7SUFDakIsNkJBQTZCO0lBQzdCLEtBQUssQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUNoQix1Q0FBdUM7SUFDdkMsUUFBUSxFQUFFLE1BQU0sQ0FBQztDQUNsQjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxXQUFXLGdCQUFnQjtJQUMvQixpQ0FBaUM7SUFDakMsSUFBSSxFQUFFLGlCQUFpQixDQUFDLFNBQVMsQ0FBQztJQUNsQyxpQkFBaUI7SUFDakIsU0FBUyxFQUFFLE1BQU0sQ0FBQztJQUNsQixpRUFBaUU7SUFDakUsU0FBUyxFQUFFLFNBQVMsQ0FBQztJQUNyQix3REFBd0Q7SUFDeEQsU0FBUyxFQUFFLGlCQUFpQixDQUFDO0NBQzlCO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFdBQVcsaUJBQWlCO0lBQ2hDLDBDQUEwQztJQUMxQyxJQUFJLEVBQUUsaUJBQWlCLENBQUMsa0JBQWtCLENBQUM7SUFDM0MsZ0RBQWdEO0lBQ2hELFNBQVMsRUFBRSxNQUFNLENBQUM7SUFDbEIseUJBQXlCO0lBQ3pCLFVBQVUsRUFBRSxVQUFVLENBQUM7Q0FDeEIifQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD;;;GAGG;AACH,oBAAY,iBAAiB;IAC3B,kDAAkD;IAClD,SAAS,2BAA2B;IACpC,uCAAuC;IACvC,kBAAkB,oCAAoC;IACtD,sEAAsE;IACtE,oBAAoB,sCAAsC;IAC1D,4CAA4C;IAC5C,UAAU,4BAA4B;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,uCAAuC;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,gEAAgE;IAChE,SAAS,EAAE,iBAAiB,CAAC;IAC7B;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,wBAAwB;IACxB,SAAS,EAAE,SAAS,CAAC;IACrB,wCAAwC;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,kCAAkC;IAClC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,6BAA6B;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iCAAiC;IACjC,IAAI,EAAE,iBAAiB,CAAC,SAAS,CAAC;IAClC,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,iEAAiE;IACjE,SAAS,EAAE,SAAS,CAAC;IACrB,wDAAwD;IACxD,SAAS,EAAE,iBAAiB,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,0CAA0C;IAC1C,IAAI,EAAE,iBAAiB,CAAC,kBAAkB,CAAC;IAC3C,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,yBAAyB;IACzB,UAAU,EAAE,UAAU,CAAC;CACxB"}
package/dest/types.js ADDED
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Message types for wallet SDK communication.
3
+ * All types are prefixed with 'aztec-wallet-' for namespacing.
4
+ */ export var WalletMessageType = /*#__PURE__*/ function(WalletMessageType) {
5
+ /** Discovery request to find installed wallets */ WalletMessageType["DISCOVERY"] = "aztec-wallet-discovery";
6
+ /** Discovery response from a wallet */ WalletMessageType["DISCOVERY_RESPONSE"] = "aztec-wallet-discovery-response";
7
+ /** Session disconnected notification (unencrypted control message) */ WalletMessageType["SESSION_DISCONNECTED"] = "aztec-wallet-session-disconnected";
8
+ /** Explicit disconnect request from dApp */ WalletMessageType["DISCONNECT"] = "aztec-wallet-disconnect";
9
+ return WalletMessageType;
10
+ }({});
package/package.json CHANGED
@@ -1,11 +1,13 @@
1
1
  {
2
2
  "name": "@aztec/wallet-sdk",
3
3
  "homepage": "https://github.com/AztecProtocol/aztec-packages/tree/master/yarn-project/wallet-sdk",
4
- "version": "0.0.1-commit.21caa21",
4
+ "version": "0.0.1-commit.3469e52",
5
5
  "type": "module",
6
6
  "exports": {
7
7
  "./base-wallet": "./dest/base-wallet/index.js",
8
8
  "./providers/extension": "./dest/providers/extension/index.js",
9
+ "./crypto": "./dest/crypto.js",
10
+ "./types": "./dest/types.js",
9
11
  "./manager": "./dest/manager/index.js"
10
12
  },
11
13
  "typedocOptions": {
@@ -15,8 +17,8 @@
15
17
  "tsconfig": "./tsconfig.json"
16
18
  },
17
19
  "scripts": {
18
- "build": "yarn clean && tsgo -b",
19
- "build:dev": "tsgo -b --watch",
20
+ "build": "yarn clean && ../scripts/tsc.sh",
21
+ "build:dev": "../scripts/tsc.sh --watch",
20
22
  "build:ts": "tsc -b",
21
23
  "clean": "rm -rf ./dest .tsbuildinfo",
22
24
  "test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests --maxWorkers=${JEST_MAX_WORKERS:-8}"
@@ -62,19 +64,19 @@
62
64
  ]
63
65
  },
64
66
  "dependencies": {
65
- "@aztec/aztec.js": "0.0.1-commit.21caa21",
66
- "@aztec/constants": "0.0.1-commit.21caa21",
67
- "@aztec/entrypoints": "0.0.1-commit.21caa21",
68
- "@aztec/foundation": "0.0.1-commit.21caa21",
69
- "@aztec/pxe": "0.0.1-commit.21caa21",
70
- "@aztec/stdlib": "0.0.1-commit.21caa21"
67
+ "@aztec/aztec.js": "0.0.1-commit.3469e52",
68
+ "@aztec/constants": "0.0.1-commit.3469e52",
69
+ "@aztec/entrypoints": "0.0.1-commit.3469e52",
70
+ "@aztec/foundation": "0.0.1-commit.3469e52",
71
+ "@aztec/pxe": "0.0.1-commit.3469e52",
72
+ "@aztec/stdlib": "0.0.1-commit.3469e52"
71
73
  },
72
74
  "devDependencies": {
73
- "@aztec/noir-contracts.js": "0.0.1-commit.21caa21",
75
+ "@aztec/noir-contracts.js": "0.0.1-commit.3469e52",
74
76
  "@jest/globals": "^30.0.0",
75
77
  "@types/jest": "^30.0.0",
76
78
  "@types/node": "^22.15.17",
77
- "@typescript/native-preview": "7.0.0-dev.20251126.1",
79
+ "@typescript/native-preview": "7.0.0-dev.20260113.1",
78
80
  "jest": "^30.0.0",
79
81
  "jest-mock-extended": "^4.0.0",
80
82
  "resolve-typescript-plugin": "^2.0.1",
@@ -4,8 +4,9 @@ import type { FeePaymentMethod } from '@aztec/aztec.js/fee';
4
4
  import type {
5
5
  Aliased,
6
6
  BatchResults,
7
- BatchableMethods,
8
7
  BatchedMethod,
8
+ PrivateEvent,
9
+ PrivateEventFilter,
9
10
  ProfileOptions,
10
11
  SendOptions,
11
12
  SimulateOptions,
@@ -19,10 +20,10 @@ import {
19
20
  } from '@aztec/constants';
20
21
  import { AccountFeePaymentMethodOptions, type DefaultAccountEntrypointOptions } from '@aztec/entrypoints/account';
21
22
  import type { ChainInfo } from '@aztec/entrypoints/interfaces';
22
- import { Fr } from '@aztec/foundation/fields';
23
+ import { Fr } from '@aztec/foundation/curves/bn254';
23
24
  import { createLogger } from '@aztec/foundation/log';
24
25
  import type { FieldsOf } from '@aztec/foundation/types';
25
- import type { PXE } from '@aztec/pxe/server';
26
+ import type { PXE, PackedPrivateEvent } from '@aztec/pxe/server';
26
27
  import {
27
28
  type ContractArtifact,
28
29
  type EventMetadataDefinition,
@@ -32,14 +33,13 @@ import {
32
33
  import type { AuthWitness } from '@aztec/stdlib/auth-witness';
33
34
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
34
35
  import {
35
- type ContractClassMetadata,
36
36
  type ContractInstanceWithAddress,
37
- type ContractMetadata,
38
37
  computePartialAddress,
39
38
  getContractClassFromArtifact,
40
39
  } from '@aztec/stdlib/contract';
41
40
  import { SimulationError } from '@aztec/stdlib/errors';
42
41
  import { Gas, GasSettings } from '@aztec/stdlib/gas';
42
+ import { siloNullifier } from '@aztec/stdlib/hash';
43
43
  import type { AztecNode } from '@aztec/stdlib/interfaces/client';
44
44
  import type {
45
45
  TxExecutionRequest,
@@ -74,7 +74,7 @@ export type FeeOptions = {
74
74
  export abstract class BaseWallet implements Wallet {
75
75
  protected log = createLogger('wallet-sdk:base_wallet');
76
76
 
77
- protected baseFeePadding = 0.5;
77
+ protected minFeePadding = 0.5;
78
78
  protected cancellableTransactions = false;
79
79
 
80
80
  // Protected because we want to force wallets to instantiate their own PXE.
@@ -119,20 +119,25 @@ export abstract class BaseWallet implements Wallet {
119
119
  ? mergeExecutionPayloads([feeExecutionPayload, executionPayload])
120
120
  : executionPayload;
121
121
  const fromAccount = await this.getAccountFromAddress(from);
122
- return fromAccount.createTxExecutionRequest(finalExecutionPayload, feeOptions.gasSettings, executionOptions);
122
+ const chainInfo = await this.getChainInfo();
123
+ return fromAccount.createTxExecutionRequest(
124
+ finalExecutionPayload,
125
+ feeOptions.gasSettings,
126
+ chainInfo,
127
+ executionOptions,
128
+ );
123
129
  }
124
130
 
125
131
  public async createAuthWit(
126
132
  from: AztecAddress,
127
- messageHashOrIntent: Fr | IntentInnerHash | CallIntent,
133
+ messageHashOrIntent: IntentInnerHash | CallIntent,
128
134
  ): Promise<AuthWitness> {
129
135
  const account = await this.getAccountFromAddress(from);
130
- return account.createAuthWit(messageHashOrIntent);
136
+ const chainInfo = await this.getChainInfo();
137
+ return account.createAuthWit(messageHashOrIntent, chainInfo);
131
138
  }
132
139
 
133
- public async batch<const T extends readonly BatchedMethod<keyof BatchableMethods>[]>(
134
- methods: T,
135
- ): Promise<BatchResults<T>> {
140
+ public async batch<const T extends readonly BatchedMethod[]>(methods: T): Promise<BatchResults<T>> {
136
141
  const results: any[] = [];
137
142
  for (const method of methods) {
138
143
  const { name, args } = method;
@@ -163,7 +168,7 @@ export abstract class BaseWallet implements Wallet {
163
168
  gasSettings?: Partial<FieldsOf<GasSettings>>,
164
169
  ): Promise<FeeOptions> {
165
170
  const maxFeesPerGas =
166
- gasSettings?.maxFeesPerGas ?? (await this.aztecNode.getCurrentBaseFees()).mul(1 + this.baseFeePadding);
171
+ gasSettings?.maxFeesPerGas ?? (await this.aztecNode.getCurrentMinFees()).mul(1 + this.minFeePadding);
167
172
  let accountFeePaymentMethodOptions;
168
173
  // The transaction does not include a fee payment method, so we set the flag
169
174
  // for the account to use its fee juice balance
@@ -225,7 +230,7 @@ export abstract class BaseWallet implements Wallet {
225
230
  artifact?: ContractArtifact,
226
231
  secretKey?: Fr,
227
232
  ): Promise<ContractInstanceWithAddress> {
228
- const { contractInstance: existingInstance } = await this.pxe.getContractMetadata(instance.address);
233
+ const existingInstance = await this.pxe.getContractInstance(instance.address);
229
234
 
230
235
  if (existingInstance) {
231
236
  // Instance already registered in the wallet
@@ -242,13 +247,12 @@ export abstract class BaseWallet implements Wallet {
242
247
  // Instance not registered yet
243
248
  if (!artifact) {
244
249
  // Try to get the artifact from the wallet's contract class storage
245
- const classMetadata = await this.pxe.getContractClassMetadata(instance.currentContractClassId, true);
246
- if (!classMetadata.artifact) {
250
+ artifact = await this.pxe.getContractArtifact(instance.currentContractClassId);
251
+ if (!artifact) {
247
252
  throw new Error(
248
253
  `Cannot register contract at ${instance.address.toString()}: artifact is required but not provided, and wallet does not have the artifact for contract class ${instance.currentContractClassId.toString()}`,
249
254
  );
250
255
  }
251
- artifact = classMetadata.artifact;
252
256
  }
253
257
  await this.pxe.registerContract({ artifact, instance });
254
258
  }
@@ -313,30 +317,60 @@ export abstract class BaseWallet implements Wallet {
313
317
  return this.pxe.simulateUtility(call, authwits);
314
318
  }
315
319
 
316
- getContractClassMetadata(id: Fr, includeArtifact: boolean = false): Promise<ContractClassMetadata> {
317
- return this.pxe.getContractClassMetadata(id, includeArtifact);
318
- }
319
- getContractMetadata(address: AztecAddress): Promise<ContractMetadata> {
320
- return this.pxe.getContractMetadata(address);
321
- }
322
-
323
320
  getTxReceipt(txHash: TxHash): Promise<TxReceipt> {
324
321
  return this.aztecNode.getTxReceipt(txHash);
325
322
  }
326
323
 
327
324
  async getPrivateEvents<T>(
328
- contractAddress: AztecAddress,
329
325
  eventDef: EventMetadataDefinition,
330
- from: number,
331
- limit: number,
332
- recipients: AztecAddress[] = [],
333
- ): Promise<T[]> {
334
- const events = await this.pxe.getPrivateEvents(contractAddress, eventDef.eventSelector, from, limit, recipients);
326
+ eventFilter: PrivateEventFilter,
327
+ ): Promise<PrivateEvent<T>[]> {
328
+ const pxeEvents = await this.pxe.getPrivateEvents(eventDef.eventSelector, eventFilter);
335
329
 
336
- const decodedEvents = events.map(
337
- (event: any /** PrivateEvent */): T => decodeFromAbi([eventDef.abiType], event.packedEvent) as T,
338
- );
330
+ const decodedEvents = pxeEvents.map((pxeEvent: PackedPrivateEvent): PrivateEvent<T> => {
331
+ return {
332
+ event: decodeFromAbi([eventDef.abiType], pxeEvent.packedEvent) as T,
333
+ metadata: {
334
+ l2BlockNumber: pxeEvent.l2BlockNumber,
335
+ l2BlockHash: pxeEvent.l2BlockHash,
336
+ txHash: pxeEvent.txHash,
337
+ },
338
+ };
339
+ });
339
340
 
340
341
  return decodedEvents;
341
342
  }
343
+
344
+ async getContractMetadata(address: AztecAddress) {
345
+ const instance = await this.pxe.getContractInstance(address);
346
+ const initNullifier = await siloNullifier(address, address.toField());
347
+ const publiclyRegisteredContract = await this.aztecNode.getContract(address);
348
+ const [initNullifierMembershipWitness, publiclyRegisteredContractClass] = await Promise.all([
349
+ this.aztecNode.getNullifierMembershipWitness('latest', initNullifier),
350
+ publiclyRegisteredContract
351
+ ? this.aztecNode.getContractClass(
352
+ publiclyRegisteredContract.currentContractClassId || instance?.currentContractClassId,
353
+ )
354
+ : undefined,
355
+ ]);
356
+ const isContractUpdated =
357
+ publiclyRegisteredContract &&
358
+ !publiclyRegisteredContract.currentContractClassId.equals(publiclyRegisteredContract.originalContractClassId);
359
+ return {
360
+ instance: instance ?? undefined,
361
+ isContractInitialized: !!initNullifierMembershipWitness,
362
+ isContractPublished: !!publiclyRegisteredContract,
363
+ isContractClassPubliclyRegistered: !!publiclyRegisteredContractClass,
364
+ isContractUpdated: !!isContractUpdated,
365
+ updatedContractClassId: isContractUpdated ? publiclyRegisteredContract.currentContractClassId : undefined,
366
+ };
367
+ }
368
+
369
+ async getContractClassMetadata(id: Fr) {
370
+ const publiclyRegisteredContractClass = await this.aztecNode.getContractClass(id);
371
+ return {
372
+ isArtifactRegistered: !!(await this.pxe.getContractArtifact(id)),
373
+ isContractClassPubliclyRegistered: !!publiclyRegisteredContractClass,
374
+ };
375
+ }
342
376
  }