@aztec/aztec 5.0.0-rc.2 → 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.
package/dest/cli/util.js CHANGED
@@ -94,7 +94,7 @@ export const installSignalHandlers = (logFn, cb)=>{
94
94
  if (registeredAccounts.find((a)=>a.item.equals(completeAddress.address))) {
95
95
  accountLogStrings.push(` Address: ${completeAddress.address.toString()}\n`);
96
96
  accountLogStrings.push(` Partial Address: ${completeAddress.partialAddress.toString()}\n`);
97
- accountLogStrings.push(` Secret Key: ${account.getSecretKey().toString()}\n`);
97
+ accountLogStrings.push(` Secret Key: ${accountManager.getSecretKey().toString()}\n`);
98
98
  accountLogStrings.push(` Master nullifier public key hash: ${completeAddress.publicKeys.npkMHash.toString()}\n`);
99
99
  accountLogStrings.push(` Master incoming viewing public key: ${completeAddress.publicKeys.ivpkM.toString()}\n\n`);
100
100
  accountLogStrings.push(` Master outgoing viewing public key hash: ${completeAddress.publicKeys.ovpkMHash.toString()}\n\n`);
@@ -15,8 +15,8 @@ const TRANSFER_AMOUNT = 33n;
15
15
  const wallet = await EmbeddedWallet.create(node);
16
16
  // During local network setup we create a few initializerless accounts. Below we add them to our wallet.
17
17
  const [aliceInitialAccountData, bobInitialAccountData] = await getInitialTestAccountsData();
18
- await wallet.createSchnorrInitializerlessAccount(aliceInitialAccountData.secret, aliceInitialAccountData.salt);
19
- await wallet.createSchnorrInitializerlessAccount(bobInitialAccountData.secret, bobInitialAccountData.salt);
18
+ await wallet.createSchnorrInitializerlessAccount(aliceInitialAccountData.secret, aliceInitialAccountData.salt, aliceInitialAccountData.signingKey);
19
+ await wallet.createSchnorrInitializerlessAccount(bobInitialAccountData.secret, bobInitialAccountData.salt, bobInitialAccountData.signingKey);
20
20
  const alice = aliceInitialAccountData.address;
21
21
  const bob = bobInitialAccountData.address;
22
22
  logger.info(`Fetched Alice and Bob accounts: ${alice.toString()}, ${bob.toString()}`);
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtbmV0d29yay5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xvY2FsLW5ldHdvcmsvbG9jYWwtbmV0d29yay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBR0EsT0FBTyxFQUFFLEtBQUssZUFBZSxFQUFvQixNQUFNLDBCQUEwQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU1QyxPQUFPLEVBQUUsS0FBSyxtQkFBbUIsRUFBb0IsTUFBTSwyQkFBMkIsQ0FBQztBQU12RixPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBR2pGLE9BQU8sS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQW9CLE1BQU0seUJBQXlCLENBQUM7QUFJekUsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUV4RSxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsS0FBSyxlQUFlLEVBR3JCLE1BQU0seUJBQXlCLENBQUM7QUFLakMsT0FBTyxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBbUJoQzs7OztHQUlHO0FBQ0gsd0JBQXNCLG1CQUFtQixDQUN2QyxlQUFlLEVBQUUsZUFBZSxFQUNoQyxVQUFVLEVBQUUsR0FBRyxFQUNmLElBQUksR0FBRTtJQUNKLGtCQUFrQixDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ3hCLDRCQUE0QixDQUFDLEVBQUUsTUFBTSxDQUFDO0NBQ2xDLEdBQ0wsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBbUI5QjtBQUVELDhCQUE4QjtBQUM5QixNQUFNLE1BQU0sa0JBQWtCLEdBQUcsZUFBZSxHQUFHO0lBQ2pELDBEQUEwRDtJQUMxRCxVQUFVLEVBQUUsTUFBTSxDQUFDO0lBQ25CLDZEQUE2RDtJQUM3RCxZQUFZLEVBQUUsT0FBTyxDQUFDO0NBQ3ZCLENBQUM7QUFFRjs7OztHQUlHO0FBQ0gsd0JBQXNCLGtCQUFrQixDQUFDLE1BQU0seUNBQWtDLEVBQUUsT0FBTyxFQUFFLEtBQUs7OztHQXdIaEc7QUFFRDs7O0dBR0c7QUFDSCx3QkFBc0IsZUFBZSxDQUNuQyxNQUFNLEdBQUUsT0FBTyxDQUFDLGVBQWUsQ0FBTSxFQUNyQyxJQUFJLEdBQUU7SUFDSixTQUFTLENBQUMsRUFBRSxlQUFlLENBQUM7SUFDNUIsVUFBVSxDQUFDLEVBQUUsbUJBQW1CLENBQUM7SUFDakMsWUFBWSxDQUFDLEVBQUUsWUFBWSxDQUFDO0lBQzVCLFlBQVksQ0FBQyxFQUFFLGdCQUFnQixDQUFDO0NBQzVCLEVBQ04sT0FBTyxHQUFFO0lBQUUsT0FBTyxDQUFDLEVBQUUsV0FBVyxDQUFBO0NBQU8seURBY3hDIn0=
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;;;GAwHhG;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"}
@@ -79,6 +79,10 @@ const setupWaitOpts = {
79
79
  ...envConfig,
80
80
  ...config,
81
81
  skipOrphanProposedBlockPruning: true,
82
+ // The local network builds node config from env without a DATA_DIRECTORY, so the validator's
83
+ // local signing protection runs against an ephemeral store. That is acceptable for this dev
84
+ // network; production validators must persist it and fail-fast when the data directory is unset.
85
+ allowEphemeralSigningProtection: config.allowEphemeralSigningProtection ?? true,
82
86
  txPublicSetupAllowListExtend: [
83
87
  ...tokenAllowList,
84
88
  ...config.txPublicSetupAllowListExtend ?? []
@@ -137,7 +141,7 @@ const setupWaitOpts = {
137
141
  ] : [],
138
142
  ...prefundAddresses
139
143
  ];
140
- const { genesisArchiveRoot, genesis, fundingNeeded } = await getGenesisValues(fundedAddresses);
144
+ const { genesisArchiveRoot, genesis, fundingNeeded } = await getGenesisValues(fundedAddresses, config.initialAccountFeeJuice);
141
145
  const dateProvider = new TestDateProvider();
142
146
  if (!aztecNodeConfig.p2pEnabled) {
143
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-rc.2",
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-rc.2",
32
- "@aztec/archiver": "5.0.0-rc.2",
33
- "@aztec/aztec-node": "5.0.0-rc.2",
34
- "@aztec/aztec.js": "5.0.0-rc.2",
35
- "@aztec/bb-prover": "5.0.0-rc.2",
36
- "@aztec/bb.js": "5.0.0-rc.2",
37
- "@aztec/blob-client": "5.0.0-rc.2",
38
- "@aztec/bot": "5.0.0-rc.2",
39
- "@aztec/builder": "5.0.0-rc.2",
40
- "@aztec/cli": "5.0.0-rc.2",
41
- "@aztec/constants": "5.0.0-rc.2",
42
- "@aztec/entrypoints": "5.0.0-rc.2",
43
- "@aztec/ethereum": "5.0.0-rc.2",
44
- "@aztec/foundation": "5.0.0-rc.2",
45
- "@aztec/kv-store": "5.0.0-rc.2",
46
- "@aztec/l1-artifacts": "5.0.0-rc.2",
47
- "@aztec/node-lib": "5.0.0-rc.2",
48
- "@aztec/noir-contracts.js": "5.0.0-rc.2",
49
- "@aztec/noir-protocol-circuits-types": "5.0.0-rc.2",
50
- "@aztec/p2p": "5.0.0-rc.2",
51
- "@aztec/p2p-bootstrap": "5.0.0-rc.2",
52
- "@aztec/protocol-contracts": "5.0.0-rc.2",
53
- "@aztec/prover-client": "5.0.0-rc.2",
54
- "@aztec/prover-node": "5.0.0-rc.2",
55
- "@aztec/pxe": "5.0.0-rc.2",
56
- "@aztec/sequencer-client": "5.0.0-rc.2",
57
- "@aztec/standard-contracts": "5.0.0-rc.2",
58
- "@aztec/stdlib": "5.0.0-rc.2",
59
- "@aztec/telemetry-client": "5.0.0-rc.2",
60
- "@aztec/txe": "5.0.0-rc.2",
61
- "@aztec/validator-ha-signer": "5.0.0-rc.2",
62
- "@aztec/wallets": "5.0.0-rc.2",
63
- "@aztec/world-state": "5.0.0-rc.2",
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",
package/src/cli/util.ts CHANGED
@@ -94,7 +94,7 @@ export async function createAccountLogs(accountManagers: AccountManager[], walle
94
94
  if (registeredAccounts.find(a => a.item.equals(completeAddress.address))) {
95
95
  accountLogStrings.push(` Address: ${completeAddress.address.toString()}\n`);
96
96
  accountLogStrings.push(` Partial Address: ${completeAddress.partialAddress.toString()}\n`);
97
- accountLogStrings.push(` Secret Key: ${account.getSecretKey().toString()}\n`);
97
+ accountLogStrings.push(` Secret Key: ${accountManager.getSecretKey().toString()}\n`);
98
98
  accountLogStrings.push(` Master nullifier public key hash: ${completeAddress.publicKeys.npkMHash.toString()}\n`);
99
99
  accountLogStrings.push(` Master incoming viewing public key: ${completeAddress.publicKeys.ivpkM.toString()}\n\n`);
100
100
  accountLogStrings.push(
@@ -23,8 +23,16 @@ async function main() {
23
23
 
24
24
  // During local network setup we create a few initializerless accounts. Below we add them to our wallet.
25
25
  const [aliceInitialAccountData, bobInitialAccountData] = await getInitialTestAccountsData();
26
- await wallet.createSchnorrInitializerlessAccount(aliceInitialAccountData.secret, aliceInitialAccountData.salt);
27
- await wallet.createSchnorrInitializerlessAccount(bobInitialAccountData.secret, bobInitialAccountData.salt);
26
+ await wallet.createSchnorrInitializerlessAccount(
27
+ aliceInitialAccountData.secret,
28
+ aliceInitialAccountData.salt,
29
+ aliceInitialAccountData.signingKey,
30
+ );
31
+ await wallet.createSchnorrInitializerlessAccount(
32
+ bobInitialAccountData.secret,
33
+ bobInitialAccountData.salt,
34
+ bobInitialAccountData.signingKey,
35
+ );
28
36
 
29
37
  const alice = aliceInitialAccountData.address;
30
38
  const bob = bobInitialAccountData.address;
@@ -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
  /**
@@ -114,6 +116,10 @@ export async function createLocalNetwork(config: Partial<LocalNetworkConfig> = {
114
116
  ...envConfig,
115
117
  ...config,
116
118
  skipOrphanProposedBlockPruning: true,
119
+ // The local network builds node config from env without a DATA_DIRECTORY, so the validator's
120
+ // local signing protection runs against an ephemeral store. That is acceptable for this dev
121
+ // network; production validators must persist it and fail-fast when the data directory is unset.
122
+ allowEphemeralSigningProtection: config.allowEphemeralSigningProtection ?? true,
117
123
  txPublicSetupAllowListExtend: [...tokenAllowList, ...(config.txPublicSetupAllowListExtend ?? [])],
118
124
  // The local network runs against anvil with no committee, so it defaults to the deterministic
119
125
  // AutomineSequencer, which owns L1 time control (warps the dateProvider and L1 timestamps to slot
@@ -172,7 +178,10 @@ export async function createLocalNetwork(config: Partial<LocalNetworkConfig> = {
172
178
  ...(initialAccounts.length ? [bananaFPC, sponsoredFPC] : []),
173
179
  ...prefundAddresses,
174
180
  ];
175
- const { genesisArchiveRoot, genesis, fundingNeeded } = await getGenesisValues(fundedAddresses);
181
+ const { genesisArchiveRoot, genesis, fundingNeeded } = await getGenesisValues(
182
+ fundedAddresses,
183
+ config.initialAccountFeeJuice,
184
+ );
176
185
 
177
186
  const dateProvider = new TestDateProvider();
178
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;