@walletmesh/aztec-rpc-wallet 0.3.0 → 0.4.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.
- package/CHANGELOG.md +26 -0
- package/README.md +290 -228
- package/dist/.tsbuildinfo +1 -1
- package/dist/client/aztec-dapp-wallet.d.ts +401 -0
- package/dist/client/aztec-dapp-wallet.d.ts.map +1 -0
- package/dist/client/aztec-dapp-wallet.js +705 -0
- package/dist/client/aztec-router-provider.d.ts +58 -0
- package/dist/client/aztec-router-provider.d.ts.map +1 -0
- package/dist/client/aztec-router-provider.js +62 -0
- package/dist/client/helpers.d.ts +44 -0
- package/dist/client/helpers.d.ts.map +1 -0
- package/dist/client/helpers.js +79 -0
- package/dist/client/register-serializers.d.ts +41 -0
- package/dist/client/register-serializers.d.ts.map +1 -0
- package/dist/client/register-serializers.js +97 -0
- package/dist/contractArtifactCache.d.ts +49 -32
- package/dist/contractArtifactCache.d.ts.map +1 -1
- package/dist/contractArtifactCache.js +47 -34
- package/dist/errors.d.ts +50 -8
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +50 -10
- package/dist/index.d.ts +53 -40
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +52 -17
- package/dist/types.d.ts +345 -268
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +10 -8
- package/dist/wallet/create-node.d.ts +73 -0
- package/dist/wallet/create-node.d.ts.map +1 -0
- package/dist/wallet/create-node.js +99 -0
- package/dist/wallet/handlers/account.d.ts +67 -0
- package/dist/wallet/handlers/account.d.ts.map +1 -0
- package/dist/wallet/handlers/account.js +85 -0
- package/dist/wallet/handlers/contract-interaction.d.ts +77 -0
- package/dist/wallet/handlers/contract-interaction.d.ts.map +1 -0
- package/dist/wallet/handlers/contract-interaction.js +219 -0
- package/dist/wallet/handlers/contract.d.ts +96 -0
- package/dist/wallet/handlers/contract.d.ts.map +1 -0
- package/dist/wallet/handlers/contract.js +146 -0
- package/dist/wallet/handlers/event.d.ts +62 -0
- package/dist/wallet/handlers/event.d.ts.map +1 -0
- package/dist/wallet/handlers/event.js +85 -0
- package/dist/wallet/handlers/index.d.ts +88 -0
- package/dist/wallet/handlers/index.d.ts.map +1 -0
- package/dist/wallet/handlers/index.js +47 -0
- package/dist/wallet/handlers/node.d.ts +117 -0
- package/dist/wallet/handlers/node.d.ts.map +1 -0
- package/dist/wallet/handlers/node.js +196 -0
- package/dist/wallet/handlers/senders.d.ts +70 -0
- package/dist/wallet/handlers/senders.d.ts.map +1 -0
- package/dist/wallet/handlers/senders.js +92 -0
- package/dist/wallet/handlers/transaction.d.ts +123 -0
- package/dist/wallet/handlers/transaction.d.ts.map +1 -0
- package/dist/wallet/handlers/transaction.js +191 -0
- package/dist/wallet/serializers.d.ts +75 -0
- package/dist/wallet/serializers.d.ts.map +1 -0
- package/dist/wallet/serializers.js +501 -0
- package/docs/README.md +290 -229
- package/docs/classes/AztecDappWallet.md +1304 -0
- package/docs/classes/AztecRouterProvider.md +1058 -0
- package/docs/classes/AztecWalletError.md +124 -47
- package/docs/classes/ContractArtifactCache.md +48 -31
- package/docs/functions/connectAztec.md +62 -0
- package/docs/functions/createAztecWallet.md +46 -0
- package/docs/functions/createAztecWalletNode.md +96 -0
- package/docs/functions/registerAztecSerializers.md +61 -0
- package/docs/functions/registerWalletAztecSerializers.md +39 -0
- package/docs/globals.md +16 -14
- package/docs/interfaces/AztecHandlerContext.md +54 -0
- package/docs/interfaces/AztecWalletContext.md +50 -0
- package/docs/interfaces/AztecWalletMethodMap.md +471 -470
- package/docs/type-aliases/AztecChainId.md +16 -3
- package/docs/variables/ALL_AZTEC_METHODS.md +20 -0
- package/docs/variables/AztecWalletErrorMap.md +9 -4
- package/docs/variables/AztecWalletSerializer.md +45 -0
- package/package.json +9 -9
- package/src/client/aztec-dapp-wallet.test.ts +628 -0
- package/src/client/aztec-dapp-wallet.ts +879 -0
- package/src/client/aztec-router-provider.test.ts +235 -0
- package/src/client/aztec-router-provider.ts +64 -0
- package/src/client/helpers.test.ts +187 -0
- package/src/client/helpers.ts +91 -0
- package/src/client/register-serializers.ts +108 -0
- package/src/contractArtifactCache.test.ts +21 -10
- package/src/contractArtifactCache.ts +54 -35
- package/src/errors.ts +58 -10
- package/src/index.test.ts +2 -6
- package/src/index.ts +73 -37
- package/src/types.ts +379 -217
- package/src/wallet/create-node.test.ts +332 -0
- package/src/wallet/create-node.ts +120 -0
- package/src/wallet/handlers/account.test.ts +172 -0
- package/src/wallet/handlers/account.ts +99 -0
- package/src/wallet/handlers/contract-interaction.test.ts +248 -0
- package/src/wallet/handlers/contract-interaction.ts +269 -0
- package/src/wallet/handlers/contract.test.ts +245 -0
- package/src/wallet/handlers/contract.ts +174 -0
- package/src/wallet/handlers/event.test.ts +216 -0
- package/src/wallet/handlers/event.ts +99 -0
- package/src/wallet/handlers/index.ts +84 -0
- package/src/wallet/handlers/node.test.ts +304 -0
- package/src/wallet/handlers/node.ts +230 -0
- package/src/wallet/handlers/senders.test.ts +172 -0
- package/src/wallet/handlers/senders.ts +106 -0
- package/src/wallet/handlers/transaction.test.ts +371 -0
- package/src/wallet/handlers/transaction.ts +239 -0
- package/src/wallet/serializers.test.ts +253 -0
- package/src/wallet/serializers.ts +586 -0
- package/typedoc.json +23 -1
- package/dist/aztecRemoteWallet.d.ts +0 -70
- package/dist/aztecRemoteWallet.d.ts.map +0 -1
- package/dist/aztecRemoteWallet.js +0 -335
- package/dist/chainProvider.d.ts +0 -56
- package/dist/chainProvider.d.ts.map +0 -1
- package/dist/chainProvider.js +0 -98
- package/dist/handlers/aztecAccountWallet.d.ts +0 -4
- package/dist/handlers/aztecAccountWallet.d.ts.map +0 -1
- package/dist/handlers/aztecAccountWallet.js +0 -296
- package/dist/handlers/transactions.d.ts +0 -21
- package/dist/handlers/transactions.d.ts.map +0 -1
- package/dist/handlers/transactions.js +0 -98
- package/dist/handlers.d.ts +0 -27
- package/dist/handlers.d.ts.map +0 -1
- package/dist/handlers.js +0 -55
- package/dist/provider.d.ts +0 -105
- package/dist/provider.d.ts.map +0 -1
- package/dist/provider.js +0 -160
- package/dist/serializers/account.d.ts +0 -164
- package/dist/serializers/account.d.ts.map +0 -1
- package/dist/serializers/account.js +0 -244
- package/dist/serializers/contract.d.ts +0 -62
- package/dist/serializers/contract.d.ts.map +0 -1
- package/dist/serializers/contract.js +0 -130
- package/dist/serializers/index.d.ts +0 -21
- package/dist/serializers/index.d.ts.map +0 -1
- package/dist/serializers/index.js +0 -154
- package/dist/serializers/log.d.ts +0 -66
- package/dist/serializers/log.d.ts.map +0 -1
- package/dist/serializers/log.js +0 -222
- package/dist/serializers/note.d.ts +0 -124
- package/dist/serializers/note.d.ts.map +0 -1
- package/dist/serializers/note.js +0 -208
- package/dist/serializers/transaction.d.ts +0 -99
- package/dist/serializers/transaction.d.ts.map +0 -1
- package/dist/serializers/transaction.js +0 -275
- package/dist/wallet.d.ts +0 -62
- package/dist/wallet.d.ts.map +0 -1
- package/dist/wallet.js +0 -77
- package/docs/classes/AztecChainProvider.md +0 -553
- package/docs/classes/AztecChainWallet.md +0 -409
- package/docs/classes/AztecProvider.md +0 -1112
- package/docs/interfaces/AztecWalletBaseMethodMap.md +0 -135
- package/docs/interfaces/AztecWalletEventMap.md +0 -17
- package/docs/type-aliases/AztecChainWalletMiddleware.md +0 -13
- package/docs/type-aliases/AztecWalletContext.md +0 -29
- package/docs/type-aliases/AztecWalletMethodHandler.md +0 -37
- package/docs/type-aliases/AztecWalletMiddleware.md +0 -13
- package/docs/type-aliases/AztecWalletRouterClient.md +0 -13
- package/docs/type-aliases/TransactionFunctionCall.md +0 -33
- package/docs/type-aliases/TransactionParams.md +0 -27
- package/src/aztecRemoteWallet.test.ts +0 -504
- package/src/aztecRemoteWallet.ts +0 -467
- package/src/chainProvider.test.ts +0 -401
- package/src/chainProvider.ts +0 -116
- package/src/handlers/aztecAccountWallet.test.ts +0 -649
- package/src/handlers/aztecAccountWallet.ts +0 -532
- package/src/handlers/transactions.ts +0 -124
- package/src/handlers.test.ts +0 -270
- package/src/handlers.ts +0 -70
- package/src/provider.test.ts +0 -274
- package/src/provider.ts +0 -189
- package/src/serializers/account.test.ts +0 -125
- package/src/serializers/account.ts +0 -301
- package/src/serializers/contract.test.ts +0 -24
- package/src/serializers/contract.ts +0 -183
- package/src/serializers/index.test.ts +0 -136
- package/src/serializers/index.ts +0 -191
- package/src/serializers/log.test.ts +0 -286
- package/src/serializers/log.ts +0 -292
- package/src/serializers/note.test.ts +0 -125
- package/src/serializers/note.ts +0 -250
- package/src/serializers/transaction.test.ts +0 -320
- package/src/serializers/transaction.ts +0 -409
- package/src/wallet.test.ts +0 -275
- package/src/wallet.ts +0 -94
@@ -0,0 +1,99 @@
|
|
1
|
+
import type { AztecHandlerContext } from './index.js';
|
2
|
+
import type { AztecWalletMethodMap } from '../../types.js';
|
3
|
+
import { createLogger } from '@aztec/foundation/log';
|
4
|
+
|
5
|
+
const logger = createLogger('aztec-rpc-wallet:event');
|
6
|
+
|
7
|
+
/**
|
8
|
+
* Creates handlers for event-related Aztec wallet JSON-RPC methods.
|
9
|
+
* These handlers are responsible for querying private (encrypted) and public
|
10
|
+
* (unencrypted) events emitted by Aztec contracts.
|
11
|
+
*
|
12
|
+
* Each handler function receives an {@link AztecHandlerContext} which provides access
|
13
|
+
* to the {@link PXE} client, essential for event retrieval.
|
14
|
+
*
|
15
|
+
* @returns An object where keys are event-related method names
|
16
|
+
* (e.g., "aztec_getPrivateEvents", "aztec_getPublicEvents") and values are
|
17
|
+
* their corresponding handler functions.
|
18
|
+
* @see {@link AztecWalletMethodMap} for method definitions.
|
19
|
+
*/
|
20
|
+
export function createEventHandlers() {
|
21
|
+
return {
|
22
|
+
/**
|
23
|
+
* Handles the "aztec_getPrivateEvents" JSON-RPC method.
|
24
|
+
* Retrieves encrypted private events emitted by a specific contract within a given
|
25
|
+
* block range, for a specified set of recipients.
|
26
|
+
*
|
27
|
+
* Private events are decrypted by the {@link PXE} using the viewing keys
|
28
|
+
* associated with the recipient addresses.
|
29
|
+
*
|
30
|
+
* @param ctx - The {@link AztecHandlerContext} containing the `pxe` instance.
|
31
|
+
* @param paramsTuple - A tuple containing parameters for querying private events.
|
32
|
+
* Defined by {@link AztecWalletMethodMap.aztec_getPrivateEvents.params}.
|
33
|
+
* @param paramsTuple.0 - The {@link AztecAddress} of the contract that emitted the events.
|
34
|
+
* @param paramsTuple.1 - The {@link EventMetadataDefinition} describing the event structure.
|
35
|
+
* @param paramsTuple.2 - The starting block number (inclusive) from which to query.
|
36
|
+
* @param paramsTuple.3 - The number of blocks to scan from the `from` block.
|
37
|
+
* @param paramsTuple.4 - An array of {@link AztecAddress} recipients whose events are to be fetched and decrypted.
|
38
|
+
* @returns A promise that resolves to an array of decoded private event data. The specific type
|
39
|
+
* of the event data depends on the `eventMetadata`.
|
40
|
+
* Type defined by {@link AztecWalletMethodMap.aztec_getPrivateEvents.result}.
|
41
|
+
* @throws {Error} If any required parameters are missing or invalid, though type checking
|
42
|
+
* and serializer validation should catch this earlier.
|
43
|
+
*/
|
44
|
+
aztec_getPrivateEvents: async (
|
45
|
+
ctx: AztecHandlerContext,
|
46
|
+
paramsTuple: AztecWalletMethodMap['aztec_getPrivateEvents']['params'],
|
47
|
+
): Promise<AztecWalletMethodMap['aztec_getPrivateEvents']['result']> => {
|
48
|
+
const [contractAddress, eventMetadata, from, numBlocks, recipients] = paramsTuple;
|
49
|
+
logger.debug(
|
50
|
+
`[HANDLER] aztec_getPrivateEvents: contractAddress = ${contractAddress?.toString()}, from = ${from}, numBlocks = ${numBlocks}`,
|
51
|
+
);
|
52
|
+
// All parameters are mandatory in the tuple type definition.
|
53
|
+
// Add runtime checks if there's any doubt about them being undefined, though TS should catch.
|
54
|
+
if (
|
55
|
+
!contractAddress ||
|
56
|
+
!eventMetadata ||
|
57
|
+
from === undefined ||
|
58
|
+
numBlocks === undefined ||
|
59
|
+
!recipients
|
60
|
+
) {
|
61
|
+
throw new Error('Invalid parameters received in tuple for aztec_getPrivateEvents');
|
62
|
+
}
|
63
|
+
return await ctx.pxe.getPrivateEvents(contractAddress, eventMetadata, from, numBlocks, recipients);
|
64
|
+
},
|
65
|
+
|
66
|
+
/**
|
67
|
+
* Handles the "aztec_getPublicEvents" JSON-RPC method.
|
68
|
+
* Retrieves unencrypted public events matching a specific {@link EventMetadataDefinition}
|
69
|
+
* starting from a given block number, up to a specified limit.
|
70
|
+
*
|
71
|
+
* Public events are visible to all network participants and are typically used for
|
72
|
+
* information that does not require privacy.
|
73
|
+
*
|
74
|
+
* @param ctx - The {@link AztecHandlerContext} containing the `pxe` instance.
|
75
|
+
* @param paramsTuple - A tuple containing parameters for querying public events.
|
76
|
+
* Defined by {@link AztecWalletMethodMap.aztec_getPublicEvents.params}.
|
77
|
+
* @param paramsTuple.0 - The {@link EventMetadataDefinition} describing the event structure.
|
78
|
+
* @param paramsTuple.1 - The starting block number (inclusive) from which to query.
|
79
|
+
* @param paramsTuple.2 - The maximum number of events to return.
|
80
|
+
* @returns A promise that resolves to an array of decoded public event data. The specific type
|
81
|
+
* of the event data depends on the `eventMetadata`.
|
82
|
+
* Type defined by {@link AztecWalletMethodMap.aztec_getPublicEvents.result}.
|
83
|
+
* @throws {Error} If any required parameters are missing or invalid, though type checking
|
84
|
+
* and serializer validation should catch this earlier.
|
85
|
+
*/
|
86
|
+
aztec_getPublicEvents: async (
|
87
|
+
ctx: AztecHandlerContext,
|
88
|
+
paramsTuple: AztecWalletMethodMap['aztec_getPublicEvents']['params'],
|
89
|
+
): Promise<AztecWalletMethodMap['aztec_getPublicEvents']['result']> => {
|
90
|
+
const [eventMetadata, from, limit] = paramsTuple;
|
91
|
+
logger.debug(`[HANDLER] aztec_getPublicEvents: from = ${from}, limit = ${limit}`);
|
92
|
+
// All parameters are mandatory in the tuple type definition.
|
93
|
+
if (!eventMetadata || from === undefined || limit === undefined) {
|
94
|
+
throw new Error('Invalid parameters received in tuple for aztec_getPublicEvents');
|
95
|
+
}
|
96
|
+
return await ctx.pxe.getPublicEvents(eventMetadata, from, limit);
|
97
|
+
},
|
98
|
+
};
|
99
|
+
}
|
@@ -0,0 +1,84 @@
|
|
1
|
+
import type { AccountWallet, PXE } from '@aztec/aztec.js';
|
2
|
+
import type { JSONRPCContext, JSONRPCParams } from '@walletmesh/jsonrpc';
|
3
|
+
import type { ContractArtifactCache } from '../../contractArtifactCache.js';
|
4
|
+
import type { AztecWalletMethodMap } from '../../types.js';
|
5
|
+
|
6
|
+
import { createAccountHandlers } from './account.js';
|
7
|
+
import { createTransactionHandlers } from './transaction.js';
|
8
|
+
import { createContractHandlers } from './contract.js';
|
9
|
+
import { createContractInteractionHandlers } from './contract-interaction.js';
|
10
|
+
import { createEventHandlers } from './event.js';
|
11
|
+
import { createNodeHandlers } from './node.js';
|
12
|
+
import { createSenderHandlers } from './senders.js';
|
13
|
+
|
14
|
+
/**
|
15
|
+
* Defines the context object that is passed to all Aztec wallet JSON-RPC method handlers.
|
16
|
+
* This context provides handlers with the necessary dependencies to perform their operations.
|
17
|
+
* It extends the base {@link JSONRPCContext} with Aztec-specific instances.
|
18
|
+
*
|
19
|
+
* @property wallet - An instance of {@link AccountWallet} from `aztec.js`,
|
20
|
+
* representing the user's account and signing capabilities.
|
21
|
+
* @property pxe - An instance of {@link PXE} (Private Execution Environment) client
|
22
|
+
* from `aztec.js`, used for interacting with the Aztec network.
|
23
|
+
* @property cache - An instance of {@link ContractArtifactCache} used for caching
|
24
|
+
* contract artifacts to optimize performance.
|
25
|
+
*/
|
26
|
+
export interface AztecHandlerContext extends JSONRPCContext {
|
27
|
+
wallet: AccountWallet;
|
28
|
+
pxe: PXE;
|
29
|
+
cache: ContractArtifactCache;
|
30
|
+
}
|
31
|
+
|
32
|
+
/**
|
33
|
+
* Defines the generic signature for an Aztec wallet JSON-RPC method handler function.
|
34
|
+
*
|
35
|
+
* @template M - A key from {@link AztecWalletMethodMap}, representing the specific Aztec method being handled.
|
36
|
+
* @param context - The {@link AztecHandlerContext} providing access to wallet, PXE, and cache.
|
37
|
+
* @param params - The parameters for the RPC method, typed as {@link JSONRPCParams} (typically an array or object).
|
38
|
+
* The specific structure of `params` is defined by `AztecWalletMethodMap[M]['params']`.
|
39
|
+
* @returns A promise that resolves to the result of the RPC method, typed according to `AztecWalletMethodMap[M]['result']`.
|
40
|
+
*/
|
41
|
+
export type AztecHandler<M extends keyof AztecWalletMethodMap> = (
|
42
|
+
context: AztecHandlerContext,
|
43
|
+
params: AztecWalletMethodMap[M]['params'], // More specific than JSONRPCParams
|
44
|
+
) => Promise<AztecWalletMethodMap[M]['result']>;
|
45
|
+
|
46
|
+
/**
|
47
|
+
* Creates and aggregates all Aztec JSON-RPC method handlers.
|
48
|
+
*
|
49
|
+
* This factory function consolidates handlers from various specialized modules
|
50
|
+
* (account, transaction, contract, etc.) into a single object. This object
|
51
|
+
* maps method names (as defined in {@link AztecWalletMethodMap}) to their
|
52
|
+
* respective handler functions.
|
53
|
+
*
|
54
|
+
* The resulting map of handlers is typically registered with a {@link JSONRPCNode}
|
55
|
+
* instance on the wallet-side.
|
56
|
+
*
|
57
|
+
* @returns An object where keys are Aztec method names (e.g., "aztec_getAddress")
|
58
|
+
* and values are the corresponding handler functions. Each handler
|
59
|
+
* conforms to the {@link AztecHandler} type.
|
60
|
+
*
|
61
|
+
* @see {@link createAccountHandlers}
|
62
|
+
* @see {@link createTransactionHandlers}
|
63
|
+
* @see {@link createContractHandlers}
|
64
|
+
* @see {@link createContractInteractionHandlers}
|
65
|
+
* @see {@link createSenderHandlers}
|
66
|
+
* @see {@link createEventHandlers}
|
67
|
+
* @see {@link createNodeHandlers}
|
68
|
+
* @see {@link createAztecWalletNode} where these handlers are typically used.
|
69
|
+
*/
|
70
|
+
export function createAztecHandlers() {
|
71
|
+
return {
|
72
|
+
// Note: The individual createXYZHandlers() functions return objects whose methods
|
73
|
+
// might have params typed as general JSONRPCParams or a more specific tuple.
|
74
|
+
// The createAztecWalletNode function correctly casts these to the specific
|
75
|
+
// handler signatures expected by JSONRPCNode.registerMethod, using AztecWalletMethodMap.
|
76
|
+
...createAccountHandlers(),
|
77
|
+
...createTransactionHandlers(),
|
78
|
+
...createContractHandlers(),
|
79
|
+
...createContractInteractionHandlers(),
|
80
|
+
...createSenderHandlers(),
|
81
|
+
...createEventHandlers(),
|
82
|
+
...createNodeHandlers(),
|
83
|
+
};
|
84
|
+
}
|
@@ -0,0 +1,304 @@
|
|
1
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
2
|
+
import { createNodeHandlers } from './node.js';
|
3
|
+
import type { AccountWallet, PXE } from '@aztec/aztec.js';
|
4
|
+
import type { NodeInfo } from '@aztec/stdlib/contract';
|
5
|
+
import type { GasFees } from '@aztec/stdlib/gas';
|
6
|
+
import type { PXEInfo } from '@aztec/stdlib/interfaces/client';
|
7
|
+
import type { L2Block } from '@aztec/aztec.js';
|
8
|
+
import type { AztecHandlerContext } from './index.js';
|
9
|
+
import type { ContractArtifactCache } from '../../contractArtifactCache.js';
|
10
|
+
import { Fr } from '@aztec/aztec.js';
|
11
|
+
|
12
|
+
// Mock dependencies
|
13
|
+
const createMockWallet = () =>
|
14
|
+
({
|
15
|
+
getChainId: vi.fn(),
|
16
|
+
getVersion: vi.fn(),
|
17
|
+
getNodeInfo: vi.fn(),
|
18
|
+
getCurrentBaseFees: vi.fn(),
|
19
|
+
}) as unknown as AccountWallet;
|
20
|
+
|
21
|
+
const createMockPXE = () =>
|
22
|
+
({
|
23
|
+
getPXEInfo: vi.fn(),
|
24
|
+
getBlock: vi.fn(),
|
25
|
+
getBlockNumber: vi.fn(),
|
26
|
+
}) as unknown as PXE;
|
27
|
+
|
28
|
+
const createMockContext = (wallet: AccountWallet, pxe: PXE): AztecHandlerContext => ({
|
29
|
+
wallet,
|
30
|
+
pxe,
|
31
|
+
cache: {} as ContractArtifactCache,
|
32
|
+
});
|
33
|
+
|
34
|
+
describe('Node Handlers', () => {
|
35
|
+
let mockWallet: AccountWallet;
|
36
|
+
let mockPXE: PXE;
|
37
|
+
let context: AztecHandlerContext;
|
38
|
+
let handlers: ReturnType<typeof createNodeHandlers>;
|
39
|
+
|
40
|
+
beforeEach(() => {
|
41
|
+
mockWallet = createMockWallet();
|
42
|
+
mockPXE = createMockPXE();
|
43
|
+
context = createMockContext(mockWallet, mockPXE);
|
44
|
+
handlers = createNodeHandlers();
|
45
|
+
});
|
46
|
+
|
47
|
+
describe('wm_getSupportedMethods', () => {
|
48
|
+
it('should return array of supported Aztec methods', async () => {
|
49
|
+
const result = await handlers.wm_getSupportedMethods(context, []);
|
50
|
+
|
51
|
+
expect(Array.isArray(result)).toBe(true);
|
52
|
+
expect(result).toContain('aztec_getAddress');
|
53
|
+
expect(result).toContain('aztec_getChainId');
|
54
|
+
expect(result).toContain('aztec_sendTx');
|
55
|
+
expect(result).toContain('wm_getSupportedMethods');
|
56
|
+
expect(result.length).toBeGreaterThan(25); // Should have many methods
|
57
|
+
});
|
58
|
+
|
59
|
+
it('should include all essential wallet methods', async () => {
|
60
|
+
const result = await handlers.wm_getSupportedMethods(context, []);
|
61
|
+
|
62
|
+
const essentialMethods = [
|
63
|
+
'aztec_getAddress',
|
64
|
+
'aztec_getCompleteAddress',
|
65
|
+
'aztec_createAuthWit',
|
66
|
+
'aztec_sendTx',
|
67
|
+
'aztec_getTxReceipt',
|
68
|
+
'aztec_getNodeInfo',
|
69
|
+
'aztec_getChainId',
|
70
|
+
'aztec_getVersion',
|
71
|
+
];
|
72
|
+
|
73
|
+
for (const method of essentialMethods) {
|
74
|
+
expect(result).toContain(method);
|
75
|
+
}
|
76
|
+
});
|
77
|
+
});
|
78
|
+
|
79
|
+
describe('aztec_getChainId', () => {
|
80
|
+
it('should call wallet.getChainId and return numeric value', async () => {
|
81
|
+
const chainId = new Fr(31337);
|
82
|
+
vi.mocked(mockWallet.getChainId).mockReturnValue(chainId);
|
83
|
+
|
84
|
+
const result = await handlers.aztec_getChainId(context, []);
|
85
|
+
|
86
|
+
expect(mockWallet.getChainId).toHaveBeenCalledOnce();
|
87
|
+
expect(result.toNumber()).toBe(31337);
|
88
|
+
expect(result).toBeInstanceOf(Fr);
|
89
|
+
});
|
90
|
+
|
91
|
+
it('should handle large chain IDs', async () => {
|
92
|
+
const chainId = new Fr(123456789);
|
93
|
+
vi.mocked(mockWallet.getChainId).mockReturnValue(chainId);
|
94
|
+
|
95
|
+
const result = await handlers.aztec_getChainId(context, []);
|
96
|
+
|
97
|
+
expect(mockWallet.getChainId).toHaveBeenCalledOnce();
|
98
|
+
expect(result.toNumber()).toBe(123456789);
|
99
|
+
});
|
100
|
+
|
101
|
+
it('should propagate errors from wallet.getChainId', async () => {
|
102
|
+
const error = new Error('Failed to get chain ID');
|
103
|
+
vi.mocked(mockWallet.getChainId).mockImplementation(() => {
|
104
|
+
throw error;
|
105
|
+
});
|
106
|
+
|
107
|
+
await expect(handlers.aztec_getChainId(context, [])).rejects.toThrow('Failed to get chain ID');
|
108
|
+
});
|
109
|
+
});
|
110
|
+
|
111
|
+
describe('aztec_getVersion', () => {
|
112
|
+
it('should call wallet.getVersion and return numeric value', async () => {
|
113
|
+
const version = new Fr(1);
|
114
|
+
vi.mocked(mockWallet.getVersion).mockReturnValue(version);
|
115
|
+
|
116
|
+
const result = await handlers.aztec_getVersion(context, []);
|
117
|
+
|
118
|
+
expect(mockWallet.getVersion).toHaveBeenCalledOnce();
|
119
|
+
expect(result.toNumber()).toBe(1);
|
120
|
+
expect(result).toBeInstanceOf(Fr);
|
121
|
+
});
|
122
|
+
|
123
|
+
it('should handle different version numbers', async () => {
|
124
|
+
const version = new Fr(42);
|
125
|
+
vi.mocked(mockWallet.getVersion).mockReturnValue(version);
|
126
|
+
|
127
|
+
const result = await handlers.aztec_getVersion(context, []);
|
128
|
+
|
129
|
+
expect(mockWallet.getVersion).toHaveBeenCalledOnce();
|
130
|
+
expect(result.toNumber()).toBe(42);
|
131
|
+
});
|
132
|
+
|
133
|
+
it('should propagate errors from wallet.getVersion', async () => {
|
134
|
+
const error = new Error('Failed to get version');
|
135
|
+
vi.mocked(mockWallet.getVersion).mockImplementation(() => {
|
136
|
+
throw error;
|
137
|
+
});
|
138
|
+
|
139
|
+
await expect(handlers.aztec_getVersion(context, [])).rejects.toThrow('Failed to get version');
|
140
|
+
});
|
141
|
+
});
|
142
|
+
|
143
|
+
describe('aztec_getNodeInfo', () => {
|
144
|
+
it('should call wallet.getNodeInfo and return node information', async () => {
|
145
|
+
const nodeInfo = {
|
146
|
+
nodeVersion: '0.1.0',
|
147
|
+
l1ChainId: 1,
|
148
|
+
protocolVersion: 1,
|
149
|
+
l1ContractAddresses: {
|
150
|
+
availabilityOracleAddress: '0x123' as unknown,
|
151
|
+
rollupAddress: '0x456' as unknown,
|
152
|
+
registryAddress: '0x789' as unknown,
|
153
|
+
inboxAddress: '0xabc' as unknown,
|
154
|
+
outboxAddress: '0xdef' as unknown,
|
155
|
+
gasTokenAddress: '0x111' as unknown,
|
156
|
+
gasPortalAddress: '0x222' as unknown,
|
157
|
+
},
|
158
|
+
} as unknown as NodeInfo;
|
159
|
+
|
160
|
+
vi.mocked(mockWallet.getNodeInfo).mockResolvedValue(nodeInfo);
|
161
|
+
|
162
|
+
const result = await handlers.aztec_getNodeInfo(context, []);
|
163
|
+
|
164
|
+
expect(mockWallet.getNodeInfo).toHaveBeenCalledOnce();
|
165
|
+
expect(result).toBe(nodeInfo);
|
166
|
+
expect(result.nodeVersion).toBe('0.1.0');
|
167
|
+
expect(result.l1ChainId).toBe(1);
|
168
|
+
});
|
169
|
+
|
170
|
+
it('should propagate errors from wallet.getNodeInfo', async () => {
|
171
|
+
const error = new Error('Failed to get node info');
|
172
|
+
vi.mocked(mockWallet.getNodeInfo).mockRejectedValue(error);
|
173
|
+
|
174
|
+
await expect(handlers.aztec_getNodeInfo(context, [])).rejects.toThrow('Failed to get node info');
|
175
|
+
expect(mockWallet.getNodeInfo).toHaveBeenCalledOnce();
|
176
|
+
});
|
177
|
+
});
|
178
|
+
|
179
|
+
describe('aztec_getCurrentBaseFees', () => {
|
180
|
+
it('should call wallet.getCurrentBaseFees and return fee information', async () => {
|
181
|
+
const gasFees = {
|
182
|
+
feePerDaGas: 100n,
|
183
|
+
feePerL2Gas: 200n,
|
184
|
+
} as unknown as GasFees;
|
185
|
+
|
186
|
+
vi.mocked(mockWallet.getCurrentBaseFees).mockResolvedValue(gasFees);
|
187
|
+
|
188
|
+
const result = await handlers.aztec_getCurrentBaseFees(context, []);
|
189
|
+
|
190
|
+
expect(mockWallet.getCurrentBaseFees).toHaveBeenCalledOnce();
|
191
|
+
expect(result).toBe(gasFees);
|
192
|
+
});
|
193
|
+
|
194
|
+
it('should propagate errors from wallet.getCurrentBaseFees', async () => {
|
195
|
+
const error = new Error('Failed to get base fees');
|
196
|
+
vi.mocked(mockWallet.getCurrentBaseFees).mockRejectedValue(error);
|
197
|
+
|
198
|
+
await expect(handlers.aztec_getCurrentBaseFees(context, [])).rejects.toThrow('Failed to get base fees');
|
199
|
+
expect(mockWallet.getCurrentBaseFees).toHaveBeenCalledOnce();
|
200
|
+
});
|
201
|
+
});
|
202
|
+
|
203
|
+
describe('aztec_getPXEInfo', () => {
|
204
|
+
it('should call pxe.getPXEInfo and return PXE information', async () => {
|
205
|
+
const pxeInfo = {
|
206
|
+
pxeVersion: '0.1.0',
|
207
|
+
protocolVersion: 1,
|
208
|
+
l1ContractAddresses: {
|
209
|
+
availabilityOracleAddress: '0x123' as unknown,
|
210
|
+
rollupAddress: '0x456' as unknown,
|
211
|
+
registryAddress: '0x789' as unknown,
|
212
|
+
inboxAddress: '0xabc' as unknown,
|
213
|
+
outboxAddress: '0xdef' as unknown,
|
214
|
+
gasTokenAddress: '0x111' as unknown,
|
215
|
+
gasPortalAddress: '0x222' as unknown,
|
216
|
+
},
|
217
|
+
} as unknown as PXEInfo;
|
218
|
+
|
219
|
+
vi.mocked(mockPXE.getPXEInfo).mockResolvedValue(pxeInfo);
|
220
|
+
|
221
|
+
const result = await handlers.aztec_getPXEInfo(context, []);
|
222
|
+
|
223
|
+
expect(mockPXE.getPXEInfo).toHaveBeenCalledOnce();
|
224
|
+
expect(result).toBe(pxeInfo);
|
225
|
+
expect(result.pxeVersion).toBe('0.1.0');
|
226
|
+
});
|
227
|
+
|
228
|
+
it('should propagate errors from pxe.getPXEInfo', async () => {
|
229
|
+
const error = new Error('Failed to get PXE info');
|
230
|
+
vi.mocked(mockPXE.getPXEInfo).mockRejectedValue(error);
|
231
|
+
|
232
|
+
await expect(handlers.aztec_getPXEInfo(context, [])).rejects.toThrow('Failed to get PXE info');
|
233
|
+
expect(mockPXE.getPXEInfo).toHaveBeenCalledOnce();
|
234
|
+
});
|
235
|
+
});
|
236
|
+
|
237
|
+
describe('aztec_getBlock', () => {
|
238
|
+
it('should call pxe.getBlock with block number and return block', async () => {
|
239
|
+
const blockNumber = 42;
|
240
|
+
const block = {
|
241
|
+
number: blockNumber,
|
242
|
+
hash: '0xabcdef1234567890',
|
243
|
+
timestamp: Date.now(),
|
244
|
+
l1BlockNumber: 100,
|
245
|
+
} as unknown as L2Block;
|
246
|
+
|
247
|
+
vi.mocked(mockPXE.getBlock).mockResolvedValue(block);
|
248
|
+
|
249
|
+
const result = await handlers.aztec_getBlock(context, [blockNumber]);
|
250
|
+
|
251
|
+
expect(mockPXE.getBlock).toHaveBeenCalledWith(blockNumber);
|
252
|
+
expect(result).toBe(block);
|
253
|
+
expect(result.number).toBe(blockNumber);
|
254
|
+
});
|
255
|
+
|
256
|
+
it('should throw error when block is not found', async () => {
|
257
|
+
const blockNumber = 999999;
|
258
|
+
vi.mocked(mockPXE.getBlock).mockResolvedValue(undefined);
|
259
|
+
|
260
|
+
await expect(handlers.aztec_getBlock(context, [blockNumber])).rejects.toThrow('Block not found');
|
261
|
+
expect(mockPXE.getBlock).toHaveBeenCalledWith(blockNumber);
|
262
|
+
});
|
263
|
+
|
264
|
+
it('should propagate errors from pxe.getBlock', async () => {
|
265
|
+
const blockNumber = 42;
|
266
|
+
const error = new Error('Failed to get block');
|
267
|
+
vi.mocked(mockPXE.getBlock).mockRejectedValue(error);
|
268
|
+
|
269
|
+
await expect(handlers.aztec_getBlock(context, [blockNumber])).rejects.toThrow('Failed to get block');
|
270
|
+
expect(mockPXE.getBlock).toHaveBeenCalledWith(blockNumber);
|
271
|
+
});
|
272
|
+
});
|
273
|
+
|
274
|
+
describe('aztec_getBlockNumber', () => {
|
275
|
+
it('should call pxe.getBlockNumber and return current block number', async () => {
|
276
|
+
const blockNumber = 12345;
|
277
|
+
vi.mocked(mockPXE.getBlockNumber).mockResolvedValue(blockNumber);
|
278
|
+
|
279
|
+
const result = await handlers.aztec_getBlockNumber(context, []);
|
280
|
+
|
281
|
+
expect(mockPXE.getBlockNumber).toHaveBeenCalledOnce();
|
282
|
+
expect(result).toBe(blockNumber);
|
283
|
+
expect(typeof result).toBe('number');
|
284
|
+
});
|
285
|
+
|
286
|
+
it('should handle block number of 0', async () => {
|
287
|
+
const blockNumber = 0;
|
288
|
+
vi.mocked(mockPXE.getBlockNumber).mockResolvedValue(blockNumber);
|
289
|
+
|
290
|
+
const result = await handlers.aztec_getBlockNumber(context, []);
|
291
|
+
|
292
|
+
expect(mockPXE.getBlockNumber).toHaveBeenCalledOnce();
|
293
|
+
expect(result).toBe(0);
|
294
|
+
});
|
295
|
+
|
296
|
+
it('should propagate errors from pxe.getBlockNumber', async () => {
|
297
|
+
const error = new Error('Failed to get block number');
|
298
|
+
vi.mocked(mockPXE.getBlockNumber).mockRejectedValue(error);
|
299
|
+
|
300
|
+
await expect(handlers.aztec_getBlockNumber(context, [])).rejects.toThrow('Failed to get block number');
|
301
|
+
expect(mockPXE.getBlockNumber).toHaveBeenCalledOnce();
|
302
|
+
});
|
303
|
+
});
|
304
|
+
});
|