@aztec/aztec 0.0.1-commit.2f68f620 → 0.0.1-commit.321f6a9

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 (67) hide show
  1. package/dest/bin/index.js +2 -0
  2. package/dest/cli/aztec_start_action.d.ts +1 -1
  3. package/dest/cli/aztec_start_action.d.ts.map +1 -1
  4. package/dest/cli/aztec_start_action.js +6 -27
  5. package/dest/cli/aztec_start_options.js +1 -1
  6. package/dest/cli/cmds/compile.d.ts +1 -1
  7. package/dest/cli/cmds/compile.d.ts.map +1 -1
  8. package/dest/cli/cmds/compile.js +25 -17
  9. package/dest/cli/cmds/prover.d.ts +4 -0
  10. package/dest/cli/cmds/prover.d.ts.map +1 -0
  11. package/dest/cli/cmds/prover.js +24 -0
  12. package/dest/cli/cmds/standby.d.ts +28 -2
  13. package/dest/cli/cmds/standby.d.ts.map +1 -1
  14. package/dest/cli/cmds/standby.js +45 -2
  15. package/dest/cli/cmds/start_bot.d.ts +1 -1
  16. package/dest/cli/cmds/start_bot.d.ts.map +1 -1
  17. package/dest/cli/cmds/start_bot.js +5 -1
  18. package/dest/cli/cmds/start_node.d.ts +1 -1
  19. package/dest/cli/cmds/start_node.d.ts.map +1 -1
  20. package/dest/cli/cmds/start_node.js +14 -23
  21. package/dest/cli/cmds/utils/artifacts.d.ts +6 -1
  22. package/dest/cli/cmds/utils/artifacts.d.ts.map +1 -1
  23. package/dest/cli/util.d.ts +10 -5
  24. package/dest/cli/util.d.ts.map +1 -1
  25. package/dest/cli/util.js +20 -49
  26. package/dest/examples/token.js +3 -3
  27. package/dest/local-network/local-network.d.ts +6 -5
  28. package/dest/local-network/local-network.d.ts.map +1 -1
  29. package/dest/local-network/local-network.js +33 -76
  30. package/dest/testing/cheat_codes.d.ts +16 -23
  31. package/dest/testing/cheat_codes.d.ts.map +1 -1
  32. package/dest/testing/cheat_codes.js +20 -82
  33. package/dest/testing/epoch_test_settler.d.ts +2 -2
  34. package/dest/testing/epoch_test_settler.d.ts.map +1 -1
  35. package/dest/testing/epoch_test_settler.js +5 -26
  36. package/dest/testing/index.d.ts +2 -2
  37. package/dest/testing/index.d.ts.map +1 -1
  38. package/dest/testing/index.js +1 -1
  39. package/dest/testing/local-network.d.ts +51 -0
  40. package/dest/testing/local-network.d.ts.map +1 -0
  41. package/dest/testing/local-network.js +60 -0
  42. package/dest/testing/token_allowed_setup.d.ts +9 -4
  43. package/dest/testing/token_allowed_setup.d.ts.map +1 -1
  44. package/dest/testing/token_allowed_setup.js +12 -8
  45. package/package.json +34 -34
  46. package/scripts/templates/counter/contract/src/main.nr +4 -4
  47. package/src/bin/index.ts +2 -0
  48. package/src/cli/aztec_start_action.ts +3 -14
  49. package/src/cli/aztec_start_options.ts +1 -1
  50. package/src/cli/cmds/compile.ts +29 -16
  51. package/src/cli/cmds/prover.ts +42 -0
  52. package/src/cli/cmds/standby.ts +55 -3
  53. package/src/cli/cmds/start_bot.ts +6 -1
  54. package/src/cli/cmds/start_node.ts +17 -23
  55. package/src/cli/cmds/utils/artifacts.ts +5 -0
  56. package/src/cli/util.ts +21 -62
  57. package/src/examples/token.ts +11 -3
  58. package/src/local-network/local-network.ts +40 -88
  59. package/src/testing/cheat_codes.ts +19 -103
  60. package/src/testing/epoch_test_settler.ts +8 -30
  61. package/src/testing/index.ts +1 -1
  62. package/src/testing/local-network.ts +97 -0
  63. package/src/testing/token_allowed_setup.ts +15 -8
  64. package/dest/testing/anvil_test_watcher.d.ts +0 -54
  65. package/dest/testing/anvil_test_watcher.d.ts.map +0 -1
  66. package/dest/testing/anvil_test_watcher.js +0 -235
  67. package/src/testing/anvil_test_watcher.ts +0 -273
@@ -1,7 +1,6 @@
1
1
  import { RollupCheatCodes } from '@aztec/ethereum/test';
2
- import { SlotNumber } from '@aztec/foundation/branded-types';
2
+ import { settleEpochOutbox } from '@aztec/prover-client/test';
3
3
  import { EpochMonitor } from '@aztec/prover-node';
4
- import { computeEpochOutHash } from '@aztec/stdlib/messaging';
5
4
  export class EpochTestSettler {
6
5
  l2BlockSource;
7
6
  log;
@@ -27,32 +26,12 @@ export class EpochTestSettler {
27
26
  await this.epochMonitor?.stop();
28
27
  }
29
28
  async handleEpochReadyToProve(epoch) {
30
- const blocks = await this.l2BlockSource.getBlocks({
29
+ const lastCheckpoint = await settleEpochOutbox({
30
+ rollupCheatCodes: this.rollupCheatCodes,
31
+ l2BlockSource: this.l2BlockSource,
31
32
  epoch,
32
- onlyCheckpointed: true
33
+ log: this.log
33
34
  });
34
- this.log.info(`Settling epoch ${epoch} with blocks ${blocks[0]?.header.getBlockNumber()} to ${blocks.at(-1)?.header.getBlockNumber()}`, {
35
- blocks: blocks.map((b)=>b.toBlockInfo())
36
- });
37
- const messagesInEpoch = [];
38
- let previousSlotNumber = SlotNumber.ZERO;
39
- let checkpointIndex = -1;
40
- for (const block of blocks){
41
- const slotNumber = block.header.globalVariables.slotNumber;
42
- if (slotNumber !== previousSlotNumber) {
43
- checkpointIndex++;
44
- messagesInEpoch[checkpointIndex] = [];
45
- previousSlotNumber = slotNumber;
46
- }
47
- messagesInEpoch[checkpointIndex].push(block.body.txEffects.map((txEffect)=>txEffect.l2ToL1Msgs));
48
- }
49
- const outHash = computeEpochOutHash(messagesInEpoch);
50
- if (!outHash.isZero()) {
51
- await this.rollupCheatCodes.insertOutbox(epoch, messagesInEpoch.length, outHash.toBigInt());
52
- } else {
53
- this.log.info(`No L2 to L1 messages in epoch ${epoch}`);
54
- }
55
- const lastCheckpoint = blocks.at(-1)?.checkpointNumber;
56
35
  if (lastCheckpoint !== undefined) {
57
36
  await this.rollupCheatCodes.markAsProven(lastCheckpoint);
58
37
  } else {
@@ -1,6 +1,6 @@
1
- export { AnvilTestWatcher, type AnvilTestWatcherOpts } from './anvil_test_watcher.js';
2
1
  export { EthCheatCodes, RollupCheatCodes } from '@aztec/ethereum/test';
3
2
  export { CheatCodes } from './cheat_codes.js';
4
3
  export { EpochTestSettler } from './epoch_test_settler.js';
4
+ export { setupLocalNetwork, TEST_FEE_PADDING, type LocalNetwork, type LocalNetworkOptions } from './local-network.js';
5
5
  export { getTokenAllowedSetupFunctions } from './token_allowed_setup.js';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0aW5nL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLG9CQUFvQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQyJ9
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,gBAAgB,EAAE,KAAK,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACtF,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,5 +1,5 @@
1
- export { AnvilTestWatcher } from './anvil_test_watcher.js';
2
1
  export { EthCheatCodes, RollupCheatCodes } from '@aztec/ethereum/test';
3
2
  export { CheatCodes } from './cheat_codes.js';
4
3
  export { EpochTestSettler } from './epoch_test_settler.js';
4
+ export { setupLocalNetwork, TEST_FEE_PADDING } from './local-network.js';
5
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;
@@ -1,7 +1,12 @@
1
+ import type { ContractArtifact } from '@aztec/stdlib/abi';
1
2
  import type { AllowedElement } from '@aztec/stdlib/interfaces/server';
2
3
  /**
3
- * Returns Token-specific allowlist entries needed for FPC-based fee payments.
4
- * These are test-only: FPC-based fee payment with custom tokens won't work on mainnet alpha.
4
+ * Returns the allowlist entries needed for FPC-based fee payments, keyed by the contract class of
5
+ * the `artifact` actually deployed as the fee token (defaults to canonical Token). The setup-phase
6
+ * validator matches these entries by class id, so a test deploying the codegen'd TestToken as its
7
+ * fee vehicle must pass `TestTokenContract.artifact` here -- otherwise the FPC fee calls are matched
8
+ * against the wrong class and rejected. Test-only: FPC fee payment with custom tokens won't work on
9
+ * mainnet alpha.
5
10
  */
6
- export declare function getTokenAllowedSetupFunctions(): Promise<AllowedElement[]>;
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5fYWxsb3dlZF9zZXR1cC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3RpbmcvdG9rZW5fYWxsb3dlZF9zZXR1cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEtBQUssRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUV0RTs7O0dBR0c7QUFDSCx3QkFBc0IsNkJBQTZCLElBQUksT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBUy9FIn0=
11
+ export declare function getTokenAllowedSetupFunctions(artifact?: ContractArtifact): Promise<AllowedElement[]>;
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5fYWxsb3dlZF9zZXR1cC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3RpbmcvdG9rZW5fYWxsb3dlZF9zZXR1cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRTFELE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXRFOzs7Ozs7O0dBT0c7QUFDSCx3QkFBc0IsNkJBQTZCLENBQ2pELFFBQVEsR0FBRSxnQkFBd0MsR0FDakQsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBUzNCIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"token_allowed_setup.d.ts","sourceRoot":"","sources":["../../src/testing/token_allowed_setup.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEtE;;;GAGG;AACH,wBAAsB,6BAA6B,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAS/E"}
1
+ {"version":3,"file":"token_allowed_setup.d.ts","sourceRoot":"","sources":["../../src/testing/token_allowed_setup.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEtE;;;;;;;GAOG;AACH,wBAAsB,6BAA6B,CACjD,QAAQ,GAAE,gBAAwC,GACjD,OAAO,CAAC,cAAc,EAAE,CAAC,CAS3B"}
@@ -2,19 +2,23 @@ import { TokenContractArtifact } from '@aztec/noir-contracts.js/Token';
2
2
  import { buildAllowedElement } from '@aztec/p2p/msg_validators';
3
3
  import { getContractClassFromArtifact } from '@aztec/stdlib/contract';
4
4
  /**
5
- * Returns Token-specific allowlist entries needed for FPC-based fee payments.
6
- * These are test-only: FPC-based fee payment with custom tokens won't work on mainnet alpha.
7
- */ export async function getTokenAllowedSetupFunctions() {
8
- const tokenClassId = (await getContractClassFromArtifact(TokenContractArtifact)).id;
5
+ * Returns the allowlist entries needed for FPC-based fee payments, keyed by the contract class of
6
+ * the `artifact` actually deployed as the fee token (defaults to canonical Token). The setup-phase
7
+ * validator matches these entries by class id, so a test deploying the codegen'd TestToken as its
8
+ * fee vehicle must pass `TestTokenContract.artifact` here -- otherwise the FPC fee calls are matched
9
+ * against the wrong class and rejected. Test-only: FPC fee payment with custom tokens won't work on
10
+ * mainnet alpha.
11
+ */ export async function getTokenAllowedSetupFunctions(artifact = TokenContractArtifact) {
12
+ const tokenClassId = (await getContractClassFromArtifact(artifact)).id;
9
13
  const target = {
10
14
  classId: tokenClassId
11
15
  };
12
16
  return Promise.all([
13
- // Token: needed for private transfers via FPC (transfer_to_public enqueues this)
14
- buildAllowedElement(TokenContractArtifact, target, '_increase_public_balance', {
17
+ // needed for private transfers via FPC (transfer_to_public enqueues this)
18
+ buildAllowedElement(artifact, target, '_increase_public_balance', {
15
19
  onlySelf: true
16
20
  }),
17
- // Token: needed for public transfers via FPC (fee_entrypoint_public enqueues this)
18
- buildAllowedElement(TokenContractArtifact, target, 'transfer_in_public')
21
+ // needed for public transfers via FPC (fee_entrypoint_public enqueues this)
22
+ buildAllowedElement(artifact, target, 'transfer_in_public')
19
23
  ]);
20
24
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/aztec",
3
- "version": "0.0.1-commit.2f68f620",
3
+ "version": "0.0.1-commit.321f6a9",
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.2f68f620",
32
- "@aztec/archiver": "0.0.1-commit.2f68f620",
33
- "@aztec/aztec-node": "0.0.1-commit.2f68f620",
34
- "@aztec/aztec.js": "0.0.1-commit.2f68f620",
35
- "@aztec/bb-prover": "0.0.1-commit.2f68f620",
36
- "@aztec/bb.js": "0.0.1-commit.2f68f620",
37
- "@aztec/blob-client": "0.0.1-commit.2f68f620",
38
- "@aztec/bot": "0.0.1-commit.2f68f620",
39
- "@aztec/builder": "0.0.1-commit.2f68f620",
40
- "@aztec/cli": "0.0.1-commit.2f68f620",
41
- "@aztec/constants": "0.0.1-commit.2f68f620",
42
- "@aztec/entrypoints": "0.0.1-commit.2f68f620",
43
- "@aztec/ethereum": "0.0.1-commit.2f68f620",
44
- "@aztec/foundation": "0.0.1-commit.2f68f620",
45
- "@aztec/kv-store": "0.0.1-commit.2f68f620",
46
- "@aztec/l1-artifacts": "0.0.1-commit.2f68f620",
47
- "@aztec/node-lib": "0.0.1-commit.2f68f620",
48
- "@aztec/noir-contracts.js": "0.0.1-commit.2f68f620",
49
- "@aztec/noir-protocol-circuits-types": "0.0.1-commit.2f68f620",
50
- "@aztec/p2p": "0.0.1-commit.2f68f620",
51
- "@aztec/p2p-bootstrap": "0.0.1-commit.2f68f620",
52
- "@aztec/protocol-contracts": "0.0.1-commit.2f68f620",
53
- "@aztec/prover-client": "0.0.1-commit.2f68f620",
54
- "@aztec/prover-node": "0.0.1-commit.2f68f620",
55
- "@aztec/pxe": "0.0.1-commit.2f68f620",
56
- "@aztec/sequencer-client": "0.0.1-commit.2f68f620",
57
- "@aztec/standard-contracts": "0.0.1-commit.2f68f620",
58
- "@aztec/stdlib": "0.0.1-commit.2f68f620",
59
- "@aztec/telemetry-client": "0.0.1-commit.2f68f620",
60
- "@aztec/txe": "0.0.1-commit.2f68f620",
61
- "@aztec/validator-ha-signer": "0.0.1-commit.2f68f620",
62
- "@aztec/wallets": "0.0.1-commit.2f68f620",
63
- "@aztec/world-state": "0.0.1-commit.2f68f620",
31
+ "@aztec/accounts": "0.0.1-commit.321f6a9",
32
+ "@aztec/archiver": "0.0.1-commit.321f6a9",
33
+ "@aztec/aztec-node": "0.0.1-commit.321f6a9",
34
+ "@aztec/aztec.js": "0.0.1-commit.321f6a9",
35
+ "@aztec/bb-prover": "0.0.1-commit.321f6a9",
36
+ "@aztec/bb.js": "0.0.1-commit.321f6a9",
37
+ "@aztec/blob-client": "0.0.1-commit.321f6a9",
38
+ "@aztec/bot": "0.0.1-commit.321f6a9",
39
+ "@aztec/builder": "0.0.1-commit.321f6a9",
40
+ "@aztec/cli": "0.0.1-commit.321f6a9",
41
+ "@aztec/constants": "0.0.1-commit.321f6a9",
42
+ "@aztec/entrypoints": "0.0.1-commit.321f6a9",
43
+ "@aztec/ethereum": "0.0.1-commit.321f6a9",
44
+ "@aztec/foundation": "0.0.1-commit.321f6a9",
45
+ "@aztec/kv-store": "0.0.1-commit.321f6a9",
46
+ "@aztec/l1-artifacts": "0.0.1-commit.321f6a9",
47
+ "@aztec/node-lib": "0.0.1-commit.321f6a9",
48
+ "@aztec/noir-contracts.js": "0.0.1-commit.321f6a9",
49
+ "@aztec/noir-protocol-circuits-types": "0.0.1-commit.321f6a9",
50
+ "@aztec/p2p": "0.0.1-commit.321f6a9",
51
+ "@aztec/p2p-bootstrap": "0.0.1-commit.321f6a9",
52
+ "@aztec/protocol-contracts": "0.0.1-commit.321f6a9",
53
+ "@aztec/prover-client": "0.0.1-commit.321f6a9",
54
+ "@aztec/prover-node": "0.0.1-commit.321f6a9",
55
+ "@aztec/pxe": "0.0.1-commit.321f6a9",
56
+ "@aztec/sequencer-client": "0.0.1-commit.321f6a9",
57
+ "@aztec/standard-contracts": "0.0.1-commit.321f6a9",
58
+ "@aztec/stdlib": "0.0.1-commit.321f6a9",
59
+ "@aztec/telemetry-client": "0.0.1-commit.321f6a9",
60
+ "@aztec/txe": "0.0.1-commit.321f6a9",
61
+ "@aztec/validator-ha-signer": "0.0.1-commit.321f6a9",
62
+ "@aztec/wallets": "0.0.1-commit.321f6a9",
63
+ "@aztec/world-state": "0.0.1-commit.321f6a9",
64
64
  "@iarna/toml": "^2.2.5",
65
65
  "@types/chalk": "^2.2.0",
66
66
  "abitype": "^0.8.11",
@@ -4,7 +4,7 @@ use aztec::macros::aztec;
4
4
  pub contract Counter {
5
5
  use aztec::{
6
6
  macros::{functions::{external, initializer}, storage::storage},
7
- messages::message_delivery::MessageDelivery,
7
+ messages::delivery::MessageDelivery,
8
8
  protocol::address::AztecAddress,
9
9
  state_vars::Owned,
10
10
  };
@@ -24,17 +24,17 @@ pub contract Counter {
24
24
  #[initializer]
25
25
  #[external("private")]
26
26
  fn constructor(initial_value: u128, owner: AztecAddress) {
27
- // Delivers the note to the recipient onchain with provable correctness.
27
+ // Delivers the note to the recipient onchain.
28
28
  // Without delivery, the recipient can't find or decrypt the note.
29
29
  self.storage.counters.at(owner).add(initial_value).deliver(
30
- MessageDelivery::onchain_constrained(),
30
+ MessageDelivery::onchain_unconstrained(),
31
31
  );
32
32
  }
33
33
 
34
34
  // Adds 1 to the owner's counter.
35
35
  #[external("private")]
36
36
  fn increment(owner: AztecAddress) {
37
- self.storage.counters.at(owner).add(1).deliver(MessageDelivery::onchain_constrained());
37
+ self.storage.counters.at(owner).add(1).deliver(MessageDelivery::onchain_unconstrained());
38
38
  }
39
39
 
40
40
  // Returns the current value of the owner's counter.
package/src/bin/index.ts CHANGED
@@ -18,6 +18,7 @@ import { Command } from 'commander';
18
18
  import { injectCompileCommand } from '../cli/cmds/compile.js';
19
19
  import { injectMigrateCommand } from '../cli/cmds/migrate_ha_db.js';
20
20
  import { injectProfileCommand } from '../cli/cmds/profile.js';
21
+ import { injectProverCommand } from '../cli/cmds/prover.js';
21
22
  import { injectAztecCommands } from '../cli/index.js';
22
23
 
23
24
  const NETWORK_FLAG = 'network';
@@ -61,6 +62,7 @@ async function main() {
61
62
  program = injectCompileCommand(program, userLog);
62
63
  program = injectProfileCommand(program, userLog);
63
64
  program = injectMigrateCommand(program, userLog);
65
+ program = injectProverCommand(program, userLog);
64
66
 
65
67
  await program.parseAsync(process.argv);
66
68
  }
@@ -1,3 +1,4 @@
1
+ import { registerAztecNodeRpcHandlers } from '@aztec/aztec-node';
1
2
  import { getActiveNetworkName } from '@aztec/foundation/config';
2
3
  import {
3
4
  type NamespacedApiHandlers,
@@ -7,7 +8,6 @@ import {
7
8
  } from '@aztec/foundation/json-rpc/server';
8
9
  import type { LogFn, Logger } from '@aztec/foundation/log';
9
10
  import type { ChainConfig } from '@aztec/stdlib/config';
10
- import { AztecNodeAdminApiSchema, AztecNodeApiSchema, AztecNodeDebugApiSchema } from '@aztec/stdlib/interfaces/client';
11
11
  import { getPackageVersion } from '@aztec/stdlib/update-checker';
12
12
  import { getVersioningMiddleware } from '@aztec/stdlib/versioning';
13
13
  import { getOtelJsonRpcDiagnosticsMiddleware, getOtelJsonRpcPropagationMiddleware } from '@aztec/telemetry-client';
@@ -36,21 +36,13 @@ export async function aztecStart(options: any, userLog: LogFn, debugLogger: Logg
36
36
  l1Mnemonic: localNetwork.l1Mnemonic,
37
37
  l1RpcUrls: options.l1RpcUrls,
38
38
  testAccounts: localNetwork.testAccounts,
39
- realProofs: false,
40
- // Setting the epoch duration to 2 by default for local network. This allows the epoch to be "proven" faster, so
41
- // the users can consume out hash without having to wait for a long time.
42
- // Note: We are not proving anything in the local network (realProofs == false). But in `createLocalNetwork`,
43
- // the EpochTestSettler will set the out hash to the outbox when an epoch is complete.
44
- aztecEpochDuration: 2,
45
39
  },
46
40
  userLog,
47
41
  );
48
42
 
49
43
  // Start Node and PXE JSON-RPC server
50
44
  signalHandlers.push(stop);
51
- services.node = [node, AztecNodeApiSchema];
52
- adminServices.node = [node, AztecNodeAdminApiSchema];
53
- services.nodeDebug = [node, AztecNodeDebugApiSchema];
45
+ registerAztecNodeRpcHandlers(node, services, adminServices, { debug: true });
54
46
  } else {
55
47
  // Route --prover-node through startNode
56
48
  if (options.proverNode && !options.node) {
@@ -61,9 +53,6 @@ export async function aztecStart(options: any, userLog: LogFn, debugLogger: Logg
61
53
  const { startNode } = await import('./cmds/start_node.js');
62
54
  const networkName = getActiveNetworkName(options.network);
63
55
  ({ config } = await startNode(options, signalHandlers, services, adminServices, userLog, networkName));
64
- if (options.nodeDebug && services.node) {
65
- services.nodeDebug = [services.node[0], AztecNodeDebugApiSchema];
66
- }
67
56
  } else if (options.bot) {
68
57
  const { startBot } = await import('./cmds/start_bot.js');
69
58
  await startBot(options, signalHandlers, services, userLog);
@@ -94,7 +83,7 @@ export async function aztecStart(options: any, userLog: LogFn, debugLogger: Logg
94
83
 
95
84
  // Start the main JSON-RPC server
96
85
  if (Object.entries(services).length > 0) {
97
- if (services.node) {
86
+ if (services.aztec) {
98
87
  const { BarretenbergSync } = await import('@aztec/bb.js');
99
88
  // JSON-RPC schema parsing may decompress compressed Chonk proofs before the node handler runs.
100
89
  await BarretenbergSync.initSingleton();
@@ -109,7 +109,7 @@ export const aztecStartOptions: { [key: string]: AztecStartOption[] } = {
109
109
  env: 'NETWORK',
110
110
  },
111
111
 
112
- configToFlag('--enable-version-check', sharedNodeConfigMappings.enableVersionCheck),
112
+ configToFlag('--enable-auto-shutdown', sharedNodeConfigMappings.enableAutoShutdown),
113
113
 
114
114
  configToFlag('--sync-mode', sharedNodeConfigMappings.syncMode),
115
115
  configToFlag('--snapshots-urls', sharedNodeConfigMappings.snapshotsUrls),
@@ -12,8 +12,8 @@ import { needsRecompile } from './utils/needs_recompile.js';
12
12
  import { run } from './utils/spawn.js';
13
13
  import { warnIfAztecVersionMismatch } from './utils/warn_if_aztec_version_mismatch.js';
14
14
 
15
- /** Returns paths to contract artifacts in the target directory. */
16
- async function collectContractArtifacts(): Promise<string[]> {
15
+ /** Returns contract artifacts in the target directory along with whether each has already been postprocessed. */
16
+ async function collectContractArtifacts(): Promise<ContractArtifactInfo[]> {
17
17
  let files;
18
18
  try {
19
19
  files = await readArtifactFiles('target');
@@ -23,7 +23,9 @@ async function collectContractArtifacts(): Promise<string[]> {
23
23
  }
24
24
  throw err;
25
25
  }
26
- return files.filter(f => Array.isArray(f.content.functions)).map(f => f.filePath);
26
+ return files
27
+ .filter(f => Array.isArray(f.content.functions))
28
+ .map(f => ({ filePath: f.filePath, transpiled: f.content.transpiled === true }));
27
29
  }
28
30
 
29
31
  /** Stamps the Aztec stack version into the contract artifacts. */
@@ -141,30 +143,34 @@ async function checkNoTestsInContracts(nargo: string, log: LogFn): Promise<void>
141
143
  async function compileAztecContract(nargoArgs: string[], log: LogFn): Promise<void> {
142
144
  await warnIfAztecVersionMismatch(log);
143
145
 
144
- if (!(await needsRecompile())) {
145
- log('No source changes detected, skipping compilation.');
146
- return;
147
- }
148
-
149
146
  const nargo = process.env.NARGO ?? 'nargo';
150
147
  const bb = process.env.BB ?? findBbBinary() ?? 'bb';
151
148
 
152
- await run(nargo, ['compile', ...nargoArgs]);
149
+ const shouldRecompile = await needsRecompile();
150
+ if (shouldRecompile) {
151
+ await run(nargo, ['compile', ...nargoArgs]);
153
152
 
154
- // Ensure contract crates contain no tests (tests belong in the test crate).
155
- await checkNoTestsInContracts(nargo, log);
153
+ // Ensure contract crates contain no tests (tests belong in the test crate).
154
+ await checkNoTestsInContracts(nargo, log);
155
+ }
156
156
 
157
- const artifacts = await collectContractArtifacts();
157
+ // Postprocess any untranspiled artifacts: those just produced by nargo above, and any left behind by a bare
158
+ // `nargo compile` run outside `aztec compile`.
159
+ const unprocessed = (await collectContractArtifacts()).filter(a => !a.transpiled).map(a => a.filePath);
158
160
 
159
- if (artifacts.length > 0) {
161
+ if (unprocessed.length > 0) {
160
162
  log('Postprocessing contracts...');
161
- const bbArgs = artifacts.flatMap(a => ['-i', a]);
163
+ const bbArgs = unprocessed.flatMap(a => ['-i', a]);
162
164
  await run(bb, ['aztec_process', ...bbArgs]);
163
165
 
164
- await stampAztecVersion(artifacts);
166
+ await stampAztecVersion(unprocessed);
165
167
  }
166
168
 
167
- log('Compilation complete!');
169
+ if (shouldRecompile || unprocessed.length > 0) {
170
+ log('Compilation complete!');
171
+ } else {
172
+ log('No source changes detected, skipping compilation.');
173
+ }
168
174
  }
169
175
 
170
176
  export function injectCompileCommand(program: Command, log: LogFn): Command {
@@ -190,3 +196,10 @@ export function injectCompileCommand(program: Command, log: LogFn): Command {
190
196
 
191
197
  return program;
192
198
  }
199
+
200
+ interface ContractArtifactInfo {
201
+ /** Path to the artifact JSON in the target directory. */
202
+ filePath: string;
203
+ /** Whether the artifact has already been transpiled and had its verification keys generated. */
204
+ transpiled: boolean;
205
+ }
@@ -0,0 +1,42 @@
1
+ import { jsonStringify } from '@aztec/foundation/json-rpc';
2
+ import type { LogFn } from '@aztec/foundation/log';
3
+ import { createProverNodeAdminClient } from '@aztec/stdlib/interfaces/server';
4
+
5
+ import { type Command, InvalidArgumentError } from 'commander';
6
+
7
+ function parseEpoch(value: string): number {
8
+ const parsed = Number(value);
9
+ if (!Number.isInteger(parsed) || parsed < 0) {
10
+ throw new InvalidArgumentError('Epoch must be a non-negative integer.');
11
+ }
12
+ return parsed;
13
+ }
14
+
15
+ export function injectProverCommand(program: Command, log: LogFn): Command {
16
+ const proverCommand = program.command('prover').description('Operate a prover node via its admin JSON-RPC endpoint');
17
+
18
+ proverCommand
19
+ .command('start-proof')
20
+ .description('Schedules proving for the given epoch')
21
+ .requiredOption('--epoch <n>', 'Epoch number to prove', parseEpoch)
22
+ .requiredOption('--admin-url <url>', 'URL of the prover node admin JSON-RPC endpoint')
23
+ .option('--api-key <key>', 'Admin API key', process.env.AZTEC_ADMIN_API_KEY)
24
+ .action(async options => {
25
+ const client = createProverNodeAdminClient(options.adminUrl, {}, undefined, options.apiKey);
26
+ const jobId = await client.startProof(options.epoch);
27
+ log(`Started proving job ${jobId} for epoch ${options.epoch}`);
28
+ });
29
+
30
+ proverCommand
31
+ .command('get-jobs')
32
+ .description('Lists the prover node proving jobs')
33
+ .requiredOption('--admin-url <url>', 'URL of the prover node admin JSON-RPC endpoint')
34
+ .option('--api-key <key>', 'Admin API key', process.env.AZTEC_ADMIN_API_KEY)
35
+ .action(async options => {
36
+ const client = createProverNodeAdminClient(options.adminUrl, {}, undefined, options.apiKey);
37
+ const jobs = await client.getJobs();
38
+ log(jsonStringify(jobs, true));
39
+ });
40
+
41
+ return program;
42
+ }