@aztec/test-wallet 0.0.1-commit.1142ef1 → 0.0.1-commit.134ed76

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/dest/server.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { TestWallet } from './wallet/server.js';
1
+ export { TestWallet, AztecNodeProxy } from './wallet/server.js';
2
2
  export { type AccountData } from './wallet/test_wallet.js';
3
3
  export { deployFundedSchnorrAccounts, registerInitialLocalNetworkAccountsInWallet, ProvenTx, proveInteraction, } from './utils.js';
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc2VydmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsS0FBSyxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRCxPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLDJDQUEyQyxFQUMzQyxRQUFRLEVBQ1IsZ0JBQWdCLEdBQ2pCLE1BQU0sWUFBWSxDQUFDIn0=
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc2VydmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEUsT0FBTyxFQUFFLEtBQUssV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDM0QsT0FBTyxFQUNMLDJCQUEyQixFQUMzQiwyQ0FBMkMsRUFDM0MsUUFBUSxFQUNSLGdCQUFnQixHQUNqQixNQUFNLFlBQVksQ0FBQyJ9
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EACL,2BAA2B,EAC3B,2CAA2C,EAC3C,QAAQ,EACR,gBAAgB,GACjB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EACL,2BAA2B,EAC3B,2CAA2C,EAC3C,QAAQ,EACR,gBAAgB,GACjB,MAAM,YAAY,CAAC"}
package/dest/server.js CHANGED
@@ -1,2 +1,2 @@
1
- export { TestWallet } from './wallet/server.js';
1
+ export { TestWallet, AztecNodeProxy } from './wallet/server.js';
2
2
  export { deployFundedSchnorrAccounts, registerInitialLocalNetworkAccountsInWallet, ProvenTx, proveInteraction } from './utils.js';
package/dest/utils.d.ts CHANGED
@@ -1,14 +1,30 @@
1
1
  import type { InitialAccountData } from '@aztec/accounts/testing';
2
2
  import { AztecAddress } from '@aztec/aztec.js/addresses';
3
- import { ContractFunctionInteraction, DeployMethod, type DeployOptions, type SendInteractionOptions, SentTx, type WaitOpts } from '@aztec/aztec.js/contracts';
4
- import type { AztecNode } from '@aztec/aztec.js/node';
5
- import { type OffchainEffect, type ProvingStats, Tx } from '@aztec/stdlib/tx';
3
+ import { ContractFunctionInteraction, DeployMethod, type DeployOptions, type NoWait, type SendInteractionOptions, type WaitOpts } from '@aztec/aztec.js/contracts';
4
+ import { type AztecNode } from '@aztec/aztec.js/node';
5
+ import { type OffchainEffect, type ProvingStats, Tx, TxHash, type TxReceipt } from '@aztec/stdlib/tx';
6
6
  import type { BaseTestWallet } from './wallet/test_wallet.js';
7
+ /**
8
+ * Options for sending a proven transaction.
9
+ */
10
+ export type ProvenTxSendOpts = {
11
+ /**
12
+ * Whether to wait for the transaction to be mined.
13
+ * - undefined (default): wait with default options and return TxReceipt
14
+ * - WaitOpts object: wait with custom options and return TxReceipt
15
+ * - NO_WAIT: return txHash immediately without waiting
16
+ */
17
+ wait?: NoWait | WaitOpts;
18
+ };
19
+ /**
20
+ * Return type for ProvenTx.send based on wait option.
21
+ */
22
+ export type ProvenTxSendReturn<T extends NoWait | WaitOpts | undefined> = T extends NoWait ? TxHash : TxReceipt;
7
23
  /**
8
24
  * Deploys the SchnorrAccount contracts backed by prefunded addresses
9
25
  * at genesis. This can be directly used to pay for transactions in FeeJuice.
10
26
  */
11
- export declare function deployFundedSchnorrAccounts(wallet: BaseTestWallet, aztecNode: AztecNode, accountsData: InitialAccountData[], waitOptions?: WaitOpts): Promise<import("../../aztec.js/dest/wallet/account_manager.js").AccountManager[]>;
27
+ export declare function deployFundedSchnorrAccounts(wallet: BaseTestWallet, accountsData: InitialAccountData[], waitOptions?: WaitOpts): Promise<import("@aztec/aztec.js/wallet").AccountManager[]>;
12
28
  /**
13
29
  * Registers the initial local network accounts in the wallet.
14
30
  * @param wallet - Test wallet to use to register the accounts.
@@ -20,12 +36,22 @@ export declare function registerInitialLocalNetworkAccountsInWallet(wallet: Base
20
36
  */
21
37
  export declare class ProvenTx extends Tx {
22
38
  private node;
39
+ /** The offchain effects emitted during the execution of the transaction. */
23
40
  offchainEffects: OffchainEffect[];
24
41
  stats?: ProvingStats | undefined;
25
42
  constructor(node: AztecNode, tx: Tx,
26
43
  /** The offchain effects emitted during the execution of the transaction. */
27
44
  offchainEffects: OffchainEffect[], stats?: ProvingStats | undefined);
28
- send(): SentTx;
45
+ /**
46
+ * Sends the transaction to the network.
47
+ * @param options - Send options including whether to wait.
48
+ * @returns The transaction receipt if waiting, or the transaction hash if not.
49
+ */
50
+ send(options?: Omit<ProvenTxSendOpts, 'wait'>): Promise<TxReceipt>;
51
+ send<W extends ProvenTxSendOpts['wait']>(options: ProvenTxSendOpts & {
52
+ wait: W;
53
+ }): Promise<ProvenTxSendReturn<W>>;
54
+ private contextualizeError;
29
55
  }
30
56
  /**
31
57
  * Helper function to prove an interaction via a TestWallet
@@ -35,4 +61,4 @@ export declare class ProvenTx extends Tx {
35
61
  * @returns - A proven transaction ready do be sent to the network
36
62
  */
37
63
  export declare function proveInteraction(wallet: BaseTestWallet, interaction: ContractFunctionInteraction | DeployMethod, options: SendInteractionOptions | DeployOptions): Promise<ProvenTx>;
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRWxFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLFlBQVksRUFDWixLQUFLLGFBQWEsRUFDbEIsS0FBSyxzQkFBc0IsRUFDM0IsTUFBTSxFQUNOLEtBQUssUUFBUSxFQUVkLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFFLEtBQUssY0FBYyxFQUFFLEtBQUssWUFBWSxFQUFFLEVBQUUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTlFLE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTlEOzs7R0FHRztBQUNILHdCQUFzQiwyQkFBMkIsQ0FDL0MsTUFBTSxFQUFFLGNBQWMsRUFDdEIsU0FBUyxFQUFFLFNBQVMsRUFDcEIsWUFBWSxFQUFFLGtCQUFrQixFQUFFLEVBQ2xDLFdBQVcsQ0FBQyxFQUFFLFFBQVEscUZBaUJ2QjtBQUVEOzs7O0dBSUc7QUFDSCx3QkFBc0IsMkNBQTJDLENBQUMsTUFBTSxFQUFFLGNBQWMsR0FBRyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FPakg7QUFDRDs7R0FFRztBQUNILHFCQUFhLFFBQVMsU0FBUSxFQUFFO0lBRTVCLE9BQU8sQ0FBQyxJQUFJO0lBR0wsZUFBZSxFQUFFLGNBQWMsRUFBRTtJQUVqQyxLQUFLLENBQUM7SUFOZixZQUNVLElBQUksRUFBRSxTQUFTLEVBQ3ZCLEVBQUUsRUFBRSxFQUFFO0lBQ04sNEVBQTRFO0lBQ3JFLGVBQWUsRUFBRSxjQUFjLEVBQUUsRUFFakMsS0FBSyxDQUFDLDBCQUFjLEVBRzVCO0lBRUQsSUFBSSxXQU1IO0NBQ0Y7QUFFRDs7Ozs7O0dBTUc7QUFDSCx3QkFBc0IsZ0JBQWdCLENBQ3BDLE1BQU0sRUFBRSxjQUFjLEVBQ3RCLFdBQVcsRUFBRSwyQkFBMkIsR0FBRyxZQUFZLEVBQ3ZELE9BQU8sRUFBRSxzQkFBc0IsR0FBRyxhQUFhLHFCQVNoRCJ9
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRWxFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLFlBQVksRUFDWixLQUFLLGFBQWEsRUFFbEIsS0FBSyxNQUFNLEVBQ1gsS0FBSyxzQkFBc0IsRUFDM0IsS0FBSyxRQUFRLEVBRWQsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsS0FBSyxTQUFTLEVBQWEsTUFBTSxzQkFBc0IsQ0FBQztBQUVqRSxPQUFPLEVBQUUsS0FBSyxjQUFjLEVBQUUsS0FBSyxZQUFZLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBSXRHLE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTlEOztHQUVHO0FBQ0gsTUFBTSxNQUFNLGdCQUFnQixHQUFHO0lBQzdCOzs7OztPQUtHO0lBQ0gsSUFBSSxDQUFDLEVBQUUsTUFBTSxHQUFHLFFBQVEsQ0FBQztDQUMxQixDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLE1BQU0sa0JBQWtCLENBQUMsQ0FBQyxTQUFTLE1BQU0sR0FBRyxRQUFRLEdBQUcsU0FBUyxJQUFJLENBQUMsU0FBUyxNQUFNLEdBQUcsTUFBTSxHQUFHLFNBQVMsQ0FBQztBQUVoSDs7O0dBR0c7QUFDSCx3QkFBc0IsMkJBQTJCLENBQy9DLE1BQU0sRUFBRSxjQUFjLEVBQ3RCLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxFQUNsQyxXQUFXLENBQUMsRUFBRSxRQUFRLDhEQWdCdkI7QUFFRDs7OztHQUlHO0FBQ0gsd0JBQXNCLDJDQUEyQyxDQUFDLE1BQU0sRUFBRSxjQUFjLEdBQUcsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDLENBT2pIO0FBQ0Q7O0dBRUc7QUFDSCxxQkFBYSxRQUFTLFNBQVEsRUFBRTtJQUU1QixPQUFPLENBQUMsSUFBSTtJQUVaLDRFQUE0RTtJQUNyRSxlQUFlLEVBQUUsY0FBYyxFQUFFO0lBRWpDLEtBQUssQ0FBQztJQU5mLFlBQ1UsSUFBSSxFQUFFLFNBQVMsRUFDdkIsRUFBRSxFQUFFLEVBQUU7SUFDTiw0RUFBNEU7SUFDckUsZUFBZSxFQUFFLGNBQWMsRUFBRSxFQUVqQyxLQUFLLENBQUMsMEJBQWMsRUFHNUI7SUFFRDs7OztPQUlHO0lBQ0gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFbkUsSUFBSSxDQUFDLENBQUMsU0FBUyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEdBQUc7UUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO0tBQUUsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQWVsSCxPQUFPLENBQUMsa0JBQWtCO0NBVTNCO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsd0JBQXNCLGdCQUFnQixDQUNwQyxNQUFNLEVBQUUsY0FBYyxFQUN0QixXQUFXLEVBQUUsMkJBQTJCLEdBQUcsWUFBWSxFQUN2RCxPQUFPLEVBQUUsc0JBQXNCLEdBQUcsYUFBYSxxQkFTaEQifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EACL,2BAA2B,EAC3B,YAAY,EACZ,KAAK,aAAa,EAClB,KAAK,sBAAsB,EAC3B,MAAM,EACN,KAAK,QAAQ,EAEd,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,YAAY,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAE9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D;;;GAGG;AACH,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,kBAAkB,EAAE,EAClC,WAAW,CAAC,EAAE,QAAQ,qFAiBvB;AAED;;;;GAIG;AACH,wBAAsB,2CAA2C,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAOjH;AACD;;GAEG;AACH,qBAAa,QAAS,SAAQ,EAAE;IAE5B,OAAO,CAAC,IAAI;IAGL,eAAe,EAAE,cAAc,EAAE;IAEjC,KAAK,CAAC;IANf,YACU,IAAI,EAAE,SAAS,EACvB,EAAE,EAAE,EAAE;IACN,4EAA4E;IACrE,eAAe,EAAE,cAAc,EAAE,EAEjC,KAAK,CAAC,0BAAc,EAG5B;IAED,IAAI,WAMH;CACF;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,cAAc,EACtB,WAAW,EAAE,2BAA2B,GAAG,YAAY,EACvD,OAAO,EAAE,sBAAsB,GAAG,aAAa,qBAShD"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EACL,2BAA2B,EAC3B,YAAY,EACZ,KAAK,aAAa,EAElB,KAAK,MAAM,EACX,KAAK,sBAAsB,EAC3B,KAAK,QAAQ,EAEd,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,KAAK,SAAS,EAAa,MAAM,sBAAsB,CAAC;AAEjE,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAItG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;CAC1B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,MAAM,GAAG,QAAQ,GAAG,SAAS,IAAI,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;AAEhH;;;GAGG;AACH,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,cAAc,EACtB,YAAY,EAAE,kBAAkB,EAAE,EAClC,WAAW,CAAC,EAAE,QAAQ,8DAgBvB;AAED;;;;GAIG;AACH,wBAAsB,2CAA2C,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAOjH;AACD;;GAEG;AACH,qBAAa,QAAS,SAAQ,EAAE;IAE5B,OAAO,CAAC,IAAI;IAEZ,4EAA4E;IACrE,eAAe,EAAE,cAAc,EAAE;IAEjC,KAAK,CAAC;IANf,YACU,IAAI,EAAE,SAAS,EACvB,EAAE,EAAE,EAAE;IACN,4EAA4E;IACrE,eAAe,EAAE,cAAc,EAAE,EAEjC,KAAK,CAAC,0BAAc,EAG5B;IAED;;;;OAIG;IACH,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAEnE,IAAI,CAAC,CAAC,SAAS,gBAAgB,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,gBAAgB,GAAG;QAAE,IAAI,EAAE,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;IAelH,OAAO,CAAC,kBAAkB;CAU3B;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,cAAc,EACtB,WAAW,EAAE,2BAA2B,GAAG,YAAY,EACvD,OAAO,EAAE,sBAAsB,GAAG,aAAa,qBAShD"}
package/dest/utils.js CHANGED
@@ -1,11 +1,14 @@
1
1
  import { getInitialTestAccountsData } from '@aztec/accounts/testing/lazy';
2
2
  import { AztecAddress } from '@aztec/aztec.js/addresses';
3
- import { DeployMethod, SentTx, toSendOptions } from '@aztec/aztec.js/contracts';
3
+ import { DeployMethod, NO_WAIT, toSendOptions } from '@aztec/aztec.js/contracts';
4
+ import { waitForTx } from '@aztec/aztec.js/node';
5
+ import { SimulationError } from '@aztec/stdlib/errors';
4
6
  import { Tx } from '@aztec/stdlib/tx';
7
+ import { inspect } from 'util';
5
8
  /**
6
9
  * Deploys the SchnorrAccount contracts backed by prefunded addresses
7
10
  * at genesis. This can be directly used to pay for transactions in FeeJuice.
8
- */ export async function deployFundedSchnorrAccounts(wallet, aztecNode, accountsData, waitOptions) {
11
+ */ export async function deployFundedSchnorrAccounts(wallet, accountsData, waitOptions) {
9
12
  const accountManagers = [];
10
13
  // Serial due to https://github.com/AztecProtocol/aztec-packages/issues/12045
11
14
  for(let i = 0; i < accountsData.length; i++){
@@ -14,8 +17,9 @@ import { Tx } from '@aztec/stdlib/tx';
14
17
  const deployMethod = await accountManager.getDeployMethod();
15
18
  await deployMethod.send({
16
19
  from: AztecAddress.ZERO,
17
- skipClassPublication: i !== 0
18
- }).wait(waitOptions);
20
+ skipClassPublication: i !== 0,
21
+ wait: waitOptions
22
+ });
19
23
  accountManagers.push(accountManager);
20
24
  }
21
25
  return accountManagers;
@@ -40,12 +44,26 @@ import { Tx } from '@aztec/stdlib/tx';
40
44
  stats){
41
45
  super(tx.getTxHash(), tx.data, tx.chonkProof, tx.contractClassLogFields, tx.publicFunctionCalldata), this.node = node, this.offchainEffects = offchainEffects, this.stats = stats;
42
46
  }
43
- send() {
44
- const sendTx = async ()=>{
45
- await this.node.sendTx(this);
46
- return this.getTxHash();
47
- };
48
- return new SentTx(this.node, sendTx);
47
+ async send(options) {
48
+ const txHash = this.getTxHash();
49
+ await this.node.sendTx(this).catch((err)=>{
50
+ throw this.contextualizeError(err, inspect(this));
51
+ });
52
+ if (options?.wait === NO_WAIT) {
53
+ return txHash;
54
+ }
55
+ const waitOpts = typeof options?.wait === 'object' ? options.wait : undefined;
56
+ return await waitForTx(this.node, txHash, waitOpts);
57
+ }
58
+ contextualizeError(err, ...context) {
59
+ let contextStr = '';
60
+ if (context.length > 0) {
61
+ contextStr = `\nContext:\n${context.join('\n')}`;
62
+ }
63
+ if (err instanceof SimulationError) {
64
+ err.setAztecContext(contextStr);
65
+ }
66
+ return err;
49
67
  }
50
68
  }
51
69
  /**
@@ -14,10 +14,16 @@ export declare class TestWallet extends BaseTestWallet {
14
14
  createSchnorrAccount(secret: Fr, salt: Fr, signingKey?: Fq): Promise<AccountManager>;
15
15
  createECDSARAccount(secret: Fr, salt: Fr, signingKey: Buffer): Promise<AccountManager>;
16
16
  createECDSAKAccount(secret: Fr, salt: Fr, signingKey: Buffer): Promise<AccountManager>;
17
+ /**
18
+ * Creates a stub account that impersonates the given address, allowing kernelless simulations
19
+ * to bypass the account's authorization mechanisms via contract overrides.
20
+ * @param address - The address of the account to impersonate
21
+ * @returns The stub account, contract instance, and artifact for simulation
22
+ */
17
23
  getFakeAccountDataFor(address: AztecAddress): Promise<{
18
- account: import("../../../aztec.js/dest/account/account.js").BaseAccount;
24
+ account: import("@aztec/aztec.js/account").BaseAccount;
19
25
  instance: import("@aztec/aztec.js/contracts").ContractInstanceWithAddress;
20
- artifact: import("../../../stdlib/dest/abi/abi.js").ContractArtifact;
26
+ artifact: import("@aztec/stdlib/abi").ContractArtifact;
21
27
  }>;
22
28
  }
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVuZGxlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd2FsbGV0L2J1bmRsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUU5RCxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hELE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsS0FBSyxTQUFTLEVBQUUsS0FBSyxrQkFBa0IsRUFBMkIsTUFBTSwwQkFBMEIsQ0FBQztBQUc1RyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFbEQ7Ozs7R0FJRztBQUNILHFCQUFhLFVBQVcsU0FBUSxjQUFjO0lBQzVDLE9BQWEsTUFBTSxDQUNqQixJQUFJLEVBQUUsU0FBUyxFQUNmLGlCQUFpQixDQUFDLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUN0QyxPQUFPLEdBQUUsa0JBQW9DLEdBQzVDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FPckI7SUFFRCxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FRbkY7SUFFRCxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLENBT3JGO0lBRUQsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQU9yRjtJQUVLLHFCQUFxQixDQUFDLE9BQU8sRUFBRSxZQUFZOzs7O09BaUJoRDtDQUNGIn0=
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVuZGxlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd2FsbGV0L2J1bmRsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUU5RCxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hELE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsS0FBSyxTQUFTLEVBQUUsS0FBSyxrQkFBa0IsRUFBMkIsTUFBTSwwQkFBMEIsQ0FBQztBQUc1RyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFbEQ7Ozs7R0FJRztBQUNILHFCQUFhLFVBQVcsU0FBUSxjQUFjO0lBQzVDLE9BQWEsTUFBTSxDQUNqQixJQUFJLEVBQUUsU0FBUyxFQUNmLGlCQUFpQixDQUFDLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUN0QyxPQUFPLEdBQUUsa0JBQW9DLEdBQzVDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FPckI7SUFFRCxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FRbkY7SUFFRCxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLENBT3JGO0lBRUQsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQU9yRjtJQUVEOzs7OztPQUtHO0lBQ0cscUJBQXFCLENBQUMsT0FBTyxFQUFFLFlBQVk7Ozs7T0FzQmhEO0NBQ0YifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../../src/wallet/bundle.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,kBAAkB,EAA2B,MAAM,0BAA0B,CAAC;AAG5G,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD;;;;GAIG;AACH,qBAAa,UAAW,SAAQ,cAAc;IAC5C,OAAa,MAAM,CACjB,IAAI,EAAE,SAAS,EACf,iBAAiB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,EACtC,OAAO,GAAE,kBAAoC,GAC5C,OAAO,CAAC,UAAU,CAAC,CAOrB;IAED,oBAAoB,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAQnF;IAED,mBAAmB,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAOrF;IAED,mBAAmB,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAOrF;IAEK,qBAAqB,CAAC,OAAO,EAAE,YAAY;;;;OAiBhD;CACF"}
1
+ {"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../../src/wallet/bundle.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,kBAAkB,EAA2B,MAAM,0BAA0B,CAAC;AAG5G,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD;;;;GAIG;AACH,qBAAa,UAAW,SAAQ,cAAc;IAC5C,OAAa,MAAM,CACjB,IAAI,EAAE,SAAS,EACf,iBAAiB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,EACtC,OAAO,GAAE,kBAAoC,GAC5C,OAAO,CAAC,UAAU,CAAC,CAOrB;IAED,oBAAoB,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAQnF;IAED,mBAAmB,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAOrF;IAED,mBAAmB,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAOrF;IAED;;;;;OAKG;IACG,qBAAqB,CAAC,OAAO,EAAE,YAAY;;;;OAsBhD;CACF"}
@@ -1,6 +1,7 @@
1
1
  import { EcdsaKAccountContract, EcdsaRAccountContract } from '@aztec/accounts/ecdsa';
2
2
  import { SchnorrAccountContract } from '@aztec/accounts/schnorr';
3
3
  import { StubAccountContractArtifact, createStubAccount } from '@aztec/accounts/stub';
4
+ import { SignerlessAccount } from '@aztec/aztec.js/account';
4
5
  import { getContractInstanceFromInstantiationParams } from '@aztec/aztec.js/contracts';
5
6
  import { Fr } from '@aztec/aztec.js/fields';
6
7
  import { createPXE, getPXEConfig } from '@aztec/pxe/client/bundle';
@@ -46,15 +47,25 @@ import { BaseTestWallet } from './test_wallet.js';
46
47
  };
47
48
  return this.createAccount(accountData);
48
49
  }
49
- async getFakeAccountDataFor(address) {
50
- const chainInfo = await this.getChainInfo();
50
+ /**
51
+ * Creates a stub account that impersonates the given address, allowing kernelless simulations
52
+ * to bypass the account's authorization mechanisms via contract overrides.
53
+ * @param address - The address of the account to impersonate
54
+ * @returns The stub account, contract instance, and artifact for simulation
55
+ */ async getFakeAccountDataFor(address) {
51
56
  const originalAccount = await this.getAccountFromAddress(address);
57
+ // Account contracts can only be overridden if they have an associated address
58
+ // Overwriting SignerlessAccount is not supported, and does not really make sense
59
+ // since it has no authorization mechanism.
60
+ if (originalAccount instanceof SignerlessAccount) {
61
+ throw new Error(`Cannot create fake account data for SignerlessAccount at address: ${address}`);
62
+ }
52
63
  const originalAddress = originalAccount.getCompleteAddress();
53
- const { contractInstance } = await this.pxe.getContractMetadata(originalAddress.address);
64
+ const contractInstance = await this.pxe.getContractInstance(originalAddress.address);
54
65
  if (!contractInstance) {
55
66
  throw new Error(`No contract instance found for address: ${originalAddress.address}`);
56
67
  }
57
- const stubAccount = createStubAccount(originalAddress, chainInfo);
68
+ const stubAccount = createStubAccount(originalAddress);
58
69
  const instance = await getContractInstanceFromInstantiationParams(StubAccountContractArtifact, {
59
70
  salt: Fr.random()
60
71
  });
@@ -14,10 +14,16 @@ export declare class TestWallet extends BaseTestWallet {
14
14
  createSchnorrAccount(secret: Fr, salt: Fr, signingKey?: Fq): Promise<AccountManager>;
15
15
  createECDSARAccount(secret: Fr, salt: Fr, signingKey: Buffer): Promise<AccountManager>;
16
16
  createECDSAKAccount(secret: Fr, salt: Fr, signingKey: Buffer): Promise<AccountManager>;
17
+ /**
18
+ * Creates a stub account that impersonates the given address, allowing kernelless simulations
19
+ * to bypass the account's authorization mechanisms via contract overrides.
20
+ * @param address - The address of the account to impersonate
21
+ * @returns The stub account, contract instance, and artifact for simulation
22
+ */
17
23
  getFakeAccountDataFor(address: AztecAddress): Promise<{
18
- account: import("../../../aztec.js/dest/account/account.js").BaseAccount;
24
+ account: import("@aztec/aztec.js/account").BaseAccount;
19
25
  instance: import("@aztec/aztec.js/contracts").ContractInstanceWithAddress;
20
- artifact: import("../../../stdlib/dest/abi/abi.js").ContractArtifact;
26
+ artifact: import("@aztec/stdlib/abi").ContractArtifact;
21
27
  }>;
22
28
  }
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF6eS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3dhbGxldC9sYXp5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTlELE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEQsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxLQUFLLFNBQVMsRUFBRSxLQUFLLGtCQUFrQixFQUEyQixNQUFNLHdCQUF3QixDQUFDO0FBRzFHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVsRDs7OztHQUlHO0FBQ0gscUJBQWEsVUFBVyxTQUFRLGNBQWM7SUFDNUMsT0FBYSxNQUFNLENBQ2pCLElBQUksRUFBRSxTQUFTLEVBQ2YsaUJBQWlCLENBQUMsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQ3RDLE9BQU8sR0FBRSxrQkFBb0MsR0FDNUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQU9yQjtJQUVELG9CQUFvQixDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQVFuRjtJQUVELG1CQUFtQixDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FPckY7SUFFRCxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLENBT3JGO0lBRUsscUJBQXFCLENBQUMsT0FBTyxFQUFFLFlBQVk7Ozs7T0FrQmhEO0NBQ0YifQ==
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF6eS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3dhbGxldC9sYXp5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTlELE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEQsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxLQUFLLFNBQVMsRUFBRSxLQUFLLGtCQUFrQixFQUEyQixNQUFNLHdCQUF3QixDQUFDO0FBRzFHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVsRDs7OztHQUlHO0FBQ0gscUJBQWEsVUFBVyxTQUFRLGNBQWM7SUFDNUMsT0FBYSxNQUFNLENBQ2pCLElBQUksRUFBRSxTQUFTLEVBQ2YsaUJBQWlCLENBQUMsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQ3RDLE9BQU8sR0FBRSxrQkFBb0MsR0FDNUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQU9yQjtJQUVELG9CQUFvQixDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQVFuRjtJQUVELG1CQUFtQixDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FPckY7SUFFRCxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLENBT3JGO0lBRUQ7Ozs7O09BS0c7SUFDRyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsWUFBWTs7OztPQXVCaEQ7Q0FDRiJ9
@@ -1 +1 @@
1
- {"version":3,"file":"lazy.d.ts","sourceRoot":"","sources":["../../src/wallet/lazy.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,kBAAkB,EAA2B,MAAM,wBAAwB,CAAC;AAG1G,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD;;;;GAIG;AACH,qBAAa,UAAW,SAAQ,cAAc;IAC5C,OAAa,MAAM,CACjB,IAAI,EAAE,SAAS,EACf,iBAAiB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,EACtC,OAAO,GAAE,kBAAoC,GAC5C,OAAO,CAAC,UAAU,CAAC,CAOrB;IAED,oBAAoB,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAQnF;IAED,mBAAmB,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAOrF;IAED,mBAAmB,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAOrF;IAEK,qBAAqB,CAAC,OAAO,EAAE,YAAY;;;;OAkBhD;CACF"}
1
+ {"version":3,"file":"lazy.d.ts","sourceRoot":"","sources":["../../src/wallet/lazy.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,kBAAkB,EAA2B,MAAM,wBAAwB,CAAC;AAG1G,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD;;;;GAIG;AACH,qBAAa,UAAW,SAAQ,cAAc;IAC5C,OAAa,MAAM,CACjB,IAAI,EAAE,SAAS,EACf,iBAAiB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,EACtC,OAAO,GAAE,kBAAoC,GAC5C,OAAO,CAAC,UAAU,CAAC,CAOrB;IAED,oBAAoB,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAQnF;IAED,mBAAmB,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAOrF;IAED,mBAAmB,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAOrF;IAED;;;;;OAKG;IACG,qBAAqB,CAAC,OAAO,EAAE,YAAY;;;;OAuBhD;CACF"}
@@ -1,6 +1,7 @@
1
1
  import { EcdsaKAccountContract, EcdsaRAccountContract } from '@aztec/accounts/ecdsa/lazy';
2
2
  import { SchnorrAccountContract } from '@aztec/accounts/schnorr/lazy';
3
3
  import { createStubAccount, getStubAccountContractArtifact } from '@aztec/accounts/stub/lazy';
4
+ import { SignerlessAccount } from '@aztec/aztec.js/account';
4
5
  import { getContractInstanceFromInstantiationParams } from '@aztec/aztec.js/contracts';
5
6
  import { Fr } from '@aztec/aztec.js/fields';
6
7
  import { createPXE, getPXEConfig } from '@aztec/pxe/client/lazy';
@@ -46,15 +47,25 @@ import { BaseTestWallet } from './test_wallet.js';
46
47
  };
47
48
  return this.createAccount(accountData);
48
49
  }
49
- async getFakeAccountDataFor(address) {
50
- const chainInfo = await this.getChainInfo();
50
+ /**
51
+ * Creates a stub account that impersonates the given address, allowing kernelless simulations
52
+ * to bypass the account's authorization mechanisms via contract overrides.
53
+ * @param address - The address of the account to impersonate
54
+ * @returns The stub account, contract instance, and artifact for simulation
55
+ */ async getFakeAccountDataFor(address) {
51
56
  const originalAccount = await this.getAccountFromAddress(address);
57
+ // Account contracts can only be overridden if they have an associated address
58
+ // Overwriting SignerlessAccount is not supported, and does not really make sense
59
+ // since it has no authorization mechanism.
60
+ if (originalAccount instanceof SignerlessAccount) {
61
+ throw new Error(`Cannot create fake account data for SignerlessAccount at address: ${address}`);
62
+ }
52
63
  const originalAddress = originalAccount.getCompleteAddress();
53
- const { contractInstance } = await this.pxe.getContractMetadata(originalAddress.address);
64
+ const contractInstance = await this.pxe.getContractInstance(originalAddress.address);
54
65
  if (!contractInstance) {
55
66
  throw new Error(`No contract instance found for address: ${originalAddress.address}`);
56
67
  }
57
- const stubAccount = createStubAccount(originalAddress, chainInfo);
68
+ const stubAccount = createStubAccount(originalAddress);
58
69
  const StubAccountContractArtifact = await getStubAccountContractArtifact();
59
70
  const instance = await getContractInstanceFromInstantiationParams(StubAccountContractArtifact, {
60
71
  salt: Fr.random()
@@ -2,7 +2,7 @@ import type { AztecAddress } from '@aztec/aztec.js/addresses';
2
2
  import { Fq, Fr } from '@aztec/aztec.js/fields';
3
3
  import type { AztecNode } from '@aztec/aztec.js/node';
4
4
  import { AccountManager } from '@aztec/aztec.js/wallet';
5
- import { type PXEConfig, type PXECreationOptions } from '@aztec/pxe/server';
5
+ import { PXE, type PXEConfig, type PXECreationOptions } from '@aztec/pxe/server';
6
6
  import { BaseTestWallet } from './test_wallet.js';
7
7
  /**
8
8
  * A TestWallet implementation to be used in server settings (e.g. e2e tests).
@@ -10,14 +10,47 @@ import { BaseTestWallet } from './test_wallet.js';
10
10
  * from the `pxe/server` package.
11
11
  */
12
12
  export declare class TestWallet extends BaseTestWallet {
13
+ private readonly nodeRef;
14
+ constructor(pxe: PXE, nodeRef: AztecNodeProxy);
13
15
  static create(node: AztecNode, overridePXEConfig?: Partial<PXEConfig>, options?: PXECreationOptions): Promise<TestWallet>;
16
+ /**
17
+ * Updates the underlying node that this wallet and its PXE communicate with.
18
+ * @param node - The new AztecNode to forward all calls to.
19
+ */
20
+ updateNode(node: AztecNode): void;
14
21
  createSchnorrAccount(secret: Fr, salt: Fr, signingKey?: Fq): Promise<AccountManager>;
15
22
  createECDSARAccount(secret: Fr, salt: Fr, signingKey: Buffer): Promise<AccountManager>;
16
23
  createECDSAKAccount(secret: Fr, salt: Fr, signingKey: Buffer): Promise<AccountManager>;
24
+ /**
25
+ * Creates a stub account that impersonates the given address, allowing kernelless simulations
26
+ * to bypass the account's authorization mechanisms via contract overrides.
27
+ * @param address - The address of the account to impersonate
28
+ * @returns The stub account, contract instance, and artifact for simulation
29
+ */
17
30
  getFakeAccountDataFor(address: AztecAddress): Promise<{
18
- account: import("../../../aztec.js/dest/account/account.js").BaseAccount;
31
+ account: import("@aztec/aztec.js/account").BaseAccount;
19
32
  instance: import("@aztec/aztec.js/contracts").ContractInstanceWithAddress;
20
- artifact: import("../../../stdlib/dest/abi/abi.js").ContractArtifact;
33
+ artifact: import("@aztec/stdlib/abi").ContractArtifact;
21
34
  }>;
22
35
  }
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd2FsbGV0L3NlcnZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUU5RCxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hELE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsS0FBSyxTQUFTLEVBQUUsS0FBSyxrQkFBa0IsRUFBMkIsTUFBTSxtQkFBbUIsQ0FBQztBQUdyRyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFbEQ7Ozs7R0FJRztBQUNILHFCQUFhLFVBQVcsU0FBUSxjQUFjO0lBQzVDLE9BQWEsTUFBTSxDQUNqQixJQUFJLEVBQUUsU0FBUyxFQUNmLGlCQUFpQixDQUFDLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUN0QyxPQUFPLEdBQUUsa0JBQW9DLEdBQzVDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FPckI7SUFFRCxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FRbkY7SUFFRCxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLENBT3JGO0lBRUQsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQU9yRjtJQUVLLHFCQUFxQixDQUFDLE9BQU8sRUFBRSxZQUFZOzs7O09BaUJoRDtDQUNGIn0=
36
+ /**
37
+ * Extends AztecNode via declaration merging so instances can be used wherever AztecNode is expected.
38
+ * The actual method forwarding is handled by a Proxy in the class constructor.
39
+ */
40
+ export interface AztecNodeProxy extends AztecNode {
41
+ }
42
+ /**
43
+ * Mutable wrapper around an AztecNode that forwards all calls to the current target.
44
+ * Allows swapping the underlying node at runtime via updateTargetNode, which is useful
45
+ * for tests that need to redirect a wallet from one node to another without recreating it.
46
+ */
47
+ export declare class AztecNodeProxy {
48
+ private target;
49
+ constructor(target: AztecNode);
50
+ /**
51
+ * Updates the underlying node that this reference points to.
52
+ * @param node - The new node to forward calls to.
53
+ */
54
+ updateTargetNode(node: AztecNode): void;
55
+ }
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd2FsbGV0L3NlcnZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUU5RCxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hELE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssU0FBUyxFQUFFLEtBQUssa0JBQWtCLEVBQTJCLE1BQU0sbUJBQW1CLENBQUM7QUFHMUcsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWxEOzs7O0dBSUc7QUFDSCxxQkFBYSxVQUFXLFNBQVEsY0FBYztJQUcxQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU87SUFGMUIsWUFDRSxHQUFHLEVBQUUsR0FBRyxFQUNTLE9BQU8sRUFBRSxjQUFjLEVBR3pDO0lBRUQsT0FBYSxNQUFNLENBQ2pCLElBQUksRUFBRSxTQUFTLEVBQ2YsaUJBQWlCLENBQUMsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQ3RDLE9BQU8sR0FBRSxrQkFBb0MsR0FDNUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQVFyQjtJQUVEOzs7T0FHRztJQUNILFVBQVUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxHQUFHLElBQUksQ0FFaEM7SUFFRCxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FRbkY7SUFFRCxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLENBT3JGO0lBRUQsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQU9yRjtJQUVEOzs7OztPQUtHO0lBQ0cscUJBQXFCLENBQUMsT0FBTyxFQUFFLFlBQVk7Ozs7T0FzQmhEO0NBQ0Y7QUFFRDs7O0dBR0c7QUFFSCxNQUFNLFdBQVcsY0FBZSxTQUFRLFNBQVM7Q0FBRztBQUVwRDs7OztHQUlHO0FBRUgscUJBQWEsY0FBYztJQUNiLE9BQU8sQ0FBQyxNQUFNO0lBQTFCLFlBQW9CLE1BQU0sRUFBRSxTQUFTLEVBWXBDO0lBRUQ7OztPQUdHO0lBQ0gsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLFNBQVMsR0FBRyxJQUFJLENBRXRDO0NBQ0YifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/wallet/server.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,kBAAkB,EAA2B,MAAM,mBAAmB,CAAC;AAGrG,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD;;;;GAIG;AACH,qBAAa,UAAW,SAAQ,cAAc;IAC5C,OAAa,MAAM,CACjB,IAAI,EAAE,SAAS,EACf,iBAAiB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,EACtC,OAAO,GAAE,kBAAoC,GAC5C,OAAO,CAAC,UAAU,CAAC,CAOrB;IAED,oBAAoB,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAQnF;IAED,mBAAmB,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAOrF;IAED,mBAAmB,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAOrF;IAEK,qBAAqB,CAAC,OAAO,EAAE,YAAY;;;;OAiBhD;CACF"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/wallet/server.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,GAAG,EAAE,KAAK,SAAS,EAAE,KAAK,kBAAkB,EAA2B,MAAM,mBAAmB,CAAC;AAG1G,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD;;;;GAIG;AACH,qBAAa,UAAW,SAAQ,cAAc;IAG1C,OAAO,CAAC,QAAQ,CAAC,OAAO;IAF1B,YACE,GAAG,EAAE,GAAG,EACS,OAAO,EAAE,cAAc,EAGzC;IAED,OAAa,MAAM,CACjB,IAAI,EAAE,SAAS,EACf,iBAAiB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,EACtC,OAAO,GAAE,kBAAoC,GAC5C,OAAO,CAAC,UAAU,CAAC,CAQrB;IAED;;;OAGG;IACH,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAEhC;IAED,oBAAoB,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAQnF;IAED,mBAAmB,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAOrF;IAED,mBAAmB,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAOrF;IAED;;;;;OAKG;IACG,qBAAqB,CAAC,OAAO,EAAE,YAAY;;;;OAsBhD;CACF;AAED;;;GAGG;AAEH,MAAM,WAAW,cAAe,SAAQ,SAAS;CAAG;AAEpD;;;;GAIG;AAEH,qBAAa,cAAc;IACb,OAAO,CAAC,MAAM;IAA1B,YAAoB,MAAM,EAAE,SAAS,EAYpC;IAED;;;OAGG;IACH,gBAAgB,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAEtC;CACF"}
@@ -1,6 +1,7 @@
1
1
  import { EcdsaKAccountContract, EcdsaRAccountContract } from '@aztec/accounts/ecdsa';
2
2
  import { SchnorrAccountContract } from '@aztec/accounts/schnorr';
3
3
  import { StubAccountContractArtifact, createStubAccount } from '@aztec/accounts/stub';
4
+ import { SignerlessAccount } from '@aztec/aztec.js/account';
4
5
  import { getContractInstanceFromInstantiationParams } from '@aztec/aztec.js/contracts';
5
6
  import { Fr } from '@aztec/aztec.js/fields';
6
7
  import { createPXE, getPXEConfig } from '@aztec/pxe/server';
@@ -11,15 +12,26 @@ import { BaseTestWallet } from './test_wallet.js';
11
12
  * Note that the only difference from `lazy` and `bundle` test wallets is that it uses the `createPXE` function
12
13
  * from the `pxe/server` package.
13
14
  */ export class TestWallet extends BaseTestWallet {
15
+ nodeRef;
16
+ constructor(pxe, nodeRef){
17
+ super(pxe, nodeRef), this.nodeRef = nodeRef;
18
+ }
14
19
  static async create(node, overridePXEConfig, options = {
15
20
  loggers: {}
16
21
  }) {
22
+ const nodeRef = new AztecNodeProxy(node);
17
23
  const pxeConfig = Object.assign(getPXEConfig(), {
18
24
  proverEnabled: overridePXEConfig?.proverEnabled ?? false,
19
25
  ...overridePXEConfig
20
26
  });
21
- const pxe = await createPXE(node, pxeConfig, options);
22
- return new TestWallet(pxe, node);
27
+ const pxe = await createPXE(nodeRef, pxeConfig, options);
28
+ return new TestWallet(pxe, nodeRef);
29
+ }
30
+ /**
31
+ * Updates the underlying node that this wallet and its PXE communicate with.
32
+ * @param node - The new AztecNode to forward all calls to.
33
+ */ updateNode(node) {
34
+ this.nodeRef.updateTargetNode(node);
23
35
  }
24
36
  createSchnorrAccount(secret, salt, signingKey) {
25
37
  signingKey = signingKey ?? deriveSigningKey(secret);
@@ -46,15 +58,25 @@ import { BaseTestWallet } from './test_wallet.js';
46
58
  };
47
59
  return this.createAccount(accountData);
48
60
  }
49
- async getFakeAccountDataFor(address) {
50
- const chainInfo = await this.getChainInfo();
61
+ /**
62
+ * Creates a stub account that impersonates the given address, allowing kernelless simulations
63
+ * to bypass the account's authorization mechanisms via contract overrides.
64
+ * @param address - The address of the account to impersonate
65
+ * @returns The stub account, contract instance, and artifact for simulation
66
+ */ async getFakeAccountDataFor(address) {
51
67
  const originalAccount = await this.getAccountFromAddress(address);
68
+ // Account contracts can only be overridden if they have an associated address
69
+ // Overwriting SignerlessAccount is not supported, and does not really make sense
70
+ // since it has no authorization mechanism.
71
+ if (originalAccount instanceof SignerlessAccount) {
72
+ throw new Error(`Cannot create fake account data for SignerlessAccount at address: ${address}`);
73
+ }
52
74
  const originalAddress = originalAccount.getCompleteAddress();
53
- const { contractInstance } = await this.pxe.getContractMetadata(originalAddress.address);
75
+ const contractInstance = await this.pxe.getContractInstance(originalAddress.address);
54
76
  if (!contractInstance) {
55
77
  throw new Error(`No contract instance found for address: ${originalAddress.address}`);
56
78
  }
57
- const stubAccount = createStubAccount(originalAddress, chainInfo);
79
+ const stubAccount = createStubAccount(originalAddress);
58
80
  const instance = await getContractInstanceFromInstantiationParams(StubAccountContractArtifact, {
59
81
  salt: Fr.random()
60
82
  });
@@ -65,3 +87,31 @@ import { BaseTestWallet } from './test_wallet.js';
65
87
  };
66
88
  }
67
89
  }
90
+ /**
91
+ * Mutable wrapper around an AztecNode that forwards all calls to the current target.
92
+ * Allows swapping the underlying node at runtime via updateTargetNode, which is useful
93
+ * for tests that need to redirect a wallet from one node to another without recreating it.
94
+ */ // eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging
95
+ export class AztecNodeProxy {
96
+ target;
97
+ constructor(target){
98
+ this.target = target;
99
+ return new Proxy(this, {
100
+ get: (obj, prop, receiver)=>{
101
+ // Own properties and methods (updateTargetNode, target) are served directly.
102
+ if (Reflect.has(obj, prop)) {
103
+ return Reflect.get(obj, prop, receiver);
104
+ }
105
+ // Everything else is forwarded to the current target node.
106
+ const val = obj.target[prop];
107
+ return typeof val === 'function' ? val.bind(obj.target) : val;
108
+ }
109
+ });
110
+ }
111
+ /**
112
+ * Updates the underlying node that this reference points to.
113
+ * @param node - The new node to forward calls to.
114
+ */ updateTargetNode(node) {
115
+ this.target = node;
116
+ }
117
+ }
@@ -7,7 +7,7 @@ import { AuthWitness } from '@aztec/stdlib/auth-witness';
7
7
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
8
8
  import type { ContractInstanceWithAddress } from '@aztec/stdlib/contract';
9
9
  import type { NoteDao, NotesFilter } from '@aztec/stdlib/note';
10
- import type { TxSimulationResult } from '@aztec/stdlib/tx';
10
+ import type { BlockHeader, TxHash, TxReceipt, TxSimulationResult } from '@aztec/stdlib/tx';
11
11
  import { ExecutionPayload } from '@aztec/stdlib/tx';
12
12
  import { BaseWallet } from '@aztec/wallet-sdk/base-wallet';
13
13
  import { ProvenTx } from '../utils.js';
@@ -102,9 +102,15 @@ export declare abstract class BaseTestWallet extends BaseWallet {
102
102
  * of the provided account. This authwit can be verified
103
103
  * by the account contract
104
104
  * @param from - The address authorizing the action
105
- * @param messageHashOrIntent - The action to authorize
105
+ * @param intent - The action to authorize
106
+ */
107
+ createAuthWit(from: AztecAddress, intent: IntentInnerHash | CallIntent | ContractFunctionInteractionCallIntent): Promise<AuthWitness>;
108
+ /**
109
+ * Creates a stub account that impersonates the given address, allowing kernelless simulations
110
+ * to bypass the account's authorization mechanisms via contract overrides.
111
+ * @param address - The address of the account to impersonate
112
+ * @returns The stub account, contract instance, and artifact for simulation
106
113
  */
107
- createAuthWit(from: AztecAddress, messageHashOrIntent: Fr | IntentInnerHash | CallIntent | ContractFunctionInteractionCallIntent): Promise<AuthWitness>;
108
114
  abstract getFakeAccountDataFor(address: AztecAddress): Promise<{
109
115
  account: Account;
110
116
  instance: ContractInstanceWithAddress;
@@ -120,7 +126,14 @@ export declare abstract class BaseTestWallet extends BaseWallet {
120
126
  * @param opts - The options to configure the interaction
121
127
  * @returns - A proven tx ready to be sent to the network
122
128
  */
123
- proveTx(exec: ExecutionPayload, opts: SendOptions): Promise<ProvenTx>;
129
+ proveTx(exec: ExecutionPayload, opts: Omit<SendOptions, 'wait'>): Promise<ProvenTx>;
130
+ /**
131
+ * Retrieves the transaction receipt for a given transaction hash.
132
+ * This is a passthrough to the underlying node, provided for convenience in testing.
133
+ * @param txHash - The hash of the transaction.
134
+ * @returns The transaction receipt.
135
+ */
136
+ getTxReceipt(txHash: TxHash): Promise<TxReceipt>;
124
137
  /**
125
138
  * A debugging utility to get notes based on the provided filter.
126
139
  *
@@ -133,6 +146,13 @@ export declare abstract class BaseTestWallet extends BaseWallet {
133
146
  * @returns The requested notes.
134
147
  */
135
148
  getNotes(filter: NotesFilter): Promise<NoteDao[]>;
149
+ /** Returns the block header up to which the wallet has synced. */
150
+ getSyncedBlockHeader(): Promise<BlockHeader>;
151
+ /**
152
+ * Triggers a sync of the wallet with the node to update the latest block header.
153
+ * Blocks until the sync is complete.
154
+ */
155
+ sync(): Promise<void>;
136
156
  /**
137
157
  * Stops the internal job queue.
138
158
  *
@@ -140,4 +160,4 @@ export declare abstract class BaseTestWallet extends BaseWallet {
140
160
  */
141
161
  stop(): Promise<void>;
142
162
  }
143
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdF93YWxsZXQuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93YWxsZXQvdGVzdF93YWxsZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsS0FBSyxPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQXFCLE1BQU0seUJBQXlCLENBQUM7QUFDaEcsT0FBTyxFQUNMLEtBQUssVUFBVSxFQUNmLEtBQUsscUNBQXFDLEVBQzFDLEtBQUssZUFBZSxFQUNwQixtQ0FBbUMsRUFHcEMsTUFBTSwrQkFBK0IsQ0FBQztBQUN2QyxPQUFPLEVBQUUsY0FBYyxFQUFFLEtBQUssV0FBVyxFQUFFLEtBQUssZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFaEcsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV4RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sS0FBSyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUUsT0FBTyxLQUFLLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQy9ELE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGdCQUFnQixFQUEwQixNQUFNLGtCQUFrQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUUzRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXZDOztHQUVHO0FBQ0gsTUFBTSxXQUFXLFdBQVc7SUFDMUI7O09BRUc7SUFDSCxNQUFNLEVBQUUsRUFBRSxDQUFD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
163
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdF93YWxsZXQuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93YWxsZXQvdGVzdF93YWxsZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsS0FBSyxPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQXFCLE1BQU0seUJBQXlCLENBQUM7QUFDaEcsT0FBTyxFQUNMLEtBQUssVUFBVSxFQUNmLEtBQUsscUNBQXFDLEVBQzFDLEtBQUssZUFBZSxFQUNwQixtQ0FBbUMsRUFJcEMsTUFBTSwrQkFBK0IsQ0FBQztBQUN2QyxPQUFPLEVBQUUsY0FBYyxFQUFFLEtBQUssV0FBVyxFQUFFLEtBQUssZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFaEcsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV4RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sS0FBSyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUUsT0FBTyxLQUFLLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQy9ELE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0YsT0FBTyxFQUFFLGdCQUFnQixFQUEwQixNQUFNLGtCQUFrQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUUzRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXZDOztHQUVHO0FBQ0gsTUFBTSxXQUFXLFdBQVc7SUFDMUI7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
@@ -1 +1 @@
1
- {"version":3,"file":"test_wallet.d.ts","sourceRoot":"","sources":["../../src/wallet/test_wallet.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,eAAe,EAAqB,MAAM,yBAAyB,CAAC;AAChG,OAAO,EACL,KAAK,UAAU,EACf,KAAK,qCAAqC,EAC1C,KAAK,eAAe,EACpB,mCAAmC,EAGpC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,KAAK,WAAW,EAAE,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEhG,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAExD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAA0B,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,MAAM,EAAE,EAAE,CAAC;IACX;;OAEG;IACH,IAAI,EAAE,EAAE,CAAC;IACT;;OAEG;IACH,QAAQ,EAAE,eAAe,CAAC;CAC3B;AAED;;;;GAIG;AACH,8BAAsB,cAAe,SAAQ,UAAU;IACrD,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAa;IAErD;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,oBAAoB,CAAS;IAErC,6DAA6D;IAC7D,0BAA0B,SAEzB;IAED,8DAA8D;IAC9D,2BAA2B,SAE1B;IAED,gBAAgB,CAAC,KAAK,CAAC,EAAE,MAAM,QAE9B;IAED,UAAgB,qBAAqB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAc7E;IAED,WAAW;;;SAEV;IAED;;;;;;OAMG;IACG,aAAa,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,CAiBtE;IAED,QAAQ,CAAC,oBAAoB,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAC9F,QAAQ,CAAC,mBAAmB,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAChG,QAAQ,CAAC,mBAAmB,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAEhG;;;;;;;;;;OAUG;IACH,cAAc,CACZ,UAAU,EAAE,YAAY,EACxB,MAAM,EAAE,eAAe,GAAG,UAAU,GAAG,qCAAqC,EAC5E,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC;QACT,yEAAyE;QACzE,gBAAgB,EAAE,OAAO,CAAC;QAC1B,wEAAwE;QACxE,eAAe,EAAE,OAAO,CAAC;KAC1B,CAAC,CAED;IAED;;;;;;OAMG;IACI,gBAAgB,CACrB,IAAI,EAAE,YAAY,EAClB,mBAAmB,EAAE,EAAE,GAAG,eAAe,GAAG,UAAU,GAAG,qCAAqC,EAC9F,UAAU,EAAE,OAAO,GAClB,OAAO,CAAC,mCAAmC,CAAC,CAE9C;IAED;;;;;;OAMG;IACmB,aAAa,CACjC,IAAI,EAAE,YAAY,EAClB,mBAAmB,EAAE,EAAE,GAAG,eAAe,GAAG,UAAU,GAAG,qCAAqC,GAC7F,OAAO,CAAC,WAAW,CAAC,CAKtB;IAED,QAAQ,CAAC,qBAAqB,CAC5B,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,2BAA2B,CAAC;QAAC,QAAQ,EAAE,gBAAgB,CAAA;KAAE,CAAC,CAAC;IAErF,UAAU,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA2BhH;IAED;;;;;;;;OAQG;IACG,OAAO,CAAC,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAU1E;IAED;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAEhD;IAED;;;;OAIG;IACH,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAEpB;CACF"}
1
+ {"version":3,"file":"test_wallet.d.ts","sourceRoot":"","sources":["../../src/wallet/test_wallet.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { SchnorrAccountContract } from '@aztec/accounts/schnorr';
2
2
  import { SignerlessAccount } from '@aztec/aztec.js/account';
3
- import { SetPublicAuthwitContractInteraction, getMessageHashFromIntent, lookupValidity } from '@aztec/aztec.js/authorization';
3
+ import { SetPublicAuthwitContractInteraction, computeInnerAuthWitHashFromAction, isContractFunctionInteractionCallIntent, lookupValidity } from '@aztec/aztec.js/authorization';
4
4
  import { AccountManager } from '@aztec/aztec.js/wallet';
5
5
  import { Fr } from '@aztec/foundation/curves/bn254';
6
6
  import { GrumpkinScalar } from '@aztec/foundation/curves/grumpkin';
@@ -38,18 +38,17 @@ import { ProvenTx } from '../utils.js';
38
38
  setMinFeePadding(value) {
39
39
  this.minFeePadding = value ?? 0.5;
40
40
  }
41
- async getAccountFromAddress(address) {
41
+ getAccountFromAddress(address) {
42
42
  let account;
43
43
  if (address.equals(AztecAddress.ZERO)) {
44
- const chainInfo = await this.getChainInfo();
45
- account = new SignerlessAccount(chainInfo);
44
+ account = new SignerlessAccount();
46
45
  } else {
47
46
  account = this.accounts.get(address?.toString() ?? '');
48
47
  }
49
48
  if (!account) {
50
49
  throw new Error(`Account not found in wallet for address: ${address}`);
51
50
  }
52
- return account;
51
+ return Promise.resolve(account);
53
52
  }
54
53
  getAccounts() {
55
54
  return Promise.resolve(Array.from(this.accounts.values()).map((acc)=>({
@@ -103,12 +102,22 @@ import { ProvenTx } from '../utils.js';
103
102
  * of the provided account. This authwit can be verified
104
103
  * by the account contract
105
104
  * @param from - The address authorizing the action
106
- * @param messageHashOrIntent - The action to authorize
107
- */ async createAuthWit(from, messageHashOrIntent) {
105
+ * @param intent - The action to authorize
106
+ */ async createAuthWit(from, intent) {
108
107
  const account = await this.getAccountFromAddress(from);
109
108
  const chainInfo = await this.getChainInfo();
110
- const messageHash = await getMessageHashFromIntent(messageHashOrIntent, chainInfo);
111
- return account.createAuthWit(messageHash);
109
+ let intentInnerHash;
110
+ if ('caller' in intent) {
111
+ const call = isContractFunctionInteractionCallIntent(intent) ? await intent.action.getFunctionCall() : intent.call;
112
+ const innerHash = await computeInnerAuthWitHashFromAction(intent.caller, call);
113
+ intentInnerHash = {
114
+ innerHash,
115
+ consumer: call.to
116
+ };
117
+ } else {
118
+ intentInnerHash = intent;
119
+ }
120
+ return account.createAuthWit(intentInnerHash, chainInfo);
112
121
  }
113
122
  async simulateTx(executionPayload, opts) {
114
123
  if (!this.simulatedSimulations) {
@@ -126,15 +135,21 @@ import { ProvenTx } from '../utils.js';
126
135
  executionPayload
127
136
  ]) : executionPayload;
128
137
  const { account: fromAccount, instance, artifact } = await this.getFakeAccountDataFor(opts.from);
129
- const txRequest = await fromAccount.createTxExecutionRequest(finalExecutionPayload, feeOptions.gasSettings, executionOptions);
138
+ const chainInfo = await this.getChainInfo();
139
+ const txRequest = await fromAccount.createTxExecutionRequest(finalExecutionPayload, feeOptions.gasSettings, chainInfo, executionOptions);
130
140
  const contractOverrides = {
131
141
  [opts.from.toString()]: {
132
142
  instance,
133
143
  artifact
134
144
  }
135
145
  };
136
- return this.pxe.simulateTx(txRequest, true, true, true, {
137
- contracts: contractOverrides
146
+ return this.pxe.simulateTx(txRequest, {
147
+ simulatePublic: true,
148
+ skipTxValidation: true,
149
+ skipFeeEnforcement: true,
150
+ overrides: {
151
+ contracts: contractOverrides
152
+ }
138
153
  });
139
154
  }
140
155
  }
@@ -153,6 +168,14 @@ import { ProvenTx } from '../utils.js';
153
168
  return new ProvenTx(this.aztecNode, await txProvingResult.toTx(), txProvingResult.getOffchainEffects(), txProvingResult.stats);
154
169
  }
155
170
  /**
171
+ * Retrieves the transaction receipt for a given transaction hash.
172
+ * This is a passthrough to the underlying node, provided for convenience in testing.
173
+ * @param txHash - The hash of the transaction.
174
+ * @returns The transaction receipt.
175
+ */ getTxReceipt(txHash) {
176
+ return this.aztecNode.getTxReceipt(txHash);
177
+ }
178
+ /**
156
179
  * A debugging utility to get notes based on the provided filter.
157
180
  *
158
181
  * Note that this should not be used in production code because the structure of notes is considered to be
@@ -165,6 +188,15 @@ import { ProvenTx } from '../utils.js';
165
188
  */ getNotes(filter) {
166
189
  return this.pxe.debug.getNotes(filter);
167
190
  }
191
+ /** Returns the block header up to which the wallet has synced. */ getSyncedBlockHeader() {
192
+ return this.pxe.getSyncedBlockHeader();
193
+ }
194
+ /**
195
+ * Triggers a sync of the wallet with the node to update the latest block header.
196
+ * Blocks until the sync is complete.
197
+ */ sync() {
198
+ return this.pxe.debug.sync();
199
+ }
168
200
  /**
169
201
  * Stops the internal job queue.
170
202
  *
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@aztec/test-wallet",
3
3
  "homepage": "https://github.com/AztecProtocol/aztec-packages/tree/master/yarn-project/test-wallet",
4
- "version": "0.0.1-commit.1142ef1",
4
+ "version": "0.0.1-commit.134ed76",
5
5
  "type": "module",
6
6
  "exports": {
7
7
  "./client/bundle": "./dest/bundle.js",
@@ -10,14 +10,14 @@
10
10
  },
11
11
  "typedocOptions": {
12
12
  "entryPoints": [
13
- "./src/index.ts"
13
+ "./src/server.ts"
14
14
  ],
15
15
  "tsconfig": "./tsconfig.json"
16
16
  },
17
17
  "scripts": {
18
18
  "build": "yarn clean && ../scripts/tsc.sh",
19
19
  "build:dev": "../scripts/tsc.sh --watch",
20
- "build:ts": "tsgo -b",
20
+ "build:ts": "../scripts/tsc.sh",
21
21
  "clean": "rm -rf ./dest .tsbuildinfo",
22
22
  "test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests --maxWorkers=${JEST_MAX_WORKERS:-8}"
23
23
  },
@@ -62,20 +62,20 @@
62
62
  ]
63
63
  },
64
64
  "dependencies": {
65
- "@aztec/accounts": "0.0.1-commit.1142ef1",
66
- "@aztec/aztec.js": "0.0.1-commit.1142ef1",
67
- "@aztec/entrypoints": "0.0.1-commit.1142ef1",
68
- "@aztec/foundation": "0.0.1-commit.1142ef1",
69
- "@aztec/noir-contracts.js": "0.0.1-commit.1142ef1",
70
- "@aztec/pxe": "0.0.1-commit.1142ef1",
71
- "@aztec/stdlib": "0.0.1-commit.1142ef1",
72
- "@aztec/wallet-sdk": "0.0.1-commit.1142ef1"
65
+ "@aztec/accounts": "0.0.1-commit.134ed76",
66
+ "@aztec/aztec.js": "0.0.1-commit.134ed76",
67
+ "@aztec/entrypoints": "0.0.1-commit.134ed76",
68
+ "@aztec/foundation": "0.0.1-commit.134ed76",
69
+ "@aztec/noir-contracts.js": "0.0.1-commit.134ed76",
70
+ "@aztec/pxe": "0.0.1-commit.134ed76",
71
+ "@aztec/stdlib": "0.0.1-commit.134ed76",
72
+ "@aztec/wallet-sdk": "0.0.1-commit.134ed76"
73
73
  },
74
74
  "devDependencies": {
75
75
  "@jest/globals": "^30.0.0",
76
76
  "@types/jest": "^30.0.0",
77
77
  "@types/node": "^22.15.17",
78
- "@typescript/native-preview": "7.0.0-dev.20251126.1",
78
+ "@typescript/native-preview": "7.0.0-dev.20260113.1",
79
79
  "jest": "^30.0.0",
80
80
  "jest-mock-extended": "^4.0.0",
81
81
  "resolve-typescript-plugin": "^2.0.1",
package/src/server.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { TestWallet } from './wallet/server.js';
1
+ export { TestWallet, AztecNodeProxy } from './wallet/server.js';
2
2
  export { type AccountData } from './wallet/test_wallet.js';
3
3
  export {
4
4
  deployFundedSchnorrAccounts,
package/src/utils.ts CHANGED
@@ -5,23 +5,44 @@ import {
5
5
  ContractFunctionInteraction,
6
6
  DeployMethod,
7
7
  type DeployOptions,
8
+ NO_WAIT,
9
+ type NoWait,
8
10
  type SendInteractionOptions,
9
- SentTx,
10
11
  type WaitOpts,
11
12
  toSendOptions,
12
13
  } from '@aztec/aztec.js/contracts';
13
- import type { AztecNode } from '@aztec/aztec.js/node';
14
- import { type OffchainEffect, type ProvingStats, Tx } from '@aztec/stdlib/tx';
14
+ import { type AztecNode, waitForTx } from '@aztec/aztec.js/node';
15
+ import { SimulationError } from '@aztec/stdlib/errors';
16
+ import { type OffchainEffect, type ProvingStats, Tx, TxHash, type TxReceipt } from '@aztec/stdlib/tx';
17
+
18
+ import { inspect } from 'util';
15
19
 
16
20
  import type { BaseTestWallet } from './wallet/test_wallet.js';
17
21
 
22
+ /**
23
+ * Options for sending a proven transaction.
24
+ */
25
+ export type ProvenTxSendOpts = {
26
+ /**
27
+ * Whether to wait for the transaction to be mined.
28
+ * - undefined (default): wait with default options and return TxReceipt
29
+ * - WaitOpts object: wait with custom options and return TxReceipt
30
+ * - NO_WAIT: return txHash immediately without waiting
31
+ */
32
+ wait?: NoWait | WaitOpts;
33
+ };
34
+
35
+ /**
36
+ * Return type for ProvenTx.send based on wait option.
37
+ */
38
+ export type ProvenTxSendReturn<T extends NoWait | WaitOpts | undefined> = T extends NoWait ? TxHash : TxReceipt;
39
+
18
40
  /**
19
41
  * Deploys the SchnorrAccount contracts backed by prefunded addresses
20
42
  * at genesis. This can be directly used to pay for transactions in FeeJuice.
21
43
  */
22
44
  export async function deployFundedSchnorrAccounts(
23
45
  wallet: BaseTestWallet,
24
- aztecNode: AztecNode,
25
46
  accountsData: InitialAccountData[],
26
47
  waitOptions?: WaitOpts,
27
48
  ) {
@@ -31,12 +52,11 @@ export async function deployFundedSchnorrAccounts(
31
52
  const { secret, salt, signingKey } = accountsData[i];
32
53
  const accountManager = await wallet.createSchnorrAccount(secret, salt, signingKey);
33
54
  const deployMethod = await accountManager.getDeployMethod();
34
- await deployMethod
35
- .send({
36
- from: AztecAddress.ZERO,
37
- skipClassPublication: i !== 0, // Publish the contract class at most once.
38
- })
39
- .wait(waitOptions);
55
+ await deployMethod.send({
56
+ from: AztecAddress.ZERO,
57
+ skipClassPublication: i !== 0, // Publish the contract class at most once.
58
+ wait: waitOptions,
59
+ });
40
60
  accountManagers.push(accountManager);
41
61
  }
42
62
  return accountManagers;
@@ -70,12 +90,37 @@ export class ProvenTx extends Tx {
70
90
  super(tx.getTxHash(), tx.data, tx.chonkProof, tx.contractClassLogFields, tx.publicFunctionCalldata);
71
91
  }
72
92
 
73
- send() {
74
- const sendTx = async () => {
75
- await this.node.sendTx(this);
76
- return this.getTxHash();
77
- };
78
- return new SentTx(this.node, sendTx);
93
+ /**
94
+ * Sends the transaction to the network.
95
+ * @param options - Send options including whether to wait.
96
+ * @returns The transaction receipt if waiting, or the transaction hash if not.
97
+ */
98
+ send(options?: Omit<ProvenTxSendOpts, 'wait'>): Promise<TxReceipt>;
99
+ // eslint-disable-next-line jsdoc/require-jsdoc
100
+ send<W extends ProvenTxSendOpts['wait']>(options: ProvenTxSendOpts & { wait: W }): Promise<ProvenTxSendReturn<W>>;
101
+ async send(options?: ProvenTxSendOpts): Promise<TxHash | TxReceipt> {
102
+ const txHash = this.getTxHash();
103
+ await this.node.sendTx(this).catch(err => {
104
+ throw this.contextualizeError(err, inspect(this));
105
+ });
106
+
107
+ if (options?.wait === NO_WAIT) {
108
+ return txHash;
109
+ }
110
+
111
+ const waitOpts = typeof options?.wait === 'object' ? options.wait : undefined;
112
+ return await waitForTx(this.node, txHash, waitOpts);
113
+ }
114
+
115
+ private contextualizeError(err: Error, ...context: string[]): Error {
116
+ let contextStr = '';
117
+ if (context.length > 0) {
118
+ contextStr = `\nContext:\n${context.join('\n')}`;
119
+ }
120
+ if (err instanceof SimulationError) {
121
+ err.setAztecContext(contextStr);
122
+ }
123
+ return err;
79
124
  }
80
125
  }
81
126
 
@@ -1,6 +1,7 @@
1
1
  import { EcdsaKAccountContract, EcdsaRAccountContract } from '@aztec/accounts/ecdsa';
2
2
  import { SchnorrAccountContract } from '@aztec/accounts/schnorr';
3
3
  import { StubAccountContractArtifact, createStubAccount } from '@aztec/accounts/stub';
4
+ import { type Account, SignerlessAccount } from '@aztec/aztec.js/account';
4
5
  import type { AztecAddress } from '@aztec/aztec.js/addresses';
5
6
  import { getContractInstanceFromInstantiationParams } from '@aztec/aztec.js/contracts';
6
7
  import { Fq, Fr } from '@aztec/aztec.js/fields';
@@ -58,15 +59,26 @@ export class TestWallet extends BaseTestWallet {
58
59
  return this.createAccount(accountData);
59
60
  }
60
61
 
62
+ /**
63
+ * Creates a stub account that impersonates the given address, allowing kernelless simulations
64
+ * to bypass the account's authorization mechanisms via contract overrides.
65
+ * @param address - The address of the account to impersonate
66
+ * @returns The stub account, contract instance, and artifact for simulation
67
+ */
61
68
  async getFakeAccountDataFor(address: AztecAddress) {
62
- const chainInfo = await this.getChainInfo();
63
69
  const originalAccount = await this.getAccountFromAddress(address);
64
- const originalAddress = originalAccount.getCompleteAddress();
65
- const { contractInstance } = await this.pxe.getContractMetadata(originalAddress.address);
70
+ // Account contracts can only be overridden if they have an associated address
71
+ // Overwriting SignerlessAccount is not supported, and does not really make sense
72
+ // since it has no authorization mechanism.
73
+ if (originalAccount instanceof SignerlessAccount) {
74
+ throw new Error(`Cannot create fake account data for SignerlessAccount at address: ${address}`);
75
+ }
76
+ const originalAddress = (originalAccount as Account).getCompleteAddress();
77
+ const contractInstance = await this.pxe.getContractInstance(originalAddress.address);
66
78
  if (!contractInstance) {
67
79
  throw new Error(`No contract instance found for address: ${originalAddress.address}`);
68
80
  }
69
- const stubAccount = createStubAccount(originalAddress, chainInfo);
81
+ const stubAccount = createStubAccount(originalAddress);
70
82
  const instance = await getContractInstanceFromInstantiationParams(StubAccountContractArtifact, {
71
83
  salt: Fr.random(),
72
84
  });
@@ -1,6 +1,7 @@
1
1
  import { EcdsaKAccountContract, EcdsaRAccountContract } from '@aztec/accounts/ecdsa/lazy';
2
2
  import { SchnorrAccountContract } from '@aztec/accounts/schnorr/lazy';
3
3
  import { createStubAccount, getStubAccountContractArtifact } from '@aztec/accounts/stub/lazy';
4
+ import { type Account, SignerlessAccount } from '@aztec/aztec.js/account';
4
5
  import type { AztecAddress } from '@aztec/aztec.js/addresses';
5
6
  import { getContractInstanceFromInstantiationParams } from '@aztec/aztec.js/contracts';
6
7
  import { Fq, Fr } from '@aztec/aztec.js/fields';
@@ -58,15 +59,26 @@ export class TestWallet extends BaseTestWallet {
58
59
  return this.createAccount(accountData);
59
60
  }
60
61
 
62
+ /**
63
+ * Creates a stub account that impersonates the given address, allowing kernelless simulations
64
+ * to bypass the account's authorization mechanisms via contract overrides.
65
+ * @param address - The address of the account to impersonate
66
+ * @returns The stub account, contract instance, and artifact for simulation
67
+ */
61
68
  async getFakeAccountDataFor(address: AztecAddress) {
62
- const chainInfo = await this.getChainInfo();
63
69
  const originalAccount = await this.getAccountFromAddress(address);
64
- const originalAddress = originalAccount.getCompleteAddress();
65
- const { contractInstance } = await this.pxe.getContractMetadata(originalAddress.address);
70
+ // Account contracts can only be overridden if they have an associated address
71
+ // Overwriting SignerlessAccount is not supported, and does not really make sense
72
+ // since it has no authorization mechanism.
73
+ if (originalAccount instanceof SignerlessAccount) {
74
+ throw new Error(`Cannot create fake account data for SignerlessAccount at address: ${address}`);
75
+ }
76
+ const originalAddress = (originalAccount as Account).getCompleteAddress();
77
+ const contractInstance = await this.pxe.getContractInstance(originalAddress.address);
66
78
  if (!contractInstance) {
67
79
  throw new Error(`No contract instance found for address: ${originalAddress.address}`);
68
80
  }
69
- const stubAccount = createStubAccount(originalAddress, chainInfo);
81
+ const stubAccount = createStubAccount(originalAddress);
70
82
  const StubAccountContractArtifact = await getStubAccountContractArtifact();
71
83
  const instance = await getContractInstanceFromInstantiationParams(StubAccountContractArtifact, {
72
84
  salt: Fr.random(),
@@ -1,12 +1,13 @@
1
1
  import { EcdsaKAccountContract, EcdsaRAccountContract } from '@aztec/accounts/ecdsa';
2
2
  import { SchnorrAccountContract } from '@aztec/accounts/schnorr';
3
3
  import { StubAccountContractArtifact, createStubAccount } from '@aztec/accounts/stub';
4
+ import { type Account, SignerlessAccount } from '@aztec/aztec.js/account';
4
5
  import type { AztecAddress } from '@aztec/aztec.js/addresses';
5
6
  import { getContractInstanceFromInstantiationParams } from '@aztec/aztec.js/contracts';
6
7
  import { Fq, Fr } from '@aztec/aztec.js/fields';
7
8
  import type { AztecNode } from '@aztec/aztec.js/node';
8
9
  import { AccountManager } from '@aztec/aztec.js/wallet';
9
- import { type PXEConfig, type PXECreationOptions, createPXE, getPXEConfig } from '@aztec/pxe/server';
10
+ import { PXE, type PXEConfig, type PXECreationOptions, createPXE, getPXEConfig } from '@aztec/pxe/server';
10
11
  import { deriveSigningKey } from '@aztec/stdlib/keys';
11
12
 
12
13
  import { BaseTestWallet } from './test_wallet.js';
@@ -17,17 +18,33 @@ import { BaseTestWallet } from './test_wallet.js';
17
18
  * from the `pxe/server` package.
18
19
  */
19
20
  export class TestWallet extends BaseTestWallet {
21
+ constructor(
22
+ pxe: PXE,
23
+ private readonly nodeRef: AztecNodeProxy,
24
+ ) {
25
+ super(pxe, nodeRef);
26
+ }
27
+
20
28
  static async create(
21
29
  node: AztecNode,
22
30
  overridePXEConfig?: Partial<PXEConfig>,
23
31
  options: PXECreationOptions = { loggers: {} },
24
32
  ): Promise<TestWallet> {
33
+ const nodeRef = new AztecNodeProxy(node);
25
34
  const pxeConfig = Object.assign(getPXEConfig(), {
26
35
  proverEnabled: overridePXEConfig?.proverEnabled ?? false,
27
36
  ...overridePXEConfig,
28
37
  });
29
- const pxe = await createPXE(node, pxeConfig, options);
30
- return new TestWallet(pxe, node);
38
+ const pxe = await createPXE(nodeRef, pxeConfig, options);
39
+ return new TestWallet(pxe, nodeRef);
40
+ }
41
+
42
+ /**
43
+ * Updates the underlying node that this wallet and its PXE communicate with.
44
+ * @param node - The new AztecNode to forward all calls to.
45
+ */
46
+ updateNode(node: AztecNode): void {
47
+ this.nodeRef.updateTargetNode(node);
31
48
  }
32
49
 
33
50
  createSchnorrAccount(secret: Fr, salt: Fr, signingKey?: Fq): Promise<AccountManager> {
@@ -58,15 +75,26 @@ export class TestWallet extends BaseTestWallet {
58
75
  return this.createAccount(accountData);
59
76
  }
60
77
 
78
+ /**
79
+ * Creates a stub account that impersonates the given address, allowing kernelless simulations
80
+ * to bypass the account's authorization mechanisms via contract overrides.
81
+ * @param address - The address of the account to impersonate
82
+ * @returns The stub account, contract instance, and artifact for simulation
83
+ */
61
84
  async getFakeAccountDataFor(address: AztecAddress) {
62
- const chainInfo = await this.getChainInfo();
63
85
  const originalAccount = await this.getAccountFromAddress(address);
64
- const originalAddress = originalAccount.getCompleteAddress();
65
- const { contractInstance } = await this.pxe.getContractMetadata(originalAddress.address);
86
+ // Account contracts can only be overridden if they have an associated address
87
+ // Overwriting SignerlessAccount is not supported, and does not really make sense
88
+ // since it has no authorization mechanism.
89
+ if (originalAccount instanceof SignerlessAccount) {
90
+ throw new Error(`Cannot create fake account data for SignerlessAccount at address: ${address}`);
91
+ }
92
+ const originalAddress = (originalAccount as Account).getCompleteAddress();
93
+ const contractInstance = await this.pxe.getContractInstance(originalAddress.address);
66
94
  if (!contractInstance) {
67
95
  throw new Error(`No contract instance found for address: ${originalAddress.address}`);
68
96
  }
69
- const stubAccount = createStubAccount(originalAddress, chainInfo);
97
+ const stubAccount = createStubAccount(originalAddress);
70
98
  const instance = await getContractInstanceFromInstantiationParams(StubAccountContractArtifact, {
71
99
  salt: Fr.random(),
72
100
  });
@@ -77,3 +105,40 @@ export class TestWallet extends BaseTestWallet {
77
105
  };
78
106
  }
79
107
  }
108
+
109
+ /**
110
+ * Extends AztecNode via declaration merging so instances can be used wherever AztecNode is expected.
111
+ * The actual method forwarding is handled by a Proxy in the class constructor.
112
+ */
113
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging
114
+ export interface AztecNodeProxy extends AztecNode {}
115
+
116
+ /**
117
+ * Mutable wrapper around an AztecNode that forwards all calls to the current target.
118
+ * Allows swapping the underlying node at runtime via updateTargetNode, which is useful
119
+ * for tests that need to redirect a wallet from one node to another without recreating it.
120
+ */
121
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging
122
+ export class AztecNodeProxy {
123
+ constructor(private target: AztecNode) {
124
+ return new Proxy(this, {
125
+ get: (obj, prop, receiver) => {
126
+ // Own properties and methods (updateTargetNode, target) are served directly.
127
+ if (Reflect.has(obj, prop)) {
128
+ return Reflect.get(obj, prop, receiver);
129
+ }
130
+ // Everything else is forwarded to the current target node.
131
+ const val = (obj.target as unknown as Record<string | symbol, unknown>)[prop];
132
+ return typeof val === 'function' ? val.bind(obj.target) : val;
133
+ },
134
+ });
135
+ }
136
+
137
+ /**
138
+ * Updates the underlying node that this reference points to.
139
+ * @param node - The new node to forward calls to.
140
+ */
141
+ updateTargetNode(node: AztecNode): void {
142
+ this.target = node;
143
+ }
144
+ }
@@ -6,7 +6,8 @@ import {
6
6
  type ContractFunctionInteractionCallIntent,
7
7
  type IntentInnerHash,
8
8
  SetPublicAuthwitContractInteraction,
9
- getMessageHashFromIntent,
9
+ computeInnerAuthWitHashFromAction,
10
+ isContractFunctionInteractionCallIntent,
10
11
  lookupValidity,
11
12
  } from '@aztec/aztec.js/authorization';
12
13
  import { AccountManager, type SendOptions, type SimulateOptions } from '@aztec/aztec.js/wallet';
@@ -17,7 +18,7 @@ import { AuthWitness } from '@aztec/stdlib/auth-witness';
17
18
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
18
19
  import type { ContractInstanceWithAddress } from '@aztec/stdlib/contract';
19
20
  import type { NoteDao, NotesFilter } from '@aztec/stdlib/note';
20
- import type { TxSimulationResult } from '@aztec/stdlib/tx';
21
+ import type { BlockHeader, TxHash, TxReceipt, TxSimulationResult } from '@aztec/stdlib/tx';
21
22
  import { ExecutionPayload, mergeExecutionPayloads } from '@aztec/stdlib/tx';
22
23
  import { BaseWallet } from '@aztec/wallet-sdk/base-wallet';
23
24
 
@@ -80,11 +81,10 @@ export abstract class BaseTestWallet extends BaseWallet {
80
81
  this.minFeePadding = value ?? 0.5;
81
82
  }
82
83
 
83
- protected async getAccountFromAddress(address: AztecAddress): Promise<Account> {
84
+ protected getAccountFromAddress(address: AztecAddress): Promise<Account> {
84
85
  let account: Account | undefined;
85
86
  if (address.equals(AztecAddress.ZERO)) {
86
- const chainInfo = await this.getChainInfo();
87
- account = new SignerlessAccount(chainInfo);
87
+ account = new SignerlessAccount();
88
88
  } else {
89
89
  account = this.accounts.get(address?.toString() ?? '');
90
90
  }
@@ -93,7 +93,7 @@ export abstract class BaseTestWallet extends BaseWallet {
93
93
  throw new Error(`Account not found in wallet for address: ${address}`);
94
94
  }
95
95
 
96
- return account;
96
+ return Promise.resolve(account);
97
97
  }
98
98
 
99
99
  getAccounts() {
@@ -174,18 +174,33 @@ export abstract class BaseTestWallet extends BaseWallet {
174
174
  * of the provided account. This authwit can be verified
175
175
  * by the account contract
176
176
  * @param from - The address authorizing the action
177
- * @param messageHashOrIntent - The action to authorize
177
+ * @param intent - The action to authorize
178
178
  */
179
179
  public override async createAuthWit(
180
180
  from: AztecAddress,
181
- messageHashOrIntent: Fr | IntentInnerHash | CallIntent | ContractFunctionInteractionCallIntent,
181
+ intent: IntentInnerHash | CallIntent | ContractFunctionInteractionCallIntent,
182
182
  ): Promise<AuthWitness> {
183
183
  const account = await this.getAccountFromAddress(from);
184
184
  const chainInfo = await this.getChainInfo();
185
- const messageHash = await getMessageHashFromIntent(messageHashOrIntent, chainInfo);
186
- return account.createAuthWit(messageHash);
185
+ let intentInnerHash: IntentInnerHash;
186
+ if ('caller' in intent) {
187
+ const call = isContractFunctionInteractionCallIntent(intent)
188
+ ? await intent.action.getFunctionCall()
189
+ : intent.call;
190
+ const innerHash = await computeInnerAuthWitHashFromAction(intent.caller, call);
191
+ intentInnerHash = { innerHash, consumer: call.to };
192
+ } else {
193
+ intentInnerHash = intent;
194
+ }
195
+ return account.createAuthWit(intentInnerHash, chainInfo);
187
196
  }
188
197
 
198
+ /**
199
+ * Creates a stub account that impersonates the given address, allowing kernelless simulations
200
+ * to bypass the account's authorization mechanisms via contract overrides.
201
+ * @param address - The address of the account to impersonate
202
+ * @returns The stub account, contract instance, and artifact for simulation
203
+ */
189
204
  abstract getFakeAccountDataFor(
190
205
  address: AztecAddress, // eslint-disable-next-line jsdoc/require-jsdoc
191
206
  ): Promise<{ account: Account; instance: ContractInstanceWithAddress; artifact: ContractArtifact }>;
@@ -207,15 +222,22 @@ export abstract class BaseTestWallet extends BaseWallet {
207
222
  ? mergeExecutionPayloads([feeExecutionPayload, executionPayload])
208
223
  : executionPayload;
209
224
  const { account: fromAccount, instance, artifact } = await this.getFakeAccountDataFor(opts.from);
225
+ const chainInfo = await this.getChainInfo();
210
226
  const txRequest = await fromAccount.createTxExecutionRequest(
211
227
  finalExecutionPayload,
212
228
  feeOptions.gasSettings,
229
+ chainInfo,
213
230
  executionOptions,
214
231
  );
215
232
  const contractOverrides = {
216
233
  [opts.from.toString()]: { instance, artifact },
217
234
  };
218
- return this.pxe.simulateTx(txRequest, true /* simulatePublic */, true, true, { contracts: contractOverrides });
235
+ return this.pxe.simulateTx(txRequest, {
236
+ simulatePublic: true,
237
+ skipTxValidation: true,
238
+ skipFeeEnforcement: true,
239
+ overrides: { contracts: contractOverrides },
240
+ });
219
241
  }
220
242
  }
221
243
 
@@ -228,7 +250,7 @@ export abstract class BaseTestWallet extends BaseWallet {
228
250
  * @param opts - The options to configure the interaction
229
251
  * @returns - A proven tx ready to be sent to the network
230
252
  */
231
- async proveTx(exec: ExecutionPayload, opts: SendOptions): Promise<ProvenTx> {
253
+ async proveTx(exec: ExecutionPayload, opts: Omit<SendOptions, 'wait'>): Promise<ProvenTx> {
232
254
  const fee = await this.completeFeeOptions(opts.from, exec.feePayer, opts.fee?.gasSettings);
233
255
  const txRequest = await this.createTxExecutionRequestFromPayloadAndFee(exec, opts.from, fee);
234
256
  const txProvingResult = await this.pxe.proveTx(txRequest);
@@ -240,6 +262,16 @@ export abstract class BaseTestWallet extends BaseWallet {
240
262
  );
241
263
  }
242
264
 
265
+ /**
266
+ * Retrieves the transaction receipt for a given transaction hash.
267
+ * This is a passthrough to the underlying node, provided for convenience in testing.
268
+ * @param txHash - The hash of the transaction.
269
+ * @returns The transaction receipt.
270
+ */
271
+ getTxReceipt(txHash: TxHash): Promise<TxReceipt> {
272
+ return this.aztecNode.getTxReceipt(txHash);
273
+ }
274
+
243
275
  /**
244
276
  * A debugging utility to get notes based on the provided filter.
245
277
  *
@@ -255,6 +287,19 @@ export abstract class BaseTestWallet extends BaseWallet {
255
287
  return this.pxe.debug.getNotes(filter);
256
288
  }
257
289
 
290
+ /** Returns the block header up to which the wallet has synced. */
291
+ getSyncedBlockHeader(): Promise<BlockHeader> {
292
+ return this.pxe.getSyncedBlockHeader();
293
+ }
294
+
295
+ /**
296
+ * Triggers a sync of the wallet with the node to update the latest block header.
297
+ * Blocks until the sync is complete.
298
+ */
299
+ sync(): Promise<void> {
300
+ return this.pxe.debug.sync();
301
+ }
302
+
258
303
  /**
259
304
  * Stops the internal job queue.
260
305
  *