Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 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
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
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,14 @@ hash-sig-keys/

# Auto-generated Ansible inventory (generated from validator-config.yaml)
hosts.yml
hosts-prepare.yml

# Temporary cache files
tmp/

logs/
monitoring/

ansible-deployment*.log

# Generated Prometheus config (created by generate-prometheus-config.sh)
Expand Down
181 changes: 117 additions & 64 deletions README.md

Large diffs are not rendered by default.

10 changes: 5 additions & 5 deletions TESTING_DEVNET3.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ NETWORK_DIR=local-devnet ./spin-node.sh --node "zeam_0 ream_0" --generateGenesis
### Test with Attestation Committee Count Override
```bash
# 1. Uncomment attestation_committee_count in local-devnet/genesis/validator-config.yaml
# 2. Set desired value (e.g., attestation_committee_count: 4)
# 2. Set desired value (default/spec is 1; e.g., attestation_committee_count: 4 for multi-committee tests)
# 3. Run:
NETWORK_DIR=local-devnet ./spin-node.sh --node zeam_0 --generateGenesis --cleanData
```
Expand All @@ -64,15 +64,15 @@ NETWORK_DIR=local-devnet ./spin-node.sh --node zeam_0 --generateGenesis --cleanD
4. zeam command includes `--is-aggregator` flag for aggregator only

### Attestation Committee Count
**When NOT set (default):**
**When NOT set in validator-config.yaml:**
- parse-vc.sh does NOT display "Attestation Committee Count"
- zeam command does NOT include `--attestation-committee-count` flag
- Client uses its hardcoded default
- zeam reads `ATTESTATION_COMMITTEE_COUNT` from `config.yaml` if present; otherwise chain default **1** (matches leanSpec)

**When set (e.g., to 4):**
**When set in validator-config (e.g., to 4):**
- parse-vc.sh displays: "Attestation Committee Count: 4"
- zeam command includes: `--attestation-committee-count 4`
- Client uses the specified value
- Client uses the specified value (overrides `config.yaml` when passed)

## Verification

Expand Down
161 changes: 161 additions & 0 deletions ansible-devnet/genesis/test-validator-config-subnet2.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
shuffle: roundrobin
# Test layout: 2 subnets × 7 nodes each (1 zeam + 1 grandine + 1 gean + 2 ethlambda + 1 qlean + 1 lantern per subnet
# except subnet 1 which has 1 ream instead of ethlambda_3).
# Each server hosts one node per subnet per client type on distinct ports.
#
# Server layout (IP → nodes):
# 37.27.89.135 grandine_0 (s0,9001) zeam_3 (s1,9002) qlean_0 (s0,9003)
# 157.180.20.55 zeam_1 (s0,9001) zeam_4 (s1,9002) qlean_1 (s1,9003)
# 178.104.133.162 gean_0 (s0,9001) ethlambda_2 (s1,9002)
# 178.104.151.50 ethlambda_0 (s0,9001) ream_0 (s1,9002) lantern_0 (s0,9003)
# 178.104.149.91 ethlambda_1 (s0,9001) gean_1 (s1,9002) lantern_1 (s1,9003)
#
# ./spin-node.sh --validatorConfig ansible-devnet/genesis/test-validator-config-subnet2.yaml
deployment_mode: ansible
config:
activeEpoch: 18
keyType: "hash-sig"
attestation_committee_count: 2
validators:
# ── Subnet 0 ──────────────────────────────────────────────────────────────
- name: "grandine_0"
privkey: "c05937b251889e35c58d4601c29bed8153dc22c548448f85e0ab9ca436d4b904"
enrFields:
ip: "37.27.89.135"
quic: 9001
metricsPort: 9095
apiPort: 5055
subnet: 0
isAggregator: false
count: 1
- name: "zeam_1"
privkey: "e7904333a18df63252e2c807f65915e1a256667ac8af8fb2116186cae2b24d98"
enrFields:
ip: "157.180.20.55"
quic: 9001
metricsPort: 9095
apiPort: 5055
subnet: 0
isAggregator: true
count: 1
- name: "gean_0"
privkey: "69c251cdb06039dd99d87e5a1439fa3720615be98c293ec9bcfd041877a2e8ca"
enrFields:
ip: "178.104.133.162"
quic: 9001
metricsPort: 9095
apiPort: 5055
subnet: 0
isAggregator: false
count: 1
- name: "ethlambda_0"
privkey: "299550529a79bc2dce003747c52fb0639465c893e00b0440ac66144d625e066a"
enrFields:
ip: "178.104.151.50"
quic: 9001
metricsPort: 9095
apiPort: 5055
subnet: 0
isAggregator: false
count: 1
- name: "ethlambda_1"
privkey: "58c22d2c5785e9a47004f429083804dfc5dad666b4ab6c38face9993fd644c8e"
enrFields:
ip: "178.104.149.91"
quic: 9001
metricsPort: 9095
apiPort: 5055
subnet: 0
isAggregator: false
count: 1
- name: "qlean_0"
privkey: "8e9f81c9caa9e29d26a7327311ca63a38254efdfccf3ce1362bae47eae0b18b3"
enrFields:
ip: "37.27.89.135"
quic: 9003
metricsPort: 9097
apiPort: 5057
subnet: 0
isAggregator: false
count: 1
- name: "lantern_0"
privkey: "d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5"
enrFields:
ip: "178.104.151.50"
quic: 9003
metricsPort: 9097
apiPort: 5057
subnet: 0
isAggregator: false
count: 1
# ── Subnet 1 ──────────────────────────────────────────────────────────────
- name: "zeam_3"
privkey: "db070d74f757c3e191cc9232a3c64db2af180cf4c19e2ea2f4c757931d7b7074"
enrFields:
ip: "37.27.89.135"
quic: 9002
metricsPort: 9096
apiPort: 5056
subnet: 1
isAggregator: false
count: 1
- name: "zeam_4"
privkey: "f2d3b7044eed1f9edaee061f3d5ec3157408bf45a0f4490a70ae611153cebee4"
enrFields:
ip: "157.180.20.55"
quic: 9002
metricsPort: 9096
apiPort: 5056
subnet: 1
isAggregator: false
count: 1
- name: "ethlambda_2"
privkey: "c8f682e8c2156f32dd827ca91a0d1be802f80494514c9e5ff2e35576df06da6d"
enrFields:
ip: "178.104.133.162"
quic: 9002
metricsPort: 9096
apiPort: 5056
subnet: 1
isAggregator: true
count: 1
- name: "ream_0"
privkey: "04e5fb8c58dccfe9086d2488ed03f69089a74aacc22e41c06a3b83ac40c5eab6"
enrFields:
ip: "178.104.151.50"
quic: 9002
metricsPort: 9096
apiPort: 5056
subnet: 1
isAggregator: false
count: 1
- name: "gean_1"
privkey: "310139c3eecbf3bd49fa2be2ff813fa69b330e2d246266a23cb33a9fa58b0a11"
enrFields:
ip: "178.104.149.91"
quic: 9002
metricsPort: 9096
apiPort: 5056
subnet: 1
isAggregator: false
count: 1
- name: "qlean_1"
privkey: "1991db904e455114bc836a0860689e77c1d2fa313a15567c6c7aa81e180925ac"
enrFields:
ip: "157.180.20.55"
quic: 9003
metricsPort: 9097
apiPort: 5057
subnet: 1
isAggregator: false
count: 1
- name: "lantern_1"
privkey: "582644c8e66b61df3dafb33fa496cee97060566542fb8594fca661be3332710f"
enrFields:
ip: "178.104.149.91"
quic: 9003
metricsPort: 9097
apiPort: 5057
subnet: 1
isAggregator: false
count: 1
Loading