Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
565eddd
feat: add isAggregator flag to validator configuration
ch4r10t33r Feb 6, 2026
0522c16
Merge branch 'main' of https://github.com/blockblaz/lean-quickstart
ch4r10t33r Feb 17, 2026
f307de9
Merge remote-tracking branch 'origin/main' into main
ch4r10t33r Feb 22, 2026
1522fd6
Merge branch 'main' of https://github.com/blockblaz/lean-quickstart
ch4r10t33r Mar 6, 2026
99e1d5c
Merge branch 'main' of https://github.com/blockblaz/lean-quickstart
ch4r10t33r Mar 16, 2026
53814fa
Merge branch 'main' of https://github.com/blockblaz/lean-quickstart
ch4r10t33r Mar 16, 2026
e8c649d
Merge remote-tracking branch 'origin/main' into main
ch4r10t33r Apr 8, 2026
83996bf
quickstart: devnet4 dual hash-sig keys, GENESIS_VALIDATORS shape, readme
ch4r10t33r Apr 8, 2026
8199bff
quickstart: default attestation_committee_count to 1 (leanSpec)
ch4r10t33r Apr 8, 2026
4512055
spin-node: unique aggregator client type across subnets
ch4r10t33r Apr 8, 2026
71b079d
ansible, spin-node: dedupe prepare per host and test validator config
ch4r10t33r Apr 9, 2026
9c09282
run-ansible: pass absolute local_validator_config_path for file lookup
ch4r10t33r Apr 9, 2026
5f97f48
feat: devnet4 changes
ch4r10t33r Apr 10, 2026
1dc1bbb
feat: make --network required for ansible deployments
KatyaRyazantseva Apr 10, 2026
4acc81f
ansible-devnet, lantern: remove ream devnet field, bump lantern to v0…
ch4r10t33r Apr 13, 2026
6ccea5f
lantern: use piertwo/lantern:v0.0.4
ch4r10t33r Apr 13, 2026
8b09af0
docs: correct grandine image to sifrai/lean in --tag examples
ch4r10t33r Apr 13, 2026
c0425da
spin-node: skip subnet expansion when validator config is complete
ch4r10t33r Apr 13, 2026
d00edd0
spin-node: simplify subnet expansion skip to attestation_committee_co…
ch4r10t33r Apr 13, 2026
81c2f24
spin-node, README: document template vs hand-maintained config and --…
ch4r10t33r Apr 13, 2026
423a0c2
spin-node: derive subnet from validator index when subnet field is ab…
ch4r10t33r Apr 13, 2026
06ff5a1
spin-node: add deployment summary with subnet count and per-subnet ag…
ch4r10t33r Apr 13, 2026
796e57c
spin-node: derive subnet from genesis validator index, not array posi…
ch4r10t33r Apr 13, 2026
46ea52c
zeam: remove hardcoded --platform linux/amd64 from docker run
ch4r10t33r Apr 13, 2026
4dceb88
generate-genesis: use hash-sig-cli:latest for dual-key support
ch4r10t33r Apr 13, 2026
f0c68cf
ansible: add SSH retry logic to hash-sig key file copy tasks
ch4r10t33r Apr 13, 2026
18044ac
spin-node: show all clients per subnet in deployment summary
ch4r10t33r Apr 13, 2026
f7ae9f5
generate-subnet-config, README: support replicate mode on local devnet
ch4r10t33r Apr 15, 2026
4553902
ansible-devnet: update test config to unique IP per node
ch4r10t33r Apr 15, 2026
8de620a
ansible-devnet: add multi-subnet test configs with mixed client types
ch4r10t33r Apr 15, 2026
487ebc5
client-cmds/gean: updates gean cmd flags for devnet4 (#159)
mananuf Apr 15, 2026
caa76ee
ansible/gean: fix docker run flags to match gean:devnet4 CLI interface
ch4r10t33r Apr 15, 2026
da97676
ansible-devnet, ream: swap zeam_0→grandine_0, ethlambda_3→ream_0; use…
ch4r10t33r Apr 15, 2026
a1104c7
client-cmds, ansible: use annotated_validators.yaml for all clients
ch4r10t33r Apr 15, 2026
a872bb0
ansible-devnet: sync validator-config.yaml with subnet2 layout
ch4r10t33r Apr 15, 2026
4515c51
lantern: use --validator-keys-path instead of --validator-registry-path
ch4r10t33r Apr 16, 2026
e45f11e
feat: update dashboard to devnet-4
KatyaRyazantseva Apr 16, 2026
2144186
ansible-devnet: refresh validator-config (8 clients, unified api 5055…
ch4r10t33r Apr 16, 2026
06db86e
tee log file, remove ansi (#164)
turuslan Apr 16, 2026
7c7c72d
qlean, lantern, ansible: fix CLI flags for current qlean-mini and Lan…
ch4r10t33r Apr 16, 2026
68f73a6
fix: devnet4 dashboard minor fixes
KatyaRyazantseva Apr 19, 2026
eaf7410
fix: swap aggregator and validator graphs on devnet-4 dashboard
KatyaRyazantseva Apr 19, 2026
dfcb37a
ansible/ream: default image back to snaiyer1/ream:latest
ch4r10t33r Apr 22, 2026
582e9db
Merge branch 'main' into devnet4
ch4r10t33r Apr 22, 2026
153a564
nlean: align ansible docker command with nlean-cmd.sh
ch4r10t33r Apr 23, 2026
f21fb74
client-cmds, ansible, parse-vc: wire --aggregate-subnet-ids across cl…
ch4r10t33r Apr 23, 2026
7b8e765
ansible-devnet: 16-node validator-config across 2 subnets
ch4r10t33r Apr 23, 2026
7bcf5d2
Merge branch 'main' of github.com:blockblaz/lean-quickstart
ch4r10t33r Apr 27, 2026
358985f
Merge branch 'main' into devnet4
ch4r10t33r Apr 27, 2026
f197a0e
ansible, client-cmds: use ghcr.io/reamlabs/ream:latest-devnet4 for ream
ch4r10t33r Apr 27, 2026
00c9111
zeam: pass --db-backend lmdb from zeam-cmd and ansible role
ch4r10t33r Apr 30, 2026
e1e5e52
ansible,scripts: derive aggregate subnet ids from committee count; dr…
ch4r10t33r May 1, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
feat: add isAggregator flag to validator configuration
Add support for configuring nodes as aggregators through validator-config.yaml.
This allows selective designation of nodes to perform aggregation duties by
setting isAggregator: true in the validator configuration.

Changes:
- Add isAggregator field (default: false) to all validators in both local and ansible configs
- Update parse-vc.sh to extract and export isAggregator flag
- Modify all client command scripts to pass --is-aggregator flag when enabled
- Add isAggregator status to node information output
  • Loading branch information
ch4r10t33r committed Feb 6, 2026
commit 565eddd55f10e484b52ce1648448d1565b3d3aec
7 changes: 7 additions & 0 deletions ansible-devnet/genesis/validator-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ validators:
ip: "46.224.123.223"
quic: 9001
metricsPort: 9095
isAggregator: false
count: 1 # number of indices for this node

- name: "ream_0"
Expand All @@ -25,6 +26,7 @@ validators:
ip: "77.42.27.219"
quic: 9001
metricsPort: 9095
isAggregator: false
devnet: 1
count: 1

Expand All @@ -36,6 +38,7 @@ validators:
ip: "46.224.123.220"
quic: 9001
metricsPort: 9095
isAggregator: false
count: 1

- name: "lantern_0"
Expand All @@ -47,6 +50,7 @@ validators:
ip: "46.224.135.177"
quic: 9001
metricsPort: 9095
isAggregator: false
count: 1

- name: "lighthouse_0"
Expand All @@ -58,6 +62,7 @@ validators:
ip: "46.224.135.169"
quic: 9001
metricsPort: 9095
isAggregator: false
count: 1

- name: "grandine_0"
Expand All @@ -66,6 +71,7 @@ validators:
ip: "37.27.250.20"
quic: 9001
metricsPort: 9095
isAggregator: false
count: 1

- name: "ethlambda_0"
Expand All @@ -74,4 +80,5 @@ validators:
ip: "78.47.44.215"
quic: 9001
metricsPort: 9095
isAggregator: false
count: 1
12 changes: 10 additions & 2 deletions client-cmds/ethlambda-cmd.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,21 @@

binary_path="$scriptDir/../ethlambda/target/release/ethlambda"

# Set aggregator flag based on isAggregator value
aggregator_flag=""
if [ "$isAggregator" == "true" ]; then
aggregator_flag="--is-aggregator"
fi

# Command when running as binary
node_binary="$binary_path \
--custom-network-config-dir $configDir \
--gossipsub-port $quicPort \
--node-id $item \
--node-key $configDir/$item.key \
--metrics-address 0.0.0.0 \
--metrics-port $metricsPort"
--metrics-port $metricsPort \
$aggregator_flag"

# Command when running as docker container
node_docker="ghcr.io/lambdaclass/ethlambda:devnet2 \
Expand All @@ -20,6 +27,7 @@ node_docker="ghcr.io/lambdaclass/ethlambda:devnet2 \
--node-id $item \
--node-key /config/$item.key \
--metrics-address 0.0.0.0 \
--metrics-port $metricsPort"
--metrics-port $metricsPort \
$aggregator_flag"

node_setup="docker"
12 changes: 10 additions & 2 deletions client-cmds/grandine-cmd.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
#!/bin/bash

# Set aggregator flag based on isAggregator value
aggregator_flag=""
if [ "$isAggregator" == "true" ]; then
aggregator_flag="--is-aggregator"
fi

node_binary="$grandine_bin \
--genesis $configDir/config.yaml \
--validator-registry-path $configDir/validators.yaml \
Expand All @@ -11,7 +17,8 @@ node_binary="$grandine_bin \
--metrics \
--http-address 0.0.0.0 \
--http-port $metricsPort \
--hash-sig-key-dir $configDir/hash-sig-keys"
--hash-sig-key-dir $configDir/hash-sig-keys \
$aggregator_flag"

node_docker="sifrai/lean:devnet-2 \
--genesis /config/config.yaml \
Expand All @@ -24,7 +31,8 @@ node_docker="sifrai/lean:devnet-2 \
--metrics \
--http-address 0.0.0.0 \
--http-port $metricsPort \
--hash-sig-key-dir /config/hash-sig-keys"
--hash-sig-key-dir /config/hash-sig-keys \
$aggregator_flag"

# choose either binary or docker
node_setup="docker"
12 changes: 10 additions & 2 deletions client-cmds/lantern-cmd.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,12 @@ if [ -n "$devnet" ]; then
devnet_flag="--devnet $devnet"
fi

# Set aggregator flag based on isAggregator value
aggregator_flag=""
if [ "$isAggregator" == "true" ]; then
aggregator_flag="--is-aggregator"
fi

# Lantern's repo: https://github.com/Pier-Two/lantern
node_binary="$scriptDir/lantern/build/lantern_cli \
--data-dir $dataDir/$item \
Expand All @@ -22,7 +28,8 @@ node_binary="$scriptDir/lantern/build/lantern_cli \
--metrics-port $metricsPort \
--http-port 5055 \
--log-level debug \
--hash-sig-key-dir $configDir/hash-sig-keys"
--hash-sig-key-dir $configDir/hash-sig-keys \
$aggregator_flag"

node_docker="$LANTERN_IMAGE --data-dir /data \
--genesis-config /config/config.yaml \
Expand All @@ -36,7 +43,8 @@ node_docker="$LANTERN_IMAGE --data-dir /data \
--metrics-port $metricsPort \
--http-port 5055 \
--log-level debug \
--hash-sig-key-dir /config/hash-sig-keys"
--hash-sig-key-dir /config/hash-sig-keys \
$aggregator_flag"

# choose either binary or docker
node_setup="docker"
12 changes: 10 additions & 2 deletions client-cmds/lighthouse-cmd.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,12 @@
# Metrics enabled by default
metrics_flag="--metrics"

# Set aggregator flag based on isAggregator value
aggregator_flag=""
if [ "$isAggregator" == "true" ]; then
aggregator_flag="--is-aggregator"
fi

node_binary="$lighthouse_bin lean_node \
--datadir \"$dataDir/$item\" \
--config \"$configDir/config.yaml\" \
Expand All @@ -14,7 +20,8 @@ node_binary="$lighthouse_bin lean_node \
--socket-port $quicPort\
$metrics_flag \
--metrics-address 0.0.0.0 \
--metrics-port $metricsPort"
--metrics-port $metricsPort \
$aggregator_flag"

node_docker="hopinheimer/lighthouse:latest lighthouse lean_node \
--datadir /data \
Expand All @@ -27,6 +34,7 @@ node_docker="hopinheimer/lighthouse:latest lighthouse lean_node \
--socket-port $quicPort\
$metrics_flag \
--metrics-address 0.0.0.0 \
--metrics-port $metricsPort"
--metrics-port $metricsPort \
$aggregator_flag"

node_setup="docker"
9 changes: 9 additions & 0 deletions client-cmds/qlean-cmd.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,13 @@
#-----------------------qlean setup----------------------
# expects "qlean" submodule or symlink inside "lean-quickstart" root directory
# https://github.com/qdrvm/qlean-mini

# Set aggregator flag based on isAggregator value
aggregator_flag=""
if [ "$isAggregator" == "true" ]; then
aggregator_flag="--is-aggregator"
fi

node_binary="$scriptDir/qlean/build/src/executable/qlean \
--modules-dir $scriptDir/qlean/build/src/modules \
--genesis $configDir/config.yaml \
Expand All @@ -15,6 +22,7 @@ node_binary="$scriptDir/qlean/build/src/executable/qlean \
--node-id $item --node-key $configDir/$privKeyPath \
--listen-addr /ip4/0.0.0.0/udp/$quicPort/quic-v1 \
--prometheus-port $metricsPort \
$aggregator_flag \
-ldebug \
-ltrace"

Expand All @@ -29,6 +37,7 @@ node_docker="qdrvm/qlean-mini:devnet-2 \
--node-id $item --node-key /config/$privKeyPath \
--listen-addr /ip4/0.0.0.0/udp/$quicPort/quic-v1 \
--prometheus-port $metricsPort \
$aggregator_flag \
-ldebug \
-ltrace"

Expand Down
12 changes: 10 additions & 2 deletions client-cmds/ream-cmd.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,12 @@
# Metrics enabled by default
metrics_flag="--metrics"

# Set aggregator flag based on isAggregator value
aggregator_flag=""
if [ "$isAggregator" == "true" ]; then
aggregator_flag="--is-aggregator"
fi

# modify the path to the ream binary as per your system
node_binary="$scriptDir/../ream/target/release/ream --data-dir $dataDir/$item \
lean_node \
Expand All @@ -15,7 +21,8 @@ node_binary="$scriptDir/../ream/target/release/ream --data-dir $dataDir/$item \
$metrics_flag \
--metrics-address 0.0.0.0 \
--metrics-port $metricsPort \
--http-address 0.0.0.0"
--http-address 0.0.0.0 \
$aggregator_flag"

node_docker="ghcr.io/reamlabs/ream:latest-devnet2 --data-dir /data \
lean_node \
Expand All @@ -27,7 +34,8 @@ node_docker="ghcr.io/reamlabs/ream:latest-devnet2 --data-dir /data \
$metrics_flag \
--metrics-address 0.0.0.0 \
--metrics-port $metricsPort \
--http-address 0.0.0.0"
--http-address 0.0.0.0 \
$aggregator_flag"

# choose either binary or docker
node_setup="docker"
12 changes: 10 additions & 2 deletions client-cmds/zeam-cmd.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,29 @@
# Metrics enabled by default
metrics_flag="--metrics_enable"

# Set aggregator flag based on isAggregator value
aggregator_flag=""
if [ "$isAggregator" == "true" ]; then
aggregator_flag="--is-aggregator"
fi

node_binary="$scriptDir/../zig-out/bin/zeam node \
--custom_genesis $configDir \
--validator_config $validatorConfig \
--data-dir $dataDir/$item \
--node-id $item --node-key $configDir/$item.key \
$metrics_flag \
--api-port $metricsPort"
--api-port $metricsPort \
$aggregator_flag"

node_docker="--security-opt seccomp=unconfined blockblaz/zeam:devnet2 node \
--custom_genesis /config \
--validator_config $validatorConfig \
--data-dir /data \
--node-id $item --node-key /config/$item.key \
$metrics_flag \
--api-port $metricsPort"
--api-port $metricsPort \
$aggregator_flag"

# choose either binary or docker
node_setup="docker"
7 changes: 7 additions & 0 deletions local-devnet/genesis/validator-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ validators:
ip: "127.0.0.1"
quic: 9001
metricsPort: 8081
isAggregator: false
count: 1 # number of indices for this node

- name: "ream_0"
Expand All @@ -25,6 +26,7 @@ validators:
ip: "127.0.0.1"
quic: 9002
metricsPort: 8082
isAggregator: false
devnet: 1
count: 1

Expand All @@ -36,6 +38,7 @@ validators:
ip: "127.0.0.1"
quic: 9003
metricsPort: 8083
isAggregator: false
count: 1

- name: "lantern_0"
Expand All @@ -47,6 +50,7 @@ validators:
ip: "127.0.0.1"
quic: 9004
metricsPort: 8084
isAggregator: false
count: 1

- name: "lighthouse_0"
Expand All @@ -58,6 +62,7 @@ validators:
ip: "127.0.0.1"
quic: 9005
metricsPort: 8085
isAggregator: false
count: 1

- name: "grandine_0"
Expand All @@ -66,6 +71,7 @@ validators:
ip: "127.0.0.1"
quic: 9006
metricsPort: 8086
isAggregator: false
count: 1

- name: "ethlambda_0"
Expand All @@ -77,4 +83,5 @@ validators:
ip: "127.0.0.1"
quic: 9007
metricsPort: 8087
isAggregator: false
count: 1
8 changes: 8 additions & 0 deletions parse-vc.sh
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,12 @@ if [ -z "$devnet" ] || [ "$devnet" == "null" ]; then
devnet=""
fi

# Automatically extract isAggregator flag using yq (defaults to false if not set)
isAggregator=$(yq eval ".validators[] | select(.name == \"$item\") | .isAggregator // false" "$validator_config_file")
if [ -z "$isAggregator" ] || [ "$isAggregator" == "null" ]; then
isAggregator="false"
fi

# Automatically extract private key using yq
privKey=$(yq eval ".validators[] | select(.name == \"$item\") | .privkey" "$validator_config_file")

Expand Down Expand Up @@ -99,10 +105,12 @@ if [ "$keyType" == "hash-sig" ] && [ "$hashSigKeyIndex" != "null" ] && [ -n "$ha
echo "Hash-Sig Key Index: $hashSigKeyIndex"
echo "Hash-Sig Public Key: $hashSigPkPath"
echo "Hash-Sig Secret Key: $hashSigSkPath"
echo "Is Aggregator: $isAggregator"
else
echo "Node: $item"
echo "QUIC Port: $quicPort"
echo "Metrics Port: $metricsPort"
echo "Devnet: ${devnet:-<not set>}"
echo "Private Key File: $privKeyPath"
echo "Is Aggregator: $isAggregator"
fi