@aztec/end-to-end 0.0.1-commit.1bb068fb5 → 0.0.1-commit.1dcfe2301

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 (156) hide show
  1. package/README.md +27 -0
  2. package/dest/bench/client_flows/client_flows_benchmark.d.ts +1 -1
  3. package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
  4. package/dest/bench/client_flows/client_flows_benchmark.js +19 -26
  5. package/dest/bench/utils.d.ts +1 -1
  6. package/dest/bench/utils.d.ts.map +1 -1
  7. package/dest/bench/utils.js +6 -3
  8. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +3 -2
  9. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts.map +1 -1
  10. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.js +15 -15
  11. package/dest/e2e_epochs/epochs_test.d.ts +11 -7
  12. package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
  13. package/dest/e2e_epochs/epochs_test.js +60 -38
  14. package/dest/e2e_fees/fees_test.d.ts +1 -1
  15. package/dest/e2e_fees/fees_test.d.ts.map +1 -1
  16. package/dest/e2e_fees/fees_test.js +14 -7
  17. package/dest/e2e_nested_contract/nested_contract_test.d.ts +1 -1
  18. package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
  19. package/dest/e2e_nested_contract/nested_contract_test.js +4 -6
  20. package/dest/e2e_p2p/inactivity_slash_test.js +3 -3
  21. package/dest/e2e_p2p/p2p_network.d.ts +8 -9
  22. package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
  23. package/dest/e2e_p2p/p2p_network.js +38 -20
  24. package/dest/e2e_p2p/reqresp/utils.d.ts +3 -3
  25. package/dest/e2e_p2p/reqresp/utils.d.ts.map +1 -1
  26. package/dest/e2e_p2p/reqresp/utils.js +46 -9
  27. package/dest/e2e_p2p/shared.d.ts +25 -7
  28. package/dest/e2e_p2p/shared.d.ts.map +1 -1
  29. package/dest/e2e_p2p/shared.js +49 -44
  30. package/dest/e2e_token_contract/token_contract_test.d.ts +1 -1
  31. package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
  32. package/dest/e2e_token_contract/token_contract_test.js +11 -11
  33. package/dest/fixtures/authwit_proxy.d.ts +3 -3
  34. package/dest/fixtures/authwit_proxy.d.ts.map +1 -1
  35. package/dest/fixtures/authwit_proxy.js +4 -0
  36. package/dest/fixtures/e2e_prover_test.d.ts +6 -5
  37. package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
  38. package/dest/fixtures/e2e_prover_test.js +37 -49
  39. package/dest/fixtures/elu_monitor.d.ts +21 -0
  40. package/dest/fixtures/elu_monitor.d.ts.map +1 -0
  41. package/dest/fixtures/elu_monitor.js +102 -0
  42. package/dest/fixtures/fixtures.d.ts +5 -1
  43. package/dest/fixtures/fixtures.d.ts.map +1 -1
  44. package/dest/fixtures/fixtures.js +6 -0
  45. package/dest/fixtures/get_bb_config.d.ts +1 -1
  46. package/dest/fixtures/get_bb_config.d.ts.map +1 -1
  47. package/dest/fixtures/get_bb_config.js +5 -5
  48. package/dest/fixtures/setup.d.ts +39 -15
  49. package/dest/fixtures/setup.d.ts.map +1 -1
  50. package/dest/fixtures/setup.js +71 -96
  51. package/dest/fixtures/setup_p2p_test.d.ts +10 -7
  52. package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
  53. package/dest/fixtures/setup_p2p_test.js +18 -15
  54. package/dest/fixtures/token_utils.d.ts +2 -2
  55. package/dest/fixtures/token_utils.d.ts.map +1 -1
  56. package/dest/fixtures/token_utils.js +5 -7
  57. package/dest/forward-compatibility/wallet_rpc_client.d.ts +7 -0
  58. package/dest/forward-compatibility/wallet_rpc_client.d.ts.map +1 -0
  59. package/dest/forward-compatibility/wallet_rpc_client.js +15 -0
  60. package/dest/forward-compatibility/wallet_service.d.ts +3 -0
  61. package/dest/forward-compatibility/wallet_service.d.ts.map +1 -0
  62. package/dest/forward-compatibility/wallet_service.js +109 -0
  63. package/dest/legacy-jest-resolver.d.cts +3 -0
  64. package/dest/legacy-jest-resolver.d.cts.map +1 -0
  65. package/dest/shared/cross_chain_test_harness.d.ts +1 -1
  66. package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
  67. package/dest/shared/cross_chain_test_harness.js +13 -13
  68. package/dest/shared/gas_portal_test_harness.js +2 -2
  69. package/dest/shared/jest_setup.js +41 -1
  70. package/dest/shared/submit-transactions.js +1 -1
  71. package/dest/shared/uniswap_l1_l2.d.ts +1 -1
  72. package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
  73. package/dest/shared/uniswap_l1_l2.js +14 -17
  74. package/dest/simulators/lending_simulator.d.ts +1 -1
  75. package/dest/simulators/lending_simulator.d.ts.map +1 -1
  76. package/dest/simulators/lending_simulator.js +4 -4
  77. package/dest/simulators/token_simulator.d.ts +1 -1
  78. package/dest/simulators/token_simulator.d.ts.map +1 -1
  79. package/dest/simulators/token_simulator.js +2 -2
  80. package/dest/spartan/setup_test_wallets.d.ts +11 -2
  81. package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
  82. package/dest/spartan/setup_test_wallets.js +97 -38
  83. package/dest/spartan/tx_metrics.js +1 -1
  84. package/dest/spartan/utils/bot.d.ts +3 -2
  85. package/dest/spartan/utils/bot.d.ts.map +1 -1
  86. package/dest/spartan/utils/bot.js +2 -1
  87. package/dest/spartan/utils/config.d.ts +7 -1
  88. package/dest/spartan/utils/config.d.ts.map +1 -1
  89. package/dest/spartan/utils/config.js +3 -1
  90. package/dest/spartan/utils/index.d.ts +4 -2
  91. package/dest/spartan/utils/index.d.ts.map +1 -1
  92. package/dest/spartan/utils/index.js +5 -1
  93. package/dest/spartan/utils/k8s.d.ts +3 -1
  94. package/dest/spartan/utils/k8s.d.ts.map +1 -1
  95. package/dest/spartan/utils/k8s.js +6 -0
  96. package/dest/spartan/utils/nodes.d.ts +4 -5
  97. package/dest/spartan/utils/nodes.d.ts.map +1 -1
  98. package/dest/spartan/utils/nodes.js +9 -9
  99. package/dest/spartan/utils/pod_logs.d.ts +25 -0
  100. package/dest/spartan/utils/pod_logs.d.ts.map +1 -0
  101. package/dest/spartan/utils/pod_logs.js +74 -0
  102. package/dest/test-wallet/test_wallet.d.ts +24 -23
  103. package/dest/test-wallet/test_wallet.d.ts.map +1 -1
  104. package/dest/test-wallet/test_wallet.js +116 -81
  105. package/dest/test-wallet/wallet_worker_script.d.ts +2 -0
  106. package/dest/test-wallet/wallet_worker_script.d.ts.map +1 -0
  107. package/dest/test-wallet/wallet_worker_script.js +48 -0
  108. package/dest/test-wallet/worker_wallet.d.ts +52 -0
  109. package/dest/test-wallet/worker_wallet.d.ts.map +1 -0
  110. package/dest/test-wallet/worker_wallet.js +151 -0
  111. package/dest/test-wallet/worker_wallet_schema.d.ts +279 -0
  112. package/dest/test-wallet/worker_wallet_schema.d.ts.map +1 -0
  113. package/dest/test-wallet/worker_wallet_schema.js +10 -0
  114. package/package.json +43 -44
  115. package/src/bench/client_flows/client_flows_benchmark.ts +27 -10
  116. package/src/bench/utils.ts +7 -2
  117. package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +21 -20
  118. package/src/e2e_epochs/epochs_test.ts +78 -66
  119. package/src/e2e_fees/fees_test.ts +14 -7
  120. package/src/e2e_nested_contract/nested_contract_test.ts +6 -4
  121. package/src/e2e_p2p/inactivity_slash_test.ts +3 -3
  122. package/src/e2e_p2p/p2p_network.ts +53 -32
  123. package/src/e2e_p2p/reqresp/utils.ts +58 -9
  124. package/src/e2e_p2p/shared.ts +71 -59
  125. package/src/e2e_token_contract/token_contract_test.ts +16 -8
  126. package/src/fixtures/authwit_proxy.ts +4 -0
  127. package/src/fixtures/dumps/epoch_proof_result.json +1 -1
  128. package/src/fixtures/e2e_prover_test.ts +43 -52
  129. package/src/fixtures/elu_monitor.ts +126 -0
  130. package/src/fixtures/fixtures.ts +10 -0
  131. package/src/fixtures/get_bb_config.ts +7 -6
  132. package/src/fixtures/setup.ts +103 -132
  133. package/src/fixtures/setup_p2p_test.ts +17 -25
  134. package/src/fixtures/token_utils.ts +3 -3
  135. package/src/forward-compatibility/wallet_rpc_client.ts +14 -0
  136. package/src/forward-compatibility/wallet_service.ts +104 -0
  137. package/src/legacy-jest-resolver.cjs +135 -0
  138. package/src/shared/cross_chain_test_harness.ts +13 -9
  139. package/src/shared/gas_portal_test_harness.ts +1 -1
  140. package/src/shared/jest_setup.ts +51 -1
  141. package/src/shared/submit-transactions.ts +1 -1
  142. package/src/shared/uniswap_l1_l2.ts +35 -28
  143. package/src/simulators/lending_simulator.ts +8 -4
  144. package/src/simulators/token_simulator.ts +6 -2
  145. package/src/spartan/setup_test_wallets.ts +138 -31
  146. package/src/spartan/tx_metrics.ts +1 -1
  147. package/src/spartan/utils/bot.ts +3 -0
  148. package/src/spartan/utils/config.ts +2 -0
  149. package/src/spartan/utils/index.ts +7 -0
  150. package/src/spartan/utils/k8s.ts +8 -0
  151. package/src/spartan/utils/nodes.ts +15 -10
  152. package/src/spartan/utils/pod_logs.ts +99 -0
  153. package/src/test-wallet/test_wallet.ts +145 -100
  154. package/src/test-wallet/wallet_worker_script.ts +60 -0
  155. package/src/test-wallet/worker_wallet.ts +214 -0
  156. package/src/test-wallet/worker_wallet_schema.ts +13 -0
@@ -0,0 +1,74 @@
1
+ import { exec } from 'child_process';
2
+ import { promisify } from 'util';
3
+ import { getSequencers } from './nodes.js';
4
+ const execAsync = promisify(exec);
5
+ const FIELDS = [
6
+ 'blockNumber',
7
+ 'txCount',
8
+ 'duration',
9
+ 'publicProcessDuration',
10
+ 'manaPerSec',
11
+ 'privateLogCount',
12
+ 'publicLogCount',
13
+ 'contractClassLogCount',
14
+ 'contractClassLogSize'
15
+ ];
16
+ /**
17
+ * Fetches l2-block-built log entries from sequencer pods for given block numbers.
18
+ * Queries all validator pods (only the proposer will have the log for a given block).
19
+ *
20
+ * @param namespace - Kubernetes namespace
21
+ * @param sinceTime - ISO 8601 timestamp to limit log search (e.g., from before block building was re-enabled)
22
+ * @param blockNumbers - Set of block numbers to filter for
23
+ * @param logger - Logger instance
24
+ * @returns Array of parsed BlockBuiltLogEntry, de-duplicated by blockNumber, sorted ascending
25
+ */ export async function fetchBlockBuiltLogs(namespace, sinceTime, blockNumbers, logger) {
26
+ const pods = await getSequencers(namespace);
27
+ const entriesByBlock = new Map();
28
+ // Subtract 60s from sinceTime to account for clock skew between test runner and k8s pods.
29
+ // Block number filtering ensures we only match the right blocks, so extra lines are harmless.
30
+ const sinceDate = new Date(new Date(sinceTime).getTime() - 60_000);
31
+ const sinceFlag = sinceDate.toISOString();
32
+ for (const pod of pods){
33
+ try {
34
+ const cmd = `kubectl logs ${pod} -n ${namespace} -c aztec --since-time=${sinceFlag}`;
35
+ logger.info(`Fetching logs: ${cmd}`);
36
+ const { stdout } = await execAsync(cmd, {
37
+ maxBuffer: 10 * 1024 * 1024
38
+ });
39
+ const lines = stdout.split('\n');
40
+ const matchingLines = lines.filter((l)=>l.includes('l2-block-built'));
41
+ logger.info(`Pod ${pod}: ${lines.length} log lines, ${matchingLines.length} contain l2-block-built`);
42
+ for (const line of matchingLines){
43
+ try {
44
+ const parsed = JSON.parse(line);
45
+ if (parsed.eventName !== 'l2-block-built' || !blockNumbers.has(parsed.blockNumber)) {
46
+ continue;
47
+ }
48
+ if (entriesByBlock.has(parsed.blockNumber)) {
49
+ continue;
50
+ }
51
+ const entry = {};
52
+ for (const field of FIELDS){
53
+ entry[field] = parsed[field] ?? 0;
54
+ }
55
+ entriesByBlock.set(entry.blockNumber, entry);
56
+ logger.verbose(`Parsed l2-block-built log for block ${entry.blockNumber}`, entry);
57
+ } catch {
58
+ // Not valid JSON, skip
59
+ }
60
+ }
61
+ } catch (err) {
62
+ logger.warn(`Failed to fetch logs from pod ${pod}: ${err}`);
63
+ }
64
+ }
65
+ if (entriesByBlock.size < blockNumbers.size) {
66
+ const missing = [
67
+ ...blockNumbers
68
+ ].filter((bn)=>!entriesByBlock.has(bn));
69
+ logger.warn(`Missing l2-block-built logs for block(s): ${missing.join(', ')}`);
70
+ }
71
+ return [
72
+ ...entriesByBlock.values()
73
+ ].sort((a, b)=>a.blockNumber - b.blockNumber);
74
+ }
@@ -2,16 +2,18 @@ import { type Account, type AccountContract } from '@aztec/aztec.js/account';
2
2
  import { type CallIntent, type ContractFunctionInteractionCallIntent, type IntentInnerHash, SetPublicAuthwitContractInteraction } from '@aztec/aztec.js/authorization';
3
3
  import type { AztecNode } from '@aztec/aztec.js/node';
4
4
  import { AccountManager, type SendOptions } from '@aztec/aztec.js/wallet';
5
+ import { TxSimulationResultWithAppOffset } from '@aztec/aztec.js/wallet';
5
6
  import { Fq, Fr } from '@aztec/foundation/curves/bn254';
6
- import type { AccessScopes, NotesFilter } from '@aztec/pxe/client/lazy';
7
+ import type { NotesFilter } from '@aztec/pxe/client/lazy';
7
8
  import { type PXEConfig } from '@aztec/pxe/config';
8
9
  import { PXE, type PXECreationOptions } from '@aztec/pxe/server';
9
10
  import { AuthWitness } from '@aztec/stdlib/auth-witness';
10
11
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
11
12
  import type { NoteDao } from '@aztec/stdlib/note';
12
- import type { BlockHeader, TxHash, TxReceipt, TxSimulationResult } from '@aztec/stdlib/tx';
13
+ import { type BlockHeader, type ContractOverrides, type TxHash, type TxReceipt } from '@aztec/stdlib/tx';
13
14
  import { ExecutionPayload } from '@aztec/stdlib/tx';
14
- import { BaseWallet, type FeeOptions } from '@aztec/wallet-sdk/base-wallet';
15
+ import { BaseWallet, type SimulateViaEntrypointOptions } from '@aztec/wallet-sdk/base-wallet';
16
+ import type { AccountType } from '@aztec/wallets/embedded';
15
17
  import { AztecNodeProxy, ProvenTx } from './utils.js';
16
18
  /**
17
19
  * Data for generating an account.
@@ -19,6 +21,7 @@ import { AztecNodeProxy, ProvenTx } from './utils.js';
19
21
  export interface AccountData {
20
22
  secret: Fr;
21
23
  salt: Fr;
24
+ type?: AccountType;
22
25
  contract: AccountContract;
23
26
  }
24
27
  /**
@@ -38,23 +41,25 @@ export declare class TestWallet extends BaseWallet {
38
41
  createSchnorrAccount(secret: Fr, salt: Fr, signingKey?: Fq): Promise<AccountManager>;
39
42
  createECDSARAccount(secret: Fr, salt: Fr, signingKey: Buffer): Promise<AccountManager>;
40
43
  createECDSAKAccount(secret: Fr, salt: Fr, signingKey: Buffer): Promise<AccountManager>;
41
- getFakeAccountDataFor(address: AztecAddress): Promise<{
42
- account: import("@aztec/aztec.js/account").BaseAccount;
43
- instance: import("@aztec/stdlib/contract").ContractInstanceWithAddress;
44
- artifact: import("@aztec/stdlib/abi").ContractArtifact;
44
+ /**
45
+ * Builds contract overrides for all provided addresses by replacing their account contracts with stub implementations.
46
+ */
47
+ protected buildAccountOverrides(addresses: AztecAddress[]): Promise<ContractOverrides>;
48
+ protected accounts: Map<string, {
49
+ account: Account;
50
+ type: AccountType;
45
51
  }>;
46
- protected accounts: Map<string, Account>;
52
+ private getTypeFor;
53
+ private getStubArtifactFor;
54
+ private getStubAccountFor;
47
55
  /**
48
- * Toggle for running "simulated simulations" when calling simulateTx.
49
- *
50
- * When this flag is true, simulateViaEntrypoint constructs a request using a fake account
51
- * (and accepts contract overrides on the input) and the PXE emulates kernel effects without
52
- * generating kernel witnesses. When false, simulateViaEntrypoint defers to the standard
53
- * simulation path via the real account entrypoint.
56
+ * Controls how the test wallet simulates transactions:
57
+ * - `kernelless`: Skips kernel circuits but uses the real account contract. Default.
58
+ * - `kernelless-override`: Skips kernels and replaces the account with a stub that doesn't do authwit validation.
59
+ * - `full`: Uses real kernel circuits and real account contracts. Slow!
54
60
  */
55
- private simulatedSimulations;
56
- enableSimulatedSimulations(): void;
57
- disableSimulatedSimulations(): void;
61
+ private simulationMode;
62
+ setSimulationMode(mode: 'kernelless' | 'kernelless-override' | 'full'): void;
58
63
  setMinFeePadding(value?: number): void;
59
64
  protected getAccountFromAddress(address: AztecAddress): Promise<Account>;
60
65
  getAccounts(): Promise<{
@@ -68,11 +73,7 @@ export declare class TestWallet extends BaseWallet {
68
73
  }>;
69
74
  setPublicAuthWit(from: AztecAddress, messageHashOrIntent: Fr | IntentInnerHash | CallIntent | ContractFunctionInteractionCallIntent, authorized: boolean): Promise<SetPublicAuthwitContractInteraction>;
70
75
  createAuthWit(from: AztecAddress, intent: IntentInnerHash | CallIntent | ContractFunctionInteractionCallIntent): Promise<AuthWitness>;
71
- /**
72
- * Override simulateViaEntrypoint to use fake accounts for kernelless simulation
73
- * when simulatedSimulations is enabled. Otherwise falls through to the real entrypoint path.
74
- */
75
- protected simulateViaEntrypoint(executionPayload: ExecutionPayload, from: AztecAddress, feeOptions: FeeOptions, scopes: AccessScopes, skipTxValidation?: boolean, skipFeeEnforcement?: boolean): Promise<TxSimulationResult>;
76
+ protected simulateViaEntrypoint(executionPayload: ExecutionPayload, opts: SimulateViaEntrypointOptions): Promise<TxSimulationResultWithAppOffset>;
76
77
  proveTx(exec: ExecutionPayload, opts: Omit<SendOptions, 'wait'>): Promise<ProvenTx>;
77
78
  getTxReceipt(txHash: TxHash): Promise<TxReceipt>;
78
79
  getNotes(filter: NotesFilter): Promise<NoteDao[]>;
@@ -80,4 +81,4 @@ export declare class TestWallet extends BaseWallet {
80
81
  sync(): Promise<void>;
81
82
  stop(): Promise<void>;
82
83
  }
83
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdF93YWxsZXQuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0LXdhbGxldC90ZXN0X3dhbGxldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsS0FBSyxPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQXFCLE1BQU0seUJBQXlCLENBQUM7QUFDaEcsT0FBTyxFQUNMLEtBQUssVUFBVSxFQUNmLEtBQUsscUNBQXFDLEVBQzFDLEtBQUssZUFBZSxFQUNwQixtQ0FBbUMsRUFJcEMsTUFBTSwrQkFBK0IsQ0FBQztBQUN2QyxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsY0FBYyxFQUFFLEtBQUssV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFMUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV4RCxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEUsT0FBTyxFQUFFLEtBQUssU0FBUyxFQUFnQixNQUFNLG1CQUFtQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxrQkFBa0IsRUFBYSxNQUFNLG1CQUFtQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFHM0QsT0FBTyxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMzRixPQUFPLEVBQUUsZ0JBQWdCLEVBQTBCLE1BQU0sa0JBQWtCLENBQUM7QUFDNUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxL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
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdF93YWxsZXQuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0LXdhbGxldC90ZXN0X3dhbGxldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUUsS0FBSyxPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQVcsTUFBTSx5QkFBeUIsQ0FBQztBQUV0RixPQUFPLEVBQ0wsS0FBSyxVQUFVLEVBQ2YsS0FBSyxxQ0FBcUMsRUFDMUMsS0FBSyxlQUFlLEVBQ3BCLG1DQUFtQyxFQUlwQyxNQUFNLCtCQUErQixDQUFDO0FBQ3ZDLE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsS0FBSyxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUd6RSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXhELE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxLQUFLLFNBQVMsRUFBZ0IsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssa0JBQWtCLEVBQWEsTUFBTSxtQkFBbUIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRzNELE9BQU8sS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFDTCxLQUFLLFdBQVcsRUFDaEIsS0FBSyxpQkFBaUIsRUFHdEIsS0FBSyxNQUFNLEVBQ1gsS0FBSyxTQUFTLEVBQ2YsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsZ0JBQWdC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
@@ -1 +1 @@
1
- {"version":3,"file":"test_wallet.d.ts","sourceRoot":"","sources":["../../src/test-wallet/test_wallet.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"test_wallet.d.ts","sourceRoot":"","sources":["../../src/test-wallet/test_wallet.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,19 @@
1
1
  import { EcdsaKAccountContract, EcdsaRAccountContract } from '@aztec/accounts/ecdsa';
2
2
  import { SchnorrAccountContract } from '@aztec/accounts/schnorr';
3
- import { StubAccountContractArtifact, createStubAccount } from '@aztec/accounts/stub';
4
- import { SignerlessAccount } from '@aztec/aztec.js/account';
3
+ import { StubEcdsaAccountContractArtifact, createStubEcdsaAccount } from '@aztec/accounts/stub/ecdsa';
4
+ import { StubSchnorrAccountContractArtifact, createStubSchnorrAccount } from '@aztec/accounts/stub/schnorr';
5
+ import { NO_FROM } from '@aztec/aztec.js/account';
5
6
  import { SetPublicAuthwitContractInteraction, computeInnerAuthWitHashFromAction, isContractFunctionInteractionCallIntent, lookupValidity } from '@aztec/aztec.js/authorization';
6
7
  import { AccountManager } from '@aztec/aztec.js/wallet';
8
+ import { TxSimulationResultWithAppOffset } from '@aztec/aztec.js/wallet';
9
+ import { DefaultEntrypoint } from '@aztec/entrypoints/default';
7
10
  import { Fr } from '@aztec/foundation/curves/bn254';
8
11
  import { GrumpkinScalar } from '@aztec/foundation/curves/grumpkin';
9
12
  import { getPXEConfig } from '@aztec/pxe/config';
10
13
  import { createPXE } from '@aztec/pxe/server';
11
- import { AztecAddress } from '@aztec/stdlib/aztec-address';
12
14
  import { getContractInstanceFromInstantiationParams } from '@aztec/stdlib/contract';
13
15
  import { deriveSigningKey } from '@aztec/stdlib/keys';
16
+ import { SimulationOverrides } from '@aztec/stdlib/tx';
14
17
  import { mergeExecutionPayloads } from '@aztec/stdlib/tx';
15
18
  import { BaseWallet } from '@aztec/wallet-sdk/base-wallet';
16
19
  import { AztecNodeProxy, ProvenTx } from './utils.js';
@@ -21,7 +24,7 @@ import { AztecNodeProxy, ProvenTx } from './utils.js';
21
24
  */ export class TestWallet extends BaseWallet {
22
25
  nodeRef;
23
26
  constructor(pxe, nodeRef){
24
- super(pxe, nodeRef), this.nodeRef = nodeRef, this.accounts = new Map(), this.simulatedSimulations = false;
27
+ super(pxe, nodeRef), this.nodeRef = nodeRef, this.accounts = new Map(), this.simulationMode = 'kernelless';
25
28
  }
26
29
  static async create(node, overridePXEConfig, options = {
27
30
  loggers: {}
@@ -42,94 +45,111 @@ import { AztecNodeProxy, ProvenTx } from './utils.js';
42
45
  }
43
46
  createSchnorrAccount(secret, salt, signingKey) {
44
47
  signingKey = signingKey ?? deriveSigningKey(secret);
45
- const accountData = {
48
+ return this.createAccount({
46
49
  secret,
47
50
  salt,
51
+ type: 'schnorr',
48
52
  contract: new SchnorrAccountContract(signingKey)
49
- };
50
- return this.createAccount(accountData);
53
+ });
51
54
  }
52
55
  createECDSARAccount(secret, salt, signingKey) {
53
- const accountData = {
56
+ return this.createAccount({
54
57
  secret,
55
58
  salt,
59
+ type: 'ecdsasecp256r1',
56
60
  contract: new EcdsaRAccountContract(signingKey)
57
- };
58
- return this.createAccount(accountData);
61
+ });
59
62
  }
60
63
  createECDSAKAccount(secret, salt, signingKey) {
61
- const accountData = {
64
+ return this.createAccount({
62
65
  secret,
63
66
  salt,
67
+ type: 'ecdsasecp256k1',
64
68
  contract: new EcdsaKAccountContract(signingKey)
65
- };
66
- return this.createAccount(accountData);
69
+ });
67
70
  }
68
- async getFakeAccountDataFor(address) {
69
- const originalAccount = await this.getAccountFromAddress(address);
70
- if (originalAccount instanceof SignerlessAccount) {
71
- throw new Error(`Cannot create fake account data for SignerlessAccount at address: ${address}`);
72
- }
73
- const originalAddress = originalAccount.getCompleteAddress();
74
- const contractInstance = await this.pxe.getContractInstance(originalAddress.address);
75
- if (!contractInstance) {
76
- throw new Error(`No contract instance found for address: ${originalAddress.address}`);
71
+ /**
72
+ * Builds contract overrides for all provided addresses by replacing their account contracts with stub implementations.
73
+ */ async buildAccountOverrides(addresses) {
74
+ const accounts = await this.getAccounts();
75
+ const contracts = {};
76
+ const filtered = accounts.filter((acc)=>addresses.some((addr)=>addr.equals(acc.item)));
77
+ for (const account of filtered){
78
+ const address = account.item;
79
+ const originalAccount = await this.getAccountFromAddress(address);
80
+ const completeAddress = originalAccount.getCompleteAddress();
81
+ const contractInstance = await this.pxe.getContractInstance(completeAddress.address);
82
+ if (!contractInstance) {
83
+ throw new Error(`No contract instance found for address: ${completeAddress.address} during account override building. This is a bug!`);
84
+ }
85
+ const stubArtifact = this.getStubArtifactFor(address);
86
+ const stubConstructorArgs = this.getTypeFor(address) === 'schnorr' ? [
87
+ Fr.ZERO,
88
+ Fr.ZERO
89
+ ] : [
90
+ Buffer.alloc(32),
91
+ Buffer.alloc(32)
92
+ ];
93
+ const stubInstance = await getContractInstanceFromInstantiationParams(stubArtifact, {
94
+ salt: Fr.random(),
95
+ constructorArgs: stubConstructorArgs
96
+ });
97
+ contracts[address.toString()] = {
98
+ instance: stubInstance,
99
+ artifact: stubArtifact
100
+ };
77
101
  }
78
- const stubAccount = createStubAccount(originalAddress);
79
- const instance = await getContractInstanceFromInstantiationParams(StubAccountContractArtifact, {
80
- salt: Fr.random()
81
- });
82
- return {
83
- account: stubAccount,
84
- instance,
85
- artifact: StubAccountContractArtifact
86
- };
102
+ return contracts;
87
103
  }
88
104
  accounts;
105
+ getTypeFor(address) {
106
+ return this.accounts.get(address.toString())?.type ?? 'schnorr';
107
+ }
108
+ getStubArtifactFor(address) {
109
+ return this.getTypeFor(address) === 'schnorr' ? StubSchnorrAccountContractArtifact : StubEcdsaAccountContractArtifact;
110
+ }
111
+ getStubAccountFor(address, completeAddress) {
112
+ return this.getTypeFor(address) === 'schnorr' ? createStubSchnorrAccount(completeAddress) : createStubEcdsaAccount(completeAddress);
113
+ }
89
114
  /**
90
- * Toggle for running "simulated simulations" when calling simulateTx.
91
- *
92
- * When this flag is true, simulateViaEntrypoint constructs a request using a fake account
93
- * (and accepts contract overrides on the input) and the PXE emulates kernel effects without
94
- * generating kernel witnesses. When false, simulateViaEntrypoint defers to the standard
95
- * simulation path via the real account entrypoint.
96
- */ simulatedSimulations;
97
- enableSimulatedSimulations() {
98
- this.simulatedSimulations = true;
99
- }
100
- disableSimulatedSimulations() {
101
- this.simulatedSimulations = false;
115
+ * Controls how the test wallet simulates transactions:
116
+ * - `kernelless`: Skips kernel circuits but uses the real account contract. Default.
117
+ * - `kernelless-override`: Skips kernels and replaces the account with a stub that doesn't do authwit validation.
118
+ * - `full`: Uses real kernel circuits and real account contracts. Slow!
119
+ */ simulationMode;
120
+ setSimulationMode(mode) {
121
+ this.simulationMode = mode;
102
122
  }
103
123
  setMinFeePadding(value) {
104
124
  this.minFeePadding = value ?? 0.5;
105
125
  }
106
126
  getAccountFromAddress(address) {
107
- let account;
108
- if (address.equals(AztecAddress.ZERO)) {
109
- account = new SignerlessAccount();
110
- } else {
111
- account = this.accounts.get(address?.toString() ?? '');
112
- }
113
- if (!account) {
127
+ const entry = this.accounts.get(address?.toString() ?? '');
128
+ if (!entry) {
114
129
  throw new Error(`Account not found in wallet for address: ${address}`);
115
130
  }
116
- return Promise.resolve(account);
131
+ return Promise.resolve(entry.account);
117
132
  }
118
133
  getAccounts() {
119
- return Promise.resolve(Array.from(this.accounts.values()).map((acc)=>({
134
+ return Promise.resolve(Array.from(this.accounts.values()).map((entry)=>({
120
135
  alias: '',
121
- item: acc.getAddress()
136
+ item: entry.account.getAddress()
122
137
  })));
123
138
  }
124
139
  async createAccount(accountData) {
125
140
  const secret = accountData?.secret ?? Fr.random();
126
141
  const salt = accountData?.salt ?? Fr.random();
142
+ const type = accountData?.type ?? 'schnorr';
127
143
  const contract = accountData?.contract ?? new SchnorrAccountContract(GrumpkinScalar.random());
128
144
  const accountManager = await AccountManager.create(this, secret, contract, salt);
129
145
  const instance = accountManager.getInstance();
130
146
  const artifact = await contract.getContractArtifact();
131
147
  await this.registerContract(instance, artifact, secret);
132
- this.accounts.set(accountManager.address.toString(), await accountManager.getAccount());
148
+ const address = accountManager.address.toString();
149
+ this.accounts.set(address, {
150
+ account: await accountManager.getAccount(),
151
+ type
152
+ });
133
153
  return accountManager;
134
154
  }
135
155
  lookupValidity(onBehalfOf, intent, witness) {
@@ -154,46 +174,61 @@ import { AztecNodeProxy, ProvenTx } from './utils.js';
154
174
  }
155
175
  return account.createAuthWit(intentInnerHash, chainInfo);
156
176
  }
157
- /**
158
- * Override simulateViaEntrypoint to use fake accounts for kernelless simulation
159
- * when simulatedSimulations is enabled. Otherwise falls through to the real entrypoint path.
160
- */ async simulateViaEntrypoint(executionPayload, from, feeOptions, scopes, skipTxValidation, skipFeeEnforcement) {
161
- if (!this.simulatedSimulations) {
162
- return super.simulateViaEntrypoint(executionPayload, from, feeOptions, scopes, skipTxValidation, skipFeeEnforcement);
163
- }
177
+ async simulateViaEntrypoint(executionPayload, opts) {
178
+ const { from, feeOptions, additionalScopes, skipTxValidation, skipFeeEnforcement } = opts;
179
+ const scopes = this.scopesFrom(from, additionalScopes);
180
+ const skipKernels = this.simulationMode !== 'full';
181
+ const useOverride = this.simulationMode === 'kernelless-override';
164
182
  const feeExecutionPayload = await feeOptions.walletFeePaymentMethod?.getExecutionPayload();
165
- const executionOptions = {
166
- txNonce: Fr.random(),
167
- cancellable: this.cancellableTransactions,
168
- feePaymentMethodOptions: feeOptions.accountFeePaymentMethodOptions
169
- };
170
183
  const finalExecutionPayload = feeExecutionPayload ? mergeExecutionPayloads([
171
184
  feeExecutionPayload,
172
185
  executionPayload
173
186
  ]) : executionPayload;
174
- const { account: fromAccount, instance, artifact } = await this.getFakeAccountDataFor(from);
175
187
  const chainInfo = await this.getChainInfo();
176
- const txRequest = await fromAccount.createTxExecutionRequest(finalExecutionPayload, feeOptions.gasSettings, chainInfo, executionOptions);
177
- const contractOverrides = {
178
- [from.toString()]: {
179
- instance,
180
- artifact
188
+ let overrides;
189
+ let txRequest;
190
+ if (useOverride) {
191
+ const accountOverrides = await this.buildAccountOverrides(scopes);
192
+ overrides = new SimulationOverrides(accountOverrides);
193
+ }
194
+ if (from === NO_FROM) {
195
+ const entrypoint = new DefaultEntrypoint();
196
+ txRequest = await entrypoint.createTxExecutionRequest(finalExecutionPayload, feeOptions.gasSettings, chainInfo);
197
+ } else {
198
+ let fromAccount;
199
+ if (useOverride) {
200
+ const originalAccount = await this.getAccountFromAddress(from);
201
+ fromAccount = this.getStubAccountFor(from, originalAccount.getCompleteAddress());
202
+ } else {
203
+ fromAccount = await this.getAccountFromAddress(from);
181
204
  }
182
- };
183
- return this.pxe.simulateTx(txRequest, {
205
+ const executionOptions = {
206
+ txNonce: Fr.random(),
207
+ cancellable: this.cancellableTransactions,
208
+ // If from is an address, feeOptions include the way the account contract should handle the fee payment
209
+ feePaymentMethodOptions: feeOptions.accountFeePaymentMethodOptions
210
+ };
211
+ txRequest = await fromAccount.createTxExecutionRequest(finalExecutionPayload, feeOptions.gasSettings, chainInfo, executionOptions);
212
+ }
213
+ const result = await this.pxe.simulateTx(txRequest, {
184
214
  simulatePublic: true,
185
- skipFeeEnforcement: true,
186
- skipTxValidation: true,
187
- overrides: {
188
- contracts: contractOverrides
189
- },
215
+ skipKernels,
216
+ skipFeeEnforcement,
217
+ skipTxValidation,
218
+ overrides,
190
219
  scopes
191
220
  });
221
+ const appCallOffset = await this.computeAppCallOffset(from, feeOptions);
222
+ return TxSimulationResultWithAppOffset.fromResultAndOffset(result, appCallOffset);
192
223
  }
193
224
  async proveTx(exec, opts) {
194
- const fee = await this.completeFeeOptions(opts.from, exec.feePayer, opts.fee?.gasSettings);
225
+ const fee = await this.completeFeeOptions({
226
+ from: opts.from,
227
+ feePayer: exec.feePayer,
228
+ gasSettings: opts.fee?.gasSettings
229
+ });
195
230
  const txRequest = await this.createTxExecutionRequestFromPayloadAndFee(exec, opts.from, fee);
196
- const txProvingResult = await this.pxe.proveTx(txRequest, this.scopesFor(opts.from));
231
+ const txProvingResult = await this.pxe.proveTx(txRequest, this.scopesFrom(opts.from, opts.additionalScopes));
197
232
  return new ProvenTx(this.aztecNode, await txProvingResult.toTx(), txProvingResult.getOffchainEffects(), txProvingResult.stats);
198
233
  }
199
234
  getTxReceipt(txHash) {
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FsbGV0X3dvcmtlcl9zY3JpcHQuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0LXdhbGxldC93YWxsZXRfd29ya2VyX3NjcmlwdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet_worker_script.d.ts","sourceRoot":"","sources":["../../src/test-wallet/wallet_worker_script.ts"],"names":[],"mappings":""}
@@ -0,0 +1,48 @@
1
+ import { createAztecNodeClient } from '@aztec/aztec.js/node';
2
+ import { jsonStringify } from '@aztec/foundation/json-rpc';
3
+ import { createLogger } from '@aztec/foundation/log';
4
+ import { parseWithOptionals, schemaHasMethod } from '@aztec/foundation/schemas';
5
+ import { NodeListener, TransportServer } from '@aztec/foundation/transport';
6
+ import { Tx } from '@aztec/stdlib/tx';
7
+ import { workerData } from 'worker_threads';
8
+ import { TestWallet } from './test_wallet.js';
9
+ import { WorkerWalletSchema } from './worker_wallet_schema.js';
10
+ const logger = createLogger('e2e:test-wallet:worker');
11
+ try {
12
+ const { nodeUrl, pxeConfig } = workerData;
13
+ logger.info('Initializing worker wallet', {
14
+ nodeUrl
15
+ });
16
+ const node = createAztecNodeClient(nodeUrl);
17
+ const wallet = await TestWallet.create(node, pxeConfig);
18
+ logger.info('Worker wallet initialized');
19
+ const customMethods = {
20
+ proveTx: async (exec, opts)=>{
21
+ const provenTx = await wallet.proveTx(exec, opts);
22
+ return new Tx(provenTx.getTxHash(), provenTx.data, provenTx.chonkProof, provenTx.contractClassLogFields, provenTx.publicFunctionCalldata);
23
+ },
24
+ registerAccount: async (secret, salt)=>{
25
+ const manager = await wallet.createSchnorrAccount(secret, salt);
26
+ return manager.address;
27
+ }
28
+ };
29
+ const schema = WorkerWalletSchema;
30
+ const listener = new NodeListener();
31
+ const server = new TransportServer(listener, async (msg)=>{
32
+ if (!schemaHasMethod(schema, msg.fn)) {
33
+ throw new Error(`Unknown method: ${msg.fn}`);
34
+ }
35
+ const jsonParams = JSON.parse(msg.args);
36
+ const args = await parseWithOptionals(jsonParams, schema[msg.fn].parameters());
37
+ // we have to erase the fn type in order to be able to spread ...args
38
+ const handler = msg.fn in customMethods ? customMethods[msg.fn] : undefined;
39
+ const result = handler ? await handler(...args) : await wallet[msg.fn](...args);
40
+ return jsonStringify(result);
41
+ });
42
+ server.start();
43
+ } catch (err) {
44
+ logger.error('Worker wallet initialization failed', {
45
+ error: err instanceof Error ? err.stack : String(err)
46
+ });
47
+ process.exit(1);
48
+ }
@@ -0,0 +1,52 @@
1
+ import type { CallIntent, IntentInnerHash } from '@aztec/aztec.js/authorization';
2
+ import type { InteractionWaitOptions, SendReturn } from '@aztec/aztec.js/contracts';
3
+ import type { Aliased, AppCapabilities, BatchResults, BatchedMethod, ContractClassMetadata, ContractMetadata, ExecuteUtilityOptions, PrivateEvent, PrivateEventFilter, ProfileOptions, SendOptions, SimulateOptions, TxSimulationResultWithAppOffset, Wallet, WalletCapabilities } from '@aztec/aztec.js/wallet';
4
+ import type { ChainInfo } from '@aztec/entrypoints/interfaces';
5
+ import type { Fr } from '@aztec/foundation/curves/bn254';
6
+ import type { PXEConfig } from '@aztec/pxe/config';
7
+ import type { ContractArtifact, EventMetadataDefinition, FunctionCall } from '@aztec/stdlib/abi';
8
+ import type { AuthWitness } from '@aztec/stdlib/auth-witness';
9
+ import type { AztecAddress } from '@aztec/stdlib/aztec-address';
10
+ import type { ContractInstanceWithAddress } from '@aztec/stdlib/contract';
11
+ import type { ExecutionPayload, TxProfileResult, UtilityExecutionResult } from '@aztec/stdlib/tx';
12
+ import { Tx } from '@aztec/stdlib/tx';
13
+ /**
14
+ * Wallet implementation that offloads all work to a worker thread.
15
+ * Implements the Wallet interface by proxying calls over a transport layer
16
+ * using JSON serialization with Zod schema parsing on both ends.
17
+ */
18
+ export declare class WorkerWallet implements Wallet {
19
+ private worker;
20
+ private client;
21
+ private constructor();
22
+ /**
23
+ * Creates a WorkerWallet by spawning a worker thread that creates a TestWallet internally.
24
+ * @param nodeUrl - URL of the Aztec node to connect to.
25
+ * @param pxeConfig - Optional PXE configuration overrides.
26
+ * @returns A WorkerWallet ready to use.
27
+ */
28
+ static create(nodeUrl: string, pxeConfig?: Partial<PXEConfig>): Promise<WorkerWallet>;
29
+ private callRaw;
30
+ private call;
31
+ getChainInfo(): Promise<ChainInfo>;
32
+ getContractMetadata(address: AztecAddress): Promise<ContractMetadata>;
33
+ getContractClassMetadata(id: Fr): Promise<ContractClassMetadata>;
34
+ getPrivateEvents<T>(eventMetadata: EventMetadataDefinition, eventFilter: PrivateEventFilter): Promise<PrivateEvent<T>[]>;
35
+ registerSender(address: AztecAddress, alias?: string): Promise<AztecAddress>;
36
+ getAddressBook(): Promise<Aliased<AztecAddress>[]>;
37
+ getAccounts(): Promise<Aliased<AztecAddress>[]>;
38
+ registerContract(instance: ContractInstanceWithAddress, artifact?: ContractArtifact, secretKey?: Fr): Promise<ContractInstanceWithAddress>;
39
+ simulateTx(exec: ExecutionPayload, opts: SimulateOptions): Promise<TxSimulationResultWithAppOffset>;
40
+ executeUtility(call: FunctionCall, opts: ExecuteUtilityOptions): Promise<UtilityExecutionResult>;
41
+ profileTx(exec: ExecutionPayload, opts: ProfileOptions): Promise<TxProfileResult>;
42
+ sendTx<W extends InteractionWaitOptions = undefined>(exec: ExecutionPayload, opts: SendOptions<W>): Promise<SendReturn<W>>;
43
+ proveTx(exec: ExecutionPayload, opts: Omit<SendOptions, 'wait'>): Promise<Tx>;
44
+ /** Registers an account inside the worker's TestWallet, populating its accounts map. */
45
+ registerAccount(secret: Fr, salt: Fr): Promise<AztecAddress>;
46
+ createAuthWit(from: AztecAddress, messageHashOrIntent: IntentInnerHash | CallIntent): Promise<AuthWitness>;
47
+ requestCapabilities(manifest: AppCapabilities): Promise<WalletCapabilities>;
48
+ batch<const T extends readonly BatchedMethod[]>(methods: T): Promise<BatchResults<T>>;
49
+ /** Shuts down the worker thread and closes the transport. */
50
+ stop(): Promise<void>;
51
+ }
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2VyX3dhbGxldC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3Qtd2FsbGV0L3dvcmtlcl93YWxsZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pGLE9BQU8sS0FBSyxFQUFFLHNCQUFzQixFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3BGLE9BQU8sS0FBSyxFQUNWLE9BQU8sRUFDUCxlQUFlLEVBQ2YsWUFBWSxFQUNaLGFBQWEsRUFDYixxQkFBcUIsRUFDckIsZ0JBQWdCLEVBQ2hCLHFCQUFxQixFQUNyQixZQUFZLEVBQ1osa0JBQWtCLEVBQ2xCLGNBQWMsRUFDZCxXQUFXLEVBQ1gsZUFBZSxFQUNmLCtCQUErQixFQUMvQixNQUFNLEVBQ04sa0JBQWtCLEVBQ25CLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDL0QsT0FBTyxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFPekQsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsdUJBQXVCLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakcsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDaEUsT0FBTyxLQUFLLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRSxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFZdEM7Ozs7R0FJRztBQUNILHFCQUFhLFlBQWEsWUFBVyxNQUFNO0lBRXZDLE9BQU8sQ0FBQyxNQUFNO0lBQ2QsT0FBTyxDQUFDLE1BQU07SUFGaEIsT0FBTyxlQUdIO0lBRUo7Ozs7O09BS0c7SUFDSCxPQUFhLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLENBc0QxRjtZQUVhLE9BQU87WUFLUCxJQUFJO0lBTWxCLFlBQVksSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLENBRWpDO0lBRUQsbUJBQW1CLENBQUMsT0FBTyxFQUFFLFlBQVksR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FFcEU7SUFFRCx3QkFBd0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxDQUUvRDtJQUVELGdCQUFnQixDQUFDLENBQUMsRUFDaEIsYUFBYSxFQUFFLHVCQUF1QixFQUN0QyxXQUFXLEVBQUUsa0JBQWtCLEdBQzlCLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUU1QjtJQUVELGNBQWMsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLENBRTNFO0lBRUQsY0FBYyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUVqRDtJQUVELFdBQVcsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FFOUM7SUFFRCxnQkFBZ0IsQ0FDZCxRQUFRLEVBQUUsMkJBQTJCLEVBQ3JDLFFBQVEsQ0FBQyxFQUFFLGdCQUFnQixFQUMzQixTQUFTLENBQUMsRUFBRSxFQUFFLEdBQ2IsT0FBTyxDQUFDLDJCQUEyQixDQUFDLENBRXRDO0lBRUQsVUFBVSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsZUFBZSxHQUFHLE9BQU8sQ0FBQywrQkFBK0IsQ0FBQyxDQUVsRztJQUVELGNBQWMsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxxQkFBcUIsR0FBRyxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FFL0Y7SUFFRCxTQUFTLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxjQUFjLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUVoRjtJQUVELE1BQU0sQ0FBQyxDQUFDLFNBQVMsc0JBQXNCLEdBQUcsU0FBUyxFQUNqRCxJQUFJLEVBQUUsZ0JBQWdCLEVBQ3RCLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQ25CLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FFeEI7SUFFRCxPQUFPLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FFNUU7SUFFRCx3RkFBd0Y7SUFDeEYsZUFBZSxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLENBRTNEO0lBRUQsYUFBYSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxHQUFHLFVBQVUsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBRXpHO0lBRUQsbUJBQW1CLENBQUMsUUFBUSxFQUFFLGVBQWUsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FFMUU7SUFFRCxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxTQUFTLGFBQWEsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUVwRjtJQUVELDZEQUE2RDtJQUN2RCxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUcxQjtDQUNGIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker_wallet.d.ts","sourceRoot":"","sources":["../../src/test-wallet/worker_wallet.ts"],"names":[],"mappings":"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"}