@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.
- package/README.md +240 -266
- package/dest/base-wallet/base_wallet.d.ts +20 -10
- package/dest/base-wallet/base_wallet.d.ts.map +1 -1
- package/dest/base-wallet/base_wallet.js +51 -21
- 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 +13 -11
- package/src/base-wallet/base_wallet.ts +67 -33
- 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.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 &&
|
|
19
|
-
"build:dev": "
|
|
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.
|
|
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.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.
|
|
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.
|
|
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.
|
|
@@ -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
|
-
|
|
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:
|
|
133
|
+
messageHashOrIntent: IntentInnerHash | CallIntent,
|
|
128
134
|
): Promise<AuthWitness> {
|
|
129
135
|
const account = await this.getAccountFromAddress(from);
|
|
130
|
-
|
|
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
|
|
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.
|
|
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
|
|
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
|
-
|
|
246
|
-
if (!
|
|
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
|
-
|
|
331
|
-
|
|
332
|
-
|
|
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 =
|
|
337
|
-
|
|
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
|
}
|