@aztec/aztec 0.0.1-commit.5de5ca79e → 0.0.1-commit.6201a7b05
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/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 +13 -4
- 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 +13 -0
- 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 +3 -14
- package/dest/cli/cmds/standby.d.ts +1 -1
- package/dest/cli/cmds/standby.js +2 -2
- package/dest/cli/cmds/start_archiver.d.ts +1 -1
- package/dest/cli/cmds/start_archiver.d.ts.map +1 -1
- package/dest/cli/cmds/start_archiver.js +3 -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 +6 -20
- 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 +3 -15
- 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 +4 -3
- package/dest/cli/cmds/utils/collect_crate_dirs.d.ts +21 -0
- package/dest/cli/cmds/utils/collect_crate_dirs.d.ts.map +1 -0
- package/dest/cli/cmds/utils/collect_crate_dirs.js +114 -0
- package/dest/cli/cmds/utils/needs_recompile.d.ts +1 -1
- package/dest/cli/cmds/utils/needs_recompile.d.ts.map +1 -1
- package/dest/cli/cmds/utils/needs_recompile.js +9 -53
- package/dest/cli/cmds/utils/warn_if_aztec_version_mismatch.d.ts +4 -0
- package/dest/cli/cmds/utils/warn_if_aztec_version_mismatch.d.ts.map +1 -0
- package/dest/cli/cmds/utils/warn_if_aztec_version_mismatch.js +62 -0
- package/dest/local-network/local-network.d.ts +3 -4
- package/dest/local-network/local-network.d.ts.map +1 -1
- package/dest/local-network/local-network.js +3 -3
- package/dest/testing/anvil_test_watcher.d.ts +7 -3
- package/dest/testing/anvil_test_watcher.d.ts.map +1 -1
- package/dest/testing/anvil_test_watcher.js +40 -14
- package/dest/testing/cheat_codes.d.ts +11 -15
- package/dest/testing/cheat_codes.d.ts.map +1 -1
- package/dest/testing/cheat_codes.js +34 -32
- package/dest/testing/index.d.ts +2 -2
- package/dest/testing/index.d.ts.map +1 -1
- package/package.json +33 -33
- package/scripts/add_crate.sh +8 -58
- package/scripts/aztec.sh +5 -1
- 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/cli/aztec_start_action.ts +7 -4
- package/src/cli/aztec_start_options.ts +19 -2
- package/src/cli/cmds/compile.ts +4 -17
- package/src/cli/cmds/standby.ts +2 -2
- package/src/cli/cmds/start_archiver.ts +7 -1
- package/src/cli/cmds/start_node.ts +9 -11
- package/src/cli/cmds/start_prover_agent.ts +3 -6
- package/src/cli/cmds/start_txe.ts +5 -3
- package/src/cli/cmds/utils/collect_crate_dirs.ts +118 -0
- package/src/cli/cmds/utils/needs_recompile.ts +8 -61
- package/src/cli/cmds/utils/warn_if_aztec_version_mismatch.ts +77 -0
- package/src/local-network/local-network.ts +5 -5
- package/src/testing/anvil_test_watcher.ts +44 -13
- package/src/testing/cheat_codes.ts +42 -36
- package/src/testing/index.ts +1 -1
package/scripts/add_crate.sh
CHANGED
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
set -euo pipefail
|
|
3
3
|
|
|
4
4
|
# Creates a contract+test crate pair and adds them to an existing workspace.
|
|
5
|
-
# Usage: add_crate.sh <crate_name>
|
|
5
|
+
# Usage: add_crate.sh <crate_name> <template>
|
|
6
6
|
# Must be called from a workspace root that already has Nargo.toml with [workspace].
|
|
7
7
|
|
|
8
8
|
crate_name=$1
|
|
9
|
+
template=$2
|
|
9
10
|
|
|
10
11
|
if [ -z "$crate_name" ]; then
|
|
11
12
|
echo "Error: crate name is required"
|
|
@@ -31,64 +32,13 @@ fi
|
|
|
31
32
|
|
|
32
33
|
# Get the actual aztec version for the git tag.
|
|
33
34
|
AZTEC_VERSION=$(jq -r '.version' $(dirname $0)/../package.json)
|
|
35
|
+
TEMPLATE_DIR="$(dirname $0)/templates/$template"
|
|
34
36
|
|
|
35
|
-
#
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
type = "contract"
|
|
41
|
-
|
|
42
|
-
[dependencies]
|
|
43
|
-
aztec = { git="https://github.com/AztecProtocol/aztec-nr", tag="v${AZTEC_VERSION}", directory="aztec" }
|
|
44
|
-
CEOF
|
|
45
|
-
|
|
46
|
-
cat > "$contract_dir/src/main.nr" << 'EOF'
|
|
47
|
-
use aztec::macros::aztec;
|
|
48
|
-
|
|
49
|
-
#[aztec]
|
|
50
|
-
pub contract Main {
|
|
51
|
-
use aztec::macros::functions::{external, initializer};
|
|
52
|
-
|
|
53
|
-
#[initializer]
|
|
54
|
-
#[external("private")]
|
|
55
|
-
fn constructor() {}
|
|
56
|
-
}
|
|
57
|
-
EOF
|
|
58
|
-
|
|
59
|
-
# Create test crate
|
|
60
|
-
mkdir -p "$test_dir/src"
|
|
61
|
-
cat > "$test_dir/Nargo.toml" << TEOF
|
|
62
|
-
[package]
|
|
63
|
-
name = "${crate_name}_test"
|
|
64
|
-
type = "lib"
|
|
65
|
-
|
|
66
|
-
[dependencies]
|
|
67
|
-
aztec = { git="https://github.com/AztecProtocol/aztec-nr", tag="v${AZTEC_VERSION}", directory="aztec" }
|
|
68
|
-
${crate_name}_contract = { path = "../${contract_dir}" }
|
|
69
|
-
TEOF
|
|
70
|
-
|
|
71
|
-
cat > "$test_dir/src/lib.nr" << 'NOIR'
|
|
72
|
-
use aztec::test::helpers::test_environment::TestEnvironment;
|
|
73
|
-
use __CRATE_NAME___contract::Main;
|
|
74
|
-
|
|
75
|
-
#[test]
|
|
76
|
-
unconstrained fn test_constructor() {
|
|
77
|
-
let mut env = TestEnvironment::new();
|
|
78
|
-
let deployer = env.create_light_account();
|
|
79
|
-
|
|
80
|
-
// Deploy the contract with the default constructor:
|
|
81
|
-
let contract_address = env.deploy("@__CRATE_NAME___contract/Main").with_private_initializer(
|
|
82
|
-
deployer,
|
|
83
|
-
Main::interface().constructor(),
|
|
84
|
-
);
|
|
85
|
-
|
|
86
|
-
// Deploy without an initializer:
|
|
87
|
-
let contract_address = env.deploy("@__CRATE_NAME___contract/Main").without_initializer();
|
|
88
|
-
}
|
|
89
|
-
NOIR
|
|
90
|
-
|
|
91
|
-
sed -i "s/__CRATE_NAME__/${crate_name}/g" "$test_dir/src/lib.nr"
|
|
37
|
+
# Copy template crates and substitute placeholders
|
|
38
|
+
cp -r "$TEMPLATE_DIR/contract" "$contract_dir"
|
|
39
|
+
cp -r "$TEMPLATE_DIR/test" "$test_dir"
|
|
40
|
+
find "$contract_dir" "$test_dir" -type f -exec \
|
|
41
|
+
sed -i -e "s/__CRATE_NAME__/${crate_name}/g" -e "s/__AZTEC_VERSION__/${AZTEC_VERSION}/g" {} +
|
|
92
42
|
|
|
93
43
|
# Add members to workspace Nargo.toml
|
|
94
44
|
if grep -q 'members\s*=\s*\[\s*\]' Nargo.toml; then
|
package/scripts/aztec.sh
CHANGED
|
@@ -23,10 +23,14 @@ case $cmd in
|
|
|
23
23
|
# Attempt to compile, no-op if there are no changes
|
|
24
24
|
node --no-warnings "$script_dir/../dest/bin/index.js" compile
|
|
25
25
|
|
|
26
|
-
export LOG_LEVEL="${LOG_LEVEL:-"error;trace:
|
|
26
|
+
export LOG_LEVEL="${LOG_LEVEL:-"error;trace:^contract:"}"
|
|
27
27
|
aztec start --txe --port 8081 &
|
|
28
28
|
server_pid=$!
|
|
29
29
|
trap 'kill $server_pid &>/dev/null || true' EXIT
|
|
30
|
+
if ! command -v nc &>/dev/null; then
|
|
31
|
+
echo "Error: 'nc' (netcat) is required but not installed." >&2
|
|
32
|
+
exit 1
|
|
33
|
+
fi
|
|
30
34
|
while ! nc -z 127.0.0.1 8081 &>/dev/null; do sleep 0.2; done
|
|
31
35
|
export NARGO_FOREIGN_CALL_TIMEOUT=300000
|
|
32
36
|
nargo test --silence-warnings --oracle-resolver http://127.0.0.1:8081 --test-threads 16 "$@"
|
package/scripts/init.sh
CHANGED
|
@@ -16,11 +16,11 @@ Options:
|
|
|
16
16
|
-h, --help Print help
|
|
17
17
|
|
|
18
18
|
This command creates a new Aztec Noir project in the current directory with
|
|
19
|
-
a workspace containing a contract
|
|
20
|
-
|
|
19
|
+
a workspace containing a Counter contract example with tests. The Counter
|
|
20
|
+
demonstrates private state, private functions, and utility reads.
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
Use 'aztec new <name>' to create a blank contract project, or to add another
|
|
23
|
+
contract to an existing workspace.
|
|
24
24
|
EOF
|
|
25
25
|
exit 0
|
|
26
26
|
;;
|
|
@@ -36,4 +36,4 @@ done
|
|
|
36
36
|
package_name="$(basename $(pwd))"
|
|
37
37
|
|
|
38
38
|
echo "Initializing Aztec contract project..."
|
|
39
|
-
$script_path/setup_workspace.sh "$package_name"
|
|
39
|
+
$script_path/setup_workspace.sh "$package_name" counter
|
package/scripts/new.sh
CHANGED
|
@@ -68,7 +68,7 @@ fi
|
|
|
68
68
|
if [ -f "Nargo.toml" ] && grep -q '\[workspace\]' Nargo.toml; then
|
|
69
69
|
# Add crate pair to existing workspace
|
|
70
70
|
echo "Adding contract '$package_name' to existing workspace..."
|
|
71
|
-
$script_path/add_crate.sh "$package_name"
|
|
71
|
+
$script_path/add_crate.sh "$package_name" blank
|
|
72
72
|
else
|
|
73
73
|
# Create new workspace
|
|
74
74
|
if [ -d "$project_path" ] && [ "$(ls -A $project_path 2>/dev/null)" ]; then
|
|
@@ -79,5 +79,5 @@ else
|
|
|
79
79
|
echo "Creating new Aztec contract project at $project_path..."
|
|
80
80
|
mkdir -p "$project_path"
|
|
81
81
|
cd "$project_path"
|
|
82
|
-
$script_path/setup_workspace.sh "$package_name"
|
|
82
|
+
$script_path/setup_workspace.sh "$package_name" blank
|
|
83
83
|
fi
|
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
set -euo pipefail
|
|
3
3
|
|
|
4
4
|
# Creates an Aztec contract workspace with a contract crate and a test crate.
|
|
5
|
-
# Usage: setup_workspace.sh <package_name>
|
|
5
|
+
# Usage: setup_workspace.sh <package_name> <template>
|
|
6
6
|
# Must be called from the workspace root directory.
|
|
7
7
|
|
|
8
8
|
package_name=$1
|
|
9
|
+
template=$2
|
|
9
10
|
script_path=$(realpath $(dirname "$0"))
|
|
10
11
|
|
|
11
12
|
if [ -z "$package_name" ]; then
|
|
@@ -26,7 +27,7 @@ members = []
|
|
|
26
27
|
EOF
|
|
27
28
|
|
|
28
29
|
# Create the first crate pair
|
|
29
|
-
$script_path/add_crate.sh "$package_name"
|
|
30
|
+
$script_path/add_crate.sh "$package_name" "$template"
|
|
30
31
|
|
|
31
32
|
# Create README
|
|
32
33
|
cat > README.md << REOF
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
use aztec::test::helpers::test_environment::TestEnvironment;
|
|
2
|
+
use __CRATE_NAME___contract::Main;
|
|
3
|
+
|
|
4
|
+
#[test]
|
|
5
|
+
unconstrained fn test_constructor() {
|
|
6
|
+
let mut env = TestEnvironment::new();
|
|
7
|
+
let deployer = env.create_light_account();
|
|
8
|
+
|
|
9
|
+
let _contract_address = env.deploy("@__CRATE_NAME___contract/Main")
|
|
10
|
+
.with_private_initializer(deployer, Main::interface().constructor());
|
|
11
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
[package]
|
|
2
|
+
name = "__CRATE_NAME___contract"
|
|
3
|
+
type = "contract"
|
|
4
|
+
|
|
5
|
+
[dependencies]
|
|
6
|
+
aztec = { git="https://github.com/AztecProtocol/aztec-nr", tag="v__AZTEC_VERSION__", directory="aztec" }
|
|
7
|
+
balance_set = { git="https://github.com/AztecProtocol/aztec-nr", tag="v__AZTEC_VERSION__", directory="balance-set" }
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
use aztec::macros::aztec;
|
|
2
|
+
|
|
3
|
+
#[aztec]
|
|
4
|
+
pub contract Counter {
|
|
5
|
+
use aztec::{
|
|
6
|
+
macros::{functions::{external, initializer}, storage::storage},
|
|
7
|
+
messages::message_delivery::MessageDelivery,
|
|
8
|
+
protocol::address::AztecAddress,
|
|
9
|
+
state_vars::Owned,
|
|
10
|
+
};
|
|
11
|
+
use balance_set::BalanceSet;
|
|
12
|
+
|
|
13
|
+
#[storage]
|
|
14
|
+
struct Storage<Context> {
|
|
15
|
+
// Each owner has their own counter, stored as private encrypted notes.
|
|
16
|
+
// Owned: dictates who will receive the encrypted notes.
|
|
17
|
+
// BalanceSet: manages the underlying notes, providing add/sub/balance_of.
|
|
18
|
+
counters: Owned<BalanceSet<Context>, Context>,
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// Sets the owner's counter to an initial value.
|
|
22
|
+
//
|
|
23
|
+
// #[external("private")]: executes on the user's device, inputs are hidden from everyone.
|
|
24
|
+
#[initializer]
|
|
25
|
+
#[external("private")]
|
|
26
|
+
fn constructor(initial_value: u128, owner: AztecAddress) {
|
|
27
|
+
// Delivers the note to the recipient onchain with provable correctness.
|
|
28
|
+
// Without delivery, the recipient can't find or decrypt the note.
|
|
29
|
+
self.storage.counters.at(owner).add(initial_value).deliver(
|
|
30
|
+
MessageDelivery.ONCHAIN_CONSTRAINED,
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// Adds 1 to the owner's counter.
|
|
35
|
+
#[external("private")]
|
|
36
|
+
fn increment(owner: AztecAddress) {
|
|
37
|
+
self.storage.counters.at(owner).add(1).deliver(MessageDelivery.ONCHAIN_CONSTRAINED);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Returns the current value of the owner's counter.
|
|
41
|
+
//
|
|
42
|
+
// #[external("utility")]: runs off-chain, no transaction created, no cost.
|
|
43
|
+
// Only the owner can decrypt and read their own counter.
|
|
44
|
+
#[external("utility")]
|
|
45
|
+
unconstrained fn get_counter(owner: AztecAddress) -> u128 {
|
|
46
|
+
self.storage.counters.at(owner).balance_of()
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
use aztec::{protocol::address::AztecAddress, test::helpers::test_environment::TestEnvironment};
|
|
2
|
+
use __CRATE_NAME___contract::Counter;
|
|
3
|
+
|
|
4
|
+
unconstrained fn setup(initial_value: u128) -> (TestEnvironment, AztecAddress, AztecAddress) {
|
|
5
|
+
let mut env = TestEnvironment::new();
|
|
6
|
+
let owner = env.create_light_account();
|
|
7
|
+
|
|
8
|
+
let contract_address = env.deploy("@__CRATE_NAME___contract/Counter")
|
|
9
|
+
.with_private_initializer(owner, Counter::interface().constructor(initial_value, owner));
|
|
10
|
+
|
|
11
|
+
(env, contract_address, owner)
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
#[test]
|
|
15
|
+
unconstrained fn test_constructor() {
|
|
16
|
+
let initial_value = 5;
|
|
17
|
+
let (env, contract_address, owner) = setup(initial_value);
|
|
18
|
+
|
|
19
|
+
let counter = env.execute_utility(Counter::at(contract_address).get_counter(owner));
|
|
20
|
+
assert_eq(counter, initial_value);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
#[test]
|
|
24
|
+
unconstrained fn test_increment() {
|
|
25
|
+
let initial_value = 5;
|
|
26
|
+
let (mut env, contract_address, owner) = setup(initial_value);
|
|
27
|
+
|
|
28
|
+
env.call_private(owner, Counter::at(contract_address).increment(owner));
|
|
29
|
+
|
|
30
|
+
let counter = env.execute_utility(Counter::at(contract_address).get_counter(owner));
|
|
31
|
+
assert_eq(counter, initial_value + 1);
|
|
32
|
+
}
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
} from '@aztec/foundation/json-rpc/server';
|
|
8
8
|
import type { LogFn, Logger } from '@aztec/foundation/log';
|
|
9
9
|
import type { ChainConfig } from '@aztec/stdlib/config';
|
|
10
|
-
import { AztecNodeAdminApiSchema, AztecNodeApiSchema } from '@aztec/stdlib/interfaces/client';
|
|
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 { getOtelJsonRpcPropagationMiddleware } from '@aztec/telemetry-client';
|
|
@@ -27,8 +27,7 @@ export async function aztecStart(options: any, userLog: LogFn, debugLogger: Logg
|
|
|
27
27
|
let config: ChainConfig | undefined = undefined;
|
|
28
28
|
|
|
29
29
|
if (options.localNetwork) {
|
|
30
|
-
const localNetwork = extractNamespacedOptions(options, '
|
|
31
|
-
localNetwork.testAccounts = true;
|
|
30
|
+
const localNetwork = extractNamespacedOptions(options, 'localNetwork');
|
|
32
31
|
userLog(`${splash}\n${github}\n\n`);
|
|
33
32
|
userLog(`Setting up Aztec local network ${packageVersion ?? 'unknown'}, please stand by...`);
|
|
34
33
|
|
|
@@ -51,6 +50,7 @@ export async function aztecStart(options: any, userLog: LogFn, debugLogger: Logg
|
|
|
51
50
|
signalHandlers.push(stop);
|
|
52
51
|
services.node = [node, AztecNodeApiSchema];
|
|
53
52
|
adminServices.node = [node, AztecNodeAdminApiSchema];
|
|
53
|
+
services.nodeDebug = [node, AztecNodeDebugApiSchema];
|
|
54
54
|
} else {
|
|
55
55
|
// Route --prover-node through startNode
|
|
56
56
|
if (options.proverNode && !options.node) {
|
|
@@ -61,6 +61,9 @@ export async function aztecStart(options: any, userLog: LogFn, debugLogger: Logg
|
|
|
61
61
|
const { startNode } = await import('./cmds/start_node.js');
|
|
62
62
|
const networkName = getActiveNetworkName(options.network);
|
|
63
63
|
({ config } = await startNode(options, signalHandlers, services, adminServices, userLog, networkName));
|
|
64
|
+
if (options.nodeDebug && services.node) {
|
|
65
|
+
services.nodeDebug = [services.node[0], AztecNodeDebugApiSchema];
|
|
66
|
+
}
|
|
64
67
|
} else if (options.bot) {
|
|
65
68
|
const { startBot } = await import('./cmds/start_bot.js');
|
|
66
69
|
await startBot(options, signalHandlers, services, userLog);
|
|
@@ -78,7 +81,7 @@ export async function aztecStart(options: any, userLog: LogFn, debugLogger: Logg
|
|
|
78
81
|
await startProverBroker(options, signalHandlers, services, userLog);
|
|
79
82
|
} else if (options.txe) {
|
|
80
83
|
const { startTXE } = await import('./cmds/start_txe.js');
|
|
81
|
-
await startTXE(options, debugLogger);
|
|
84
|
+
await startTXE(options, signalHandlers, debugLogger);
|
|
82
85
|
} else if (options.sequencer) {
|
|
83
86
|
userLog(`Cannot run a standalone sequencer without a node`);
|
|
84
87
|
process.exit(1);
|
|
@@ -36,7 +36,7 @@ export interface AztecStartOption {
|
|
|
36
36
|
parseVal?: (val: string) => any;
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
export const getOptions = (namespace: string, configMappings: Record<string, ConfigMapping
|
|
39
|
+
export const getOptions = (namespace: string, configMappings: Record<string, ConfigMapping<unknown>>) => {
|
|
40
40
|
const options: AztecStartOption[] = [];
|
|
41
41
|
for (const [key, { env, defaultValue: def, parseEnv, description, printDefault, fallback }] of Object.entries(
|
|
42
42
|
configMappings,
|
|
@@ -58,7 +58,11 @@ export const getOptions = (namespace: string, configMappings: Record<string, Con
|
|
|
58
58
|
return options;
|
|
59
59
|
};
|
|
60
60
|
|
|
61
|
-
const configToFlag = (
|
|
61
|
+
const configToFlag = (
|
|
62
|
+
flag: string,
|
|
63
|
+
configMapping: ConfigMapping<unknown>,
|
|
64
|
+
overrideDefaultValue?: any,
|
|
65
|
+
): AztecStartOption => {
|
|
62
66
|
if (!configMapping.isBoolean) {
|
|
63
67
|
flag += ' <value>';
|
|
64
68
|
}
|
|
@@ -125,6 +129,12 @@ export const aztecStartOptions: { [key: string]: AztecStartOption[] } = {
|
|
|
125
129
|
defaultValue: DefaultMnemonic,
|
|
126
130
|
env: 'MNEMONIC',
|
|
127
131
|
},
|
|
132
|
+
{
|
|
133
|
+
flag: '--local-network.testAccounts',
|
|
134
|
+
description: 'Deploy test accounts on local network start',
|
|
135
|
+
env: 'TEST_ACCOUNTS',
|
|
136
|
+
...booleanConfigHelper(true),
|
|
137
|
+
},
|
|
128
138
|
],
|
|
129
139
|
API: [
|
|
130
140
|
{
|
|
@@ -165,6 +175,13 @@ export const aztecStartOptions: { [key: string]: AztecStartOption[] } = {
|
|
|
165
175
|
env: 'AZTEC_RESET_ADMIN_API_KEY',
|
|
166
176
|
parseVal: val => val === 'true' || val === '1',
|
|
167
177
|
},
|
|
178
|
+
{
|
|
179
|
+
flag: '--node-debug',
|
|
180
|
+
description: 'Expose debug endpoints (e.g. mineBlock) on the main RPC port',
|
|
181
|
+
defaultValue: false,
|
|
182
|
+
env: 'AZTEC_NODE_DEBUG',
|
|
183
|
+
parseVal: val => val === undefined || val === 'true' || val === '1',
|
|
184
|
+
},
|
|
168
185
|
{
|
|
169
186
|
flag: '--api-prefix <value>',
|
|
170
187
|
description: 'Prefix for API routes on any service that is started',
|
package/src/cli/cmds/compile.ts
CHANGED
|
@@ -3,12 +3,13 @@ import type { LogFn } from '@aztec/foundation/log';
|
|
|
3
3
|
|
|
4
4
|
import { execFileSync } from 'child_process';
|
|
5
5
|
import type { Command } from 'commander';
|
|
6
|
-
import { readFile
|
|
6
|
+
import { readFile } from 'fs/promises';
|
|
7
7
|
import { join } from 'path';
|
|
8
8
|
|
|
9
9
|
import { readArtifactFiles } from './utils/artifacts.js';
|
|
10
10
|
import { needsRecompile } from './utils/needs_recompile.js';
|
|
11
11
|
import { run } from './utils/spawn.js';
|
|
12
|
+
import { warnIfAztecVersionMismatch } from './utils/warn_if_aztec_version_mismatch.js';
|
|
12
13
|
|
|
13
14
|
/** Returns paths to contract artifacts in the target directory. */
|
|
14
15
|
async function collectContractArtifacts(): Promise<string[]> {
|
|
@@ -24,19 +25,6 @@ async function collectContractArtifacts(): Promise<string[]> {
|
|
|
24
25
|
return files.filter(f => Array.isArray(f.content.functions)).map(f => f.filePath);
|
|
25
26
|
}
|
|
26
27
|
|
|
27
|
-
/** Strips the `__aztec_nr_internals__` prefix from function names in contract artifacts. */
|
|
28
|
-
async function stripInternalPrefixes(artifactPaths: string[]): Promise<void> {
|
|
29
|
-
for (const path of artifactPaths) {
|
|
30
|
-
const artifact = JSON.parse(await readFile(path, 'utf-8'));
|
|
31
|
-
for (const fn of artifact.functions) {
|
|
32
|
-
if (typeof fn.name === 'string') {
|
|
33
|
-
fn.name = fn.name.replace(/^__aztec_nr_internals__/, '');
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
await writeFile(path, JSON.stringify(artifact, null, 2) + '\n');
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
28
|
/** Returns the set of package names that are contract crates in the current workspace. */
|
|
41
29
|
async function getContractPackageNames(): Promise<Set<string>> {
|
|
42
30
|
const contractNames = new Set<string>();
|
|
@@ -139,6 +127,8 @@ async function checkNoTestsInContracts(nargo: string, log: LogFn): Promise<void>
|
|
|
139
127
|
|
|
140
128
|
/** Compiles Aztec Noir contracts and postprocesses artifacts. */
|
|
141
129
|
async function compileAztecContract(nargoArgs: string[], log: LogFn): Promise<void> {
|
|
130
|
+
await warnIfAztecVersionMismatch(log);
|
|
131
|
+
|
|
142
132
|
if (!(await needsRecompile())) {
|
|
143
133
|
log('No source changes detected, skipping compilation.');
|
|
144
134
|
return;
|
|
@@ -158,9 +148,6 @@ async function compileAztecContract(nargoArgs: string[], log: LogFn): Promise<vo
|
|
|
158
148
|
log('Postprocessing contracts...');
|
|
159
149
|
const bbArgs = artifacts.flatMap(a => ['-i', a]);
|
|
160
150
|
await run(bb, ['aztec_process', ...bbArgs]);
|
|
161
|
-
|
|
162
|
-
// TODO: This should be part of bb aztec_process!
|
|
163
|
-
await stripInternalPrefixes(artifacts);
|
|
164
151
|
}
|
|
165
152
|
|
|
166
153
|
log('Compilation complete!');
|
package/src/cli/cmds/standby.ts
CHANGED
|
@@ -28,11 +28,11 @@ export async function computeExpectedGenesisRoot(config: GenesisStateConfig, use
|
|
|
28
28
|
|
|
29
29
|
userLog(`Initial funded accounts: ${initialFundedAccounts.map(a => a.toString()).join(', ')}`);
|
|
30
30
|
|
|
31
|
-
const { genesisArchiveRoot,
|
|
31
|
+
const { genesisArchiveRoot, genesis } = await getGenesisValues(initialFundedAccounts);
|
|
32
32
|
|
|
33
33
|
userLog(`Genesis archive root: ${genesisArchiveRoot.toString()}`);
|
|
34
34
|
|
|
35
|
-
return { genesisArchiveRoot,
|
|
35
|
+
return { genesisArchiveRoot, genesis };
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
async function checkRollupCompatibility(
|
|
@@ -20,7 +20,13 @@ export async function startArchiver(
|
|
|
20
20
|
const envConfig = getArchiverConfigFromEnv();
|
|
21
21
|
const cliOptions = extractRelevantOptions<ArchiverConfig & DataStoreConfig & BlobClientConfig>(
|
|
22
22
|
options,
|
|
23
|
-
{
|
|
23
|
+
{
|
|
24
|
+
// dataConfigMappings must come first: its l1Contracts only maps rollupAddress,
|
|
25
|
+
// while archiverConfigMappings (spread later) maps all L1 contract addresses.
|
|
26
|
+
...dataConfigMappings,
|
|
27
|
+
...archiverConfigMappings,
|
|
28
|
+
...blobClientConfigMapping,
|
|
29
|
+
},
|
|
24
30
|
'archiver',
|
|
25
31
|
);
|
|
26
32
|
|
|
@@ -9,7 +9,11 @@ import { Agent, makeUndiciFetch } from '@aztec/foundation/json-rpc/undici';
|
|
|
9
9
|
import type { LogFn } from '@aztec/foundation/log';
|
|
10
10
|
import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
|
|
11
11
|
import { protocolContractsHash } from '@aztec/protocol-contracts';
|
|
12
|
-
import {
|
|
12
|
+
import {
|
|
13
|
+
ProvingJobConsumerSchema,
|
|
14
|
+
createProvingJobBrokerClient,
|
|
15
|
+
proverBrokerBackoff,
|
|
16
|
+
} from '@aztec/prover-client/broker';
|
|
13
17
|
import { type CliPXEOptions, type PXEConfig, allPxeConfigMappings } from '@aztec/pxe/config';
|
|
14
18
|
import { AztecNodeAdminApiSchema, AztecNodeApiSchema } from '@aztec/stdlib/interfaces/client';
|
|
15
19
|
import { P2PApiSchema, ProverNodeApiSchema, type ProvingJobBroker } from '@aztec/stdlib/interfaces/server';
|
|
@@ -65,12 +69,8 @@ export async function startNode(
|
|
|
65
69
|
if (nodeConfig.proverBrokerUrl) {
|
|
66
70
|
// at 1TPS we'd enqueue ~1k chonk verifier proofs and ~1k AVM proofs immediately
|
|
67
71
|
// 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
|
-
);
|
|
72
|
+
// Retry indefinitely until the epoch proving times out and the chain reorgs
|
|
73
|
+
const fetch = makeTracedFetch(proverBrokerBackoff, false, makeUndiciFetch(new Agent({ connections: 100 })));
|
|
74
74
|
broker = createProvingJobBrokerClient(nodeConfig.proverBrokerUrl, getVersions(nodeConfig), fetch);
|
|
75
75
|
} else if (options.proverBroker) {
|
|
76
76
|
({ broker } = await startProverBroker(options, signalHandlers, services, userLog));
|
|
@@ -83,7 +83,7 @@ export async function startNode(
|
|
|
83
83
|
await preloadCrsDataForVerifying(nodeConfig, userLog);
|
|
84
84
|
|
|
85
85
|
const genesisConfig = getGenesisStateConfigEnvVars();
|
|
86
|
-
const { genesisArchiveRoot,
|
|
86
|
+
const { genesisArchiveRoot, genesis } = await computeExpectedGenesisRoot(genesisConfig, userLog);
|
|
87
87
|
|
|
88
88
|
const followsCanonicalRollup =
|
|
89
89
|
typeof nodeConfig.rollupVersion !== 'number' || (nodeConfig.rollupVersion as unknown as string) === 'canonical';
|
|
@@ -116,12 +116,10 @@ export async function startNode(
|
|
|
116
116
|
);
|
|
117
117
|
}
|
|
118
118
|
|
|
119
|
-
// TODO(#12272): will clean this up.
|
|
120
119
|
nodeConfig = {
|
|
121
120
|
...nodeConfig,
|
|
122
121
|
l1Contracts: {
|
|
123
122
|
...addresses,
|
|
124
|
-
slashFactoryAddress: nodeConfig.l1Contracts.slashFactoryAddress,
|
|
125
123
|
},
|
|
126
124
|
...config,
|
|
127
125
|
};
|
|
@@ -158,7 +156,7 @@ export async function startNode(
|
|
|
158
156
|
const telemetry = await initTelemetryClient(telemetryConfig);
|
|
159
157
|
|
|
160
158
|
// Create and start Aztec Node
|
|
161
|
-
const node = await createAztecNode(nodeConfig, { telemetry, proverBroker: broker }, {
|
|
159
|
+
const node = await createAztecNode(nodeConfig, { telemetry, proverBroker: broker }, { genesis });
|
|
162
160
|
|
|
163
161
|
// Add node and p2p to services list
|
|
164
162
|
services.node = [node, AztecNodeApiSchema];
|
|
@@ -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';
|
|
@@ -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'));
|
|
@@ -2,14 +2,16 @@ import { startHttpRpcServer } from '@aztec/foundation/json-rpc/server';
|
|
|
2
2
|
import type { Logger } from '@aztec/foundation/log';
|
|
3
3
|
import { createTXERpcServer } from '@aztec/txe';
|
|
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
8
|
const txeServer = createTXERpcServer(debugLogger);
|
|
9
|
-
const
|
|
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
|
}
|