@aztec/wallet-sdk 0.0.1-commit.d3ec352c → 0.0.1-commit.f295ac2
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.
- package/README.md +240 -266
- package/dest/base-wallet/base_wallet.d.ts +19 -9
- package/dest/base-wallet/base_wallet.d.ts.map +1 -1
- package/dest/base-wallet/base_wallet.js +47 -19
- package/dest/crypto.d.ts +183 -0
- package/dest/crypto.d.ts.map +1 -0
- package/dest/crypto.js +300 -0
- package/dest/manager/index.d.ts +4 -3
- package/dest/manager/index.d.ts.map +1 -1
- package/dest/manager/index.js +2 -0
- package/dest/manager/types.d.ts +22 -1
- package/dest/manager/types.d.ts.map +1 -1
- package/dest/manager/wallet_manager.d.ts +1 -1
- package/dest/manager/wallet_manager.d.ts.map +1 -1
- package/dest/manager/wallet_manager.js +34 -15
- package/dest/providers/extension/extension_provider.d.ts +53 -7
- package/dest/providers/extension/extension_provider.d.ts.map +1 -1
- package/dest/providers/extension/extension_provider.js +81 -13
- package/dest/providers/extension/extension_wallet.d.ts +140 -8
- package/dest/providers/extension/extension_wallet.d.ts.map +1 -1
- package/dest/providers/extension/extension_wallet.js +268 -46
- package/dest/providers/extension/index.d.ts +6 -4
- package/dest/providers/extension/index.d.ts.map +1 -1
- package/dest/providers/extension/index.js +2 -0
- package/dest/types.d.ts +92 -0
- package/dest/types.d.ts.map +1 -0
- package/dest/types.js +10 -0
- package/package.json +11 -9
- package/src/base-wallet/base_wallet.ts +57 -30
- package/src/crypto.ts +375 -0
- package/src/manager/index.ts +4 -8
- package/src/manager/types.ts +22 -0
- package/src/manager/wallet_manager.ts +43 -16
- package/src/providers/extension/extension_provider.ts +112 -17
- package/src/providers/extension/extension_wallet.ts +310 -55
- package/src/providers/extension/index.ts +5 -3
- package/src/{providers/types.ts → types.ts} +33 -6
- package/dest/providers/types.d.ts +0 -67
- package/dest/providers/types.d.ts.map +0 -1
- package/dest/providers/types.js +0 -3
package/dest/types.d.ts
ADDED
|
@@ -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.
|
|
4
|
+
"version": "0.0.1-commit.f295ac2",
|
|
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": {
|
|
@@ -62,19 +64,19 @@
|
|
|
62
64
|
]
|
|
63
65
|
},
|
|
64
66
|
"dependencies": {
|
|
65
|
-
"@aztec/aztec.js": "0.0.1-commit.
|
|
66
|
-
"@aztec/constants": "0.0.1-commit.
|
|
67
|
-
"@aztec/entrypoints": "0.0.1-commit.
|
|
68
|
-
"@aztec/foundation": "0.0.1-commit.
|
|
69
|
-
"@aztec/pxe": "0.0.1-commit.
|
|
70
|
-
"@aztec/stdlib": "0.0.1-commit.
|
|
67
|
+
"@aztec/aztec.js": "0.0.1-commit.f295ac2",
|
|
68
|
+
"@aztec/constants": "0.0.1-commit.f295ac2",
|
|
69
|
+
"@aztec/entrypoints": "0.0.1-commit.f295ac2",
|
|
70
|
+
"@aztec/foundation": "0.0.1-commit.f295ac2",
|
|
71
|
+
"@aztec/pxe": "0.0.1-commit.f295ac2",
|
|
72
|
+
"@aztec/stdlib": "0.0.1-commit.f295ac2"
|
|
71
73
|
},
|
|
72
74
|
"devDependencies": {
|
|
73
|
-
"@aztec/noir-contracts.js": "0.0.1-commit.
|
|
75
|
+
"@aztec/noir-contracts.js": "0.0.1-commit.f295ac2",
|
|
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.
|
|
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/
|
|
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
|
|
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.
|
|
@@ -130,9 +130,7 @@ export abstract class BaseWallet implements Wallet {
|
|
|
130
130
|
return account.createAuthWit(messageHashOrIntent);
|
|
131
131
|
}
|
|
132
132
|
|
|
133
|
-
public async batch<const T extends readonly BatchedMethod
|
|
134
|
-
methods: T,
|
|
135
|
-
): Promise<BatchResults<T>> {
|
|
133
|
+
public async batch<const T extends readonly BatchedMethod[]>(methods: T): Promise<BatchResults<T>> {
|
|
136
134
|
const results: any[] = [];
|
|
137
135
|
for (const method of methods) {
|
|
138
136
|
const { name, args } = method;
|
|
@@ -163,7 +161,7 @@ export abstract class BaseWallet implements Wallet {
|
|
|
163
161
|
gasSettings?: Partial<FieldsOf<GasSettings>>,
|
|
164
162
|
): Promise<FeeOptions> {
|
|
165
163
|
const maxFeesPerGas =
|
|
166
|
-
gasSettings?.maxFeesPerGas ?? (await this.aztecNode.
|
|
164
|
+
gasSettings?.maxFeesPerGas ?? (await this.aztecNode.getCurrentMinFees()).mul(1 + this.minFeePadding);
|
|
167
165
|
let accountFeePaymentMethodOptions;
|
|
168
166
|
// The transaction does not include a fee payment method, so we set the flag
|
|
169
167
|
// for the account to use its fee juice balance
|
|
@@ -225,7 +223,7 @@ export abstract class BaseWallet implements Wallet {
|
|
|
225
223
|
artifact?: ContractArtifact,
|
|
226
224
|
secretKey?: Fr,
|
|
227
225
|
): Promise<ContractInstanceWithAddress> {
|
|
228
|
-
const
|
|
226
|
+
const existingInstance = await this.pxe.getContractInstance(instance.address);
|
|
229
227
|
|
|
230
228
|
if (existingInstance) {
|
|
231
229
|
// Instance already registered in the wallet
|
|
@@ -242,13 +240,12 @@ export abstract class BaseWallet implements Wallet {
|
|
|
242
240
|
// Instance not registered yet
|
|
243
241
|
if (!artifact) {
|
|
244
242
|
// Try to get the artifact from the wallet's contract class storage
|
|
245
|
-
|
|
246
|
-
if (!
|
|
243
|
+
artifact = await this.pxe.getContractArtifact(instance.currentContractClassId);
|
|
244
|
+
if (!artifact) {
|
|
247
245
|
throw new Error(
|
|
248
246
|
`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
247
|
);
|
|
250
248
|
}
|
|
251
|
-
artifact = classMetadata.artifact;
|
|
252
249
|
}
|
|
253
250
|
await this.pxe.registerContract({ artifact, instance });
|
|
254
251
|
}
|
|
@@ -313,30 +310,60 @@ export abstract class BaseWallet implements Wallet {
|
|
|
313
310
|
return this.pxe.simulateUtility(call, authwits);
|
|
314
311
|
}
|
|
315
312
|
|
|
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
313
|
getTxReceipt(txHash: TxHash): Promise<TxReceipt> {
|
|
324
314
|
return this.aztecNode.getTxReceipt(txHash);
|
|
325
315
|
}
|
|
326
316
|
|
|
327
317
|
async getPrivateEvents<T>(
|
|
328
|
-
contractAddress: AztecAddress,
|
|
329
318
|
eventDef: EventMetadataDefinition,
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
): Promise<T[]> {
|
|
334
|
-
const events = await this.pxe.getPrivateEvents(contractAddress, eventDef.eventSelector, from, limit, recipients);
|
|
319
|
+
eventFilter: PrivateEventFilter,
|
|
320
|
+
): Promise<PrivateEvent<T>[]> {
|
|
321
|
+
const pxeEvents = await this.pxe.getPrivateEvents(eventDef.eventSelector, eventFilter);
|
|
335
322
|
|
|
336
|
-
const decodedEvents =
|
|
337
|
-
|
|
338
|
-
|
|
323
|
+
const decodedEvents = pxeEvents.map((pxeEvent: PackedPrivateEvent): PrivateEvent<T> => {
|
|
324
|
+
return {
|
|
325
|
+
event: decodeFromAbi([eventDef.abiType], pxeEvent.packedEvent) as T,
|
|
326
|
+
metadata: {
|
|
327
|
+
l2BlockNumber: pxeEvent.l2BlockNumber,
|
|
328
|
+
l2BlockHash: pxeEvent.l2BlockHash,
|
|
329
|
+
txHash: pxeEvent.txHash,
|
|
330
|
+
},
|
|
331
|
+
};
|
|
332
|
+
});
|
|
339
333
|
|
|
340
334
|
return decodedEvents;
|
|
341
335
|
}
|
|
336
|
+
|
|
337
|
+
async getContractMetadata(address: AztecAddress) {
|
|
338
|
+
const instance = await this.pxe.getContractInstance(address);
|
|
339
|
+
const initNullifier = await siloNullifier(address, address.toField());
|
|
340
|
+
const publiclyRegisteredContract = await this.aztecNode.getContract(address);
|
|
341
|
+
const [initNullifierMembershipWitness, publiclyRegisteredContractClass] = await Promise.all([
|
|
342
|
+
this.aztecNode.getNullifierMembershipWitness('latest', initNullifier),
|
|
343
|
+
publiclyRegisteredContract
|
|
344
|
+
? this.aztecNode.getContractClass(
|
|
345
|
+
publiclyRegisteredContract.currentContractClassId || instance?.currentContractClassId,
|
|
346
|
+
)
|
|
347
|
+
: undefined,
|
|
348
|
+
]);
|
|
349
|
+
const isContractUpdated =
|
|
350
|
+
publiclyRegisteredContract &&
|
|
351
|
+
!publiclyRegisteredContract.currentContractClassId.equals(publiclyRegisteredContract.originalContractClassId);
|
|
352
|
+
return {
|
|
353
|
+
instance: instance ?? undefined,
|
|
354
|
+
isContractInitialized: !!initNullifierMembershipWitness,
|
|
355
|
+
isContractPublished: !!publiclyRegisteredContract,
|
|
356
|
+
isContractClassPubliclyRegistered: !!publiclyRegisteredContractClass,
|
|
357
|
+
isContractUpdated: !!isContractUpdated,
|
|
358
|
+
updatedContractClassId: isContractUpdated ? publiclyRegisteredContract.currentContractClassId : undefined,
|
|
359
|
+
};
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
async getContractClassMetadata(id: Fr) {
|
|
363
|
+
const publiclyRegisteredContractClass = await this.aztecNode.getContractClass(id);
|
|
364
|
+
return {
|
|
365
|
+
isArtifactRegistered: !!(await this.pxe.getContractArtifact(id)),
|
|
366
|
+
isContractClassPubliclyRegistered: !!publiclyRegisteredContractClass,
|
|
367
|
+
};
|
|
368
|
+
}
|
|
342
369
|
}
|