@aztec/aztec 0.0.1-commit.9ef841308 → 0.0.1-commit.a4600f49
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 +3 -1
- 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 +16 -24
- package/dest/cli/aztec_start_options.d.ts +2 -2
- package/dest/cli/aztec_start_options.d.ts.map +1 -1
- package/dest/cli/aztec_start_options.js +15 -15
- 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 +30 -24
- package/dest/cli/cmds/profile.d.ts +1 -1
- package/dest/cli/cmds/profile.d.ts.map +1 -1
- package/dest/cli/cmds/profile.js +1 -1
- package/dest/cli/cmds/profile_gates.d.ts +2 -2
- package/dest/cli/cmds/profile_gates.d.ts.map +1 -1
- package/dest/cli/cmds/profile_gates.js +21 -3
- 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 +30 -6
- package/dest/cli/cmds/standby.d.ts.map +1 -1
- package/dest/cli/cmds/standby.js +48 -5
- 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 +8 -4
- 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 +22 -47
- package/dest/cli/cmds/start_prover_agent.d.ts +1 -1
- package/dest/cli/cmds/start_prover_agent.d.ts.map +1 -1
- package/dest/cli/cmds/start_prover_agent.js +5 -17
- package/dest/cli/cmds/start_prover_broker.d.ts +1 -1
- package/dest/cli/cmds/start_prover_broker.d.ts.map +1 -1
- package/dest/cli/cmds/start_prover_broker.js +11 -8
- package/dest/cli/cmds/start_txe.d.ts +2 -2
- package/dest/cli/cmds/start_txe.d.ts.map +1 -1
- package/dest/cli/cmds/start_txe.js +6 -5
- package/dest/cli/cmds/utils/artifacts.d.ts +6 -1
- package/dest/cli/cmds/utils/artifacts.d.ts.map +1 -1
- package/dest/cli/cmds/utils/warn_if_aztec_version_mismatch.d.ts +2 -2
- package/dest/cli/cmds/utils/warn_if_aztec_version_mismatch.d.ts.map +1 -1
- package/dest/cli/cmds/utils/warn_if_aztec_version_mismatch.js +35 -15
- package/dest/cli/util.d.ts +10 -5
- package/dest/cli/util.d.ts.map +1 -1
- package/dest/cli/util.js +26 -53
- package/dest/examples/token.js +3 -3
- package/dest/local-network/auth_registry.d.ts +5 -0
- package/dest/local-network/auth_registry.d.ts.map +1 -0
- package/dest/local-network/auth_registry.js +17 -0
- package/dest/local-network/banana_fpc.d.ts +3 -2
- package/dest/local-network/banana_fpc.d.ts.map +1 -1
- package/dest/local-network/banana_fpc.js +11 -7
- package/dest/local-network/local-network.d.ts +8 -32
- package/dest/local-network/local-network.d.ts.map +1 -1
- package/dest/local-network/local-network.js +52 -73
- package/dest/testing/cheat_codes.d.ts +17 -23
- package/dest/testing/cheat_codes.d.ts.map +1 -1
- package/dest/testing/cheat_codes.js +17 -43
- 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 +6 -25
- package/dest/testing/index.d.ts +1 -2
- package/dest/testing/index.d.ts.map +1 -1
- package/dest/testing/index.js +0 -1
- 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 -33
- package/scripts/add_crate.sh +11 -60
- package/scripts/aztec.sh +6 -2
- package/scripts/init.sh +5 -5
- package/scripts/new.sh +2 -2
- package/scripts/setup_workspace.sh +3 -2
- package/scripts/templates/blank/contract/Nargo.toml +6 -0
- package/scripts/templates/blank/contract/src/main.nr +10 -0
- package/scripts/templates/blank/test/Nargo.toml +7 -0
- package/scripts/templates/blank/test/src/lib.nr +11 -0
- package/scripts/templates/counter/contract/Nargo.toml +7 -0
- package/scripts/templates/counter/contract/src/main.nr +48 -0
- package/scripts/templates/counter/test/Nargo.toml +7 -0
- package/scripts/templates/counter/test/src/lib.nr +32 -0
- package/src/bin/index.ts +3 -1
- package/src/cli/aztec_start_action.ts +14 -17
- package/src/cli/aztec_start_options.ts +22 -23
- package/src/cli/cmds/compile.ts +35 -24
- package/src/cli/cmds/profile.ts +2 -1
- package/src/cli/cmds/profile_gates.ts +20 -4
- package/src/cli/cmds/prover.ts +42 -0
- package/src/cli/cmds/standby.ts +59 -7
- package/src/cli/cmds/start_bot.ts +9 -6
- package/src/cli/cmds/start_node.ts +29 -39
- package/src/cli/cmds/start_prover_agent.ts +5 -8
- package/src/cli/cmds/start_prover_broker.ts +10 -11
- package/src/cli/cmds/start_txe.ts +7 -5
- package/src/cli/cmds/utils/artifacts.ts +5 -0
- package/src/cli/cmds/utils/warn_if_aztec_version_mismatch.ts +37 -15
- package/src/cli/util.ts +27 -68
- package/src/examples/token.ts +3 -3
- package/src/local-network/auth_registry.ts +19 -0
- package/src/local-network/banana_fpc.ts +12 -8
- package/src/local-network/local-network.ts +56 -83
- package/src/testing/cheat_codes.ts +18 -49
- package/src/testing/epoch_test_settler.ts +8 -31
- package/src/testing/index.ts +0 -1
- package/src/testing/token_allowed_setup.ts +15 -8
- package/dest/cli/cmds/start_archiver.d.ts +0 -9
- package/dest/cli/cmds/start_archiver.d.ts.map +0 -1
- package/dest/cli/cmds/start_archiver.js +0 -48
- package/dest/testing/anvil_test_watcher.d.ts +0 -42
- package/dest/testing/anvil_test_watcher.d.ts.map +0 -1
- package/dest/testing/anvil_test_watcher.js +0 -181
- package/src/cli/cmds/start_archiver.ts +0 -50
- package/src/testing/anvil_test_watcher.ts +0 -210
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
type AztecNodeConfig,
|
|
3
|
+
aztecNodeConfigMappings,
|
|
4
|
+
getConfigEnvVars,
|
|
5
|
+
registerAztecNodeRpcHandlers,
|
|
6
|
+
} from '@aztec/aztec-node';
|
|
2
7
|
import { Fr } from '@aztec/aztec.js/fields';
|
|
3
8
|
import { getL1Config } from '@aztec/cli/config';
|
|
4
|
-
import { getPublicClient } from '@aztec/ethereum/client';
|
|
5
9
|
import { getGenesisStateConfigEnvVars } from '@aztec/ethereum/config';
|
|
6
10
|
import { type NetworkNames, SecretValue } from '@aztec/foundation/config';
|
|
7
11
|
import type { NamespacedApiHandlers } from '@aztec/foundation/json-rpc/server';
|
|
@@ -9,10 +13,13 @@ import { Agent, makeUndiciFetch } from '@aztec/foundation/json-rpc/undici';
|
|
|
9
13
|
import type { LogFn } from '@aztec/foundation/log';
|
|
10
14
|
import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
|
|
11
15
|
import { protocolContractsHash } from '@aztec/protocol-contracts';
|
|
12
|
-
import {
|
|
16
|
+
import {
|
|
17
|
+
ProvingJobConsumerSchema,
|
|
18
|
+
createProvingJobBrokerClient,
|
|
19
|
+
proverBrokerBackoff,
|
|
20
|
+
} from '@aztec/prover-client/broker';
|
|
13
21
|
import { type CliPXEOptions, type PXEConfig, allPxeConfigMappings } from '@aztec/pxe/config';
|
|
14
|
-
import {
|
|
15
|
-
import { P2PApiSchema, ProverNodeApiSchema, type ProvingJobBroker } from '@aztec/stdlib/interfaces/server';
|
|
22
|
+
import { ProverNodeApiSchema, type ProvingJobBroker } from '@aztec/stdlib/interfaces/server';
|
|
16
23
|
import {
|
|
17
24
|
type TelemetryClientConfig,
|
|
18
25
|
initTelemetryClient,
|
|
@@ -22,14 +29,9 @@ import {
|
|
|
22
29
|
import { EmbeddedWallet } from '@aztec/wallets/embedded';
|
|
23
30
|
|
|
24
31
|
import { createAztecNode } from '../../local-network/index.js';
|
|
25
|
-
import {
|
|
26
|
-
extractNamespacedOptions,
|
|
27
|
-
extractRelevantOptions,
|
|
28
|
-
preloadCrsDataForVerifying,
|
|
29
|
-
setupVersionChecker,
|
|
30
|
-
} from '../util.js';
|
|
32
|
+
import { extractNamespacedOptions, extractRelevantOptions, preloadCrsDataForVerifying } from '../util.js';
|
|
31
33
|
import { getVersions } from '../versioning.js';
|
|
32
|
-
import { computeExpectedGenesisRoot, waitForCompatibleRollup } from './standby.js';
|
|
34
|
+
import { computeExpectedGenesisRoot, setupAutoShutdown, waitForCompatibleRollup } from './standby.js';
|
|
33
35
|
import { startProverBroker } from './start_prover_broker.js';
|
|
34
36
|
|
|
35
37
|
export async function startNode(
|
|
@@ -65,12 +67,8 @@ export async function startNode(
|
|
|
65
67
|
if (nodeConfig.proverBrokerUrl) {
|
|
66
68
|
// at 1TPS we'd enqueue ~1k chonk verifier proofs and ~1k AVM proofs immediately
|
|
67
69
|
// set a lower connection limit such that we don't overload the server
|
|
68
|
-
//
|
|
69
|
-
const fetch = makeTracedFetch(
|
|
70
|
-
[1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3],
|
|
71
|
-
false,
|
|
72
|
-
makeUndiciFetch(new Agent({ connections: 100 })),
|
|
73
|
-
);
|
|
70
|
+
// Retry indefinitely until the epoch proving times out and the chain reorgs
|
|
71
|
+
const fetch = makeTracedFetch(proverBrokerBackoff, false, makeUndiciFetch(new Agent({ connections: 100 })));
|
|
74
72
|
broker = createProvingJobBrokerClient(nodeConfig.proverBrokerUrl, getVersions(nodeConfig), fetch);
|
|
75
73
|
} else if (options.proverBroker) {
|
|
76
74
|
({ broker } = await startProverBroker(options, signalHandlers, services, userLog));
|
|
@@ -83,12 +81,12 @@ export async function startNode(
|
|
|
83
81
|
await preloadCrsDataForVerifying(nodeConfig, userLog);
|
|
84
82
|
|
|
85
83
|
const genesisConfig = getGenesisStateConfigEnvVars();
|
|
86
|
-
const { genesisArchiveRoot,
|
|
84
|
+
const { genesisArchiveRoot, genesis } = await computeExpectedGenesisRoot(genesisConfig, userLog);
|
|
87
85
|
|
|
88
86
|
const followsCanonicalRollup =
|
|
89
87
|
typeof nodeConfig.rollupVersion !== 'number' || (nodeConfig.rollupVersion as unknown as string) === 'canonical';
|
|
90
88
|
|
|
91
|
-
if (!nodeConfig.
|
|
89
|
+
if (!nodeConfig.registryAddress || nodeConfig.registryAddress.isZero()) {
|
|
92
90
|
throw new Error('L1 registry address is required to start Aztec Node');
|
|
93
91
|
}
|
|
94
92
|
|
|
@@ -102,7 +100,7 @@ export async function startNode(
|
|
|
102
100
|
);
|
|
103
101
|
|
|
104
102
|
const { addresses, config } = await getL1Config(
|
|
105
|
-
nodeConfig.
|
|
103
|
+
nodeConfig.registryAddress,
|
|
106
104
|
nodeConfig.l1RpcUrls,
|
|
107
105
|
nodeConfig.l1ChainId,
|
|
108
106
|
nodeConfig.rollupVersion,
|
|
@@ -116,13 +114,9 @@ export async function startNode(
|
|
|
116
114
|
);
|
|
117
115
|
}
|
|
118
116
|
|
|
119
|
-
// TODO(#12272): will clean this up.
|
|
120
117
|
nodeConfig = {
|
|
121
118
|
...nodeConfig,
|
|
122
|
-
|
|
123
|
-
...addresses,
|
|
124
|
-
slashFactoryAddress: nodeConfig.l1Contracts.slashFactoryAddress,
|
|
125
|
-
},
|
|
119
|
+
...addresses,
|
|
126
120
|
...config,
|
|
127
121
|
};
|
|
128
122
|
|
|
@@ -158,17 +152,14 @@ export async function startNode(
|
|
|
158
152
|
const telemetry = await initTelemetryClient(telemetryConfig);
|
|
159
153
|
|
|
160
154
|
// Create and start Aztec Node
|
|
161
|
-
const node = await createAztecNode(nodeConfig, { telemetry, proverBroker: broker }, {
|
|
155
|
+
const node = await createAztecNode(nodeConfig, { telemetry, proverBroker: broker }, { genesis });
|
|
162
156
|
|
|
163
|
-
|
|
164
|
-
services.node = [node, AztecNodeApiSchema];
|
|
165
|
-
services.p2p = [node.getP2P(), P2PApiSchema];
|
|
166
|
-
adminServices.nodeAdmin = [node, AztecNodeAdminApiSchema];
|
|
157
|
+
registerAztecNodeRpcHandlers(node, services, adminServices, { debug: options.nodeDebug });
|
|
167
158
|
|
|
168
159
|
// Register prover-node services if the prover node subsystem is running
|
|
169
160
|
const proverNode = node.getProverNode();
|
|
170
161
|
if (proverNode) {
|
|
171
|
-
|
|
162
|
+
adminServices.prover = [proverNode, ProverNodeApiSchema];
|
|
172
163
|
if (!nodeConfig.proverBrokerUrl) {
|
|
173
164
|
services.provingJobSource = [proverNode.getProver().getProvingJobSource(), ProvingJobConsumerSchema];
|
|
174
165
|
}
|
|
@@ -187,15 +178,14 @@ export async function startNode(
|
|
|
187
178
|
await addBot(options, signalHandlers, services, wallet, node, telemetry, undefined);
|
|
188
179
|
}
|
|
189
180
|
|
|
190
|
-
if (nodeConfig.
|
|
191
|
-
const cacheDir = process.env.DATA_DIRECTORY ? `${process.env.DATA_DIRECTORY}/cache` : undefined;
|
|
181
|
+
if (nodeConfig.enableAutoShutdown && networkName !== 'local' && followsCanonicalRollup) {
|
|
192
182
|
try {
|
|
193
|
-
await
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
183
|
+
await setupAutoShutdown(
|
|
184
|
+
nodeConfig,
|
|
185
|
+
nodeConfig.registryAddress,
|
|
186
|
+
(nodeConfig.rollupVersion as number | 'canonical') ?? 'canonical',
|
|
187
|
+
{ genesisArchiveRoot, vkTreeRoot: getVKTreeRoot(), protocolContractsHash },
|
|
197
188
|
signalHandlers,
|
|
198
|
-
cacheDir,
|
|
199
189
|
);
|
|
200
190
|
} catch {
|
|
201
191
|
/* no-op */
|
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
createProofStore,
|
|
10
10
|
createProvingJobBrokerClient,
|
|
11
11
|
proverAgentConfigMappings,
|
|
12
|
+
proverBrokerBackoff,
|
|
12
13
|
} from '@aztec/prover-client/broker';
|
|
13
14
|
import { getProverNodeAgentConfigFromEnv } from '@aztec/prover-node';
|
|
14
15
|
import { ProverAgentApiSchema } from '@aztec/stdlib/interfaces/server';
|
|
@@ -23,8 +24,8 @@ export async function startProverAgent(
|
|
|
23
24
|
services: NamespacedApiHandlers,
|
|
24
25
|
userLog: LogFn,
|
|
25
26
|
) {
|
|
26
|
-
if (options.node || options.sequencer || options.
|
|
27
|
-
userLog(`Starting a prover agent with --node, --sequencer, --
|
|
27
|
+
if (options.node || options.sequencer || options.p2pBootstrap || options.txe) {
|
|
28
|
+
userLog(`Starting a prover agent with --node, --sequencer, --p2p-bootstrap, or --txe is not supported.`);
|
|
28
29
|
process.exit(1);
|
|
29
30
|
}
|
|
30
31
|
|
|
@@ -45,12 +46,8 @@ export async function startProverAgent(
|
|
|
45
46
|
|
|
46
47
|
await preloadCrsDataForServerSideProving(config, userLog);
|
|
47
48
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
[1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3],
|
|
51
|
-
false,
|
|
52
|
-
makeUndiciFetch(new Agent({ connections: 10 })),
|
|
53
|
-
);
|
|
49
|
+
// Retry indefinitely until the epoch proving times out and the chain reorgs
|
|
50
|
+
const fetch = makeTracedFetch(proverBrokerBackoff, false, makeUndiciFetch(new Agent({ connections: 10 })));
|
|
54
51
|
const broker = createProvingJobBrokerClient(config.proverBrokerUrl, getVersions(), fetch);
|
|
55
52
|
|
|
56
53
|
const telemetry = await initTelemetryClient(extractRelevantOptions(options, telemetryClientConfigMappings, 'tel'));
|
|
@@ -24,38 +24,37 @@ export async function startProverBroker(
|
|
|
24
24
|
services: NamespacedApiHandlers,
|
|
25
25
|
userLog: LogFn,
|
|
26
26
|
): Promise<{ broker: ProvingJobBroker; config: ProverBrokerConfig }> {
|
|
27
|
-
if (options.node || options.sequencer || options.
|
|
28
|
-
userLog(`Starting a prover broker with --node, --sequencer, --
|
|
27
|
+
if (options.node || options.sequencer || options.p2pBootstrap || options.txe) {
|
|
28
|
+
userLog(`Starting a prover broker with --node, --sequencer, --p2p-bootstrap, or --txe is not supported.`);
|
|
29
29
|
process.exit(1);
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
const
|
|
32
|
+
const baseConfig: ProverBrokerConfig = {
|
|
33
33
|
...getProverNodeBrokerConfigFromEnv(), // get default config from env
|
|
34
34
|
...extractRelevantOptions<ProverBrokerConfig>(options, proverBrokerConfigMappings, 'proverBroker'), // override with command line options
|
|
35
35
|
};
|
|
36
36
|
|
|
37
|
-
if (!
|
|
37
|
+
if (!baseConfig.registryAddress || baseConfig.registryAddress.isZero()) {
|
|
38
38
|
throw new Error('L1 registry address is required to start Aztec Node without --deploy-aztec-contracts option');
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
const genesisConfig = getGenesisStateConfigEnvVars();
|
|
42
42
|
const { genesisArchiveRoot } = await computeExpectedGenesisRoot(genesisConfig, userLog);
|
|
43
43
|
await waitForCompatibleRollup(
|
|
44
|
-
|
|
44
|
+
baseConfig,
|
|
45
45
|
{ genesisArchiveRoot, vkTreeRoot: getVKTreeRoot(), protocolContractsHash },
|
|
46
46
|
options.port,
|
|
47
47
|
userLog,
|
|
48
48
|
);
|
|
49
49
|
|
|
50
50
|
const { addresses, config: rollupConfig } = await getL1Config(
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
51
|
+
baseConfig.registryAddress,
|
|
52
|
+
baseConfig.l1RpcUrls,
|
|
53
|
+
baseConfig.l1ChainId,
|
|
54
|
+
baseConfig.rollupVersion,
|
|
55
55
|
);
|
|
56
56
|
|
|
57
|
-
config
|
|
58
|
-
config.rollupVersion = rollupConfig.rollupVersion;
|
|
57
|
+
const config: ProverBrokerConfig = { ...baseConfig, ...addresses, rollupVersion: rollupConfig.rollupVersion };
|
|
59
58
|
|
|
60
59
|
const client = await initTelemetryClient(getTelemetryClientConfig());
|
|
61
60
|
const broker = await createAndStartProvingBroker(config, client);
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
import { startHttpRpcServer } from '@aztec/foundation/json-rpc/server';
|
|
2
2
|
import type { Logger } from '@aztec/foundation/log';
|
|
3
|
-
import { createTXERpcServer } from '@aztec/txe';
|
|
3
|
+
import { createTXERpcServer } from '@aztec/txe/server';
|
|
4
4
|
|
|
5
|
-
export async function startTXE(options: any, debugLogger: Logger) {
|
|
5
|
+
export async function startTXE(options: any, signalHandlers: Array<() => Promise<void>>, debugLogger: Logger) {
|
|
6
6
|
debugLogger.info(`Setting up TXE...`);
|
|
7
7
|
|
|
8
|
-
const txeServer = createTXERpcServer(debugLogger);
|
|
9
|
-
const
|
|
8
|
+
const txeServer = await createTXERpcServer(debugLogger);
|
|
9
|
+
const httpServer = await startHttpRpcServer(txeServer, {
|
|
10
10
|
port: options.port,
|
|
11
11
|
timeoutMs: 1e3 * 60 * 5,
|
|
12
12
|
});
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
signalHandlers.push(() => new Promise<void>(resolve => httpServer.close(() => resolve())));
|
|
15
|
+
|
|
16
|
+
debugLogger.info(`TXE listening on port ${httpServer.port}`);
|
|
15
17
|
}
|
|
@@ -6,6 +6,11 @@ export interface CompiledArtifact {
|
|
|
6
6
|
file_map: unknown;
|
|
7
7
|
functions: ContractFunction[];
|
|
8
8
|
bytecode?: string;
|
|
9
|
+
/**
|
|
10
|
+
* Set to true by the AVM transpiler (invoked via `bb aztec_process`) once the contract has been transpiled and its
|
|
11
|
+
* verification keys generated. Absent on raw `nargo compile` output, hence optional.
|
|
12
|
+
*/
|
|
13
|
+
transpiled?: boolean;
|
|
9
14
|
}
|
|
10
15
|
|
|
11
16
|
export interface ContractFunction {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { LogFn } from '@aztec/foundation/log';
|
|
2
|
-
import { getPackageVersion } from '@aztec/stdlib/update-checker';
|
|
2
|
+
import { DEV_VERSION, getPackageVersion } from '@aztec/stdlib/update-checker';
|
|
3
3
|
|
|
4
4
|
import TOML from '@iarna/toml';
|
|
5
5
|
import { readFile } from 'fs/promises';
|
|
@@ -7,16 +7,33 @@ import { join } from 'path';
|
|
|
7
7
|
|
|
8
8
|
import { collectCrateDirs } from './collect_crate_dirs.js';
|
|
9
9
|
|
|
10
|
-
/**
|
|
10
|
+
/** Returns true if the given git URL points to the AztecProtocol/aztec-nr repository. */
|
|
11
|
+
function isAztecNrGitUrl(gitUrl: string): boolean {
|
|
12
|
+
let url: URL;
|
|
13
|
+
try {
|
|
14
|
+
url = new URL(gitUrl);
|
|
15
|
+
} catch {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
if (url.hostname !== 'github.com') {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
const repoPath = url.pathname
|
|
22
|
+
.replace(/^\//, '')
|
|
23
|
+
.replace(/\.git$/, '')
|
|
24
|
+
.replace(/\/$/, '');
|
|
25
|
+
return repoPath === 'AztecProtocol/aztec-nr';
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/** Warns if any aztec-nr git dependency in a crate's Nargo.toml has a tag that doesn't match the CLI version. */
|
|
11
29
|
export async function warnIfAztecVersionMismatch(log: LogFn, cliVersion?: string): Promise<void> {
|
|
12
30
|
const version = cliVersion ?? getPackageVersion();
|
|
13
|
-
if (
|
|
14
|
-
log(`WARNING: aztec CLI version not found. Skipping dependency compatibility check.`);
|
|
31
|
+
if (version === DEV_VERSION) {
|
|
15
32
|
return;
|
|
16
33
|
}
|
|
17
34
|
|
|
18
35
|
const expectedTag = `v${version}`;
|
|
19
|
-
const mismatches: { file: string; tag: string }[] = [];
|
|
36
|
+
const mismatches: { file: string; depName: string; tag: string }[] = [];
|
|
20
37
|
|
|
21
38
|
const crateDirs = await collectCrateDirs('.', { skipGitDeps: true });
|
|
22
39
|
|
|
@@ -30,23 +47,28 @@ export async function warnIfAztecVersionMismatch(log: LogFn, cliVersion?: string
|
|
|
30
47
|
}
|
|
31
48
|
|
|
32
49
|
const parsed = TOML.parse(content) as Record<string, any>;
|
|
33
|
-
const
|
|
34
|
-
if (!aztecDep || typeof aztecDep !== 'object' || typeof aztecDep.tag !== 'string') {
|
|
35
|
-
// If a dep called "aztec" doesn't exist or it does not get parsed to an object or it doesn't have a tag defined
|
|
36
|
-
// we skip the check.
|
|
37
|
-
continue;
|
|
38
|
-
}
|
|
50
|
+
const deps = (parsed.dependencies as Record<string, any>) ?? {};
|
|
39
51
|
|
|
40
|
-
|
|
41
|
-
|
|
52
|
+
for (const [depName, dep] of Object.entries(deps)) {
|
|
53
|
+
// Skip non-object deps (e.g. malformed entries) and anything that isn't a tagged git dep.
|
|
54
|
+
if (!dep || typeof dep !== 'object' || typeof dep.git !== 'string' || typeof dep.tag !== 'string') {
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
// Only flag deps that are sourced from the aztec-nr repo.
|
|
58
|
+
if (!isAztecNrGitUrl(dep.git)) {
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
if (dep.tag !== expectedTag) {
|
|
62
|
+
mismatches.push({ file: tomlPath, depName, tag: dep.tag });
|
|
63
|
+
}
|
|
42
64
|
}
|
|
43
65
|
}
|
|
44
66
|
|
|
45
67
|
if (mismatches.length > 0) {
|
|
46
|
-
const details = mismatches.map(m => ` ${m.file} (${m.tag})`).join('\n');
|
|
68
|
+
const details = mismatches.map(m => ` ${m.file} — ${m.depName} (${m.tag})`).join('\n');
|
|
47
69
|
log(
|
|
48
70
|
`WARNING: Aztec dependency version mismatch detected.\n` +
|
|
49
|
-
`The following
|
|
71
|
+
`The following aztec-nr dependencies do not match the CLI version (${expectedTag}):\n` +
|
|
50
72
|
`${details}\n\n` +
|
|
51
73
|
`See https://docs.aztec.network/errors/9 for how to update your dependencies.`,
|
|
52
74
|
);
|
package/src/cli/util.ts
CHANGED
|
@@ -1,18 +1,13 @@
|
|
|
1
1
|
import type { AztecNodeConfig } from '@aztec/aztec-node';
|
|
2
2
|
import type { AccountManager } from '@aztec/aztec.js/wallet';
|
|
3
|
-
import {
|
|
4
|
-
import { RegistryContract } from '@aztec/ethereum/contracts';
|
|
5
|
-
import type { ViemClient } from '@aztec/ethereum/types';
|
|
6
|
-
import type { ConfigMappingsType, NetworkNames } from '@aztec/foundation/config';
|
|
3
|
+
import type { ConfigMappingsType } from '@aztec/foundation/config';
|
|
7
4
|
import { jsonStringify } from '@aztec/foundation/json-rpc';
|
|
8
|
-
import {
|
|
5
|
+
import type { LogFn } from '@aztec/foundation/log';
|
|
9
6
|
import type { ProverConfig } from '@aztec/stdlib/interfaces/server';
|
|
10
|
-
import { type VersionCheck, getPackageVersion } from '@aztec/stdlib/update-checker';
|
|
11
7
|
import type { EmbeddedWallet } from '@aztec/wallets/embedded';
|
|
12
8
|
|
|
13
9
|
import chalk from 'chalk';
|
|
14
10
|
import type { Command } from 'commander';
|
|
15
|
-
import type { Hex } from 'viem';
|
|
16
11
|
|
|
17
12
|
import { type AztecStartOption, aztecStartOptions } from './aztec_start_options.js';
|
|
18
13
|
|
|
@@ -51,6 +46,24 @@ export function isShuttingDown(): boolean {
|
|
|
51
46
|
return shutdownPromise !== undefined;
|
|
52
47
|
}
|
|
53
48
|
|
|
49
|
+
/**
|
|
50
|
+
* Stops the node's subsystems (via the registered signal handlers) without exiting the process, leaving
|
|
51
|
+
* the HTTP health server listening so K8s liveness/readiness probes keep passing. Unlike {@link shutdown}
|
|
52
|
+
* this deliberately does not latch `shutdownPromise` or call `process.exit`; instead it re-arms
|
|
53
|
+
* SIGTERM/SIGINT so a later K8s pod deletion still terminates the wound-down pod with a clean exit.
|
|
54
|
+
*/
|
|
55
|
+
export async function softShutdown(logFn: LogFn, signalHandlers: Array<() => Promise<void>>): Promise<void> {
|
|
56
|
+
logFn('Canonical rollup upgrade detected: stopping subsystems, health server stays up.', {
|
|
57
|
+
exitCode: ExitCode.ROLLUP_UPGRADE,
|
|
58
|
+
});
|
|
59
|
+
await Promise.allSettled(signalHandlers.map(fn => fn()));
|
|
60
|
+
for (const sig of ['SIGTERM', 'SIGINT'] as const) {
|
|
61
|
+
process.removeAllListeners(sig);
|
|
62
|
+
process.once(sig, () => process.exit(ExitCode.ROLLUP_UPGRADE));
|
|
63
|
+
}
|
|
64
|
+
logFn('Subsystems stopped due to rollup upgrade. Health server remains active.');
|
|
65
|
+
}
|
|
66
|
+
|
|
54
67
|
export const installSignalHandlers = (logFn: LogFn, cb?: Array<() => Promise<void>>) => {
|
|
55
68
|
const signals = [
|
|
56
69
|
['SIGINT', ExitCode.SIGINT],
|
|
@@ -81,18 +94,18 @@ export async function createAccountLogs(accountManagers: AccountManager[], walle
|
|
|
81
94
|
if (registeredAccounts.find(a => a.item.equals(completeAddress.address))) {
|
|
82
95
|
accountLogStrings.push(` Address: ${completeAddress.address.toString()}\n`);
|
|
83
96
|
accountLogStrings.push(` Partial Address: ${completeAddress.partialAddress.toString()}\n`);
|
|
84
|
-
accountLogStrings.push(` Secret Key: ${
|
|
97
|
+
accountLogStrings.push(` Secret Key: ${accountManager.getSecretKey().toString()}\n`);
|
|
98
|
+
accountLogStrings.push(` Master nullifier public key hash: ${completeAddress.publicKeys.npkMHash.toString()}\n`);
|
|
99
|
+
accountLogStrings.push(` Master incoming viewing public key: ${completeAddress.publicKeys.ivpkM.toString()}\n\n`);
|
|
85
100
|
accountLogStrings.push(
|
|
86
|
-
` Master
|
|
101
|
+
` Master outgoing viewing public key hash: ${completeAddress.publicKeys.ovpkMHash.toString()}\n\n`,
|
|
87
102
|
);
|
|
103
|
+
accountLogStrings.push(` Master tagging public key hash: ${completeAddress.publicKeys.tpkMHash.toString()}\n\n`);
|
|
88
104
|
accountLogStrings.push(
|
|
89
|
-
` Master
|
|
105
|
+
` Master message-signing public key hash: ${completeAddress.publicKeys.mspkMHash.toString()}\n\n`,
|
|
90
106
|
);
|
|
91
107
|
accountLogStrings.push(
|
|
92
|
-
` Master
|
|
93
|
-
);
|
|
94
|
-
accountLogStrings.push(
|
|
95
|
-
` Master tagging public key: ${completeAddress.publicKeys.masterTaggingPublicKey.toString()}\n\n`,
|
|
108
|
+
` Master fallback public key hash: ${completeAddress.publicKeys.fbpkMHash.toString()}\n\n`,
|
|
96
109
|
);
|
|
97
110
|
}
|
|
98
111
|
}
|
|
@@ -291,60 +304,6 @@ export async function preloadCrsDataForServerSideProving(
|
|
|
291
304
|
}
|
|
292
305
|
}
|
|
293
306
|
|
|
294
|
-
export async function setupVersionChecker(
|
|
295
|
-
network: NetworkNames,
|
|
296
|
-
followsCanonicalRollup: boolean,
|
|
297
|
-
publicClient: ViemClient,
|
|
298
|
-
signalHandlers: Array<() => Promise<void>>,
|
|
299
|
-
cacheDir?: string,
|
|
300
|
-
): Promise<void> {
|
|
301
|
-
const networkConfig = await getNetworkConfig(network, cacheDir);
|
|
302
|
-
if (!networkConfig) {
|
|
303
|
-
return;
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
const { VersionChecker } = await import('@aztec/stdlib/update-checker');
|
|
307
|
-
|
|
308
|
-
const logger = createLogger('version_check');
|
|
309
|
-
const registry = new RegistryContract(publicClient, networkConfig.registryAddress as Hex);
|
|
310
|
-
|
|
311
|
-
const checks: Array<VersionCheck> = [];
|
|
312
|
-
checks.push({
|
|
313
|
-
name: 'node',
|
|
314
|
-
currentVersion: getPackageVersion() ?? 'unknown',
|
|
315
|
-
getLatestVersion: async () => {
|
|
316
|
-
const cfg = await getNetworkConfig(network, cacheDir);
|
|
317
|
-
return cfg?.nodeVersion;
|
|
318
|
-
},
|
|
319
|
-
});
|
|
320
|
-
|
|
321
|
-
if (followsCanonicalRollup) {
|
|
322
|
-
const getLatestVersion = async () => {
|
|
323
|
-
const version = (await registry.getRollupVersions()).at(-1);
|
|
324
|
-
return version !== undefined ? String(version) : undefined;
|
|
325
|
-
};
|
|
326
|
-
const currentVersion = await getLatestVersion();
|
|
327
|
-
if (currentVersion !== undefined) {
|
|
328
|
-
checks.push({
|
|
329
|
-
name: 'rollup',
|
|
330
|
-
currentVersion,
|
|
331
|
-
getLatestVersion,
|
|
332
|
-
});
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
const checker = new VersionChecker(checks, 600_000, logger);
|
|
337
|
-
checker.on('newVersion', ({ name, latestVersion, currentVersion }) => {
|
|
338
|
-
if (isShuttingDown()) {
|
|
339
|
-
return;
|
|
340
|
-
}
|
|
341
|
-
|
|
342
|
-
logger.warn(`New ${name} version available`, { latestVersion, currentVersion });
|
|
343
|
-
});
|
|
344
|
-
checker.start();
|
|
345
|
-
signalHandlers.push(() => checker.stop());
|
|
346
|
-
}
|
|
347
|
-
|
|
348
307
|
export function stringifyConfig(config: object): string {
|
|
349
308
|
return Object.entries(config)
|
|
350
309
|
.map(([key, value]) => `${key}=${jsonStringify(value)}`)
|
package/src/examples/token.ts
CHANGED
|
@@ -21,10 +21,10 @@ async function main() {
|
|
|
21
21
|
|
|
22
22
|
const wallet = await EmbeddedWallet.create(node);
|
|
23
23
|
|
|
24
|
-
// During local network setup we
|
|
24
|
+
// During local network setup we create a few initializerless accounts. Below we add them to our wallet.
|
|
25
25
|
const [aliceInitialAccountData, bobInitialAccountData] = await getInitialTestAccountsData();
|
|
26
|
-
await wallet.
|
|
27
|
-
await wallet.
|
|
26
|
+
await wallet.createSchnorrInitializerlessAccount(aliceInitialAccountData.secret, aliceInitialAccountData.salt);
|
|
27
|
+
await wallet.createSchnorrInitializerlessAccount(bobInitialAccountData.secret, bobInitialAccountData.salt);
|
|
28
28
|
|
|
29
29
|
const alice = aliceInitialAccountData.address;
|
|
30
30
|
const bob = bobInitialAccountData.address;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { WaitOpts } from '@aztec/aztec.js/contracts';
|
|
2
|
+
import { publishContractClass, publishInstance } from '@aztec/aztec.js/deployment';
|
|
3
|
+
import type { Wallet } from '@aztec/aztec.js/wallet';
|
|
4
|
+
import { AuthRegistryArtifact, getStandardAuthRegistry } from '@aztec/standard-contracts/auth-registry';
|
|
5
|
+
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
6
|
+
|
|
7
|
+
export async function publishStandardAuthRegistry(
|
|
8
|
+
wallet: Wallet,
|
|
9
|
+
from: AztecAddress,
|
|
10
|
+
waitOpts?: WaitOpts,
|
|
11
|
+
): Promise<void> {
|
|
12
|
+
const { instance, contractClass } = await getStandardAuthRegistry();
|
|
13
|
+
if (!(await wallet.getContractClassMetadata(contractClass.id)).isContractClassPubliclyRegistered) {
|
|
14
|
+
await (await publishContractClass(wallet, AuthRegistryArtifact)).send({ from, wait: waitOpts });
|
|
15
|
+
}
|
|
16
|
+
if (!(await wallet.getContractMetadata(instance.address)).isContractPublished) {
|
|
17
|
+
await publishInstance(wallet, instance).send({ from, wait: waitOpts });
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type InitialAccountData, getInitialTestAccountsData } from '@aztec/accounts/testing';
|
|
2
|
+
import type { WaitOpts } from '@aztec/aztec.js/contracts';
|
|
2
3
|
import type { Wallet } from '@aztec/aztec.js/wallet';
|
|
3
4
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
5
|
import type { LogFn } from '@aztec/foundation/log';
|
|
@@ -45,19 +46,22 @@ export async function getBananaFPCAddress(initialAccounts: InitialAccountData[])
|
|
|
45
46
|
return (await getBananaFPCInstance(initialAccounts)).address;
|
|
46
47
|
}
|
|
47
48
|
|
|
48
|
-
export async function setupBananaFPC(
|
|
49
|
+
export async function setupBananaFPC(
|
|
50
|
+
initialAccounts: InitialAccountData[],
|
|
51
|
+
wallet: Wallet,
|
|
52
|
+
log: LogFn,
|
|
53
|
+
waitOpts?: WaitOpts,
|
|
54
|
+
) {
|
|
49
55
|
const bananaCoinAddress = await getBananaCoinAddress(initialAccounts);
|
|
50
56
|
const admin = getBananaAdmin(initialAccounts);
|
|
51
57
|
const [{ contract: bananaCoin }, { contract: fpc }] = await Promise.all([
|
|
52
|
-
TokenContract.deploy(wallet, admin, bananaCoinArgs.name, bananaCoinArgs.symbol, bananaCoinArgs.decimal
|
|
53
|
-
|
|
54
|
-
contractAddressSalt: BANANA_COIN_SALT,
|
|
58
|
+
TokenContract.deploy(wallet, admin, bananaCoinArgs.name, bananaCoinArgs.symbol, bananaCoinArgs.decimal, {
|
|
59
|
+
salt: BANANA_COIN_SALT,
|
|
55
60
|
universalDeploy: true,
|
|
56
|
-
}),
|
|
57
|
-
FPCContract.deploy(wallet, bananaCoinAddress, admin).send({
|
|
61
|
+
}).send({ from: admin, wait: waitOpts }),
|
|
62
|
+
FPCContract.deploy(wallet, bananaCoinAddress, admin, { salt: BANANA_FPC_SALT, universalDeploy: true }).send({
|
|
58
63
|
from: admin,
|
|
59
|
-
|
|
60
|
-
universalDeploy: true,
|
|
64
|
+
wait: waitOpts,
|
|
61
65
|
}),
|
|
62
66
|
]);
|
|
63
67
|
|