@aztec/end-to-end 0.0.0-test.1 → 0.0.1-fake-ceab37513c
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/bench/client_flows/benchmark.d.ts +60 -0
- package/dest/bench/client_flows/benchmark.d.ts.map +1 -0
- package/dest/bench/client_flows/benchmark.js +261 -0
- package/dest/bench/client_flows/client_flows_benchmark.d.ts +69 -0
- package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -0
- package/dest/bench/client_flows/client_flows_benchmark.js +315 -0
- package/dest/bench/client_flows/config.d.ts +14 -0
- package/dest/bench/client_flows/config.d.ts.map +1 -0
- package/dest/bench/client_flows/config.js +106 -0
- package/dest/bench/client_flows/data_extractor.d.ts +2 -0
- package/dest/bench/client_flows/data_extractor.d.ts.map +1 -0
- package/dest/bench/client_flows/data_extractor.js +99 -0
- package/dest/bench/utils.d.ts +10 -27
- package/dest/bench/utils.d.ts.map +1 -1
- package/dest/bench/utils.js +27 -43
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +15 -7
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts.map +1 -1
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.js +66 -38
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +10 -18
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts.map +1 -1
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.js +34 -53
- package/dest/e2e_deploy_contract/deploy_test.d.ts +4 -2
- package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
- package/dest/e2e_deploy_contract/deploy_test.js +9 -6
- package/dest/e2e_epochs/epochs_test.d.ts +56 -17
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +222 -42
- package/dest/e2e_fees/bridging_race.notest.d.ts +2 -0
- package/dest/e2e_fees/bridging_race.notest.d.ts.map +1 -0
- package/dest/e2e_fees/bridging_race.notest.js +60 -0
- package/dest/e2e_fees/fees_test.d.ts +16 -5
- package/dest/e2e_fees/fees_test.d.ts.map +1 -1
- package/dest/e2e_fees/fees_test.js +87 -88
- package/dest/e2e_l1_publisher/write_json.d.ts +8 -0
- package/dest/e2e_l1_publisher/write_json.d.ts.map +1 -0
- package/dest/e2e_l1_publisher/write_json.js +57 -0
- package/dest/e2e_multi_validator/utils.d.ts +12 -0
- package/dest/e2e_multi_validator/utils.d.ts.map +1 -0
- package/dest/e2e_multi_validator/utils.js +214 -0
- package/dest/e2e_nested_contract/nested_contract_test.d.ts +5 -5
- package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
- package/dest/e2e_nested_contract/nested_contract_test.js +19 -14
- package/dest/e2e_p2p/inactivity_slash_test.d.ts +31 -0
- package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -0
- package/dest/e2e_p2p/inactivity_slash_test.js +132 -0
- package/dest/e2e_p2p/p2p_network.d.ts +56 -21
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +154 -125
- package/dest/e2e_p2p/shared.d.ts +41 -3
- package/dest/e2e_p2p/shared.d.ts.map +1 -1
- package/dest/e2e_p2p/shared.js +146 -6
- package/dest/e2e_token_contract/token_contract_test.d.ts +10 -5
- package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
- package/dest/e2e_token_contract/token_contract_test.js +51 -24
- package/dest/{e2e_prover → fixtures}/e2e_prover_test.d.ts +7 -4
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -0
- package/dest/{e2e_prover → fixtures}/e2e_prover_test.js +67 -62
- package/dest/fixtures/fixtures.d.ts +5 -6
- package/dest/fixtures/fixtures.d.ts.map +1 -1
- package/dest/fixtures/fixtures.js +4 -3
- package/dest/fixtures/get_acvm_config.d.ts.map +1 -1
- package/dest/fixtures/get_acvm_config.js +2 -14
- package/dest/fixtures/get_bb_config.d.ts.map +1 -1
- package/dest/fixtures/get_bb_config.js +8 -15
- package/dest/fixtures/l1_to_l2_messaging.d.ts +8 -5
- package/dest/fixtures/l1_to_l2_messaging.d.ts.map +1 -1
- package/dest/fixtures/l1_to_l2_messaging.js +44 -18
- package/dest/fixtures/setup_l1_contracts.d.ts +3 -3
- package/dest/fixtures/setup_l1_contracts.d.ts.map +1 -1
- package/dest/fixtures/setup_l1_contracts.js +3 -3
- package/dest/fixtures/setup_p2p_test.d.ts +14 -6
- package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
- package/dest/fixtures/setup_p2p_test.js +73 -21
- package/dest/fixtures/snapshot_manager.d.ts +8 -3
- package/dest/fixtures/snapshot_manager.d.ts.map +1 -1
- package/dest/fixtures/snapshot_manager.js +120 -104
- package/dest/fixtures/token_utils.d.ts +4 -3
- package/dest/fixtures/token_utils.d.ts.map +1 -1
- package/dest/fixtures/token_utils.js +24 -7
- package/dest/fixtures/utils.d.ts +65 -22
- package/dest/fixtures/utils.d.ts.map +1 -1
- package/dest/fixtures/utils.js +439 -318
- package/dest/fixtures/web3signer.d.ts +5 -0
- package/dest/fixtures/web3signer.d.ts.map +1 -0
- package/dest/fixtures/web3signer.js +42 -0
- package/dest/shared/cross_chain_test_harness.d.ts +28 -18
- package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
- package/dest/shared/cross_chain_test_harness.js +97 -41
- package/dest/shared/gas_portal_test_harness.d.ts +23 -18
- package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
- package/dest/shared/gas_portal_test_harness.js +43 -25
- package/dest/shared/submit-transactions.d.ts.map +1 -1
- package/dest/shared/uniswap_l1_l2.d.ts +5 -6
- package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
- package/dest/shared/uniswap_l1_l2.js +136 -90
- package/dest/simulators/lending_simulator.d.ts +5 -6
- package/dest/simulators/lending_simulator.d.ts.map +1 -1
- package/dest/simulators/lending_simulator.js +11 -15
- package/dest/simulators/token_simulator.d.ts +2 -1
- package/dest/simulators/token_simulator.d.ts.map +1 -1
- package/dest/simulators/token_simulator.js +16 -13
- package/dest/spartan/setup_test_wallets.d.ts +8 -1
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +108 -22
- package/dest/spartan/utils.d.ts +60 -307
- package/dest/spartan/utils.d.ts.map +1 -1
- package/dest/spartan/utils.js +200 -115
- package/package.json +60 -56
- package/src/bench/client_flows/benchmark.ts +341 -0
- package/src/bench/client_flows/client_flows_benchmark.ts +422 -0
- package/src/bench/client_flows/config.ts +61 -0
- package/src/bench/client_flows/data_extractor.ts +111 -0
- package/src/bench/utils.ts +26 -52
- package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +60 -40
- package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +47 -75
- package/src/e2e_deploy_contract/deploy_test.ts +11 -8
- package/src/e2e_epochs/epochs_test.ts +276 -54
- package/src/e2e_fees/bridging_race.notest.ts +75 -0
- package/src/e2e_fees/fees_test.ts +121 -108
- package/src/e2e_l1_publisher/write_json.ts +74 -0
- package/src/e2e_multi_validator/utils.ts +258 -0
- package/src/e2e_nested_contract/nested_contract_test.ts +22 -14
- package/src/e2e_p2p/inactivity_slash_test.ts +174 -0
- package/src/e2e_p2p/p2p_network.ts +212 -144
- package/src/e2e_p2p/shared.ts +234 -14
- package/src/e2e_token_contract/token_contract_test.ts +42 -38
- package/src/fixtures/dumps/epoch_proof_result.json +1 -1
- package/src/{e2e_prover → fixtures}/e2e_prover_test.ts +62 -69
- package/src/fixtures/fixtures.ts +4 -3
- package/src/fixtures/get_acvm_config.ts +2 -10
- package/src/fixtures/get_bb_config.ts +15 -11
- package/src/fixtures/l1_to_l2_messaging.ts +53 -23
- package/src/fixtures/setup_l1_contracts.ts +5 -6
- package/src/fixtures/setup_p2p_test.ts +112 -30
- package/src/fixtures/snapshot_manager.ts +150 -102
- package/src/fixtures/token_utils.ts +33 -8
- package/src/fixtures/utils.ts +530 -352
- package/src/fixtures/web3signer.ts +46 -0
- package/src/guides/up_quick_start.sh +4 -4
- package/src/shared/cross_chain_test_harness.ts +92 -52
- package/src/shared/gas_portal_test_harness.ts +47 -31
- package/src/shared/uniswap_l1_l2.ts +127 -124
- package/src/simulators/lending_simulator.ts +11 -15
- package/src/simulators/token_simulator.ts +17 -12
- package/src/spartan/DEVELOP.md +116 -0
- package/src/spartan/setup_test_wallets.ts +144 -29
- package/src/spartan/utils.ts +194 -116
- package/dest/e2e_prover/e2e_prover_test.d.ts.map +0 -1
- package/dest/sample-dapp/connect.js +0 -12
- package/dest/sample-dapp/contracts.js +0 -10
- package/dest/sample-dapp/deploy.js +0 -35
- package/dest/sample-dapp/index.js +0 -98
- package/src/sample-dapp/connect.mjs +0 -16
- package/src/sample-dapp/contracts.mjs +0 -14
- package/src/sample-dapp/deploy.mjs +0 -40
- package/src/sample-dapp/index.mjs +0 -128
package/src/spartan/utils.ts
CHANGED
|
@@ -1,89 +1,82 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type { RollupCheatCodes } from '@aztec/aztec
|
|
1
|
+
import { createLogger, sleep } from '@aztec/aztec.js';
|
|
2
|
+
import type { RollupCheatCodes } from '@aztec/aztec/testing';
|
|
3
|
+
import type { L1ContractAddresses, ViemPublicClient } from '@aztec/ethereum';
|
|
3
4
|
import type { Logger } from '@aztec/foundation/log';
|
|
4
|
-
import
|
|
5
|
+
import { makeBackoff, retry } from '@aztec/foundation/retry';
|
|
6
|
+
import { schemas } from '@aztec/foundation/schemas';
|
|
7
|
+
import {
|
|
8
|
+
type AztecNodeAdmin,
|
|
9
|
+
type AztecNodeAdminConfig,
|
|
10
|
+
createAztecNodeAdminClient,
|
|
11
|
+
createAztecNodeClient,
|
|
12
|
+
} from '@aztec/stdlib/interfaces/client';
|
|
5
13
|
|
|
6
14
|
import { ChildProcess, exec, execSync, spawn } from 'child_process';
|
|
7
15
|
import path from 'path';
|
|
8
16
|
import { promisify } from 'util';
|
|
17
|
+
import { createPublicClient, fallback, http } from 'viem';
|
|
9
18
|
import { z } from 'zod';
|
|
10
19
|
|
|
11
|
-
import { AlertChecker, type AlertConfig } from '../quality_of_service/alert_checker.js';
|
|
12
|
-
|
|
13
20
|
const execAsync = promisify(exec);
|
|
14
21
|
|
|
15
22
|
const logger = createLogger('e2e:k8s-utils');
|
|
16
23
|
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
return true;
|
|
23
|
-
} catch {
|
|
24
|
-
return false;
|
|
25
|
-
}
|
|
26
|
-
}),
|
|
27
|
-
'ETHEREUM_HOSTS must be a comma-separated list of valid URLs',
|
|
28
|
-
);
|
|
29
|
-
|
|
30
|
-
const k8sLocalConfigSchema = z.object({
|
|
31
|
-
ETHEREUM_SLOT_DURATION: z.coerce.number().min(1, 'ETHEREUM_SLOT_DURATION env variable must be set'),
|
|
32
|
-
AZTEC_SLOT_DURATION: z.coerce.number().min(1, 'AZTEC_SLOT_DURATION env variable must be set'),
|
|
33
|
-
AZTEC_EPOCH_DURATION: z.coerce.number().min(1, 'AZTEC_EPOCH_DURATION env variable must be set'),
|
|
34
|
-
AZTEC_PROOF_SUBMISSION_WINDOW: z.coerce.number().min(1, 'AZTEC_PROOF_SUBMISSION_WINDOW env variable must be set'),
|
|
35
|
-
INSTANCE_NAME: z.string().min(1, 'INSTANCE_NAME env variable must be set'),
|
|
36
|
-
NAMESPACE: z.string().min(1, 'NAMESPACE env variable must be set'),
|
|
37
|
-
CONTAINER_NODE_PORT: z.coerce.number().default(8080),
|
|
38
|
-
CONTAINER_SEQUENCER_PORT: z.coerce.number().default(8080),
|
|
39
|
-
CONTAINER_PROVER_NODE_PORT: z.coerce.number().default(8080),
|
|
40
|
-
CONTAINER_PXE_PORT: z.coerce.number().default(8080),
|
|
41
|
-
CONTAINER_ETHEREUM_PORT: z.coerce.number().default(8545),
|
|
42
|
-
CONTAINER_METRICS_PORT: z.coerce.number().default(80),
|
|
43
|
-
GRAFANA_PASSWORD: z.string().optional(),
|
|
44
|
-
METRICS_API_PATH: z.string().default('/api/datasources/proxy/uid/spartan-metrics-prometheus/api/v1'),
|
|
45
|
-
SPARTAN_DIR: z.string().min(1, 'SPARTAN_DIR env variable must be set'),
|
|
46
|
-
ETHEREUM_HOSTS: ethereumHostsSchema.optional(),
|
|
47
|
-
L1_ACCOUNT_MNEMONIC: z.string().default('test test test test test test test test test test test junk'),
|
|
48
|
-
SEPOLIA_RUN: z.string().default('false'),
|
|
49
|
-
K8S: z.literal('local'),
|
|
24
|
+
const testConfigSchema = z.object({
|
|
25
|
+
NAMESPACE: z.string().default('scenario'),
|
|
26
|
+
REAL_VERIFIER: schemas.Boolean.optional().default(true),
|
|
27
|
+
CREATE_ETH_DEVNET: schemas.Boolean.optional().default(false),
|
|
28
|
+
L1_RPC_URLS_JSON: z.string().optional(),
|
|
50
29
|
});
|
|
51
30
|
|
|
52
|
-
|
|
53
|
-
K8S: z.literal('gcloud'),
|
|
54
|
-
CLUSTER_NAME: z.string().min(1, 'CLUSTER_NAME env variable must be set'),
|
|
55
|
-
REGION: z.string().min(1, 'REGION env variable must be set'),
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
const directConfigSchema = z.object({
|
|
59
|
-
PXE_URL: z.string().url('PXE_URL must be a valid URL'),
|
|
60
|
-
NODE_URL: z.string().url('NODE_URL must be a valid URL'),
|
|
61
|
-
ETHEREUM_HOSTS: ethereumHostsSchema,
|
|
62
|
-
K8S: z.literal('false'),
|
|
63
|
-
});
|
|
31
|
+
export type TestConfig = z.infer<typeof testConfigSchema>;
|
|
64
32
|
|
|
65
|
-
|
|
33
|
+
export function setupEnvironment(env: unknown): TestConfig {
|
|
34
|
+
const config = testConfigSchema.parse(env);
|
|
35
|
+
logger.warn(`Loaded env config`, config);
|
|
36
|
+
return config;
|
|
37
|
+
}
|
|
66
38
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
39
|
+
/**
|
|
40
|
+
* @param path - The path to the script, relative to the project root
|
|
41
|
+
* @param args - The arguments to pass to the script
|
|
42
|
+
* @param logger - The logger to use
|
|
43
|
+
* @returns The exit code of the script
|
|
44
|
+
*/
|
|
45
|
+
function runScript(path: string, args: string[], logger: Logger, env?: Record<string, string>) {
|
|
46
|
+
const childProcess = spawn(path, args, {
|
|
47
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
48
|
+
env: env ? { ...process.env, ...env } : process.env,
|
|
49
|
+
});
|
|
50
|
+
return new Promise<number>((resolve, reject) => {
|
|
51
|
+
childProcess.on('close', (code: number | null) => resolve(code ?? 0));
|
|
52
|
+
childProcess.on('error', reject);
|
|
53
|
+
childProcess.stdout?.on('data', (data: Buffer) => {
|
|
54
|
+
logger.info(data.toString());
|
|
55
|
+
});
|
|
56
|
+
childProcess.stderr?.on('data', (data: Buffer) => {
|
|
57
|
+
logger.error(data.toString());
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
}
|
|
71
61
|
|
|
72
|
-
export function
|
|
73
|
-
return
|
|
62
|
+
export function getAztecBin() {
|
|
63
|
+
return path.join(getGitProjectRoot(), 'yarn-project/aztec/dest/bin/index.js');
|
|
74
64
|
}
|
|
75
65
|
|
|
76
|
-
|
|
77
|
-
|
|
66
|
+
/**
|
|
67
|
+
* Runs the Aztec binary
|
|
68
|
+
* @param args - The arguments to pass to the Aztec binary
|
|
69
|
+
* @param logger - The logger to use
|
|
70
|
+
* @param env - Optional environment variables to set for the process
|
|
71
|
+
* @returns The exit code of the Aztec binary
|
|
72
|
+
*/
|
|
73
|
+
export function runAztecBin(args: string[], logger: Logger, env?: Record<string, string>) {
|
|
74
|
+
return runScript('node', [getAztecBin(), ...args], logger, env);
|
|
78
75
|
}
|
|
79
76
|
|
|
80
|
-
export function
|
|
81
|
-
const
|
|
82
|
-
|
|
83
|
-
const command = `gcloud container clusters get-credentials ${config.CLUSTER_NAME} --region=${config.REGION}`;
|
|
84
|
-
execSync(command);
|
|
85
|
-
}
|
|
86
|
-
return config;
|
|
77
|
+
export function runProjectScript(script: string, args: string[], logger: Logger, env?: Record<string, string>) {
|
|
78
|
+
const scriptPath = script.startsWith('/') ? script : path.join(getGitProjectRoot(), script);
|
|
79
|
+
return runScript(scriptPath, args, logger, env);
|
|
87
80
|
}
|
|
88
81
|
|
|
89
82
|
export async function startPortForward({
|
|
@@ -103,7 +96,7 @@ export async function startPortForward({
|
|
|
103
96
|
}> {
|
|
104
97
|
const hostPortAsString = hostPort ? hostPort.toString() : '';
|
|
105
98
|
|
|
106
|
-
logger.
|
|
99
|
+
logger.debug(`kubectl port-forward -n ${namespace} ${resource} ${hostPortAsString}:${containerPort}`);
|
|
107
100
|
|
|
108
101
|
const process = spawn(
|
|
109
102
|
'kubectl',
|
|
@@ -121,21 +114,20 @@ export async function startPortForward({
|
|
|
121
114
|
const str = data.toString() as string;
|
|
122
115
|
if (!isResolved && str.includes('Forwarding from')) {
|
|
123
116
|
isResolved = true;
|
|
124
|
-
logger.
|
|
117
|
+
logger.debug(`Port forward for ${resource}: ${str}`);
|
|
125
118
|
const port = str.search(/:\d+/);
|
|
126
119
|
if (port === -1) {
|
|
127
120
|
throw new Error('Port not found in port forward output');
|
|
128
121
|
}
|
|
129
122
|
const portNumber = parseInt(str.slice(port + 1));
|
|
130
|
-
logger.
|
|
131
|
-
logger.info(`Port forward connected: ${portNumber}`);
|
|
123
|
+
logger.verbose(`Port forwarded for ${resource} at ${portNumber}:${containerPort}`);
|
|
132
124
|
resolve(portNumber);
|
|
133
125
|
} else {
|
|
134
126
|
logger.silent(str);
|
|
135
127
|
}
|
|
136
128
|
});
|
|
137
129
|
process.stderr?.on('data', data => {
|
|
138
|
-
logger.
|
|
130
|
+
logger.verbose(`Port forward for ${resource}: ${data.toString()}`);
|
|
139
131
|
// It's a strange thing:
|
|
140
132
|
// If we don't pipe stderr, then the port forwarding does not work.
|
|
141
133
|
// Log to silent because this doesn't actually report errors,
|
|
@@ -145,16 +137,16 @@ export async function startPortForward({
|
|
|
145
137
|
process.on('close', () => {
|
|
146
138
|
if (!isResolved) {
|
|
147
139
|
isResolved = true;
|
|
148
|
-
logger.warn(
|
|
140
|
+
logger.warn(`Port forward for ${resource} closed before connection established`);
|
|
149
141
|
resolve(0);
|
|
150
142
|
}
|
|
151
143
|
});
|
|
152
144
|
process.on('error', error => {
|
|
153
|
-
logger.error(`Port forward error: ${error}`);
|
|
145
|
+
logger.error(`Port forward for ${resource} error: ${error}`);
|
|
154
146
|
resolve(0);
|
|
155
147
|
});
|
|
156
148
|
process.on('exit', code => {
|
|
157
|
-
logger.
|
|
149
|
+
logger.verbose(`Port forward for ${resource} exited with code ${code}`);
|
|
158
150
|
resolve(0);
|
|
159
151
|
});
|
|
160
152
|
});
|
|
@@ -164,6 +156,22 @@ export async function startPortForward({
|
|
|
164
156
|
return { process, port };
|
|
165
157
|
}
|
|
166
158
|
|
|
159
|
+
export function startPortForwardForRPC(namespace: string) {
|
|
160
|
+
return startPortForward({
|
|
161
|
+
resource: `services/${namespace}-rpc-aztec-node`,
|
|
162
|
+
namespace,
|
|
163
|
+
containerPort: 8080,
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
export function startPortForwardForEthereum(namespace: string) {
|
|
168
|
+
return startPortForward({
|
|
169
|
+
resource: `services/${namespace}-eth-execution`,
|
|
170
|
+
namespace,
|
|
171
|
+
containerPort: 8545,
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
|
|
167
175
|
export async function deleteResourceByName({
|
|
168
176
|
resource,
|
|
169
177
|
namespace,
|
|
@@ -187,12 +195,18 @@ export async function deleteResourceByLabel({
|
|
|
187
195
|
resource,
|
|
188
196
|
namespace,
|
|
189
197
|
label,
|
|
198
|
+
timeout = '5m',
|
|
199
|
+
force = false,
|
|
190
200
|
}: {
|
|
191
201
|
resource: string;
|
|
192
202
|
namespace: string;
|
|
193
203
|
label: string;
|
|
204
|
+
timeout?: string;
|
|
205
|
+
force?: boolean;
|
|
194
206
|
}) {
|
|
195
|
-
const command = `kubectl delete ${resource} -l ${label} -n ${namespace} --ignore-not-found=true --wait=true
|
|
207
|
+
const command = `kubectl delete ${resource} -l ${label} -n ${namespace} --ignore-not-found=true --wait=true --timeout=${timeout} ${
|
|
208
|
+
force ? '--force' : ''
|
|
209
|
+
}`;
|
|
196
210
|
logger.info(`command: ${command}`);
|
|
197
211
|
const { stdout } = await execAsync(command);
|
|
198
212
|
return stdout;
|
|
@@ -304,13 +318,13 @@ export async function installChaosMeshChart({
|
|
|
304
318
|
const deleteArgs = {
|
|
305
319
|
resource: 'podchaos',
|
|
306
320
|
namespace: chaosMeshNamespace,
|
|
307
|
-
|
|
321
|
+
label: `app.kubernetes.io/instance=${instanceName}`,
|
|
308
322
|
};
|
|
309
323
|
logger.info(`Deleting podchaos resource`);
|
|
310
|
-
await
|
|
324
|
+
await deleteResourceByLabel(deleteArgs).catch(e => {
|
|
311
325
|
logger.error(`Error deleting podchaos resource: ${e}`);
|
|
312
326
|
logger.info(`Force deleting podchaos resource`);
|
|
313
|
-
return
|
|
327
|
+
return deleteResourceByLabel({ ...deleteArgs, force: true });
|
|
314
328
|
});
|
|
315
329
|
}
|
|
316
330
|
|
|
@@ -412,10 +426,12 @@ export function applyValidatorKill({
|
|
|
412
426
|
namespace,
|
|
413
427
|
spartanDir,
|
|
414
428
|
logger,
|
|
429
|
+
values,
|
|
415
430
|
}: {
|
|
416
431
|
namespace: string;
|
|
417
432
|
spartanDir: string;
|
|
418
433
|
logger: Logger;
|
|
434
|
+
values?: Record<string, string | number>;
|
|
419
435
|
}) {
|
|
420
436
|
return installChaosMeshChart({
|
|
421
437
|
instanceName: 'validator-kill',
|
|
@@ -423,6 +439,7 @@ export function applyValidatorKill({
|
|
|
423
439
|
valuesFile: 'validator-kill.yaml',
|
|
424
440
|
helmChartDir: getChartDir(spartanDir, 'aztec-chaos-scenarios'),
|
|
425
441
|
logger,
|
|
442
|
+
values,
|
|
426
443
|
});
|
|
427
444
|
}
|
|
428
445
|
|
|
@@ -497,64 +514,109 @@ export async function enableValidatorDynamicBootNode(
|
|
|
497
514
|
logger.info(`Validator dynamic boot node enabled`);
|
|
498
515
|
}
|
|
499
516
|
|
|
500
|
-
export async function
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
});
|
|
507
|
-
const alertChecker = new AlertChecker(logger, {
|
|
508
|
-
grafanaEndpoint: `http://localhost:${port}${config.METRICS_API_PATH}`,
|
|
509
|
-
grafanaCredentials: `admin:${config.GRAFANA_PASSWORD}`,
|
|
510
|
-
});
|
|
511
|
-
await alertChecker.runAlertCheck(alerts);
|
|
512
|
-
process.kill();
|
|
513
|
-
} else {
|
|
514
|
-
logger.info('Not running alert check in non-k8s environment');
|
|
515
|
-
}
|
|
517
|
+
export async function getSequencers(namespace: string) {
|
|
518
|
+
const command = `kubectl get pods -l app.kubernetes.io/component=validator -n ${namespace} -o jsonpath='{.items[*].metadata.name}'`;
|
|
519
|
+
const { stdout } = await execAsync(command);
|
|
520
|
+
const sequencers = stdout.split(' ');
|
|
521
|
+
logger.verbose(`Found sequencer pods ${sequencers.join(', ')}`);
|
|
522
|
+
return sequencers;
|
|
516
523
|
}
|
|
517
524
|
|
|
518
|
-
export
|
|
519
|
-
|
|
520
|
-
|
|
525
|
+
export function updateSequencersConfig(env: TestConfig, config: Partial<AztecNodeAdminConfig>) {
|
|
526
|
+
return withSequencersAdmin(env, async client => {
|
|
527
|
+
await client.setConfig(config);
|
|
528
|
+
return client.getConfig();
|
|
529
|
+
});
|
|
521
530
|
}
|
|
522
531
|
|
|
523
|
-
export
|
|
524
|
-
|
|
525
|
-
const { stdout } = await execAsync(command);
|
|
526
|
-
return stdout.split(' ');
|
|
532
|
+
export function getSequencersConfig(env: TestConfig) {
|
|
533
|
+
return withSequencersAdmin(env, client => client.getConfig());
|
|
527
534
|
}
|
|
528
535
|
|
|
529
|
-
export async function
|
|
530
|
-
|
|
531
|
-
namespace
|
|
532
|
-
config: Partial<SequencerConfig>;
|
|
533
|
-
}) {
|
|
534
|
-
const { containerPort, namespace, config } = args;
|
|
536
|
+
export async function withSequencersAdmin<T>(env: TestConfig, fn: (node: AztecNodeAdmin) => Promise<T>): Promise<T[]> {
|
|
537
|
+
const adminContainerPort = 8880;
|
|
538
|
+
const namespace = env.NAMESPACE;
|
|
535
539
|
const sequencers = await getSequencers(namespace);
|
|
540
|
+
const results = [];
|
|
541
|
+
|
|
536
542
|
for (const sequencer of sequencers) {
|
|
537
543
|
const { process, port } = await startPortForward({
|
|
538
544
|
resource: `pod/${sequencer}`,
|
|
539
545
|
namespace,
|
|
540
|
-
containerPort,
|
|
546
|
+
containerPort: adminContainerPort,
|
|
541
547
|
});
|
|
542
548
|
|
|
543
549
|
const url = `http://localhost:${port}`;
|
|
544
|
-
await
|
|
550
|
+
await retry(
|
|
551
|
+
() => fetch(`${url}/status`).then(res => res.status === 200),
|
|
552
|
+
'forward node admin port',
|
|
553
|
+
makeBackoff([1, 1, 2, 6]),
|
|
554
|
+
logger,
|
|
555
|
+
true,
|
|
556
|
+
);
|
|
557
|
+
const client = createAztecNodeAdminClient(url);
|
|
558
|
+
results.push(await fn(client));
|
|
545
559
|
process.kill();
|
|
546
560
|
}
|
|
561
|
+
|
|
562
|
+
return results;
|
|
547
563
|
}
|
|
548
564
|
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
565
|
+
/**
|
|
566
|
+
* Returns a public viem client to the eth execution node. If it was part of a local eth devnet,
|
|
567
|
+
* it first port-forwards the service and points to it. Otherwise, just uses the external RPC url.
|
|
568
|
+
*/
|
|
569
|
+
export async function getPublicViemClient(
|
|
570
|
+
env: TestConfig,
|
|
571
|
+
/** If set, will push the new process into it */
|
|
572
|
+
processes?: ChildProcess[],
|
|
573
|
+
): Promise<{ url: string; client: ViemPublicClient; process?: ChildProcess }> {
|
|
574
|
+
const { NAMESPACE, CREATE_ETH_DEVNET, L1_RPC_URLS_JSON } = env;
|
|
575
|
+
if (CREATE_ETH_DEVNET) {
|
|
576
|
+
logger.info(`Creating port forward to eth execution node`);
|
|
577
|
+
const { process, port } = await startPortForward({
|
|
578
|
+
resource: `svc/${NAMESPACE}-eth-execution`,
|
|
579
|
+
namespace: NAMESPACE,
|
|
580
|
+
containerPort: 8545,
|
|
555
581
|
});
|
|
582
|
+
const url = `http://127.0.0.1:${port}`;
|
|
583
|
+
const client: ViemPublicClient = createPublicClient({ transport: fallback([http(url)]) });
|
|
584
|
+
if (processes) {
|
|
585
|
+
processes.push(process);
|
|
586
|
+
}
|
|
587
|
+
return { url, client, process };
|
|
556
588
|
} else {
|
|
557
|
-
|
|
589
|
+
logger.info(`Connecting to the eth execution node at ${L1_RPC_URLS_JSON}`);
|
|
590
|
+
if (!L1_RPC_URLS_JSON) {
|
|
591
|
+
throw new Error(`L1_RPC_URLS_JSON is not defined`);
|
|
592
|
+
}
|
|
593
|
+
const client: ViemPublicClient = createPublicClient({ transport: fallback([http(L1_RPC_URLS_JSON)]) });
|
|
594
|
+
return { url: L1_RPC_URLS_JSON, client };
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
/** Queries an Aztec node for the L1 deployment addresses */
|
|
599
|
+
export async function getL1DeploymentAddresses(env: TestConfig): Promise<L1ContractAddresses> {
|
|
600
|
+
let forwardProcess: ChildProcess | undefined;
|
|
601
|
+
try {
|
|
602
|
+
const [sequencer] = await getSequencers(env.NAMESPACE);
|
|
603
|
+
const { process, port } = await startPortForward({
|
|
604
|
+
resource: `pod/${sequencer}`,
|
|
605
|
+
namespace: env.NAMESPACE,
|
|
606
|
+
containerPort: 8080,
|
|
607
|
+
});
|
|
608
|
+
|
|
609
|
+
forwardProcess = process;
|
|
610
|
+
const url = `http://127.0.0.1:${port}`;
|
|
611
|
+
const node = createAztecNodeClient(url);
|
|
612
|
+
return await retry(
|
|
613
|
+
() => node.getNodeInfo().then(i => i.l1ContractAddresses),
|
|
614
|
+
'get node info',
|
|
615
|
+
makeBackoff([1, 3, 6]),
|
|
616
|
+
logger,
|
|
617
|
+
);
|
|
618
|
+
} finally {
|
|
619
|
+
forwardProcess?.kill();
|
|
558
620
|
}
|
|
559
621
|
}
|
|
560
622
|
|
|
@@ -580,3 +642,19 @@ export async function rollAztecPods(namespace: string) {
|
|
|
580
642
|
await waitForResourceByLabel({ resource: 'pods', namespace: namespace, label: 'app=validator' });
|
|
581
643
|
await waitForResourceByLabel({ resource: 'pods', namespace: namespace, label: 'app=pxe' });
|
|
582
644
|
}
|
|
645
|
+
|
|
646
|
+
/**
|
|
647
|
+
* Returns the absolute path to the git repository root
|
|
648
|
+
*/
|
|
649
|
+
export function getGitProjectRoot(): string {
|
|
650
|
+
try {
|
|
651
|
+
const rootDir = execSync('git rev-parse --show-toplevel', {
|
|
652
|
+
encoding: 'utf-8',
|
|
653
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
654
|
+
}).trim();
|
|
655
|
+
|
|
656
|
+
return rootDir;
|
|
657
|
+
} catch (error) {
|
|
658
|
+
throw new Error(`Failed to determine git project root: ${error}`);
|
|
659
|
+
}
|
|
660
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"e2e_prover_test.d.ts","sourceRoot":"","sources":["../../src/e2e_prover/e2e_prover_test.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE,OAAO,EACL,KAAK,0BAA0B,EAC/B,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,2BAA2B,EAChC,UAAU,EACV,KAAK,MAAM,EAIZ,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAqB,KAAK,6BAA6B,EAAuB,MAAM,kBAAkB,CAAC;AAE9G,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAG9D,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAQpD,OAAO,EAEL,KAAK,iBAAiB,EAIvB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AASlE;;;;;GAKG;AAEH,qBAAa,cAAc;IA4BvB,OAAO,CAAC,sBAAsB;IAE9B,OAAO,CAAC,UAAU;IA7BpB,MAAM,CAAC,UAAU,SAAU;IAC3B,MAAM,CAAC,YAAY,SAAS;IAC5B,MAAM,CAAC,cAAc,SAAO;IAC5B,OAAO,CAAC,eAAe,CAAmB;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,kBAAkB,EAAE,CAAM;IAC5C,OAAO,EAAE,0BAA0B,EAAE,CAAM;IAC3C,QAAQ,EAAE,eAAe,EAAE,CAAM;IACjC,eAAe,EAAG,aAAa,CAAC;IAChC,QAAQ,EAAG,cAAc,CAAC;IAC1B,SAAS,EAAG,SAAS,CAAC;IACtB,GAAG,EAAG,UAAU,CAAC;IACjB,UAAU,EAAG,UAAU,CAAC;IACxB,QAAQ,EAAG,cAAc,CAAC;IAC1B,OAAO,CAAC,gBAAgB,CAAqB;IAC7C,OAAO,CAAC,eAAe,CAAC,CAAsB;IAC9C,OAAO,CAAC,iBAAiB,CAAC,CAAsB;IAChD,oBAAoB,CAAC,EAAE,6BAA6B,CAAC;IACrD,YAAY,EAAE,aAAa,EAAE,CAAM;IACnC,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,mBAAmB,CAAc;IAClC,WAAW,EAAG,2BAA2B,CAAC;IAC1C,aAAa,EAAG,UAAU,CAAC;gBAGhC,QAAQ,EAAE,MAAM,EACR,sBAAsB,EAAE,MAAM,EACtC,QAAQ,EAAE,UAAU,EACZ,UAAU,UAAO;IAW3B;;;;OAIG;IACG,kBAAkB;IAqDlB,KAAK;YA0JG,WAAW;IAQzB,QAAQ,YACA,MAAM,SACL,CAAC,OAAO,EAAE,iBAAiB,KAAK,QAAQ,CAAC,CAAC,YACxC,CAAC,YAAY,EAAE,CAAC,EAAE,OAAO,EAAE,iBAAiB,KAAK,QAAQ,IAAI,CAAC,KACtE,QAAQ,IAAI,CAAC,CAAwD;IAElE,QAAQ;IAeR,iBAAiB;IAiDjB,cAAc;CA4BrB"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
// docs:start:all
|
|
2
|
-
import { createPXEClient } from '@aztec/aztec.js';
|
|
3
|
-
const { PXE_URL = 'http://localhost:8080' } = process.env;
|
|
4
|
-
async function main() {
|
|
5
|
-
const pxe = await createPXEClient(PXE_URL);
|
|
6
|
-
const { l1ChainId } = await pxe.getNodeInfo();
|
|
7
|
-
console.log(`Connected to chain ${l1ChainId}`);
|
|
8
|
-
}
|
|
9
|
-
main().catch((err)=>{
|
|
10
|
-
console.error(`Error in app: ${err}`);
|
|
11
|
-
process.exit(1);
|
|
12
|
-
}); // docs:end:all
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
// docs:start:imports
|
|
2
|
-
import { AztecAddress } from '@aztec/aztec.js';
|
|
3
|
-
import { TokenContract } from '@aztec/noir-contracts.js/Token';
|
|
4
|
-
import { readFileSync } from 'fs';
|
|
5
|
-
// docs:end:imports
|
|
6
|
-
// docs:start:get-tokens
|
|
7
|
-
export async function getToken(wallet) {
|
|
8
|
-
const addresses = JSON.parse(readFileSync('addresses.json'));
|
|
9
|
-
return TokenContract.at(AztecAddress.fromString(addresses.token), wallet);
|
|
10
|
-
} // docs:end:get-tokens
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
// docs:start:deploy-imports
|
|
2
|
-
import { getInitialTestAccountsWallets } from '@aztec/accounts/testing';
|
|
3
|
-
import { Contract, createPXEClient, waitForPXE } from '@aztec/aztec.js';
|
|
4
|
-
// docs:end:deploy-imports
|
|
5
|
-
import { TokenContractArtifact } from '@aztec/noir-contracts.js/Token';
|
|
6
|
-
import { writeFileSync } from 'fs';
|
|
7
|
-
import { fileURLToPath } from 'url';
|
|
8
|
-
// docs:start:dapp-deploy
|
|
9
|
-
const { PXE_URL = 'http://localhost:8080' } = process.env;
|
|
10
|
-
async function main() {
|
|
11
|
-
const pxe = createPXEClient(PXE_URL);
|
|
12
|
-
await waitForPXE(pxe);
|
|
13
|
-
const [ownerWallet] = await getInitialTestAccountsWallets(pxe);
|
|
14
|
-
const ownerAddress = ownerWallet.getAddress();
|
|
15
|
-
const token = await Contract.deploy(ownerWallet, TokenContractArtifact, [
|
|
16
|
-
ownerAddress,
|
|
17
|
-
'TokenName',
|
|
18
|
-
'TKN',
|
|
19
|
-
18
|
|
20
|
-
]).send().deployed();
|
|
21
|
-
console.log(`Token deployed at ${token.address.toString()}`);
|
|
22
|
-
const addresses = {
|
|
23
|
-
token: token.address.toString()
|
|
24
|
-
};
|
|
25
|
-
writeFileSync('addresses.json', JSON.stringify(addresses, null, 2));
|
|
26
|
-
}
|
|
27
|
-
// docs:end:dapp-deploy
|
|
28
|
-
// Execute main only if run directly
|
|
29
|
-
if (process.argv[1].replace(/\/index\.m?js$/, '') === fileURLToPath(import.meta.url).replace(/\/index\.m?js$/, '')) {
|
|
30
|
-
main().catch((err)=>{
|
|
31
|
-
console.error(`Error in deployment script: ${err}`);
|
|
32
|
-
process.exit(1);
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
export { main as deploy };
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
// docs:start:imports
|
|
2
|
-
import { getInitialTestAccountsWallets } from '@aztec/accounts/testing';
|
|
3
|
-
import { createPXEClient, waitForPXE } from '@aztec/aztec.js';
|
|
4
|
-
import { fileURLToPath } from '@aztec/foundation/url';
|
|
5
|
-
import { getToken } from './contracts.mjs';
|
|
6
|
-
// docs:end:imports
|
|
7
|
-
const { PXE_URL = 'http://localhost:8080' } = process.env;
|
|
8
|
-
// docs:start:showAccounts
|
|
9
|
-
async function showAccounts(pxe) {
|
|
10
|
-
const accounts = await pxe.getRegisteredAccounts();
|
|
11
|
-
console.log(`User accounts:\n${accounts.map((a)=>a.address).join('\n')}`);
|
|
12
|
-
}
|
|
13
|
-
// docs:end:showAccounts
|
|
14
|
-
// docs:start:showPrivateBalances
|
|
15
|
-
async function showPrivateBalances(pxe) {
|
|
16
|
-
const [owner] = await getInitialTestAccountsWallets(pxe);
|
|
17
|
-
const token = await getToken(owner);
|
|
18
|
-
const accounts = await pxe.getRegisteredAccounts();
|
|
19
|
-
for (const account of accounts){
|
|
20
|
-
// highlight-next-line:showPrivateBalances
|
|
21
|
-
const balance = await token.methods.balance_of_private(account.address).simulate();
|
|
22
|
-
console.log(`Balance of ${account.address}: ${balance}`);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
// docs:end:showPrivateBalances
|
|
26
|
-
// docs:start:mintPrivateFunds
|
|
27
|
-
async function mintPrivateFunds(pxe) {
|
|
28
|
-
const [ownerWallet] = await getInitialTestAccountsWallets(pxe);
|
|
29
|
-
const token = await getToken(ownerWallet);
|
|
30
|
-
await showPrivateBalances(pxe);
|
|
31
|
-
// We mint tokens to the owner
|
|
32
|
-
const mintAmount = 20n;
|
|
33
|
-
const from = ownerWallet.getAddress(); // we are setting from to owner here because we need a sender to calculate the tag
|
|
34
|
-
await token.methods.mint_to_private(from, ownerWallet.getAddress(), mintAmount).send().wait();
|
|
35
|
-
await showPrivateBalances(pxe);
|
|
36
|
-
}
|
|
37
|
-
// docs:end:mintPrivateFunds
|
|
38
|
-
// docs:start:transferPrivateFunds
|
|
39
|
-
async function transferPrivateFunds(pxe) {
|
|
40
|
-
const [owner, recipient] = await getInitialTestAccountsWallets(pxe);
|
|
41
|
-
const token = await getToken(owner);
|
|
42
|
-
await showPrivateBalances(pxe);
|
|
43
|
-
console.log(`Sending transaction, awaiting transaction to be mined`);
|
|
44
|
-
const receipt = await token.methods.transfer(recipient.getAddress(), 1).send().wait();
|
|
45
|
-
console.log(`Transaction ${receipt.txHash} has been mined on block ${receipt.blockNumber}`);
|
|
46
|
-
await showPrivateBalances(pxe);
|
|
47
|
-
}
|
|
48
|
-
// docs:end:transferPrivateFunds
|
|
49
|
-
// docs:start:showPublicBalances
|
|
50
|
-
async function showPublicBalances(pxe) {
|
|
51
|
-
const [owner] = await getInitialTestAccountsWallets(pxe);
|
|
52
|
-
const token = await getToken(owner);
|
|
53
|
-
const accounts = await pxe.getRegisteredAccounts();
|
|
54
|
-
for (const account of accounts){
|
|
55
|
-
// highlight-next-line:showPublicBalances
|
|
56
|
-
const balance = await token.methods.balance_of_public(account.address).simulate();
|
|
57
|
-
console.log(`Balance of ${account.address}: ${balance}`);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
// docs:end:showPublicBalances
|
|
61
|
-
// docs:start:mintPublicFunds
|
|
62
|
-
async function mintPublicFunds(pxe) {
|
|
63
|
-
const [owner] = await getInitialTestAccountsWallets(pxe);
|
|
64
|
-
const token = await getToken(owner);
|
|
65
|
-
await showPublicBalances(pxe);
|
|
66
|
-
console.log(`Sending transaction, awaiting transaction to be mined`);
|
|
67
|
-
const receipt = await token.methods.mint_to_public(owner.getAddress(), 100).send().wait();
|
|
68
|
-
console.log(`Transaction ${receipt.txHash} has been mined on block ${receipt.blockNumber}`);
|
|
69
|
-
await showPublicBalances(pxe);
|
|
70
|
-
// docs:start:showLogs
|
|
71
|
-
const blockNumber = await pxe.getBlockNumber();
|
|
72
|
-
const logs = (await pxe.getPublicLogs({
|
|
73
|
-
fromBlock: blockNumber - 1
|
|
74
|
-
})).logs;
|
|
75
|
-
const textLogs = logs.map((extendedLog)=>extendedLog.toHumanReadable().slice(0, 200));
|
|
76
|
-
for (const log of textLogs)console.log(`Log emitted: ${log}`);
|
|
77
|
-
// docs:end:showLogs
|
|
78
|
-
}
|
|
79
|
-
// docs:end:mintPublicFunds
|
|
80
|
-
async function main() {
|
|
81
|
-
const pxe = createPXEClient(PXE_URL);
|
|
82
|
-
await waitForPXE(pxe);
|
|
83
|
-
const { l1ChainId } = await pxe.getNodeInfo();
|
|
84
|
-
console.log(`Connected to chain ${l1ChainId}`);
|
|
85
|
-
await showAccounts(pxe);
|
|
86
|
-
await mintPrivateFunds(pxe);
|
|
87
|
-
await transferPrivateFunds(pxe);
|
|
88
|
-
await mintPublicFunds(pxe);
|
|
89
|
-
}
|
|
90
|
-
// Execute main only if run directly
|
|
91
|
-
if (process.argv[1].replace(/\/index\.m?js$/, '') === fileURLToPath(import.meta.url).replace(/\/index\.m?js$/, '')) {
|
|
92
|
-
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
93
|
-
main().then(()=>process.exit(0)).catch((err)=>{
|
|
94
|
-
console.error(`Error in app: ${err}`);
|
|
95
|
-
process.exit(1);
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
export { main };
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
// docs:start:all
|
|
2
|
-
import { createPXEClient } from '@aztec/aztec.js';
|
|
3
|
-
|
|
4
|
-
const { PXE_URL = 'http://localhost:8080' } = process.env;
|
|
5
|
-
|
|
6
|
-
async function main() {
|
|
7
|
-
const pxe = await createPXEClient(PXE_URL);
|
|
8
|
-
const { l1ChainId } = await pxe.getNodeInfo();
|
|
9
|
-
console.log(`Connected to chain ${l1ChainId}`);
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
main().catch(err => {
|
|
13
|
-
console.error(`Error in app: ${err}`);
|
|
14
|
-
process.exit(1);
|
|
15
|
-
});
|
|
16
|
-
// docs:end:all
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
// docs:start:imports
|
|
2
|
-
import { AztecAddress } from '@aztec/aztec.js';
|
|
3
|
-
import { TokenContract } from '@aztec/noir-contracts.js/Token';
|
|
4
|
-
|
|
5
|
-
import { readFileSync } from 'fs';
|
|
6
|
-
|
|
7
|
-
// docs:end:imports
|
|
8
|
-
|
|
9
|
-
// docs:start:get-tokens
|
|
10
|
-
export async function getToken(wallet) {
|
|
11
|
-
const addresses = JSON.parse(readFileSync('addresses.json'));
|
|
12
|
-
return TokenContract.at(AztecAddress.fromString(addresses.token), wallet);
|
|
13
|
-
}
|
|
14
|
-
// docs:end:get-tokens
|