Skip to content

(WIP) devnet4: dual hash-sig keys and GENESIS_VALIDATORS format#154

Open
ch4r10t33r wants to merge 32 commits intomainfrom
devnet4
Open

(WIP) devnet4: dual hash-sig keys and GENESIS_VALIDATORS format#154
ch4r10t33r wants to merge 32 commits intomainfrom
devnet4

Conversation

@ch4r10t33r
Copy link
Copy Markdown
Contributor

@ch4r10t33r ch4r10t33r commented Apr 8, 2026

Summary

Draft PR for devnet4 work: dual attester/proposer hash-sig keys, updated generate-genesis.sh, config.yaml shape (attestation_pubkey / proposal_pubkey), parse-vc.sh / qlean paths, Ansible genesis task, README and docs.

config.yaml under genesis dirs remains gitignored (generated locally).

Multi-subnet aggregator selection (spin-node.sh)

When picking aggregators randomly (default, no --aggregator), each client type (name prefix before the first _, e.g. zeam from zeam_0) can be aggregator on at most one subnet. If zeam_* is chosen for subnet 0, no zeam_* node is eligible on other subnets. If there are more subnets than distinct clients, the script warns and picks from all nodes in that subnet. Explicit --aggregator still fixes that node for its subnet and records its client type so other subnets avoid it when possible. Conflicting isAggregator: true YAML presets are dropped with a warning in default mode.

ch4r10t33r and others added 24 commits April 15, 2026 15:45
- Generate hosts-prepare.yml (one inventory host per remote IP) and use it
  for prepare.yml so apt/docker run once per machine.
- Apply SSH user/key to both hosts.yml and hosts-prepare.yml.
- Allow --validatorConfig with --prepare in spin-node.sh.
- Ignore hosts-prepare.yml; document behavior in prepare playbook.
- Add ansible-devnet/genesis/test-validator-config.yaml for multi-client tests.
ansible-playbook runs from ansible/; lookup('file') resolves relative paths
there, breaking prepare/deploy when --validatorConfig is repo-relative.
…unt check

Skip expansion when the file's attestation_committee_count >= --subnets.
--subnets takes precedence only when it exceeds the file's value (default 1).
…sent

When validators lack an explicit 'subnet' field, compute it as
validator_index % attestation_committee_count instead of defaulting
to 0. This ensures correct multi-subnet aggregator selection for
hand-maintained configs that set attestation_committee_count but
omit per-row subnet fields.
…tion

Use cumulative count to compute the first validator index per node,
matching the assignment from the beacon genesis generator tool.
Let Docker pick the native platform so the correct image is pulled
on both amd64 and arm64 servers. Requires a multi-arch zeam image.
Mode selection now uses duplicate client types (not duplicate IPs) to
distinguish replicate from shared-host. This lets the local devnet (all
clients on 127.0.0.1) use replicate mode correctly.

Port stride changes from +i to +(i * num_template_rows) so clones never
collide even when all rows share the same IP.
Each of the five active nodes (zeam_0/1/2, ethlambda_0/1) is now on its
own server. Ports are normalized to the base values (quic 9001, metrics
9095, api 5055) since there are no collisions. This also makes the config
a valid replicate-mode template for --subnets expansion.
Add test-validator-config-subnet2.yaml: 2-subnet layout with 7 nodes
per subnet (zeam, gean, ethlambda, qlean, lantern). Update
validator-config.yaml to reflect current deployment. Sync
validator-config-expanded.yaml.
@ch4r10t33r ch4r10t33r marked this pull request as ready for review April 15, 2026 15:16
@ch4r10t33r ch4r10t33r requested a review from g11tech April 15, 2026 15:16
Switch from new-style flags (--genesis, --bootnodes, --validator-registry-path,
--listen-addr) to the flags gean:devnet4 actually accepts:
--custom-network-config-dir, --gossipsub-port, --http-address.
Switch --validator-registry-path from validators.yaml to
annotated_validators.yaml in ream, lantern, qlean, and grandine —
both in the local client-cmds scripts and the Ansible roles.

Update qlean's yq index extraction to use .index since
annotated_validators.yaml stores objects instead of bare integers.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants