@aztec/aztec 0.0.1-commit.0208eb9 → 0.0.1-commit.033589e

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/dest/bin/index.js +5 -1
  2. package/dest/cli/admin_api_key_store.d.ts +45 -0
  3. package/dest/cli/admin_api_key_store.d.ts.map +1 -0
  4. package/dest/cli/admin_api_key_store.js +98 -0
  5. package/dest/cli/aztec_start_action.d.ts +1 -1
  6. package/dest/cli/aztec_start_action.d.ts.map +1 -1
  7. package/dest/cli/aztec_start_action.js +46 -10
  8. package/dest/cli/aztec_start_options.d.ts +1 -1
  9. package/dest/cli/aztec_start_options.d.ts.map +1 -1
  10. package/dest/cli/aztec_start_options.js +23 -6
  11. package/dest/cli/cli.d.ts +1 -1
  12. package/dest/cli/cli.d.ts.map +1 -1
  13. package/dest/cli/cli.js +3 -4
  14. package/dest/cli/cmds/compile.d.ts +4 -0
  15. package/dest/cli/cmds/compile.d.ts.map +1 -0
  16. package/dest/cli/cmds/compile.js +160 -0
  17. package/dest/cli/cmds/profile.d.ts +4 -0
  18. package/dest/cli/cmds/profile.d.ts.map +1 -0
  19. package/dest/cli/cmds/profile.js +8 -0
  20. package/dest/cli/cmds/profile_flamegraph.d.ts +4 -0
  21. package/dest/cli/cmds/profile_flamegraph.d.ts.map +1 -0
  22. package/dest/cli/cmds/profile_flamegraph.js +51 -0
  23. package/dest/cli/cmds/profile_gates.d.ts +4 -0
  24. package/dest/cli/cmds/profile_gates.d.ts.map +1 -0
  25. package/dest/cli/cmds/profile_gates.js +57 -0
  26. package/dest/cli/cmds/profile_utils.d.ts +18 -0
  27. package/dest/cli/cmds/profile_utils.d.ts.map +1 -0
  28. package/dest/cli/cmds/profile_utils.js +50 -0
  29. package/dest/cli/cmds/start_bot.d.ts +3 -3
  30. package/dest/cli/cmds/start_bot.d.ts.map +1 -1
  31. package/dest/cli/cmds/start_bot.js +9 -5
  32. package/dest/cli/cmds/start_node.d.ts +1 -1
  33. package/dest/cli/cmds/start_node.d.ts.map +1 -1
  34. package/dest/cli/cmds/start_node.js +118 -10
  35. package/dest/cli/cmds/utils/artifacts.d.ts +21 -0
  36. package/dest/cli/cmds/utils/artifacts.d.ts.map +1 -0
  37. package/dest/cli/cmds/utils/artifacts.js +24 -0
  38. package/dest/cli/cmds/utils/spawn.d.ts +3 -0
  39. package/dest/cli/cmds/utils/spawn.d.ts.map +1 -0
  40. package/dest/cli/cmds/utils/spawn.js +16 -0
  41. package/dest/cli/util.d.ts +5 -14
  42. package/dest/cli/util.d.ts.map +1 -1
  43. package/dest/cli/util.js +13 -8
  44. package/dest/examples/token.js +6 -6
  45. package/dest/local-network/banana_fpc.js +1 -1
  46. package/dest/local-network/local-network.d.ts +3 -1
  47. package/dest/local-network/local-network.d.ts.map +1 -1
  48. package/dest/local-network/local-network.js +41 -17
  49. package/dest/testing/anvil_test_watcher.d.ts +9 -1
  50. package/dest/testing/anvil_test_watcher.d.ts.map +1 -1
  51. package/dest/testing/anvil_test_watcher.js +52 -15
  52. package/package.json +34 -34
  53. package/scripts/add_crate.sh +102 -0
  54. package/scripts/aztec.sh +8 -5
  55. package/scripts/init.sh +23 -19
  56. package/scripts/new.sh +48 -24
  57. package/scripts/setup_workspace.sh +68 -0
  58. package/src/bin/index.ts +5 -1
  59. package/src/cli/admin_api_key_store.ts +128 -0
  60. package/src/cli/aztec_start_action.ts +50 -6
  61. package/src/cli/aztec_start_options.ts +25 -5
  62. package/src/cli/cli.ts +3 -4
  63. package/src/cli/cmds/compile.ts +184 -0
  64. package/src/cli/cmds/profile.ts +25 -0
  65. package/src/cli/cmds/profile_flamegraph.ts +63 -0
  66. package/src/cli/cmds/profile_gates.ts +67 -0
  67. package/src/cli/cmds/profile_utils.ts +58 -0
  68. package/src/cli/cmds/start_bot.ts +8 -5
  69. package/src/cli/cmds/start_node.ts +137 -9
  70. package/src/cli/cmds/utils/artifacts.ts +44 -0
  71. package/src/cli/cmds/utils/spawn.ts +16 -0
  72. package/src/cli/util.ts +16 -21
  73. package/src/examples/token.ts +8 -6
  74. package/src/local-network/banana_fpc.ts +1 -1
  75. package/src/local-network/local-network.ts +48 -17
  76. package/src/testing/anvil_test_watcher.ts +59 -15
  77. package/dest/cli/cmds/start_prover_node.d.ts +0 -7
  78. package/dest/cli/cmds/start_prover_node.d.ts.map +0 -1
  79. package/dest/cli/cmds/start_prover_node.js +0 -108
  80. package/scripts/compile.sh +0 -44
  81. package/scripts/extract_function.js +0 -47
  82. package/scripts/flamegraph.sh +0 -59
  83. package/scripts/setup_project.sh +0 -31
  84. package/src/cli/cmds/start_prover_node.ts +0 -124
@@ -2,7 +2,7 @@ import { getInitialTestAccountsData } from '@aztec/accounts/testing';
2
2
  import { createAztecNodeClient } from '@aztec/aztec.js/node';
3
3
  import { createLogger } from '@aztec/foundation/log';
4
4
  import { TokenContract } from '@aztec/noir-contracts.js/Token';
5
- import { TestWallet } from '@aztec/test-wallet/server';
5
+ import { EmbeddedWallet } from '@aztec/wallets/embedded';
6
6
  const logger = createLogger('example:token');
7
7
  const nodeUrl = 'http://localhost:8080';
8
8
  const node = createAztecNodeClient(nodeUrl);
@@ -12,7 +12,7 @@ const TRANSFER_AMOUNT = 33n;
12
12
  * Main function.
13
13
  */ async function main() {
14
14
  logger.info('Running token contract test on HTTP interface.');
15
- const wallet = await TestWallet.create(node);
15
+ const wallet = await EmbeddedWallet.create(node);
16
16
  // During local network setup we deploy a few accounts. Below we add them to our wallet.
17
17
  const [aliceInitialAccountData, bobInitialAccountData] = await getInitialTestAccountsData();
18
18
  await wallet.createSchnorrAccount(aliceInitialAccountData.secret, aliceInitialAccountData.salt);
@@ -21,7 +21,7 @@ const TRANSFER_AMOUNT = 33n;
21
21
  const bob = bobInitialAccountData.address;
22
22
  logger.info(`Fetched Alice and Bob accounts: ${alice.toString()}, ${bob.toString()}`);
23
23
  logger.info('Deploying Token...');
24
- const token = await TokenContract.deploy(wallet, alice, 'TokenName', 'TokenSymbol', 18).send({
24
+ const { contract: token } = await TokenContract.deploy(wallet, alice, 'TokenName', 'TokenSymbol', 18).send({
25
25
  from: alice
26
26
  });
27
27
  logger.info('Token deployed');
@@ -31,7 +31,7 @@ const TRANSFER_AMOUNT = 33n;
31
31
  from: alice
32
32
  });
33
33
  logger.info(`${ALICE_MINT_BALANCE} tokens were successfully minted by Alice and transferred to private`);
34
- const balanceAfterMint = await token.methods.balance_of_private(alice).simulate({
34
+ const { result: balanceAfterMint } = await token.methods.balance_of_private(alice).simulate({
35
35
  from: alice
36
36
  });
37
37
  logger.info(`Tokens successfully minted. New Alice's balance: ${balanceAfterMint}`);
@@ -41,11 +41,11 @@ const TRANSFER_AMOUNT = 33n;
41
41
  from: alice
42
42
  });
43
43
  // Check the new balances
44
- const aliceBalance = await token.methods.balance_of_private(alice).simulate({
44
+ const { result: aliceBalance } = await token.methods.balance_of_private(alice).simulate({
45
45
  from: alice
46
46
  });
47
47
  logger.info(`Alice's balance ${aliceBalance}`);
48
- const bobBalance = await token.methods.balance_of_private(bob).simulate({
48
+ const { result: bobBalance } = await token.methods.balance_of_private(bob).simulate({
49
49
  from: bob
50
50
  });
51
51
  logger.info(`Bob's balance ${bobBalance}`);
@@ -46,7 +46,7 @@ export async function getBananaFPCAddress(initialAccounts) {
46
46
  export async function setupBananaFPC(initialAccounts, wallet, log) {
47
47
  const bananaCoinAddress = await getBananaCoinAddress(initialAccounts);
48
48
  const admin = getBananaAdmin(initialAccounts);
49
- const [bananaCoin, fpc] = await Promise.all([
49
+ const [{ contract: bananaCoin }, { contract: fpc }] = await Promise.all([
50
50
  TokenContract.deploy(wallet, admin, bananaCoinArgs.name, bananaCoinArgs.symbol, bananaCoinArgs.decimal).send({
51
51
  from: admin,
52
52
  contractAddressSalt: BANANA_COIN_SALT,
@@ -6,6 +6,7 @@ import { type BlobClientInterface } from '@aztec/blob-client/client';
6
6
  import { EthAddress } from '@aztec/foundation/eth-address';
7
7
  import type { LogFn } from '@aztec/foundation/log';
8
8
  import { DateProvider } from '@aztec/foundation/timer';
9
+ import type { ProvingJobBroker } from '@aztec/stdlib/interfaces/server';
9
10
  import type { PublicDataTreeLeaf } from '@aztec/stdlib/trees';
10
11
  import { type TelemetryClient } from '@aztec/telemetry-client';
11
12
  import { type Hex } from 'viem';
@@ -65,7 +66,8 @@ export declare function createAztecNode(config?: Partial<AztecNodeConfig>, deps?
65
66
  telemetry?: TelemetryClient;
66
67
  blobClient?: BlobClientInterface;
67
68
  dateProvider?: DateProvider;
69
+ proverBroker?: ProvingJobBroker;
68
70
  }, options?: {
69
71
  prefilledPublicData?: PublicDataTreeLeaf[];
70
72
  }): Promise<AztecNodeService>;
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtbmV0d29yay5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xvY2FsLW5ldHdvcmsvbG9jYWwtbmV0d29yay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBRUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDckQsT0FBTyxFQUFFLEtBQUssZUFBZSxFQUFvQixNQUFNLDBCQUEwQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU1QyxPQUFPLEVBQUUsS0FBSyxtQkFBbUIsRUFBb0IsTUFBTSwyQkFBMkIsQ0FBQztBQVN2RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFlBQVksRUFBb0IsTUFBTSx5QkFBeUIsQ0FBQztBQUd6RSxPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlELE9BQU8sRUFDTCxLQUFLLGVBQWUsRUFHckIsTUFBTSx5QkFBeUIsQ0FBQztBQUlqQyxPQUFPLEVBQUUsS0FBSyxHQUFHLEVBQTJELE1BQU0sTUFBTSxDQUFDO0FBZXpGOzs7O0dBSUc7QUFDSCx3QkFBc0IsbUJBQW1CLENBQ3ZDLGVBQWUsRUFBRSxlQUFlLEVBQ2hDLFVBQVUsRUFBRSxHQUFHLEVBQ2YsSUFBSSxHQUFFO0lBQ0osa0JBQWtCLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDeEIsNEJBQTRCLENBQUMsRUFBRSxNQUFNLENBQUM7Q0FDbEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JQO0FBRUQsOEJBQThCO0FBQzlCLE1BQU0sTUFBTSxrQkFBa0IsR0FBRyxlQUFlLEdBQUc7SUFDakQsMERBQTBEO0lBQzFELFVBQVUsRUFBRSxNQUFNLENBQUM7SUFDbkIsNkRBQTZEO0lBQzdELFlBQVksRUFBRSxPQUFPLENBQUM7Q0FDdkIsQ0FBQztBQUVGOzs7O0dBSUc7QUFDSCx3QkFBc0Isa0JBQWtCLENBQUMsTUFBTSx5Q0FBa0MsRUFBRSxPQUFPLEVBQUUsS0FBSzs7O0dBaUloRztBQUVEOzs7R0FHRztBQUNILHdCQUFzQixlQUFlLENBQ25DLE1BQU0sR0FBRSxPQUFPLENBQUMsZUFBZSxDQUFNLEVBQ3JDLElBQUksR0FBRTtJQUFFLFNBQVMsQ0FBQyxFQUFFLGVBQWUsQ0FBQztJQUFDLFVBQVUsQ0FBQyxFQUFFLG1CQUFtQixDQUFDO0lBQUMsWUFBWSxDQUFDLEVBQUUsWUFBWSxDQUFBO0NBQU8sRUFDekcsT0FBTyxHQUFFO0lBQUUsbUJBQW1CLENBQUMsRUFBRSxrQkFBa0IsRUFBRSxDQUFBO0NBQU8sNkJBVzdEIn0=
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtbmV0d29yay5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xvY2FsLW5ldHdvcmsvbG9jYWwtbmV0d29yay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBRUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDckQsT0FBTyxFQUFFLEtBQUssZUFBZSxFQUFvQixNQUFNLDBCQUEwQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU1QyxPQUFPLEVBQUUsS0FBSyxtQkFBbUIsRUFBb0IsTUFBTSwyQkFBMkIsQ0FBQztBQVN2RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFlBQVksRUFBb0IsTUFBTSx5QkFBeUIsQ0FBQztBQUt6RSxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3hFLE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDOUQsT0FBTyxFQUNMLEtBQUssZUFBZSxFQUdyQixNQUFNLHlCQUF5QixDQUFDO0FBS2pDLE9BQU8sRUFBRSxLQUFLLEdBQUcsRUFBMkQsTUFBTSxNQUFNLENBQUM7QUFlekY7Ozs7R0FJRztBQUNILHdCQUFzQixtQkFBbUIsQ0FDdkMsZUFBZSxFQUFFLGVBQWUsRUFDaEMsVUFBVSxFQUFFLEdBQUcsRUFDZixJQUFJLEdBQUU7SUFDSixrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUN4Qiw0QkFBNEIsQ0FBQyxFQUFFLE1BQU0sQ0FBQztDQUNsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQlA7QUFFRCw4QkFBOEI7QUFDOUIsTUFBTSxNQUFNLGtCQUFrQixHQUFHLGVBQWUsR0FBRztJQUNqRCwwREFBMEQ7SUFDMUQsVUFBVSxFQUFFLE1BQU0sQ0FBQztJQUNuQiw2REFBNkQ7SUFDN0QsWUFBWSxFQUFFLE9BQU8sQ0FBQztDQUN2QixDQUFDO0FBRUY7Ozs7R0FJRztBQUNILHdCQUFzQixrQkFBa0IsQ0FBQyxNQUFNLHlDQUFrQyxFQUFFLE9BQU8sRUFBRSxLQUFLOzs7R0FtSmhHO0FBRUQ7OztHQUdHO0FBQ0gsd0JBQXNCLGVBQWUsQ0FDbkMsTUFBTSxHQUFFLE9BQU8sQ0FBQyxlQUFlLENBQU0sRUFDckMsSUFBSSxHQUFFO0lBQ0osU0FBUyxDQUFDLEVBQUUsZUFBZSxDQUFDO0lBQzVCLFVBQVUsQ0FBQyxFQUFFLG1CQUFtQixDQUFDO0lBQ2pDLFlBQVksQ0FBQyxFQUFFLFlBQVksQ0FBQztJQUM1QixZQUFZLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQztDQUM1QixFQUNOLE9BQU8sR0FBRTtJQUFFLG1CQUFtQixDQUFDLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQTtDQUFPLDZCQWU3RCJ9
@@ -1 +1 @@
1
- {"version":3,"file":"local-network.d.ts","sourceRoot":"","sources":["../../src/local-network/local-network.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,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;AASvF,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAoB,MAAM,yBAAyB,CAAC;AAGzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EACL,KAAK,eAAe,EAGrB,MAAM,yBAAyB,CAAC;AAIjC,OAAO,EAAE,KAAK,GAAG,EAA2D,MAAM,MAAM,CAAC;AAezF;;;;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;;;;;;;;;;;;;;;;;;;;;;;GAoBP;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;;;GAiIhG;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM,EACrC,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,eAAe,CAAC;IAAC,UAAU,CAAC,EAAE,mBAAmB,CAAC;IAAC,YAAY,CAAC,EAAE,YAAY,CAAA;CAAO,EACzG,OAAO,GAAE;IAAE,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,CAAA;CAAO,6BAW7D"}
1
+ {"version":3,"file":"local-network.d.ts","sourceRoot":"","sources":["../../src/local-network/local-network.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,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;AASvF,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAoB,MAAM,yBAAyB,CAAC;AAKzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EACL,KAAK,eAAe,EAGrB,MAAM,yBAAyB,CAAC;AAKjC,OAAO,EAAE,KAAK,GAAG,EAA2D,MAAM,MAAM,CAAC;AAezF;;;;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;;;;;;;;;;;;;;;;;;;;;;;GAoBP;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;;;GAmJhG;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,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,CAAA;CAAO,6BAe7D"}
@@ -17,8 +17,11 @@ import { EthAddress } from '@aztec/foundation/eth-address';
17
17
  import { TestDateProvider } from '@aztec/foundation/timer';
18
18
  import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
19
19
  import { protocolContractsHash } from '@aztec/protocol-contracts';
20
+ import { SequencerState } from '@aztec/sequencer-client';
21
+ import { AztecAddress } from '@aztec/stdlib/aztec-address';
20
22
  import { getConfigEnvVars as getTelemetryClientConfig, initTelemetryClient } from '@aztec/telemetry-client';
21
- import { TestWallet, deployFundedSchnorrAccounts } from '@aztec/test-wallet/server';
23
+ import { EmbeddedWallet } from '@aztec/wallets/embedded';
24
+ import { deployFundedSchnorrAccounts } from '@aztec/wallets/testing';
22
25
  import { getGenesisValues } from '@aztec/world-state/testing';
23
26
  import { createPublicClient, fallback, http as httpViemTransport } from 'viem';
24
27
  import { mnemonicToAccount, privateKeyToAddress } from 'viem/accounts';
@@ -70,9 +73,9 @@ const localAnvil = foundry;
70
73
  ...config
71
74
  };
72
75
  const hdAccount = mnemonicToAccount(config.l1Mnemonic || DefaultMnemonic);
73
- if (aztecNodeConfig.publisherPrivateKeys == undefined || !aztecNodeConfig.publisherPrivateKeys.length || aztecNodeConfig.publisherPrivateKeys[0].getValue() === NULL_KEY) {
76
+ if (aztecNodeConfig.sequencerPublisherPrivateKeys == undefined || !aztecNodeConfig.sequencerPublisherPrivateKeys.length || aztecNodeConfig.sequencerPublisherPrivateKeys[0].getValue() === NULL_KEY) {
74
77
  const privKey = hdAccount.getHdKey().privateKey;
75
- aztecNodeConfig.publisherPrivateKeys = [
78
+ aztecNodeConfig.sequencerPublisherPrivateKeys = [
76
79
  new SecretValue(`0x${Buffer.from(privKey).toString('hex')}`)
77
80
  ];
78
81
  }
@@ -96,11 +99,15 @@ const localAnvil = foundry;
96
99
  })();
97
100
  const bananaFPC = await getBananaFPCAddress(initialAccounts);
98
101
  const sponsoredFPC = await getSponsoredFPCAddress();
99
- const fundedAddresses = initialAccounts.length ? [
102
+ const prefundAddresses = (aztecNodeConfig.prefundAddresses ?? []).map((a)=>AztecAddress.fromString(a));
103
+ const fundedAddresses = [
100
104
  ...initialAccounts.map((a)=>a.address),
101
- bananaFPC,
102
- sponsoredFPC
103
- ] : [];
105
+ ...initialAccounts.length ? [
106
+ bananaFPC,
107
+ sponsoredFPC
108
+ ] : [],
109
+ ...prefundAddresses
110
+ ];
104
111
  const { genesisArchiveRoot, prefilledPublicData, fundingNeeded } = await getGenesisValues(fundedAddresses);
105
112
  const dateProvider = new TestDateProvider();
106
113
  let cheatcodes;
@@ -140,6 +147,20 @@ const localAnvil = foundry;
140
147
  }, {
141
148
  prefilledPublicData
142
149
  });
150
+ // Now that the node is up, let the watcher check for pending txs so it can skip unfilled slots faster when
151
+ // transactions are waiting in the mempool. Also let it check if the sequencer is actively building, to avoid
152
+ // warping time out from under an in-progress block.
153
+ watcher?.setGetPendingTxCount(()=>node.getPendingTxCount());
154
+ const sequencer = node.getSequencer()?.getSequencer();
155
+ if (sequencer) {
156
+ const idleStates = new Set([
157
+ SequencerState.STOPPED,
158
+ SequencerState.STOPPING,
159
+ SequencerState.IDLE,
160
+ SequencerState.SYNCHRONIZING
161
+ ]);
162
+ watcher?.setIsSequencerBuilding(()=>!idleStates.has(sequencer.getState()));
163
+ }
143
164
  let epochTestSettler;
144
165
  if (!aztecNodeConfig.p2pEnabled) {
145
166
  epochTestSettler = new EpochTestSettler(cheatcodes, rollupAddress, node.getBlockSource(), logger.createChild('epoch-settler'), {
@@ -148,17 +169,15 @@ const localAnvil = foundry;
148
169
  await epochTestSettler.start();
149
170
  }
150
171
  if (initialAccounts.length) {
151
- const PXEConfig = {
152
- proverEnabled: aztecNodeConfig.realProofs
153
- };
154
- const wallet = await TestWallet.create(node, PXEConfig);
172
+ const wallet = await EmbeddedWallet.create(node, {
173
+ pxeConfig: {
174
+ proverEnabled: aztecNodeConfig.realProofs
175
+ },
176
+ ephemeral: true
177
+ });
155
178
  userLog('Setting up funded test accounts...');
156
179
  const accountManagers = await deployFundedSchnorrAccounts(wallet, initialAccounts);
157
- const accountsWithSecrets = accountManagers.map((manager, i)=>({
158
- account: manager,
159
- secretKey: initialAccounts[i].secret
160
- }));
161
- const accLogs = await createAccountLogs(accountsWithSecrets, wallet);
180
+ const accLogs = await createAccountLogs(accountManagers, wallet);
162
181
  userLog(accLogs.join(''));
163
182
  await setupBananaFPC(initialAccounts, wallet, userLog);
164
183
  userLog(`SponsoredFPC: ${await getSponsoredFPCAddress()}`);
@@ -189,6 +208,11 @@ const localAnvil = foundry;
189
208
  ...config.l1Contracts
190
209
  }
191
210
  };
192
- const node = await AztecNodeService.createAndSync(aztecNodeConfig, deps, options);
211
+ const node = await AztecNodeService.createAndSync(aztecNodeConfig, {
212
+ ...deps,
213
+ proverNodeDeps: {
214
+ broker: deps.proverBroker
215
+ }
216
+ }, options);
193
217
  return node;
194
218
  }
@@ -21,14 +21,22 @@ export declare class AnvilTestWatcher {
21
21
  private markingAsProvenRunningPromise?;
22
22
  private logger;
23
23
  private isMarkingAsProven;
24
+ private getPendingTxCount?;
25
+ private isSequencerBuilding?;
26
+ private unfilledSlotFirstSeen?;
24
27
  constructor(cheatcodes: EthCheatCodes, rollupAddress: EthAddress, l1Client: ViemClient, dateProvider?: TestDateProvider | undefined);
25
28
  setIsMarkingAsProven(isMarkingAsProven: boolean): void;
26
29
  setisLocalNetwork(isLocalNetwork: boolean): void;
30
+ /** Sets a callback to check for pending txs, used to skip unfilled slots faster when txs are waiting. */
31
+ setGetPendingTxCount(fn: () => Promise<number>): void;
32
+ /** Sets a callback to check if the sequencer is actively building, to avoid warping while it works. */
33
+ setIsSequencerBuilding(fn: () => boolean): void;
27
34
  start(): Promise<void>;
28
35
  stop(): Promise<void>;
29
36
  trigger(): Promise<void>;
30
37
  markAsProven(): Promise<void>;
31
38
  syncDateProviderToL1IfBehind(): Promise<void>;
32
39
  warpTimeIfNeeded(): Promise<void>;
40
+ private warpToTimestamp;
33
41
  }
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW52aWxfdGVzdF93YXRjaGVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdGluZy9hbnZpbF90ZXN0X3dhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBb0IsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RCxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUdoRSxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBS2hFOzs7Ozs7R0FNRztBQUNILHFCQUFhLGdCQUFnQjtJQWdCekIsT0FBTyxDQUFDLFVBQVU7SUFHbEIsT0FBTyxDQUFDLFlBQVksQ0FBQztJQWxCdkIsT0FBTyxDQUFDLGNBQWMsQ0FBa0I7SUFFeEMsT0FBTyxDQUFDLE1BQU0sQ0FBc0Q7SUFDcEUsT0FBTyxDQUFDLGdCQUFnQixDQUFtQjtJQUMzQyxPQUFPLENBQUMsY0FBYyxDQUFVO0lBRWhDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFpQjtJQUM5QyxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FBaUI7SUFDakQsT0FBTyxDQUFDLDZCQUE2QixDQUFDLENBQWlCO0lBRXZELE9BQU8sQ0FBQyxNQUFNLENBQWlEO0lBRS9ELE9BQU8sQ0FBQyxpQkFBaUIsQ0FBUTtJQUVqQyxZQUNVLFVBQVUsRUFBRSxhQUFhLEVBQ2pDLGFBQWEsRUFBRSxVQUFVLEVBQ3pCLFFBQVEsRUFBRSxVQUFVLEVBQ1osWUFBWSxDQUFDLDhCQUFrQixFQWF4QztJQUVELG9CQUFvQixDQUFDLGlCQUFpQixFQUFFLE9BQU8sUUFHOUM7SUFFRCxpQkFBaUIsQ0FBQyxjQUFjLEVBQUUsT0FBTyxRQUV4QztJQUVLLEtBQUssa0JBeUJWO0lBRUssSUFBSSxrQkFJVDtJQUVLLE9BQU8sa0JBSVo7SUFFSyxZQUFZLGtCQUtqQjtJQUVLLDRCQUE0QixrQkFlakM7SUFFSyxnQkFBZ0Isa0JBd0NyQjtDQUNGIn0=
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW52aWxfdGVzdF93YXRjaGVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdGluZy9hbnZpbF90ZXN0X3dhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBb0IsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RCxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUdoRSxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBS2hFOzs7Ozs7R0FNRztBQUNILHFCQUFhLGdCQUFnQjtJQXlCekIsT0FBTyxDQUFDLFVBQVU7SUFHbEIsT0FBTyxDQUFDLFlBQVksQ0FBQztJQTNCdkIsT0FBTyxDQUFDLGNBQWMsQ0FBa0I7SUFFeEMsT0FBTyxDQUFDLE1BQU0sQ0FBc0Q7SUFDcEUsT0FBTyxDQUFDLGdCQUFnQixDQUFtQjtJQUMzQyxPQUFPLENBQUMsY0FBYyxDQUFVO0lBRWhDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFpQjtJQUM5QyxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FBaUI7SUFDakQsT0FBTyxDQUFDLDZCQUE2QixDQUFDLENBQWlCO0lBRXZELE9BQU8sQ0FBQyxNQUFNLENBQWlEO0lBRS9ELE9BQU8sQ0FBQyxpQkFBaUIsQ0FBUTtJQUdqQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBd0I7SUFHbEQsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQWdCO0lBRzVDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFxQztJQUVuRSxZQUNVLFVBQVUsRUFBRSxhQUFhLEVBQ2pDLGFBQWEsRUFBRSxVQUFVLEVBQ3pCLFFBQVEsRUFBRSxVQUFVLEVBQ1osWUFBWSxDQUFDLDhCQUFrQixFQWF4QztJQUVELG9CQUFvQixDQUFDLGlCQUFpQixFQUFFLE9BQU8sUUFHOUM7SUFFRCxpQkFBaUIsQ0FBQyxjQUFjLEVBQUUsT0FBTyxRQUV4QztJQUVELHlHQUF5RztJQUN6RyxvQkFBb0IsQ0FBQyxFQUFFLEVBQUUsTUFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLFFBRTdDO0lBRUQsdUdBQXVHO0lBQ3ZHLHNCQUFzQixDQUFDLEVBQUUsRUFBRSxNQUFNLE9BQU8sUUFFdkM7SUFFSyxLQUFLLGtCQXlCVjtJQUVLLElBQUksa0JBSVQ7SUFFSyxPQUFPLGtCQUlaO0lBRUssWUFBWSxrQkFLakI7SUFFSyw0QkFBNEIsa0JBZWpDO0lBRUssZ0JBQWdCLGtCQXlEckI7WUFFYSxlQUFlO0NBTzlCIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"anvil_test_watcher.d.ts","sourceRoot":"","sources":["../../src/testing/anvil_test_watcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAoB,MAAM,sBAAsB,CAAC;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAGhE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAKhE;;;;;;GAMG;AACH,qBAAa,gBAAgB;IAgBzB,OAAO,CAAC,UAAU;IAGlB,OAAO,CAAC,YAAY,CAAC;IAlBvB,OAAO,CAAC,cAAc,CAAkB;IAExC,OAAO,CAAC,MAAM,CAAsD;IACpE,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,cAAc,CAAU;IAEhC,OAAO,CAAC,oBAAoB,CAAC,CAAiB;IAC9C,OAAO,CAAC,uBAAuB,CAAC,CAAiB;IACjD,OAAO,CAAC,6BAA6B,CAAC,CAAiB;IAEvD,OAAO,CAAC,MAAM,CAAiD;IAE/D,OAAO,CAAC,iBAAiB,CAAQ;IAEjC,YACU,UAAU,EAAE,aAAa,EACjC,aAAa,EAAE,UAAU,EACzB,QAAQ,EAAE,UAAU,EACZ,YAAY,CAAC,8BAAkB,EAaxC;IAED,oBAAoB,CAAC,iBAAiB,EAAE,OAAO,QAG9C;IAED,iBAAiB,CAAC,cAAc,EAAE,OAAO,QAExC;IAEK,KAAK,kBAyBV;IAEK,IAAI,kBAIT;IAEK,OAAO,kBAIZ;IAEK,YAAY,kBAKjB;IAEK,4BAA4B,kBAejC;IAEK,gBAAgB,kBAwCrB;CACF"}
1
+ {"version":3,"file":"anvil_test_watcher.d.ts","sourceRoot":"","sources":["../../src/testing/anvil_test_watcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAoB,MAAM,sBAAsB,CAAC;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAGhE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAKhE;;;;;;GAMG;AACH,qBAAa,gBAAgB;IAyBzB,OAAO,CAAC,UAAU;IAGlB,OAAO,CAAC,YAAY,CAAC;IA3BvB,OAAO,CAAC,cAAc,CAAkB;IAExC,OAAO,CAAC,MAAM,CAAsD;IACpE,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,cAAc,CAAU;IAEhC,OAAO,CAAC,oBAAoB,CAAC,CAAiB;IAC9C,OAAO,CAAC,uBAAuB,CAAC,CAAiB;IACjD,OAAO,CAAC,6BAA6B,CAAC,CAAiB;IAEvD,OAAO,CAAC,MAAM,CAAiD;IAE/D,OAAO,CAAC,iBAAiB,CAAQ;IAGjC,OAAO,CAAC,iBAAiB,CAAC,CAAwB;IAGlD,OAAO,CAAC,mBAAmB,CAAC,CAAgB;IAG5C,OAAO,CAAC,qBAAqB,CAAC,CAAqC;IAEnE,YACU,UAAU,EAAE,aAAa,EACjC,aAAa,EAAE,UAAU,EACzB,QAAQ,EAAE,UAAU,EACZ,YAAY,CAAC,8BAAkB,EAaxC;IAED,oBAAoB,CAAC,iBAAiB,EAAE,OAAO,QAG9C;IAED,iBAAiB,CAAC,cAAc,EAAE,OAAO,QAExC;IAED,yGAAyG;IACzG,oBAAoB,CAAC,EAAE,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,QAE7C;IAED,uGAAuG;IACvG,sBAAsB,CAAC,EAAE,EAAE,MAAM,OAAO,QAEvC;IAEK,KAAK,kBAyBV;IAEK,IAAI,kBAIT;IAEK,OAAO,kBAIZ;IAEK,YAAY,kBAKjB;IAEK,4BAA4B,kBAejC;IAEK,gBAAgB,kBAyDrB;YAEa,eAAe;CAO9B"}
@@ -22,6 +22,12 @@ import { getAddress, getContract } from 'viem';
22
22
  markingAsProvenRunningPromise;
23
23
  logger;
24
24
  isMarkingAsProven;
25
+ // Optional callback to check if there are pending txs in the mempool.
26
+ getPendingTxCount;
27
+ // Optional callback to check if the sequencer is actively building a block.
28
+ isSequencerBuilding;
29
+ // Tracks when we first observed the current unfilled slot with pending txs (real wall time).
30
+ unfilledSlotFirstSeen;
25
31
  constructor(cheatcodes, rollupAddress, l1Client, dateProvider){
26
32
  this.cheatcodes = cheatcodes;
27
33
  this.dateProvider = dateProvider;
@@ -45,6 +51,12 @@ import { getAddress, getContract } from 'viem';
45
51
  setisLocalNetwork(isLocalNetwork) {
46
52
  this.isLocalNetwork = isLocalNetwork;
47
53
  }
54
+ /** Sets a callback to check for pending txs, used to skip unfilled slots faster when txs are waiting. */ setGetPendingTxCount(fn) {
55
+ this.getPendingTxCount = fn;
56
+ }
57
+ /** Sets a callback to check if the sequencer is actively building, to avoid warping while it works. */ setIsSequencerBuilding(fn) {
58
+ this.isSequencerBuilding = fn;
59
+ }
48
60
  async start() {
49
61
  if (this.filledRunningPromise) {
50
62
  throw new Error('Watcher already watching for filled slot');
@@ -111,14 +123,8 @@ import { getAddress, getContract } from 'viem';
111
123
  BigInt(nextSlot)
112
124
  ]));
113
125
  if (BigInt(currentSlot) === checkpointLog.slotNumber) {
114
- // We should jump to the next slot
115
- try {
116
- await this.cheatcodes.warp(nextSlotTimestamp, {
117
- resetBlockInterval: true
118
- });
119
- } catch (e) {
120
- this.logger.error(`Failed to warp to timestamp ${nextSlotTimestamp}: ${e}`);
121
- }
126
+ // The current slot has been filled, we should jump to the next slot.
127
+ await this.warpToTimestamp(nextSlotTimestamp);
122
128
  this.logger.info(`Slot ${currentSlot} was filled, jumped to next slot`);
123
129
  return;
124
130
  }
@@ -126,19 +132,50 @@ import { getAddress, getContract } from 'viem';
126
132
  if (!this.isLocalNetwork) {
127
133
  return;
128
134
  }
135
+ // If there are pending txs and the sequencer missed them, warp quickly (after a 2s real-time debounce) so the
136
+ // sequencer can retry in the next slot. Without this, we'd have to wait a full real-time slot duration (~36s) for
137
+ // the dateProvider to catch up to the next slot timestamp. We skip the warp if the sequencer is actively building
138
+ // to avoid invalidating its in-progress work.
139
+ if (this.getPendingTxCount) {
140
+ const pendingTxs = await this.getPendingTxCount();
141
+ if (pendingTxs > 0) {
142
+ if (this.isSequencerBuilding?.()) {
143
+ this.unfilledSlotFirstSeen = undefined;
144
+ return;
145
+ }
146
+ const realNow = Date.now();
147
+ if (!this.unfilledSlotFirstSeen || this.unfilledSlotFirstSeen.slot !== currentSlot) {
148
+ this.unfilledSlotFirstSeen = {
149
+ slot: currentSlot,
150
+ realTime: realNow
151
+ };
152
+ return;
153
+ }
154
+ if (realNow - this.unfilledSlotFirstSeen.realTime > 2000) {
155
+ await this.warpToTimestamp(nextSlotTimestamp);
156
+ this.unfilledSlotFirstSeen = undefined;
157
+ this.logger.info(`Slot ${currentSlot} was missed with pending txs, jumped to next slot`);
158
+ }
159
+ return;
160
+ }
161
+ }
162
+ // Fallback: warp when the dateProvider time has passed the next slot timestamp.
129
163
  const currentTimestamp = this.dateProvider?.now() ?? Date.now();
130
164
  if (currentTimestamp > nextSlotTimestamp * 1000) {
131
- try {
132
- await this.cheatcodes.warp(nextSlotTimestamp, {
133
- resetBlockInterval: true
134
- });
135
- } catch (e) {
136
- this.logger.error(`Failed to warp to timestamp ${nextSlotTimestamp}: ${e}`);
137
- }
165
+ await this.warpToTimestamp(nextSlotTimestamp);
138
166
  this.logger.info(`Slot ${currentSlot} was missed, jumped to next slot`);
139
167
  }
140
168
  } catch {
141
169
  this.logger.error('mineIfSlotFilled failed');
142
170
  }
143
171
  }
172
+ async warpToTimestamp(timestamp) {
173
+ try {
174
+ await this.cheatcodes.warp(timestamp, {
175
+ resetBlockInterval: true
176
+ });
177
+ } catch (e) {
178
+ this.logger.error(`Failed to warp to timestamp ${timestamp}: ${e}`);
179
+ }
180
+ }
144
181
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/aztec",
3
- "version": "0.0.1-commit.0208eb9",
3
+ "version": "0.0.1-commit.033589e",
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": "0.0.1-commit.0208eb9",
32
- "@aztec/archiver": "0.0.1-commit.0208eb9",
33
- "@aztec/aztec-faucet": "0.0.1-commit.0208eb9",
34
- "@aztec/aztec-node": "0.0.1-commit.0208eb9",
35
- "@aztec/aztec.js": "0.0.1-commit.0208eb9",
36
- "@aztec/bb-prover": "0.0.1-commit.0208eb9",
37
- "@aztec/bb.js": "0.0.1-commit.0208eb9",
38
- "@aztec/blob-client": "0.0.1-commit.0208eb9",
39
- "@aztec/bot": "0.0.1-commit.0208eb9",
40
- "@aztec/builder": "0.0.1-commit.0208eb9",
41
- "@aztec/cli": "0.0.1-commit.0208eb9",
42
- "@aztec/constants": "0.0.1-commit.0208eb9",
43
- "@aztec/entrypoints": "0.0.1-commit.0208eb9",
44
- "@aztec/ethereum": "0.0.1-commit.0208eb9",
45
- "@aztec/foundation": "0.0.1-commit.0208eb9",
46
- "@aztec/kv-store": "0.0.1-commit.0208eb9",
47
- "@aztec/l1-artifacts": "0.0.1-commit.0208eb9",
48
- "@aztec/node-lib": "0.0.1-commit.0208eb9",
49
- "@aztec/noir-contracts.js": "0.0.1-commit.0208eb9",
50
- "@aztec/noir-protocol-circuits-types": "0.0.1-commit.0208eb9",
51
- "@aztec/p2p": "0.0.1-commit.0208eb9",
52
- "@aztec/p2p-bootstrap": "0.0.1-commit.0208eb9",
53
- "@aztec/protocol-contracts": "0.0.1-commit.0208eb9",
54
- "@aztec/prover-client": "0.0.1-commit.0208eb9",
55
- "@aztec/prover-node": "0.0.1-commit.0208eb9",
56
- "@aztec/pxe": "0.0.1-commit.0208eb9",
57
- "@aztec/sequencer-client": "0.0.1-commit.0208eb9",
58
- "@aztec/stdlib": "0.0.1-commit.0208eb9",
59
- "@aztec/telemetry-client": "0.0.1-commit.0208eb9",
60
- "@aztec/test-wallet": "0.0.1-commit.0208eb9",
61
- "@aztec/txe": "0.0.1-commit.0208eb9",
62
- "@aztec/validator-ha-signer": "0.0.1-commit.0208eb9",
63
- "@aztec/world-state": "0.0.1-commit.0208eb9",
31
+ "@aztec/accounts": "0.0.1-commit.033589e",
32
+ "@aztec/archiver": "0.0.1-commit.033589e",
33
+ "@aztec/aztec-faucet": "0.0.1-commit.033589e",
34
+ "@aztec/aztec-node": "0.0.1-commit.033589e",
35
+ "@aztec/aztec.js": "0.0.1-commit.033589e",
36
+ "@aztec/bb-prover": "0.0.1-commit.033589e",
37
+ "@aztec/bb.js": "0.0.1-commit.033589e",
38
+ "@aztec/blob-client": "0.0.1-commit.033589e",
39
+ "@aztec/bot": "0.0.1-commit.033589e",
40
+ "@aztec/builder": "0.0.1-commit.033589e",
41
+ "@aztec/cli": "0.0.1-commit.033589e",
42
+ "@aztec/constants": "0.0.1-commit.033589e",
43
+ "@aztec/entrypoints": "0.0.1-commit.033589e",
44
+ "@aztec/ethereum": "0.0.1-commit.033589e",
45
+ "@aztec/foundation": "0.0.1-commit.033589e",
46
+ "@aztec/kv-store": "0.0.1-commit.033589e",
47
+ "@aztec/l1-artifacts": "0.0.1-commit.033589e",
48
+ "@aztec/node-lib": "0.0.1-commit.033589e",
49
+ "@aztec/noir-contracts.js": "0.0.1-commit.033589e",
50
+ "@aztec/noir-protocol-circuits-types": "0.0.1-commit.033589e",
51
+ "@aztec/p2p": "0.0.1-commit.033589e",
52
+ "@aztec/p2p-bootstrap": "0.0.1-commit.033589e",
53
+ "@aztec/protocol-contracts": "0.0.1-commit.033589e",
54
+ "@aztec/prover-client": "0.0.1-commit.033589e",
55
+ "@aztec/prover-node": "0.0.1-commit.033589e",
56
+ "@aztec/pxe": "0.0.1-commit.033589e",
57
+ "@aztec/sequencer-client": "0.0.1-commit.033589e",
58
+ "@aztec/stdlib": "0.0.1-commit.033589e",
59
+ "@aztec/telemetry-client": "0.0.1-commit.033589e",
60
+ "@aztec/txe": "0.0.1-commit.033589e",
61
+ "@aztec/validator-ha-signer": "0.0.1-commit.033589e",
62
+ "@aztec/wallets": "0.0.1-commit.033589e",
63
+ "@aztec/world-state": "0.0.1-commit.033589e",
64
64
  "@types/chalk": "^2.2.0",
65
65
  "abitype": "^0.8.11",
66
66
  "chalk": "^5.3.0",
@@ -0,0 +1,102 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ # Creates a contract+test crate pair and adds them to an existing workspace.
5
+ # Usage: add_crate.sh <crate_name>
6
+ # Must be called from a workspace root that already has Nargo.toml with [workspace].
7
+
8
+ crate_name=$1
9
+
10
+ if [ -z "$crate_name" ]; then
11
+ echo "Error: crate name is required"
12
+ exit 1
13
+ fi
14
+
15
+ if [[ "$crate_name" == *"/"* ]] || [[ "$crate_name" == *"\\"* ]]; then
16
+ echo "Error: crate name must not contain path separators"
17
+ exit 1
18
+ fi
19
+
20
+ contract_dir="${crate_name}_contract"
21
+ test_dir="${crate_name}_test"
22
+
23
+ if [ -d "$contract_dir" ]; then
24
+ echo "Error: directory '$contract_dir' already exists"
25
+ exit 1
26
+ fi
27
+ if [ -d "$test_dir" ]; then
28
+ echo "Error: directory '$test_dir' already exists"
29
+ exit 1
30
+ fi
31
+
32
+ # Get the actual aztec version for the git tag.
33
+ AZTEC_VERSION=$(jq -r '.version' $(dirname $0)/../package.json)
34
+
35
+ # Create contract crate
36
+ mkdir -p "$contract_dir/src"
37
+ cat > "$contract_dir/Nargo.toml" << CEOF
38
+ [package]
39
+ name = "${crate_name}_contract"
40
+ type = "contract"
41
+
42
+ [dependencies]
43
+ aztec = { git="https://github.com/AztecProtocol/aztec-nr", tag="v${AZTEC_VERSION}", directory="aztec" }
44
+ CEOF
45
+
46
+ cat > "$contract_dir/src/main.nr" << 'EOF'
47
+ use aztec::macros::aztec;
48
+
49
+ #[aztec]
50
+ pub contract Main {
51
+ use aztec::macros::functions::{external, initializer};
52
+
53
+ #[initializer]
54
+ #[external("private")]
55
+ fn constructor() {}
56
+ }
57
+ EOF
58
+
59
+ # Create test crate
60
+ mkdir -p "$test_dir/src"
61
+ cat > "$test_dir/Nargo.toml" << TEOF
62
+ [package]
63
+ name = "${crate_name}_test"
64
+ type = "lib"
65
+
66
+ [dependencies]
67
+ aztec = { git="https://github.com/AztecProtocol/aztec-nr", tag="v${AZTEC_VERSION}", directory="aztec" }
68
+ ${crate_name}_contract = { path = "../${contract_dir}" }
69
+ TEOF
70
+
71
+ cat > "$test_dir/src/lib.nr" << 'NOIR'
72
+ use aztec::test::helpers::test_environment::TestEnvironment;
73
+ use __CRATE_NAME___contract::Main;
74
+
75
+ #[test]
76
+ unconstrained fn test_constructor() {
77
+ let mut env = TestEnvironment::new();
78
+ let deployer = env.create_light_account();
79
+
80
+ // Deploy the contract with the default constructor:
81
+ let contract_address = env.deploy("@__CRATE_NAME___contract/Main").with_private_initializer(
82
+ deployer,
83
+ Main::interface().constructor(),
84
+ );
85
+
86
+ // Deploy without an initializer:
87
+ let contract_address = env.deploy("@__CRATE_NAME___contract/Main").without_initializer();
88
+ }
89
+ NOIR
90
+
91
+ sed -i "s/__CRATE_NAME__/${crate_name}/g" "$test_dir/src/lib.nr"
92
+
93
+ # Add members to workspace Nargo.toml
94
+ if grep -q 'members\s*=\s*\[\s*\]' Nargo.toml; then
95
+ # Empty array: members = []
96
+ sed -i "s|members\s*=\s*\[\s*\]|members = [\"${contract_dir}\", \"${test_dir}\"]|" Nargo.toml
97
+ else
98
+ # Non-empty array: add before closing ]
99
+ sed -i "s|\(members\s*=\s*\[.*\)\]|\1, \"${contract_dir}\", \"${test_dir}\"]|" Nargo.toml
100
+ fi
101
+
102
+ echo "Created crates '${contract_dir}' and '${test_dir}'"
package/scripts/aztec.sh CHANGED
@@ -1,6 +1,5 @@
1
1
  #!/usr/bin/env bash
2
2
  set -euo pipefail
3
- shopt -s inherit_errexit
4
3
 
5
4
  # Re-execute using correct version if we have an .aztecrc file.
6
5
  if [ "${AZTEC_VERSIONED:-0}" -eq 0 ] && [ -f .aztecrc ] && command -v aztec-up &>/dev/null; then
@@ -21,13 +20,13 @@ function aztec {
21
20
 
22
21
  case $cmd in
23
22
  test)
24
- export LOG_LEVEL="${LOG_LEVEL:-error}"
23
+ export LOG_LEVEL="${LOG_LEVEL:-"error;trace:contract_log"}"
25
24
  aztec start --txe --port 8081 &
26
25
  server_pid=$!
27
26
  trap 'kill $server_pid &>/dev/null || true' EXIT
28
27
  while ! nc -z 127.0.0.1 8081 &>/dev/null; do sleep 0.2; done
29
28
  export NARGO_FOREIGN_CALL_TIMEOUT=300000
30
- nargo test --silence-warnings --oracle-resolver http://127.0.0.1:8081 "$@"
29
+ nargo test --silence-warnings --oracle-resolver http://127.0.0.1:8081 --test-threads 16 "$@"
31
30
  ;;
32
31
  start)
33
32
  if [ "${1:-}" == "--local-network" ]; then
@@ -47,16 +46,20 @@ case $cmd in
47
46
  export ETHEREUM_HOSTS=${ETHEREUM_HOSTS:-"http://127.0.0.1:${ANVIL_PORT}"}
48
47
 
49
48
  anvil --version
50
- anvil --silent &
49
+ anvil --silent --port "$ANVIL_PORT" &
51
50
  anvil_pid=$!
52
51
  trap 'kill $anvil_pid &>/dev/null' EXIT
53
52
  fi
54
53
 
55
54
  aztec start "$@"
56
55
  ;;
57
- compile|new|init|flamegraph)
56
+ new|init)
58
57
  $script_dir/${cmd}.sh "$@"
59
58
  ;;
59
+ flamegraph)
60
+ echo "Warning: 'aztec flamegraph' is deprecated. Use 'aztec profile flamegraph' instead." >&2
61
+ aztec profile flamegraph "$@"
62
+ ;;
60
63
  *)
61
64
  aztec $cmd "$@"
62
65
  ;;
package/scripts/init.sh CHANGED
@@ -1,35 +1,39 @@
1
1
  #!/usr/bin/env bash
2
2
  set -euo pipefail
3
3
 
4
- NARGO=${NARGO:-nargo}
5
4
  script_path=$(realpath $(dirname "$0"))
6
5
 
7
- for arg in "$@"; do
8
- if [ "$arg" == "--help" ] || [ "$arg" == "-h" ]; then
9
- cat << 'EOF'
6
+ # Parse arguments
7
+ while [[ $# -gt 0 ]]; do
8
+ case $1 in
9
+ --help|-h)
10
+ cat << 'EOF'
10
11
  Aztec Init - Create a new Aztec Noir project in the current directory
11
12
 
12
- Usage: aztec init [OPTIONS]
13
+ Usage: aztec init
13
14
 
14
15
  Options:
15
- --name <NAME> Name of the package [default: current directory name]
16
- --lib Use a library template
17
16
  -h, --help Print help
18
17
 
19
- This command creates a new Aztec Noir project in the current directory using nargo
20
- and automatically adds the Aztec.nr dependency to your Nargo.toml file.
18
+ This command creates a new Aztec Noir project in the current directory with
19
+ a workspace containing a contract crate and a test crate, and automatically
20
+ adds the Aztec.nr dependency to both.
21
21
 
22
+ If a workspace already exists in the current directory, use
23
+ 'aztec new <name>' instead to add another contract.
22
24
  EOF
23
- exit 0
24
- fi
25
- if [ "$arg" == "--lib" ]; then
26
- is_contract=0
27
- fi
25
+ exit 0
26
+ ;;
27
+ *)
28
+ echo "Error: unexpected argument '$1'"
29
+ echo "Usage: aztec init"
30
+ echo "Run 'aztec init --help' for more information"
31
+ exit 1
32
+ ;;
33
+ esac
28
34
  done
29
35
 
30
- echo "Initializing Noir project..."
31
- $NARGO init "$@"
36
+ package_name="$(basename $(pwd))"
32
37
 
33
- if [ "${is_contract:-1}" -eq 1 ]; then
34
- $script_path/setup_project.sh
35
- fi
38
+ echo "Initializing Aztec contract project..."
39
+ $script_path/setup_workspace.sh "$package_name"