@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.
- package/dest/bin/index.js +2 -0
- package/dest/cli/aztec_start_action.d.ts +1 -1
- package/dest/cli/aztec_start_action.d.ts.map +1 -1
- package/dest/cli/aztec_start_action.js +6 -27
- package/dest/cli/aztec_start_options.js +1 -1
- package/dest/cli/cmds/compile.d.ts +1 -1
- package/dest/cli/cmds/compile.d.ts.map +1 -1
- package/dest/cli/cmds/compile.js +25 -17
- package/dest/cli/cmds/prover.d.ts +4 -0
- package/dest/cli/cmds/prover.d.ts.map +1 -0
- package/dest/cli/cmds/prover.js +24 -0
- package/dest/cli/cmds/standby.d.ts +28 -2
- package/dest/cli/cmds/standby.d.ts.map +1 -1
- package/dest/cli/cmds/standby.js +45 -2
- package/dest/cli/cmds/start_bot.d.ts +1 -1
- package/dest/cli/cmds/start_bot.d.ts.map +1 -1
- package/dest/cli/cmds/start_bot.js +5 -1
- package/dest/cli/cmds/start_node.d.ts +1 -1
- package/dest/cli/cmds/start_node.d.ts.map +1 -1
- package/dest/cli/cmds/start_node.js +14 -23
- package/dest/cli/cmds/utils/artifacts.d.ts +6 -1
- package/dest/cli/cmds/utils/artifacts.d.ts.map +1 -1
- package/dest/cli/util.d.ts +10 -5
- package/dest/cli/util.d.ts.map +1 -1
- package/dest/cli/util.js +20 -49
- package/dest/examples/token.js +3 -3
- package/dest/local-network/local-network.d.ts +6 -5
- package/dest/local-network/local-network.d.ts.map +1 -1
- package/dest/local-network/local-network.js +33 -76
- package/dest/testing/cheat_codes.d.ts +16 -23
- package/dest/testing/cheat_codes.d.ts.map +1 -1
- package/dest/testing/cheat_codes.js +20 -82
- package/dest/testing/epoch_test_settler.d.ts +2 -2
- package/dest/testing/epoch_test_settler.d.ts.map +1 -1
- package/dest/testing/epoch_test_settler.js +5 -26
- package/dest/testing/index.d.ts +2 -2
- package/dest/testing/index.d.ts.map +1 -1
- package/dest/testing/index.js +1 -1
- package/dest/testing/local-network.d.ts +51 -0
- package/dest/testing/local-network.d.ts.map +1 -0
- package/dest/testing/local-network.js +60 -0
- package/dest/testing/token_allowed_setup.d.ts +9 -4
- package/dest/testing/token_allowed_setup.d.ts.map +1 -1
- package/dest/testing/token_allowed_setup.js +12 -8
- package/package.json +34 -34
- package/scripts/templates/counter/contract/src/main.nr +4 -4
- package/src/bin/index.ts +2 -0
- package/src/cli/aztec_start_action.ts +3 -14
- package/src/cli/aztec_start_options.ts +1 -1
- package/src/cli/cmds/compile.ts +29 -16
- package/src/cli/cmds/prover.ts +42 -0
- package/src/cli/cmds/standby.ts +55 -3
- package/src/cli/cmds/start_bot.ts +6 -1
- package/src/cli/cmds/start_node.ts +17 -23
- package/src/cli/cmds/utils/artifacts.ts +5 -0
- package/src/cli/util.ts +21 -62
- package/src/examples/token.ts +11 -3
- package/src/local-network/local-network.ts +40 -88
- package/src/testing/cheat_codes.ts +19 -103
- package/src/testing/epoch_test_settler.ts +8 -30
- package/src/testing/index.ts +1 -1
- package/src/testing/local-network.ts +97 -0
- package/src/testing/token_allowed_setup.ts +15 -8
- package/dest/testing/anvil_test_watcher.d.ts +0 -54
- package/dest/testing/anvil_test_watcher.d.ts.map +0 -1
- package/dest/testing/anvil_test_watcher.js +0 -235
- package/src/testing/anvil_test_watcher.ts +0 -273
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { RollupCheatCodes } from '@aztec/ethereum/test';
|
|
2
|
-
import {
|
|
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
|
|
29
|
+
const lastCheckpoint = await settleEpochOutbox({
|
|
30
|
+
rollupCheatCodes: this.rollupCheatCodes,
|
|
31
|
+
l2BlockSource: this.l2BlockSource,
|
|
31
32
|
epoch,
|
|
32
|
-
|
|
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 {
|
package/dest/testing/index.d.ts
CHANGED
|
@@ -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,
|
|
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,
|
|
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"}
|
package/dest/testing/index.js
CHANGED
|
@@ -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
|
|
4
|
-
*
|
|
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,
|
|
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":"
|
|
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
|
|
6
|
-
*
|
|
7
|
-
|
|
8
|
-
|
|
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
|
-
//
|
|
14
|
-
buildAllowedElement(
|
|
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
|
-
//
|
|
18
|
-
buildAllowedElement(
|
|
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.
|
|
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.
|
|
32
|
-
"@aztec/archiver": "0.0.1-commit.
|
|
33
|
-
"@aztec/aztec-node": "0.0.1-commit.
|
|
34
|
-
"@aztec/aztec.js": "0.0.1-commit.
|
|
35
|
-
"@aztec/bb-prover": "0.0.1-commit.
|
|
36
|
-
"@aztec/bb.js": "0.0.1-commit.
|
|
37
|
-
"@aztec/blob-client": "0.0.1-commit.
|
|
38
|
-
"@aztec/bot": "0.0.1-commit.
|
|
39
|
-
"@aztec/builder": "0.0.1-commit.
|
|
40
|
-
"@aztec/cli": "0.0.1-commit.
|
|
41
|
-
"@aztec/constants": "0.0.1-commit.
|
|
42
|
-
"@aztec/entrypoints": "0.0.1-commit.
|
|
43
|
-
"@aztec/ethereum": "0.0.1-commit.
|
|
44
|
-
"@aztec/foundation": "0.0.1-commit.
|
|
45
|
-
"@aztec/kv-store": "0.0.1-commit.
|
|
46
|
-
"@aztec/l1-artifacts": "0.0.1-commit.
|
|
47
|
-
"@aztec/node-lib": "0.0.1-commit.
|
|
48
|
-
"@aztec/noir-contracts.js": "0.0.1-commit.
|
|
49
|
-
"@aztec/noir-protocol-circuits-types": "0.0.1-commit.
|
|
50
|
-
"@aztec/p2p": "0.0.1-commit.
|
|
51
|
-
"@aztec/p2p-bootstrap": "0.0.1-commit.
|
|
52
|
-
"@aztec/protocol-contracts": "0.0.1-commit.
|
|
53
|
-
"@aztec/prover-client": "0.0.1-commit.
|
|
54
|
-
"@aztec/prover-node": "0.0.1-commit.
|
|
55
|
-
"@aztec/pxe": "0.0.1-commit.
|
|
56
|
-
"@aztec/sequencer-client": "0.0.1-commit.
|
|
57
|
-
"@aztec/standard-contracts": "0.0.1-commit.
|
|
58
|
-
"@aztec/stdlib": "0.0.1-commit.
|
|
59
|
-
"@aztec/telemetry-client": "0.0.1-commit.
|
|
60
|
-
"@aztec/txe": "0.0.1-commit.
|
|
61
|
-
"@aztec/validator-ha-signer": "0.0.1-commit.
|
|
62
|
-
"@aztec/wallets": "0.0.1-commit.
|
|
63
|
-
"@aztec/world-state": "0.0.1-commit.
|
|
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::
|
|
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
|
|
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::
|
|
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::
|
|
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
|
-
|
|
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.
|
|
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-
|
|
112
|
+
configToFlag('--enable-auto-shutdown', sharedNodeConfigMappings.enableAutoShutdown),
|
|
113
113
|
|
|
114
114
|
configToFlag('--sync-mode', sharedNodeConfigMappings.syncMode),
|
|
115
115
|
configToFlag('--snapshots-urls', sharedNodeConfigMappings.snapshotsUrls),
|
package/src/cli/cmds/compile.ts
CHANGED
|
@@ -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
|
|
16
|
-
async function collectContractArtifacts(): Promise<
|
|
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
|
|
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
|
|
149
|
+
const shouldRecompile = await needsRecompile();
|
|
150
|
+
if (shouldRecompile) {
|
|
151
|
+
await run(nargo, ['compile', ...nargoArgs]);
|
|
153
152
|
|
|
154
|
-
|
|
155
|
-
|
|
153
|
+
// Ensure contract crates contain no tests (tests belong in the test crate).
|
|
154
|
+
await checkNoTestsInContracts(nargo, log);
|
|
155
|
+
}
|
|
156
156
|
|
|
157
|
-
|
|
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 (
|
|
161
|
+
if (unprocessed.length > 0) {
|
|
160
162
|
log('Postprocessing contracts...');
|
|
161
|
-
const bbArgs =
|
|
163
|
+
const bbArgs = unprocessed.flatMap(a => ['-i', a]);
|
|
162
164
|
await run(bb, ['aztec_process', ...bbArgs]);
|
|
163
165
|
|
|
164
|
-
await stampAztecVersion(
|
|
166
|
+
await stampAztecVersion(unprocessed);
|
|
165
167
|
}
|
|
166
168
|
|
|
167
|
-
|
|
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
|
+
}
|