Skip to content

Commit a96b514

Browse files
feat: add nlean consensus client support (#137)
* feat: add nlean consensus client support * fix: address PR #137 review comments - Add apiPort to validator-config.yaml for leanpoint health-check URLs - Use apiPort instead of httpPort for --api-port flag in nlean-cmd.sh - Use Docker -e VAR (inherit) instead of -e VAR=value to avoid colon-breaking issues --------- Co-authored-by: march-fatcat <grapebabamarch@gmail.com>
1 parent c40d5a8 commit a96b514

2 files changed

Lines changed: 167 additions & 0 deletions

File tree

client-cmds/nlean-cmd.sh

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
#!/bin/bash
2+
3+
#-----------------------nlean setup----------------------
4+
# This script follows lean-quickstart's client-cmd contract:
5+
# it must populate node_binary / node_docker / node_setup.
6+
# NLEAN_REPO should point to this repository when lean-quickstart is outside this workspace.
7+
# Default assumes sibling checkouts: <workspace>/nlean and <workspace>/lean-quickstart.
8+
nlean_repo="${NLEAN_REPO:-$scriptDir/../nlean}"
9+
nlean_docker_image="${NLEAN_DOCKER_IMAGE:-nlean-local:devnet3}"
10+
nlean_network_name="${NLEAN_NETWORK_NAME:-devnet0}"
11+
log_level="${NLEAN_LOG_LEVEL:-}"
12+
enable_metrics="${enableMetrics:-false}"
13+
14+
enable_metrics=$(echo "$enable_metrics" | tr '[:upper:]' '[:lower:]')
15+
if [[ "$enable_metrics" != "true" && "$enable_metrics" != "false" ]]; then
16+
enable_metrics="false"
17+
fi
18+
19+
if [[ -z "${nlean_network_name// }" ]]; then
20+
nlean_network_name="devnet0"
21+
fi
22+
23+
log_level="${log_level#${log_level%%[![:space:]]*}}"
24+
log_level="${log_level%${log_level##*[![:space:]]}}"
25+
log_level_arg=""
26+
if [[ -n "$log_level" ]]; then
27+
log_level_arg="--log ${log_level}"
28+
fi
29+
30+
node_private_key_path="${privKeyPath:-${item}.key}"
31+
32+
# Set aggregator flag based on isAggregator value (from parse-vc.sh)
33+
aggregator_flag=""
34+
if [[ "${isAggregator:-false}" == "true" ]]; then
35+
aggregator_flag="--is-aggregator"
36+
fi
37+
38+
# Set attestation committee count flag if explicitly configured
39+
attestation_committee_flag=""
40+
if [[ -n "${attestationCommitteeCount:-}" ]]; then
41+
attestation_committee_flag="--attestation-committee-count $attestationCommitteeCount"
42+
fi
43+
44+
# Set checkpoint sync URL when restarting with checkpoint sync
45+
checkpoint_sync_flag=""
46+
if [[ -n "${checkpoint_sync_url:-}" ]]; then
47+
checkpoint_sync_flag="--checkpoint-sync-url $checkpoint_sync_url"
48+
fi
49+
50+
# Set API port flag if explicitly configured
51+
api_port_flag=""
52+
nlean_api_port="${NLEAN_API_PORT:-${apiPort:-}}"
53+
if [[ -n "$nlean_api_port" ]]; then
54+
api_port_flag="--api-port $nlean_api_port"
55+
fi
56+
57+
# Resolve the binary path
58+
binary_path="$nlean_repo/artifacts/lean-client/Lean.Client"
59+
60+
mkdir -p "$dataDir/$item"
61+
62+
node_binary="$binary_path \
63+
--validator-config $configDir/validator-config.yaml \
64+
--node $item \
65+
--data-dir $dataDir/$item \
66+
--network $nlean_network_name \
67+
--node-key $configDir/$node_private_key_path \
68+
--socket-port $quicPort \
69+
--metrics $enable_metrics \
70+
--metrics-port $metricsPort \
71+
--metrics-address 0.0.0.0 \
72+
--hash-sig-key-dir $configDir/hash-sig-keys \
73+
$api_port_flag \
74+
$attestation_committee_flag \
75+
$aggregator_flag \
76+
$checkpoint_sync_flag \
77+
$log_level_arg"
78+
79+
nlean_docker_extra_env=""
80+
if [[ -n "${NLEAN_DEBUG_DUMP_ATTESTATIONS:-}" ]]; then
81+
nlean_docker_extra_env+=" -e NLEAN_DEBUG_DUMP_ATTESTATIONS=$NLEAN_DEBUG_DUMP_ATTESTATIONS"
82+
fi
83+
if [[ -n "${NLEAN_DEBUG_DUMP_DIR:-}" ]]; then
84+
nlean_docker_extra_env+=" -e NLEAN_DEBUG_DUMP_DIR=$NLEAN_DEBUG_DUMP_DIR"
85+
fi
86+
if [[ -n "${NLEAN_DEBUG_DUMP_BLOCKS:-}" ]]; then
87+
nlean_docker_extra_env+=" -e NLEAN_DEBUG_DUMP_BLOCKS=$NLEAN_DEBUG_DUMP_BLOCKS"
88+
fi
89+
if [[ -n "${NLEAN_DEBUG_DUMP_BLOCK_DIR:-}" ]]; then
90+
nlean_docker_extra_env+=" -e NLEAN_DEBUG_DUMP_BLOCK_DIR=$NLEAN_DEBUG_DUMP_BLOCK_DIR"
91+
fi
92+
if [[ -n "${NLEAN_DEBUG_DUMP_OBSERVED_PROOFS:-}" ]]; then
93+
nlean_docker_extra_env+=" -e NLEAN_DEBUG_DUMP_OBSERVED_PROOFS=$NLEAN_DEBUG_DUMP_OBSERVED_PROOFS"
94+
fi
95+
if [[ -n "${NLEAN_DEBUG_DUMP_OBSERVED_PROOFS_DIR:-}" ]]; then
96+
nlean_docker_extra_env+=" -e NLEAN_DEBUG_DUMP_OBSERVED_PROOFS_DIR=$NLEAN_DEBUG_DUMP_OBSERVED_PROOFS_DIR"
97+
fi
98+
if [[ -n "${NLEAN_DEBUG_DUMP_OBSERVED_BLOCKS:-}" ]]; then
99+
nlean_docker_extra_env+=" -e NLEAN_DEBUG_DUMP_OBSERVED_BLOCKS=$NLEAN_DEBUG_DUMP_OBSERVED_BLOCKS"
100+
fi
101+
if [[ -n "${NLEAN_DEBUG_DUMP_OBSERVED_BLOCKS_DIR:-}" ]]; then
102+
nlean_docker_extra_env+=" -e NLEAN_DEBUG_DUMP_OBSERVED_BLOCKS_DIR=$NLEAN_DEBUG_DUMP_OBSERVED_BLOCKS_DIR"
103+
fi
104+
105+
node_docker="${nlean_docker_extra_env} ${nlean_docker_image} \
106+
--validator-config /config/validator-config.yaml \
107+
--node $item \
108+
--data-dir /data \
109+
--network $nlean_network_name \
110+
--node-key /config/$node_private_key_path \
111+
--socket-port $quicPort \
112+
--metrics $enable_metrics \
113+
--metrics-port $metricsPort \
114+
--metrics-address 0.0.0.0 \
115+
--hash-sig-key-dir /config/hash-sig-keys \
116+
$api_port_flag \
117+
$attestation_committee_flag \
118+
$aggregator_flag \
119+
$checkpoint_sync_flag \
120+
$log_level_arg"
121+
122+
# choose either binary or docker
123+
node_setup="${NLEAN_QUICKSTART_SETUP:-docker}"
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# Quickstart validator template used by nlean interop scripts.
2+
# Keep node names and ports aligned with the target interop topology.
3+
shuffle: roundrobin
4+
deployment_mode: local
5+
config:
6+
activeEpoch: 18
7+
keyType: "hash-sig"
8+
validators:
9+
- name: "nlean_0"
10+
privkey: "2e9be3f1b0d32ca3a4d62017fbfafe3950b7e90fed6802ff8bd2e0f8c4e2ca91"
11+
enrFields:
12+
ip: "127.0.0.1"
13+
quic: 9101
14+
metricsPort: 18081
15+
apiPort: 5052
16+
count: 1
17+
isAggregator: false
18+
- name: "nlean_1"
19+
privkey: "bdf953adc161873ba026330c56450453f582e3c4ee6cb713644794bcfdd85fe5"
20+
enrFields:
21+
ip: "127.0.0.1"
22+
quic: 9102
23+
metricsPort: 18082
24+
apiPort: 5053
25+
count: 1
26+
isAggregator: true
27+
- name: "nlean_2"
28+
privkey: "299550529a79bc2dce003747c52fb0639465c893e00b0440ac66144d625e066a"
29+
enrFields:
30+
ip: "127.0.0.1"
31+
quic: 9103
32+
metricsPort: 18083
33+
apiPort: 5054
34+
count: 1
35+
isAggregator: false
36+
- name: "nlean_3"
37+
privkey: "c4f5a6b7d8e9012345abcdef6789012345abcdef6789012345abcdef67890123"
38+
enrFields:
39+
ip: "127.0.0.1"
40+
quic: 9104
41+
metricsPort: 18084
42+
apiPort: 5055
43+
count: 1
44+
isAggregator: false

0 commit comments

Comments
 (0)