@aztec/aztec 5.0.0 → 5.0.1

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.
@@ -24,6 +24,8 @@ export type LocalNetworkConfig = AztecNodeConfig & {
24
24
  l1Mnemonic: string;
25
25
  /** Whether to deploy test accounts on local network start.*/
26
26
  testAccounts: boolean;
27
+ /** Override the default per-address fee juice granted at genesis to funded addresses. */
28
+ initialAccountFeeJuice?: Fr;
27
29
  };
28
30
  /**
29
31
  * Create and start a new Aztec Node and PXE. Deploys L1 contracts.
@@ -46,4 +48,4 @@ export declare function createAztecNode(config?: Partial<AztecNodeConfig>, deps?
46
48
  }, options?: {
47
49
  genesis?: GenesisData;
48
50
  }): Promise<import("@aztec/aztec-node").AztecNodeService>;
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtbmV0d29yay5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xvY2FsLW5ldHdvcmsvbG9jYWwtbmV0d29yay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBR0EsT0FBTyxFQUFFLEtBQUssZUFBZSxFQUFvQixNQUFNLDBCQUEwQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU1QyxPQUFPLEVBQUUsS0FBSyxtQkFBbUIsRUFBb0IsTUFBTSwyQkFBMkIsQ0FBQztBQU12RixPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBR2pGLE9BQU8sS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQW9CLE1BQU0seUJBQXlCLENBQUM7QUFJekUsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUV4RSxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsS0FBSyxlQUFlLEVBR3JCLE1BQU0seUJBQXlCLENBQUM7QUFLakMsT0FBTyxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBbUJoQzs7OztHQUlHO0FBQ0gsd0JBQXNCLG1CQUFtQixDQUN2QyxlQUFlLEVBQUUsZUFBZSxFQUNoQyxVQUFVLEVBQUUsR0FBRyxFQUNmLElBQUksR0FBRTtJQUNKLGtCQUFrQixDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ3hCLDRCQUE0QixDQUFDLEVBQUUsTUFBTSxDQUFDO0NBQ2xDLEdBQ0wsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBbUI5QjtBQUVELDhCQUE4QjtBQUM5QixNQUFNLE1BQU0sa0JBQWtCLEdBQUcsZUFBZSxHQUFHO0lBQ2pELDBEQUEwRDtJQUMxRCxVQUFVLEVBQUUsTUFBTSxDQUFDO0lBQ25CLDZEQUE2RDtJQUM3RCxZQUFZLEVBQUUsT0FBTyxDQUFDO0NBQ3ZCLENBQUM7QUFFRjs7OztHQUlHO0FBQ0gsd0JBQXNCLGtCQUFrQixDQUFDLE1BQU0seUNBQWtDLEVBQUUsT0FBTyxFQUFFLEtBQUs7OztHQTRIaEc7QUFFRDs7O0dBR0c7QUFDSCx3QkFBc0IsZUFBZSxDQUNuQyxNQUFNLEdBQUUsT0FBTyxDQUFDLGVBQWUsQ0FBTSxFQUNyQyxJQUFJLEdBQUU7SUFDSixTQUFTLENBQUMsRUFBRSxlQUFlLENBQUM7SUFDNUIsVUFBVSxDQUFDLEVBQUUsbUJBQW1CLENBQUM7SUFDakMsWUFBWSxDQUFDLEVBQUUsWUFBWSxDQUFDO0lBQzVCLFlBQVksQ0FBQyxFQUFFLGdCQUFnQixDQUFDO0NBQzVCLEVBQ04sT0FBTyxHQUFFO0lBQUUsT0FBTyxDQUFDLEVBQUUsV0FBVyxDQUFBO0NBQU8seURBY3hDIn0=
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtbmV0d29yay5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xvY2FsLW5ldHdvcmsvbG9jYWwtbmV0d29yay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBR0EsT0FBTyxFQUFFLEtBQUssZUFBZSxFQUFvQixNQUFNLDBCQUEwQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU1QyxPQUFPLEVBQUUsS0FBSyxtQkFBbUIsRUFBb0IsTUFBTSwyQkFBMkIsQ0FBQztBQU12RixPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBR2pGLE9BQU8sS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQW9CLE1BQU0seUJBQXlCLENBQUM7QUFJekUsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUV4RSxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsS0FBSyxlQUFlLEVBR3JCLE1BQU0seUJBQXlCLENBQUM7QUFLakMsT0FBTyxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBbUJoQzs7OztHQUlHO0FBQ0gsd0JBQXNCLG1CQUFtQixDQUN2QyxlQUFlLEVBQUUsZUFBZSxFQUNoQyxVQUFVLEVBQUUsR0FBRyxFQUNmLElBQUksR0FBRTtJQUNKLGtCQUFrQixDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ3hCLDRCQUE0QixDQUFDLEVBQUUsTUFBTSxDQUFDO0NBQ2xDLEdBQ0wsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBbUI5QjtBQUVELDhCQUE4QjtBQUM5QixNQUFNLE1BQU0sa0JBQWtCLEdBQUcsZUFBZSxHQUFHO0lBQ2pELDBEQUEwRDtJQUMxRCxVQUFVLEVBQUUsTUFBTSxDQUFDO0lBQ25CLDZEQUE2RDtJQUM3RCxZQUFZLEVBQUUsT0FBTyxDQUFDO0lBQ3RCLHlGQUF5RjtJQUN6RixzQkFBc0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQztDQUM3QixDQUFDO0FBRUY7Ozs7R0FJRztBQUNILHdCQUFzQixrQkFBa0IsQ0FBQyxNQUFNLHlDQUFrQyxFQUFFLE9BQU8sRUFBRSxLQUFLOzs7R0ErSGhHO0FBRUQ7OztHQUdHO0FBQ0gsd0JBQXNCLGVBQWUsQ0FDbkMsTUFBTSxHQUFFLE9BQU8sQ0FBQyxlQUFlLENBQU0sRUFDckMsSUFBSSxHQUFFO0lBQ0osU0FBUyxDQUFDLEVBQUUsZUFBZSxDQUFDO0lBQzVCLFVBQVUsQ0FBQyxFQUFFLG1CQUFtQixDQUFDO0lBQ2pDLFlBQVksQ0FBQyxFQUFFLFlBQVksQ0FBQztJQUM1QixZQUFZLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQztDQUM1QixFQUNOLE9BQU8sR0FBRTtJQUFFLE9BQU8sQ0FBQyxFQUFFLFdBQVcsQ0FBQTtDQUFPLHlEQWN4QyJ9
@@ -1 +1 @@
1
- {"version":3,"file":"local-network.d.ts","sourceRoot":"","sources":["../../src/local-network/local-network.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,KAAK,eAAe,EAAoB,MAAM,0BAA0B,CAAC;AAClF,OAAO,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAE5C,OAAO,EAAE,KAAK,mBAAmB,EAAoB,MAAM,2BAA2B,CAAC;AAMvF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAGjF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAoB,MAAM,yBAAyB,CAAC;AAIzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAExE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EACL,KAAK,eAAe,EAGrB,MAAM,yBAAyB,CAAC;AAKjC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAmBhC;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,eAAe,EAAE,eAAe,EAChC,UAAU,EAAE,GAAG,EACf,IAAI,GAAE;IACJ,kBAAkB,CAAC,EAAE,EAAE,CAAC;IACxB,4BAA4B,CAAC,EAAE,MAAM,CAAC;CAClC,GACL,OAAO,CAAC,mBAAmB,CAAC,CAmB9B;AAED,8BAA8B;AAC9B,MAAM,MAAM,kBAAkB,GAAG,eAAe,GAAG;IACjD,0DAA0D;IAC1D,UAAU,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,yCAAkC,EAAE,OAAO,EAAE,KAAK;;;GA4HhG;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM,EACrC,IAAI,GAAE;IACJ,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,YAAY,CAAC,EAAE,gBAAgB,CAAC;CAC5B,EACN,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,WAAW,CAAA;CAAO,yDAcxC"}
1
+ {"version":3,"file":"local-network.d.ts","sourceRoot":"","sources":["../../src/local-network/local-network.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,KAAK,eAAe,EAAoB,MAAM,0BAA0B,CAAC;AAClF,OAAO,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAE5C,OAAO,EAAE,KAAK,mBAAmB,EAAoB,MAAM,2BAA2B,CAAC;AAMvF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAGjF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAoB,MAAM,yBAAyB,CAAC;AAIzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAExE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EACL,KAAK,eAAe,EAGrB,MAAM,yBAAyB,CAAC;AAKjC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAmBhC;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,eAAe,EAAE,eAAe,EAChC,UAAU,EAAE,GAAG,EACf,IAAI,GAAE;IACJ,kBAAkB,CAAC,EAAE,EAAE,CAAC;IACxB,4BAA4B,CAAC,EAAE,MAAM,CAAC;CAClC,GACL,OAAO,CAAC,mBAAmB,CAAC,CAmB9B;AAED,8BAA8B;AAC9B,MAAM,MAAM,kBAAkB,GAAG,eAAe,GAAG;IACjD,0DAA0D;IAC1D,UAAU,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,YAAY,EAAE,OAAO,CAAC;IACtB,yFAAyF;IACzF,sBAAsB,CAAC,EAAE,EAAE,CAAC;CAC7B,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,yCAAkC,EAAE,OAAO,EAAE,KAAK;;;GA+HhG;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM,EACrC,IAAI,GAAE;IACJ,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,YAAY,CAAC,EAAE,gBAAgB,CAAC;CAC5B,EACN,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,WAAW,CAAA;CAAO,yDAcxC"}
@@ -141,7 +141,7 @@ const setupWaitOpts = {
141
141
  ] : [],
142
142
  ...prefundAddresses
143
143
  ];
144
- const { genesisArchiveRoot, genesis, fundingNeeded } = await getGenesisValues(fundedAddresses);
144
+ const { genesisArchiveRoot, genesis, fundingNeeded } = await getGenesisValues(fundedAddresses, config.initialAccountFeeJuice);
145
145
  const dateProvider = new TestDateProvider();
146
146
  if (!aztecNodeConfig.p2pEnabled) {
147
147
  await deployContractsToL1(aztecNodeConfig, aztecNodeConfig.validatorPrivateKeys.getValue()[0], {
@@ -1,5 +1,6 @@
1
1
  export { EthCheatCodes, RollupCheatCodes } from '@aztec/ethereum/test';
2
2
  export { CheatCodes } from './cheat_codes.js';
3
3
  export { EpochTestSettler } from './epoch_test_settler.js';
4
+ export { setupLocalNetwork, TEST_FEE_PADDING, type LocalNetwork, type LocalNetworkOptions } from './local-network.js';
4
5
  export { getTokenAllowedSetupFunctions } from './token_allowed_setup.js';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0aW5nL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDM0QsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sMEJBQTBCLENBQUMifQ==
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0aW5nL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLEtBQUssWUFBWSxFQUFFLEtBQUssbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN0SCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQyJ9
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,KAAK,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACtH,OAAO,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export { EthCheatCodes, RollupCheatCodes } from '@aztec/ethereum/test';
2
2
  export { CheatCodes } from './cheat_codes.js';
3
3
  export { EpochTestSettler } from './epoch_test_settler.js';
4
+ export { setupLocalNetwork, TEST_FEE_PADDING } from './local-network.js';
4
5
  export { getTokenAllowedSetupFunctions } from './token_allowed_setup.js';
@@ -0,0 +1,51 @@
1
+ import type { AztecNodeService } from '@aztec/aztec-node';
2
+ import type { AztecNodeConfig } from '@aztec/aztec-node/config';
3
+ import type { Fr } from '@aztec/aztec.js/fields';
4
+ import type { AztecAddress } from '@aztec/stdlib/aztec-address';
5
+ /** A running in-process local network: an inline Aztec node backed by its own anvil L1. */
6
+ export interface LocalNetwork extends AsyncDisposable {
7
+ /** Fully-synced Aztec node, ready to serve client requests. */
8
+ node: AztecNodeService;
9
+ /** RPC URL of the spawned anvil instance. */
10
+ l1RpcUrl: string;
11
+ /** Chain id used on L1 (foundry's default 31337). */
12
+ l1ChainId: number;
13
+ /** Stops every process started by the fixture: node and anvil. Also invoked by `await using`. */
14
+ stop: () => Promise<void>;
15
+ }
16
+ /** Options for {@link setupLocalNetwork}. */
17
+ export interface LocalNetworkOptions {
18
+ /**
19
+ * Addresses that should hold fee juice at genesis. Saves each of these the round-trip of bridging
20
+ * + claiming fee juice before they can pay for gas.
21
+ */
22
+ fundedAddresses?: AztecAddress[];
23
+ /** Override the default per-address genesis fee juice granted to {@link fundedAddresses}. */
24
+ initialAccountFeeJuice?: Fr;
25
+ /** Node config overrides, e.g. `realProofs`, `aztecEpochDuration`, `p2pEnabled`. */
26
+ config?: Partial<AztecNodeConfig>;
27
+ }
28
+ /**
29
+ * Spin up an in-process local network with the given addresses pre-funded.
30
+ *
31
+ * Each call spawns its own anvil on an OS-assigned random port and runs the Aztec node inline via
32
+ * the same {@link createLocalNetwork} codepath that backs `aztec start --local-network` (with the
33
+ * sandbox account/FPC/token setup skipped). Distinct ports let independent suites run in parallel.
34
+ * The caller must `await result.stop()` in its teardown (or hold the result with `await using`).
35
+ *
36
+ * Requires a Foundry toolchain (`anvil`/`forge`), installed via `aztec-up` or `foundryup`. Binaries
37
+ * are located in the standard install directories or on `PATH`; set `$ANVIL_BIN` / `$FORGE_BIN` to
38
+ * pin specific ones.
39
+ */
40
+ export declare function setupLocalNetwork(opts?: LocalNetworkOptions): Promise<LocalNetwork>;
41
+ /**
42
+ * Min-fee padding multiplier for test wallets whose txs may mine well after their fee estimate.
43
+ * The automine sequencer builds one block per tx and advances L1 time in big jumps, and proposer
44
+ * pipelining evolves the fee-asset price across the build/publish gap (~20x observed in CI), so the
45
+ * network's congestion base fee can swing sharply between the wallet's fee estimate and the block
46
+ * the tx actually lands in. The default wallet padding isn't enough and trips
47
+ * `maxFeesPerGas.feePerL2Gas must be >= gasFees.feePerL2Gas`. Apply via
48
+ * `wallet.setMinFeePadding(TEST_FEE_PADDING)` on every test wallet that sends txs.
49
+ */
50
+ export declare const TEST_FEE_PADDING = 30;
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtbmV0d29yay5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3RpbmcvbG9jYWwtbmV0d29yay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFELE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRWpELE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBTWhFLDJGQUEyRjtBQUMzRixNQUFNLFdBQVcsWUFBYSxTQUFRLGVBQWU7SUFDbkQsK0RBQStEO0lBQy9ELElBQUksRUFBRSxnQkFBZ0IsQ0FBQztJQUN2Qiw2Q0FBNkM7SUFDN0MsUUFBUSxFQUFFLE1BQU0sQ0FBQztJQUNqQixxREFBcUQ7SUFDckQsU0FBUyxFQUFFLE1BQU0sQ0FBQztJQUNsQixpR0FBaUc7SUFDakcsSUFBSSxFQUFFLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQzNCO0FBRUQsNkNBQTZDO0FBQzdDLE1BQU0sV0FBVyxtQkFBbUI7SUFDbEM7OztPQUdHO0lBQ0gsZUFBZSxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUM7SUFDakMsNkZBQTZGO0lBQzdGLHNCQUFzQixDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQzVCLG9GQUFvRjtJQUNwRixNQUFNLENBQUMsRUFBRSxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7Q0FDbkM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILHdCQUFzQixpQkFBaUIsQ0FBQyxJQUFJLEdBQUUsbUJBQXdCLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQXNDN0Y7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILGVBQU8sTUFBTSxnQkFBZ0IsS0FBSyxDQUFDIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-network.d.ts","sourceRoot":"","sources":["../../src/testing/local-network.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAMhE,2FAA2F;AAC3F,MAAM,WAAW,YAAa,SAAQ,eAAe;IACnD,+DAA+D;IAC/D,IAAI,EAAE,gBAAgB,CAAC;IACvB,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,SAAS,EAAE,MAAM,CAAC;IAClB,iGAAiG;IACjG,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,6CAA6C;AAC7C,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,eAAe,CAAC,EAAE,YAAY,EAAE,CAAC;IACjC,6FAA6F;IAC7F,sBAAsB,CAAC,EAAE,EAAE,CAAC;IAC5B,oFAAoF;IACpF,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;CACnC;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,GAAE,mBAAwB,GAAG,OAAO,CAAC,YAAY,CAAC,CAsC7F;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,KAAK,CAAC"}
@@ -0,0 +1,60 @@
1
+ import { startAnvil } from '@aztec/ethereum/test';
2
+ import { foundry } from 'viem/chains';
3
+ import { createLocalNetwork } from '../local-network/local-network.js';
4
+ /**
5
+ * Spin up an in-process local network with the given addresses pre-funded.
6
+ *
7
+ * Each call spawns its own anvil on an OS-assigned random port and runs the Aztec node inline via
8
+ * the same {@link createLocalNetwork} codepath that backs `aztec start --local-network` (with the
9
+ * sandbox account/FPC/token setup skipped). Distinct ports let independent suites run in parallel.
10
+ * The caller must `await result.stop()` in its teardown (or hold the result with `await using`).
11
+ *
12
+ * Requires a Foundry toolchain (`anvil`/`forge`), installed via `aztec-up` or `foundryup`. Binaries
13
+ * are located in the standard install directories or on `PATH`; set `$ANVIL_BIN` / `$FORGE_BIN` to
14
+ * pin specific ones.
15
+ */ export async function setupLocalNetwork(opts = {}) {
16
+ // `--port 0` → anvil binds an ephemeral port that `startAnvil` reads back, so parallel suites
17
+ // never collide on a fixed port.
18
+ const { rpcUrl, stop: stopAnvil } = await startAnvil({
19
+ port: 0
20
+ });
21
+ try {
22
+ const { node, stop: stopNode } = await createLocalNetwork({
23
+ ...opts.config,
24
+ l1RpcUrls: [
25
+ rpcUrl
26
+ ],
27
+ testAccounts: false,
28
+ prefundAddresses: (opts.fundedAddresses ?? []).map((a)=>a.toString()),
29
+ initialAccountFeeJuice: opts.initialAccountFeeJuice
30
+ }, ()=>{});
31
+ // Stop the node before anvil (its teardown still talks to L1); the finally guarantees anvil is
32
+ // reaped even if node shutdown throws.
33
+ const stop = async ()=>{
34
+ try {
35
+ await stopNode();
36
+ } finally{
37
+ await stopAnvil();
38
+ }
39
+ };
40
+ return {
41
+ node,
42
+ l1RpcUrl: rpcUrl,
43
+ l1ChainId: foundry.id,
44
+ stop,
45
+ [Symbol.asyncDispose]: stop
46
+ };
47
+ } catch (err) {
48
+ await stopAnvil();
49
+ throw err;
50
+ }
51
+ }
52
+ /**
53
+ * Min-fee padding multiplier for test wallets whose txs may mine well after their fee estimate.
54
+ * The automine sequencer builds one block per tx and advances L1 time in big jumps, and proposer
55
+ * pipelining evolves the fee-asset price across the build/publish gap (~20x observed in CI), so the
56
+ * network's congestion base fee can swing sharply between the wallet's fee estimate and the block
57
+ * the tx actually lands in. The default wallet padding isn't enough and trips
58
+ * `maxFeesPerGas.feePerL2Gas must be >= gasFees.feePerL2Gas`. Apply via
59
+ * `wallet.setMinFeePadding(TEST_FEE_PADDING)` on every test wallet that sends txs.
60
+ */ export const TEST_FEE_PADDING = 30;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/aztec",
3
- "version": "5.0.0",
3
+ "version": "5.0.1",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dest/index.js",
@@ -28,39 +28,39 @@
28
28
  "../package.common.json"
29
29
  ],
30
30
  "dependencies": {
31
- "@aztec/accounts": "5.0.0",
32
- "@aztec/archiver": "5.0.0",
33
- "@aztec/aztec-node": "5.0.0",
34
- "@aztec/aztec.js": "5.0.0",
35
- "@aztec/bb-prover": "5.0.0",
36
- "@aztec/bb.js": "5.0.0",
37
- "@aztec/blob-client": "5.0.0",
38
- "@aztec/bot": "5.0.0",
39
- "@aztec/builder": "5.0.0",
40
- "@aztec/cli": "5.0.0",
41
- "@aztec/constants": "5.0.0",
42
- "@aztec/entrypoints": "5.0.0",
43
- "@aztec/ethereum": "5.0.0",
44
- "@aztec/foundation": "5.0.0",
45
- "@aztec/kv-store": "5.0.0",
46
- "@aztec/l1-artifacts": "5.0.0",
47
- "@aztec/node-lib": "5.0.0",
48
- "@aztec/noir-contracts.js": "5.0.0",
49
- "@aztec/noir-protocol-circuits-types": "5.0.0",
50
- "@aztec/p2p": "5.0.0",
51
- "@aztec/p2p-bootstrap": "5.0.0",
52
- "@aztec/protocol-contracts": "5.0.0",
53
- "@aztec/prover-client": "5.0.0",
54
- "@aztec/prover-node": "5.0.0",
55
- "@aztec/pxe": "5.0.0",
56
- "@aztec/sequencer-client": "5.0.0",
57
- "@aztec/standard-contracts": "5.0.0",
58
- "@aztec/stdlib": "5.0.0",
59
- "@aztec/telemetry-client": "5.0.0",
60
- "@aztec/txe": "5.0.0",
61
- "@aztec/validator-ha-signer": "5.0.0",
62
- "@aztec/wallets": "5.0.0",
63
- "@aztec/world-state": "5.0.0",
31
+ "@aztec/accounts": "5.0.1",
32
+ "@aztec/archiver": "5.0.1",
33
+ "@aztec/aztec-node": "5.0.1",
34
+ "@aztec/aztec.js": "5.0.1",
35
+ "@aztec/bb-prover": "5.0.1",
36
+ "@aztec/bb.js": "5.0.1",
37
+ "@aztec/blob-client": "5.0.1",
38
+ "@aztec/bot": "5.0.1",
39
+ "@aztec/builder": "5.0.1",
40
+ "@aztec/cli": "5.0.1",
41
+ "@aztec/constants": "5.0.1",
42
+ "@aztec/entrypoints": "5.0.1",
43
+ "@aztec/ethereum": "5.0.1",
44
+ "@aztec/foundation": "5.0.1",
45
+ "@aztec/kv-store": "5.0.1",
46
+ "@aztec/l1-artifacts": "5.0.1",
47
+ "@aztec/node-lib": "5.0.1",
48
+ "@aztec/noir-contracts.js": "5.0.1",
49
+ "@aztec/noir-protocol-circuits-types": "5.0.1",
50
+ "@aztec/p2p": "5.0.1",
51
+ "@aztec/p2p-bootstrap": "5.0.1",
52
+ "@aztec/protocol-contracts": "5.0.1",
53
+ "@aztec/prover-client": "5.0.1",
54
+ "@aztec/prover-node": "5.0.1",
55
+ "@aztec/pxe": "5.0.1",
56
+ "@aztec/sequencer-client": "5.0.1",
57
+ "@aztec/standard-contracts": "5.0.1",
58
+ "@aztec/stdlib": "5.0.1",
59
+ "@aztec/telemetry-client": "5.0.1",
60
+ "@aztec/txe": "5.0.1",
61
+ "@aztec/validator-ha-signer": "5.0.1",
62
+ "@aztec/wallets": "5.0.1",
63
+ "@aztec/world-state": "5.0.1",
64
64
  "@iarna/toml": "^2.2.5",
65
65
  "@types/chalk": "^2.2.0",
66
66
  "abitype": "^0.8.11",
@@ -88,6 +88,8 @@ export type LocalNetworkConfig = AztecNodeConfig & {
88
88
  l1Mnemonic: string;
89
89
  /** Whether to deploy test accounts on local network start.*/
90
90
  testAccounts: boolean;
91
+ /** Override the default per-address fee juice granted at genesis to funded addresses. */
92
+ initialAccountFeeJuice?: Fr;
91
93
  };
92
94
 
93
95
  /**
@@ -176,7 +178,10 @@ export async function createLocalNetwork(config: Partial<LocalNetworkConfig> = {
176
178
  ...(initialAccounts.length ? [bananaFPC, sponsoredFPC] : []),
177
179
  ...prefundAddresses,
178
180
  ];
179
- const { genesisArchiveRoot, genesis, fundingNeeded } = await getGenesisValues(fundedAddresses);
181
+ const { genesisArchiveRoot, genesis, fundingNeeded } = await getGenesisValues(
182
+ fundedAddresses,
183
+ config.initialAccountFeeJuice,
184
+ );
180
185
 
181
186
  const dateProvider = new TestDateProvider();
182
187
 
@@ -1,4 +1,5 @@
1
1
  export { EthCheatCodes, RollupCheatCodes } from '@aztec/ethereum/test';
2
2
  export { CheatCodes } from './cheat_codes.js';
3
3
  export { EpochTestSettler } from './epoch_test_settler.js';
4
+ export { setupLocalNetwork, TEST_FEE_PADDING, type LocalNetwork, type LocalNetworkOptions } from './local-network.js';
4
5
  export { getTokenAllowedSetupFunctions } from './token_allowed_setup.js';
@@ -0,0 +1,97 @@
1
+ import type { AztecNodeService } from '@aztec/aztec-node';
2
+ import type { AztecNodeConfig } from '@aztec/aztec-node/config';
3
+ import type { Fr } from '@aztec/aztec.js/fields';
4
+ import { startAnvil } from '@aztec/ethereum/test';
5
+ import type { AztecAddress } from '@aztec/stdlib/aztec-address';
6
+
7
+ import { foundry } from 'viem/chains';
8
+
9
+ import { createLocalNetwork } from '../local-network/local-network.js';
10
+
11
+ /** A running in-process local network: an inline Aztec node backed by its own anvil L1. */
12
+ export interface LocalNetwork extends AsyncDisposable {
13
+ /** Fully-synced Aztec node, ready to serve client requests. */
14
+ node: AztecNodeService;
15
+ /** RPC URL of the spawned anvil instance. */
16
+ l1RpcUrl: string;
17
+ /** Chain id used on L1 (foundry's default 31337). */
18
+ l1ChainId: number;
19
+ /** Stops every process started by the fixture: node and anvil. Also invoked by `await using`. */
20
+ stop: () => Promise<void>;
21
+ }
22
+
23
+ /** Options for {@link setupLocalNetwork}. */
24
+ export interface LocalNetworkOptions {
25
+ /**
26
+ * Addresses that should hold fee juice at genesis. Saves each of these the round-trip of bridging
27
+ * + claiming fee juice before they can pay for gas.
28
+ */
29
+ fundedAddresses?: AztecAddress[];
30
+ /** Override the default per-address genesis fee juice granted to {@link fundedAddresses}. */
31
+ initialAccountFeeJuice?: Fr;
32
+ /** Node config overrides, e.g. `realProofs`, `aztecEpochDuration`, `p2pEnabled`. */
33
+ config?: Partial<AztecNodeConfig>;
34
+ }
35
+
36
+ /**
37
+ * Spin up an in-process local network with the given addresses pre-funded.
38
+ *
39
+ * Each call spawns its own anvil on an OS-assigned random port and runs the Aztec node inline via
40
+ * the same {@link createLocalNetwork} codepath that backs `aztec start --local-network` (with the
41
+ * sandbox account/FPC/token setup skipped). Distinct ports let independent suites run in parallel.
42
+ * The caller must `await result.stop()` in its teardown (or hold the result with `await using`).
43
+ *
44
+ * Requires a Foundry toolchain (`anvil`/`forge`), installed via `aztec-up` or `foundryup`. Binaries
45
+ * are located in the standard install directories or on `PATH`; set `$ANVIL_BIN` / `$FORGE_BIN` to
46
+ * pin specific ones.
47
+ */
48
+ export async function setupLocalNetwork(opts: LocalNetworkOptions = {}): Promise<LocalNetwork> {
49
+ // `--port 0` → anvil binds an ephemeral port that `startAnvil` reads back, so parallel suites
50
+ // never collide on a fixed port.
51
+ const { rpcUrl, stop: stopAnvil } = await startAnvil({ port: 0 });
52
+
53
+ try {
54
+ const { node, stop: stopNode } = await createLocalNetwork(
55
+ {
56
+ ...opts.config,
57
+ l1RpcUrls: [rpcUrl],
58
+ testAccounts: false,
59
+ prefundAddresses: (opts.fundedAddresses ?? []).map(a => a.toString()),
60
+ initialAccountFeeJuice: opts.initialAccountFeeJuice,
61
+ },
62
+ () => {},
63
+ );
64
+
65
+ // Stop the node before anvil (its teardown still talks to L1); the finally guarantees anvil is
66
+ // reaped even if node shutdown throws.
67
+ const stop = async () => {
68
+ try {
69
+ await stopNode();
70
+ } finally {
71
+ await stopAnvil();
72
+ }
73
+ };
74
+
75
+ return {
76
+ node,
77
+ l1RpcUrl: rpcUrl,
78
+ l1ChainId: foundry.id,
79
+ stop,
80
+ [Symbol.asyncDispose]: stop,
81
+ };
82
+ } catch (err) {
83
+ await stopAnvil();
84
+ throw err;
85
+ }
86
+ }
87
+
88
+ /**
89
+ * Min-fee padding multiplier for test wallets whose txs may mine well after their fee estimate.
90
+ * The automine sequencer builds one block per tx and advances L1 time in big jumps, and proposer
91
+ * pipelining evolves the fee-asset price across the build/publish gap (~20x observed in CI), so the
92
+ * network's congestion base fee can swing sharply between the wallet's fee estimate and the block
93
+ * the tx actually lands in. The default wallet padding isn't enough and trips
94
+ * `maxFeesPerGas.feePerL2Gas must be >= gasFees.feePerL2Gas`. Apply via
95
+ * `wallet.setMinFeePadding(TEST_FEE_PADDING)` on every test wallet that sends txs.
96
+ */
97
+ export const TEST_FEE_PADDING = 30;