diff --git a/spartan/CLAUDE.md b/spartan/CLAUDE.md index ad087602b7d5..460977382e44 100644 --- a/spartan/CLAUDE.md +++ b/spartan/CLAUDE.md @@ -57,7 +57,7 @@ The main entry point is `terraform/deploy-aztec-infra/`: **aztec-validator** (extends aztec-node): - Wrapper chart with `aztec-node` as dependency (aliased as `validator`) - Adds validator-specific ConfigMap (`env.configmap.yaml`) -- Configures mnemonic, validators-per-node, publisher keys +- Configures mnemonic, validators-per-node, publishers-per-replica **aztec-prover-stack**: - Multi-component: prover node, broker, and agent replicas @@ -263,26 +263,31 @@ locals { **Key derivation via Terraform + `setup-attester-keystore.sh`:** -Each release receives a different `PUBLISHER_KEY_INDEX_START` from Terraform: +Publishers are allocated **per replica (pod)**, not per attester key. Each release receives a different `PUBLISHER_KEY_INDEX_START` from Terraform: ```hcl # In main.tf custom_settings per release: "validator.node.env.PUBLISHER_KEY_INDEX_START" = var.VALIDATOR_PUBLISHER_MNEMONIC_START_INDEX + - (idx * (var.VALIDATORS_PER_NODE * var.VALIDATOR_PUBLISHERS_PER_VALIDATOR_KEY * var.VALIDATOR_REPLICAS)) + (idx * (var.VALIDATOR_PUBLISHERS_PER_REPLICA * var.VALIDATOR_REPLICAS)) ``` -Example with 4 replicas, 12 validators/node, 2 publishers/key, base index 5000: +Example with 4 replicas, 4 publishers/replica, base index 5000: - Primary (idx=0): `PUBLISHER_KEY_INDEX_START = 5000` -- HA-1 (idx=1): `PUBLISHER_KEY_INDEX_START = 5000 + (1 * 12 * 2 * 4) = 5096` +- HA-1 (idx=1): `PUBLISHER_KEY_INDEX_START = 5000 + (1 * 4 * 4) = 5016` At runtime, `setup-attester-keystore.sh` calculates publisher indices: ```bash # POD_INDEX extracted from pod name (validator-0 → 0, validator-1 → 1, etc.) -PUBLISHER_KEY_INDEX=$((POD_INDEX * VALIDATORS_PER_NODE * PUBLISHERS_PER_VALIDATOR_KEY + PUBLISHER_KEY_INDEX_START)) +PUBLISHER_KEY_INDEX=$((POD_INDEX * VALIDATOR_PUBLISHERS_PER_REPLICA + PUBLISHER_KEY_INDEX_START)) ``` -This ensures each release uses non-overlapping publisher key ranges. +The keystore uses **schema v2** with a top-level `publisher` array shared by all validators on the pod: +```json +{"schemaVersion": 2, "publisher": ["0x1", "0x2", "0x3", "0x4"], "validators": [{"attester": "..."}]} +``` + +This ensures each release uses non-overlapping publisher key ranges while decoupling publisher count from attester count. **HA coordination:** - Both releases connect to shared PostgreSQL via `VALIDATOR_HA_DATABASE_URL` diff --git a/spartan/aztec-keystore/templates/batchjob.yaml b/spartan/aztec-keystore/templates/batchjob.yaml index b940f833b03d..e02b62914c49 100644 --- a/spartan/aztec-keystore/templates/batchjob.yaml +++ b/spartan/aztec-keystore/templates/batchjob.yaml @@ -33,7 +33,7 @@ spec: NODES="{{ .Values.attesters.nodeCount }}" HA_COUNT="{{ .Values.attesters.haCount }}" ATTESTERS_PER_NODE="{{ .Values.attesters.attestersPerNode }}" - PUBLISHERS_PER_VALIDATOR_KEY="{{ .Values.publishers.perValidatorKey }}" + VALIDATOR_PUBLISHERS_PER_REPLICA="{{ .Values.publishers.perReplica }}" ATTESTER_KEY_INDEX_START="{{ .Values.attesters.mnemonicStartIndex }}" PUBLISHER_KEY_INDEX_START="{{ .Values.publishers.mnemonicStartIndex }}" PROVER_COUNT=1 @@ -73,29 +73,27 @@ spec: printf '%s' "$addr" >> "$ADDR_FILE" done - # Publishers: start index per node, then pack by validator j and publisher p - pub_base=$((PUBLISHER_KEY_INDEX_START + i * ATTESTERS_PER_NODE * PUBLISHERS_PER_VALIDATOR_KEY)) - for ((j=0;j> "$PUB_KS_FILE" - printf 'type: file-raw\nkeyType: SECP256K1\nprivateKey: %s\n' "$ppk" >> "$PUB_KS_FILE" - - # write addresses CSV per node - if [[ $j -gt 0 || $p -gt 0 ]]; then printf ',' >> "$PUB_ADDR_FILE"; fi - printf '%s' "$paddr" >> "$PUB_ADDR_FILE" - done + # Publishers: flat pool per replica (shared by all attesters on the node) + pub_base=$((PUBLISHER_KEY_INDEX_START + i * VALIDATOR_PUBLISHERS_PER_REPLICA)) + for ((p=0;p> "$PUB_KS_FILE" + printf 'type: file-raw\nkeyType: SECP256K1\nprivateKey: %s\n' "$ppk" >> "$PUB_KS_FILE" + + # write addresses CSV per node + [[ $p -gt 0 ]] && printf ',' >> "$PUB_ADDR_FILE" + printf '%s' "$paddr" >> "$PUB_ADDR_FILE" done echo "Generated config for attesters on node $i" done # Generate HA publisher keys (separate key ranges for each HA release) - PUBLISHERS_PER_STS=$((NODES * ATTESTERS_PER_NODE * PUBLISHERS_PER_VALIDATOR_KEY)) + PUBLISHERS_PER_STS=$((NODES * VALIDATOR_PUBLISHERS_PER_REPLICA)) for ((ha=0;ha "$KEY_STORE_DIRECTORY/attesters.json" -echo "Generated configuration for $VALIDATORS_PER_NODE validators with $PUBLISHERS_PER_VALIDATOR_KEY publishers each" +echo "Generated configuration for $VALIDATORS_PER_NODE validators with $VALIDATOR_PUBLISHERS_PER_REPLICA shared publishers per replica" diff --git a/spartan/aztec-validator/templates/env.configmap.yaml b/spartan/aztec-validator/templates/env.configmap.yaml index 0fc49db0c655..5f5377f1f124 100644 --- a/spartan/aztec-validator/templates/env.configmap.yaml +++ b/spartan/aztec-validator/templates/env.configmap.yaml @@ -6,5 +6,5 @@ metadata: {{- include "chart.labels" . | nindent 4 }} data: VALIDATORS_PER_NODE: {{ .Values.validator.validatorsPerNode | quote }} - PUBLISHERS_PER_VALIDATOR_KEY: {{ .Values.validator.publishersPerValidatorKey | default 1 | quote }} + VALIDATOR_PUBLISHERS_PER_REPLICA: {{ .Values.validator.publishersPerReplica | default 4 | quote }} WEB3_SIGNER_URL: {{ .Values.validator.web3signerUrl | default "" | quote }} diff --git a/spartan/aztec-validator/values.yaml b/spartan/aztec-validator/values.yaml index 26f68e65e6df..e47d12d0cb67 100644 --- a/spartan/aztec-validator/values.yaml +++ b/spartan/aztec-validator/values.yaml @@ -14,7 +14,7 @@ validator: mnemonic: "test test test test test test test test test test test junk" mnemonicStartIndex: 2000 validatorsPerNode: 1 - publishersPerValidatorKey: 2 + publishersPerReplica: 4 publisherMnemonicStartIndex: 7000 persistence: diff --git a/spartan/environments/alpha-net.env b/spartan/environments/alpha-net.env index ba4758a6acc7..fad91bbe53f5 100644 --- a/spartan/environments/alpha-net.env +++ b/spartan/environments/alpha-net.env @@ -39,7 +39,7 @@ OTEL_COLLECTOR_ENDPOINT=REPLACE_WITH_GCP_SECRET VALIDATOR_REPLICAS=12 VALIDATORS_PER_NODE=4 -PUBLISHERS_PER_VALIDATOR_KEY=2 +VALIDATOR_PUBLISHERS_PER_REPLICA=4 VALIDATOR_PUBLISHER_MNEMONIC_START_INDEX=5000 VALIDATOR_RESOURCE_PROFILE="2-core-dedicated" diff --git a/spartan/environments/devnet.env b/spartan/environments/devnet.env index d878996cdac1..106979eef6bb 100644 --- a/spartan/environments/devnet.env +++ b/spartan/environments/devnet.env @@ -52,7 +52,7 @@ AZTEC_TARGET_COMMITTEE_SIZE=1 VALIDATOR_MNEMONIC_START_INDEX=$((1 + MNEMONIC_INDEX_OFFSET)) VALIDATOR_INDICES=$(seq -s ',' $VALIDATOR_MNEMONIC_START_INDEX $((VALIDATOR_MNEMONIC_START_INDEX + TOTAL_VALIDATORS - 1))) VALIDATOR_PUBLISHER_MNEMONIC_START_INDEX=$((5000 + MNEMONIC_INDEX_OFFSET)) -PUBLISHERS_PER_VALIDATOR_KEY=1 +VALIDATOR_PUBLISHERS_PER_REPLICA=8 SEQ_MIN_TX_PER_BLOCK=0 SEQ_MAX_TX_PER_BLOCK=32 diff --git a/spartan/environments/five-tps-long-epoch.env b/spartan/environments/five-tps-long-epoch.env index bca34b1bfd8f..a5d3ac217a99 100644 --- a/spartan/environments/five-tps-long-epoch.env +++ b/spartan/environments/five-tps-long-epoch.env @@ -25,7 +25,7 @@ OTEL_COLLECTOR_ENDPOINT=REPLACE_WITH_GCP_SECRET VALIDATOR_REPLICAS=12 VALIDATORS_PER_NODE=4 -PUBLISHERS_PER_VALIDATOR_KEY=2 +VALIDATOR_PUBLISHERS_PER_REPLICA=4 VALIDATOR_PUBLISHER_MNEMONIC_START_INDEX=5000 VALIDATOR_RESOURCE_PROFILE="2-core-dedicated" diff --git a/spartan/environments/five-tps-short-epoch.env b/spartan/environments/five-tps-short-epoch.env index 8ddca2ff57c7..6ac77948ca01 100644 --- a/spartan/environments/five-tps-short-epoch.env +++ b/spartan/environments/five-tps-short-epoch.env @@ -25,7 +25,7 @@ OTEL_COLLECTOR_ENDPOINT=REPLACE_WITH_GCP_SECRET VALIDATOR_REPLICAS=12 VALIDATORS_PER_NODE=4 -PUBLISHERS_PER_VALIDATOR_KEY=2 +VALIDATOR_PUBLISHERS_PER_REPLICA=4 VALIDATOR_PUBLISHER_MNEMONIC_START_INDEX=5000 VALIDATOR_RESOURCE_PROFILE="2-core-dedicated" diff --git a/spartan/environments/kind-minimal.env b/spartan/environments/kind-minimal.env index bdc7d62f22f4..c70b55aede50 100644 --- a/spartan/environments/kind-minimal.env +++ b/spartan/environments/kind-minimal.env @@ -43,7 +43,7 @@ AZTEC_DOCKER_IMAGE=${AZTEC_DOCKER_IMAGE:-aztecprotocol/aztec:latest} # Validators - minimal setup for upgrade test VALIDATOR_REPLICAS=4 VALIDATORS_PER_NODE=12 -PUBLISHERS_PER_VALIDATOR_KEY=1 +VALIDATOR_PUBLISHERS_PER_REPLICA=4 VALIDATOR_PUBLISHER_MNEMONIC_START_INDEX=5000 # Provers - minimal for faster testing diff --git a/spartan/environments/kind-provers.env b/spartan/environments/kind-provers.env index afc6ce9a97b3..f6e0482d7e1a 100644 --- a/spartan/environments/kind-provers.env +++ b/spartan/environments/kind-provers.env @@ -36,7 +36,7 @@ OTEL_COLLECTOR_ENDPOINT="http://metrics-opentelemetry-collector.metrics:4318" # Validators VALIDATOR_REPLICAS=4 VALIDATORS_PER_NODE=12 # We allocate 0.5 per validator, so 4 * 0.5 * 12 = 24 cores total -PUBLISHERS_PER_VALIDATOR_KEY=1 +VALIDATOR_PUBLISHERS_PER_REPLICA=4 VALIDATOR_PUBLISHER_MNEMONIC_START_INDEX=5000 # Provers diff --git a/spartan/environments/mbps-net.env b/spartan/environments/mbps-net.env index 0493815e812c..4357bf8fc037 100644 --- a/spartan/environments/mbps-net.env +++ b/spartan/environments/mbps-net.env @@ -38,7 +38,7 @@ AZTEC_LAG_IN_EPOCHS_FOR_RANDAO=2 VALIDATOR_REPLICAS=4 VALIDATORS_PER_NODE=12 -PUBLISHERS_PER_VALIDATOR_KEY=2 +VALIDATOR_PUBLISHERS_PER_REPLICA=4 VALIDATOR_PUBLISHER_MNEMONIC_START_INDEX=5000 PUBLISHERS_PER_PROVER=2 diff --git a/spartan/environments/next-net.env b/spartan/environments/next-net.env index 1dbe575eae9f..f01c43e4d19a 100644 --- a/spartan/environments/next-net.env +++ b/spartan/environments/next-net.env @@ -41,7 +41,7 @@ AZTEC_LAG_IN_EPOCHS_FOR_RANDAO=2 VALIDATOR_REPLICAS=4 VALIDATORS_PER_NODE=12 -PUBLISHERS_PER_VALIDATOR_KEY=2 +VALIDATOR_PUBLISHERS_PER_REPLICA=4 VALIDATOR_PUBLISHER_MNEMONIC_START_INDEX=5000 PUBLISHERS_PER_PROVER=2 diff --git a/spartan/environments/next-scenario.env b/spartan/environments/next-scenario.env index 3b11279aed69..b0668e5c960d 100644 --- a/spartan/environments/next-scenario.env +++ b/spartan/environments/next-scenario.env @@ -20,7 +20,7 @@ OTEL_COLLECTOR_ENDPOINT=REPLACE_WITH_GCP_SECRET VALIDATOR_REPLICAS=4 VALIDATORS_PER_NODE=12 -PUBLISHERS_PER_VALIDATOR_KEY=1 +VALIDATOR_PUBLISHERS_PER_REPLICA=4 VALIDATOR_PUBLISHER_MNEMONIC_START_INDEX=5000 RPC_REPLICAS=2 diff --git a/spartan/environments/prove-n-tps-fake.env b/spartan/environments/prove-n-tps-fake.env index 1197acde6515..2fe45c46745e 100644 --- a/spartan/environments/prove-n-tps-fake.env +++ b/spartan/environments/prove-n-tps-fake.env @@ -21,7 +21,7 @@ OTEL_COLLECTOR_ENDPOINT=REPLACE_WITH_GCP_SECRET VALIDATOR_REPLICAS=4 VALIDATORS_PER_NODE=12 -PUBLISHERS_PER_VALIDATOR_KEY=1 +VALIDATOR_PUBLISHERS_PER_REPLICA=4 VALIDATOR_PUBLISHER_MNEMONIC_START_INDEX=5000 REAL_VERIFIER=false diff --git a/spartan/environments/prove-n-tps-real.env b/spartan/environments/prove-n-tps-real.env index 4be76065b0ca..cc6442210832 100644 --- a/spartan/environments/prove-n-tps-real.env +++ b/spartan/environments/prove-n-tps-real.env @@ -22,7 +22,7 @@ OTEL_COLLECTOR_ENDPOINT=REPLACE_WITH_GCP_SECRET VALIDATOR_REPLICAS=4 VALIDATORS_PER_NODE=12 -PUBLISHERS_PER_VALIDATOR_KEY=1 +VALIDATOR_PUBLISHERS_PER_REPLICA=4 VALIDATOR_PUBLISHER_MNEMONIC_START_INDEX=5000 REAL_VERIFIER=true diff --git a/spartan/environments/staging-ignition.env b/spartan/environments/staging-ignition.env index b490b6248c4a..5ae4843aa4ec 100644 --- a/spartan/environments/staging-ignition.env +++ b/spartan/environments/staging-ignition.env @@ -33,7 +33,7 @@ CREATE_ROLLUP_CONTRACTS=${CREATE_ROLLUP_CONTRACTS:-false} VALIDATOR_REPLICAS=4 VALIDATORS_PER_NODE=12 -PUBLISHERS_PER_VALIDATOR_KEY=2 +VALIDATOR_PUBLISHERS_PER_REPLICA=4 VALIDATOR_PUBLISHER_MNEMONIC_START_INDEX=5000 PUBLISHERS_PER_PROVER=2 diff --git a/spartan/environments/staging-public.env b/spartan/environments/staging-public.env index 100900a664b0..40fbc48e4f3b 100644 --- a/spartan/environments/staging-public.env +++ b/spartan/environments/staging-public.env @@ -38,7 +38,7 @@ P2P_TX_POOL_DELETE_TXS_AFTER_REORG=true VALIDATOR_REPLICAS=5 VALIDATORS_PER_NODE=16 -PUBLISHERS_PER_VALIDATOR_KEY=2 +VALIDATOR_PUBLISHERS_PER_REPLICA=4 VALIDATOR_PUBLISHER_MNEMONIC_START_INDEX=5000 VALIDATOR_HA_REPLICAS=1 VALIDATOR_RESOURCE_PROFILE="prod-spot" diff --git a/spartan/environments/staging.local.env b/spartan/environments/staging.local.env index b0f06c35b38e..99054b7b87b1 100644 --- a/spartan/environments/staging.local.env +++ b/spartan/environments/staging.local.env @@ -14,7 +14,7 @@ FUNDING_PRIVATE_KEY="0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf VALIDATOR_REPLICAS=4 VALIDATORS_PER_NODE=12 -PUBLISHERS_PER_VALIDATOR_KEY=2 +VALIDATOR_PUBLISHERS_PER_REPLICA=4 VALIDATOR_PUBLISHER_MNEMONIC_START_INDEX=5000 PUBLISHERS_PER_PROVER=2 diff --git a/spartan/environments/ten-tps-long-epoch.env b/spartan/environments/ten-tps-long-epoch.env index 51b6d8463123..a91cb0995253 100644 --- a/spartan/environments/ten-tps-long-epoch.env +++ b/spartan/environments/ten-tps-long-epoch.env @@ -25,7 +25,7 @@ OTEL_COLLECTOR_ENDPOINT=REPLACE_WITH_GCP_SECRET VALIDATOR_REPLICAS=12 VALIDATORS_PER_NODE=4 -PUBLISHERS_PER_VALIDATOR_KEY=2 +VALIDATOR_PUBLISHERS_PER_REPLICA=4 VALIDATOR_PUBLISHER_MNEMONIC_START_INDEX=5000 VALIDATOR_RESOURCE_PROFILE="2-core-dedicated" diff --git a/spartan/environments/ten-tps-short-epoch.env b/spartan/environments/ten-tps-short-epoch.env index 313baed45607..4114d3b0a928 100644 --- a/spartan/environments/ten-tps-short-epoch.env +++ b/spartan/environments/ten-tps-short-epoch.env @@ -25,7 +25,7 @@ OTEL_COLLECTOR_ENDPOINT=REPLACE_WITH_GCP_SECRET VALIDATOR_REPLICAS=12 VALIDATORS_PER_NODE=4 -PUBLISHERS_PER_VALIDATOR_KEY=2 +VALIDATOR_PUBLISHERS_PER_REPLICA=4 VALIDATOR_PUBLISHER_MNEMONIC_START_INDEX=5000 VALIDATOR_RESOURCE_PROFILE="2-core-dedicated" diff --git a/spartan/environments/testnet.env b/spartan/environments/testnet.env index 0785c9ffa79e..f72af734d6a2 100644 --- a/spartan/environments/testnet.env +++ b/spartan/environments/testnet.env @@ -75,7 +75,7 @@ RPC_INGRESS_SSL_CERT_NAMES='["testnet-rpc-cert"]' VALIDATOR_REPLICAS=4 VALIDATORS_PER_NODE=64 -PUBLISHERS_PER_VALIDATOR_KEY=1 +VALIDATOR_PUBLISHERS_PER_REPLICA=8 VALIDATOR_PUBLISHER_MNEMONIC_START_INDEX=5000 VALIDATOR_HA_REPLICAS=1 VALIDATOR_RESOURCE_PROFILE="prod-spot" diff --git a/spartan/environments/tps-scenario.env b/spartan/environments/tps-scenario.env index 5572b3f77db9..9ebddc63fb33 100644 --- a/spartan/environments/tps-scenario.env +++ b/spartan/environments/tps-scenario.env @@ -34,7 +34,7 @@ AZTEC_MANA_TARGET=2147483647 VALIDATOR_REPLICAS=12 VALIDATORS_PER_NODE=4 -PUBLISHERS_PER_VALIDATOR_KEY=2 +VALIDATOR_PUBLISHERS_PER_REPLICA=4 VALIDATOR_PUBLISHER_MNEMONIC_START_INDEX=5000 VALIDATOR_RESOURCE_PROFILE="2-core-dedicated" diff --git a/spartan/scripts/calculate_publisher_indices.sh b/spartan/scripts/calculate_publisher_indices.sh index 709cfd52e8cd..1b8ec890ab8b 100755 --- a/spartan/scripts/calculate_publisher_indices.sh +++ b/spartan/scripts/calculate_publisher_indices.sh @@ -28,7 +28,7 @@ source "$ENVIRONMENT_FILE" # Set defaults (same as deploy_network.sh) VALIDATOR_REPLICAS=${VALIDATOR_REPLICAS:-4} VALIDATORS_PER_NODE=${VALIDATORS_PER_NODE:-12} -PUBLISHERS_PER_VALIDATOR_KEY=${PUBLISHERS_PER_VALIDATOR_KEY:-2} +VALIDATOR_PUBLISHERS_PER_REPLICA=${VALIDATOR_PUBLISHERS_PER_REPLICA:-4} VALIDATOR_PUBLISHER_MNEMONIC_START_INDEX=${VALIDATOR_PUBLISHER_MNEMONIC_START_INDEX:-5000} VALIDATOR_HA_REPLICAS=${VALIDATOR_HA_REPLICAS:-0} @@ -36,8 +36,7 @@ PUBLISHERS_PER_PROVER=${PUBLISHERS_PER_PROVER:-2} PROVER_PUBLISHER_MNEMONIC_START_INDEX=${PROVER_PUBLISHER_MNEMONIC_START_INDEX:-8000} # Calculate validator publisher indices -TOTAL_VALIDATOR_KEYS=$((VALIDATOR_REPLICAS * VALIDATORS_PER_NODE)) -TOTAL_VALIDATOR_PUBLISHERS=$((TOTAL_VALIDATOR_KEYS * PUBLISHERS_PER_VALIDATOR_KEY * (1 + VALIDATOR_HA_REPLICAS))) +TOTAL_VALIDATOR_PUBLISHERS=$((VALIDATOR_REPLICAS * VALIDATOR_PUBLISHERS_PER_REPLICA * (1 + VALIDATOR_HA_REPLICAS))) VALIDATOR_PUBLISHER_INDICES="" if (( TOTAL_VALIDATOR_PUBLISHERS > 0 )); then diff --git a/spartan/scripts/check_env_vars.sh b/spartan/scripts/check_env_vars.sh index f4f92e9b6f10..2f2cb337800e 100755 --- a/spartan/scripts/check_env_vars.sh +++ b/spartan/scripts/check_env_vars.sh @@ -176,7 +176,7 @@ EXCLUDED_VARS_ARRAY=( "VALIDATOR_VALUES" "VALUES_FILE" "PUBLISHER_KEY_INDEX_START" - "PUBLISHERS_PER_VALIDATOR_KEY" + "VALIDATOR_PUBLISHERS_PER_REPLICA" "PUBLISHERS_PER_PROVER" ) diff --git a/spartan/scripts/deploy_network.sh b/spartan/scripts/deploy_network.sh index dc40910b6de2..4984fbaa2daa 100755 --- a/spartan/scripts/deploy_network.sh +++ b/spartan/scripts/deploy_network.sh @@ -88,7 +88,7 @@ VALIDATOR_MNEMONIC_START_INDEX=${VALIDATOR_MNEMONIC_START_INDEX:-1} VALIDATORS_PER_NODE=${VALIDATORS_PER_NODE:-12} VALIDATOR_REPLICAS=${VALIDATOR_REPLICAS:-4} VALIDATOR_PUBLISHER_MNEMONIC_START_INDEX=${VALIDATOR_PUBLISHER_MNEMONIC_START_INDEX:-5000} -PUBLISHERS_PER_VALIDATOR_KEY=${PUBLISHERS_PER_VALIDATOR_KEY:-2} +VALIDATOR_PUBLISHERS_PER_REPLICA=${VALIDATOR_PUBLISHERS_PER_REPLICA:-4} VALIDATOR_HA_REPLICAS=${VALIDATOR_HA_REPLICAS:-0} PROVER_PUBLISHER_MNEMONIC_START_INDEX=${PROVER_PUBLISHER_MNEMONIC_START_INDEX:-8000} PUBLISHERS_PER_PROVER=${PUBLISHERS_PER_PROVER:-1} @@ -214,9 +214,8 @@ fi # Compute and include publisher indices in prefunding list # Uses env overrides when provided, otherwise falls back to values.yaml defaults -TOTAL_VALIDATOR_KEYS=$((VALIDATOR_REPLICAS * VALIDATORS_PER_NODE)) -# Total publishers = keys * publishers_per_key * (1 + HA_REPLICAS) -TOTAL_VALIDATOR_PUBLISHERS=$((TOTAL_VALIDATOR_KEYS * PUBLISHERS_PER_VALIDATOR_KEY * (1 + VALIDATOR_HA_REPLICAS))) +# Total publishers = replicas * publishers_per_replica * (1 + HA_REPLICAS) +TOTAL_VALIDATOR_PUBLISHERS=$((VALIDATOR_REPLICAS * VALIDATOR_PUBLISHERS_PER_REPLICA * (1 + VALIDATOR_HA_REPLICAS))) if (( TOTAL_VALIDATOR_PUBLISHERS > 0 )); then VALIDATOR_PUBLISHER_RANGE=$(seq "$VALIDATOR_PUBLISHER_MNEMONIC_START_INDEX" $((VALIDATOR_PUBLISHER_MNEMONIC_START_INDEX + TOTAL_VALIDATOR_PUBLISHERS - 1)) | tr '\n' ',' | sed 's/,$//') @@ -527,7 +526,7 @@ VALIDATOR_MNEMONIC_START_INDEX = ${VALIDATOR_MNEMONIC_START_INDEX} VALIDATOR_PUBLISHER_MNEMONIC_START_INDEX = ${VALIDATOR_PUBLISHER_MNEMONIC_START_INDEX} VALIDATORS_PER_NODE = ${VALIDATORS_PER_NODE} VALIDATOR_REPLICAS = ${VALIDATOR_REPLICAS} -VALIDATOR_PUBLISHERS_PER_VALIDATOR_KEY = ${PUBLISHERS_PER_VALIDATOR_KEY} +VALIDATOR_PUBLISHERS_PER_REPLICA = ${VALIDATOR_PUBLISHERS_PER_REPLICA} VALIDATOR_HA_REPLICAS = ${VALIDATOR_HA_REPLICAS} SEQ_MIN_TX_PER_BLOCK = ${SEQ_MIN_TX_PER_BLOCK} SEQ_MAX_TX_PER_BLOCK = ${SEQ_MAX_TX_PER_BLOCK} diff --git a/spartan/terraform/deploy-aztec-infra/main.tf b/spartan/terraform/deploy-aztec-infra/main.tf index 74021428bac8..fc46ee5e3b94 100644 --- a/spartan/terraform/deploy-aztec-infra/main.tf +++ b/spartan/terraform/deploy-aztec-infra/main.tf @@ -51,7 +51,7 @@ module "web3signer" { VALIDATOR_HA_REPLICAS = tonumber(var.VALIDATOR_HA_REPLICAS) VALIDATOR_MNEMONIC_START_INDEX = tonumber(var.VALIDATOR_MNEMONIC_START_INDEX) VALIDATOR_PUBLISHER_MNEMONIC_START_INDEX = tonumber(var.VALIDATOR_PUBLISHER_MNEMONIC_START_INDEX) - VALIDATOR_PUBLISHERS_PER_VALIDATOR_KEY = var.VALIDATOR_PUBLISHERS_PER_VALIDATOR_KEY + VALIDATOR_PUBLISHERS_PER_REPLICA = var.VALIDATOR_PUBLISHERS_PER_REPLICA PROVER_COUNT = tonumber(var.PROVER_REPLICAS) PUBLISHERS_PER_PROVER = tonumber(var.PROVER_PUBLISHERS_PER_PROVER) PROVER_PUBLISHER_MNEMONIC_START_INDEX = tonumber(var.PROVER_PUBLISHER_MNEMONIC_START_INDEX) @@ -185,7 +185,7 @@ locals { "validator.mnemonic" = var.VALIDATOR_MNEMONIC "validator.mnemonicStartIndex" = var.VALIDATOR_MNEMONIC_START_INDEX "validator.validatorsPerNode" = var.VALIDATORS_PER_NODE - "validator.publishersPerValidatorKey" = var.VALIDATOR_PUBLISHERS_PER_VALIDATOR_KEY + "validator.publishersPerReplica" = var.VALIDATOR_PUBLISHERS_PER_REPLICA "validator.publisherMnemonicStartIndex" = var.VALIDATOR_PUBLISHER_MNEMONIC_START_INDEX "validator.replicaCount" = var.VALIDATOR_REPLICAS "validator.sentinel.enabled" = var.SENTINEL_ENABLED @@ -208,7 +208,7 @@ locals { "validator.node.env.KEY_INDEX_START" = var.VALIDATOR_MNEMONIC_START_INDEX "validator.node.env.PUBLISHER_KEY_INDEX_START" = var.VALIDATOR_PUBLISHER_MNEMONIC_START_INDEX "validator.node.env.VALIDATORS_PER_NODE" = var.VALIDATORS_PER_NODE - "validator.node.env.PUBLISHERS_PER_VALIDATOR_KEY" = var.VALIDATOR_PUBLISHERS_PER_VALIDATOR_KEY + "validator.node.env.VALIDATOR_PUBLISHERS_PER_REPLICA" = var.VALIDATOR_PUBLISHERS_PER_REPLICA "validator.node.proverRealProofs" = var.PROVER_REAL_PROOFS "validator.node.env.SEQ_MIN_TX_PER_BLOCK" = var.SEQ_MIN_TX_PER_BLOCK "validator.node.env.SEQ_MAX_TX_PER_BLOCK" = var.SEQ_MAX_TX_PER_BLOCK @@ -257,7 +257,7 @@ locals { local.validator_ha_settings, { "validator.node.env.VALIDATOR_HA_REPLICA_INDEX" = tostring(idx) - "validator.node.env.PUBLISHER_KEY_INDEX_START" = var.VALIDATOR_PUBLISHER_MNEMONIC_START_INDEX + (idx * (var.VALIDATORS_PER_NODE * var.VALIDATOR_PUBLISHERS_PER_VALIDATOR_KEY * var.VALIDATOR_REPLICAS)) + "validator.node.env.PUBLISHER_KEY_INDEX_START" = var.VALIDATOR_PUBLISHER_MNEMONIC_START_INDEX + (idx * (var.VALIDATOR_PUBLISHERS_PER_REPLICA * var.VALIDATOR_REPLICAS)) "validator.service.p2p.announcePort" = local.p2p_port_validators[idx] "validator.service.p2p.port" = local.p2p_port_validators[idx] } diff --git a/spartan/terraform/deploy-aztec-infra/variables.tf b/spartan/terraform/deploy-aztec-infra/variables.tf index 2a0c9a8398b9..28caede2a671 100644 --- a/spartan/terraform/deploy-aztec-infra/variables.tf +++ b/spartan/terraform/deploy-aztec-infra/variables.tf @@ -191,10 +191,10 @@ variable "VALIDATORS_PER_NODE" { default = 12 } -variable "VALIDATOR_PUBLISHERS_PER_VALIDATOR_KEY" { - description = "Number of publisher EOAs per validator key" +variable "VALIDATOR_PUBLISHERS_PER_REPLICA" { + description = "Number of publisher EOAs per validator replica (pod)" type = number - default = 1 + default = 4 } variable "VALIDATOR_PUBLISHER_MNEMONIC_START_INDEX" { diff --git a/spartan/terraform/modules/web3signer/main.tf b/spartan/terraform/modules/web3signer/main.tf index b51b0f9f773a..af5ce6ff56f4 100644 --- a/spartan/terraform/modules/web3signer/main.tf +++ b/spartan/terraform/modules/web3signer/main.tf @@ -44,7 +44,7 @@ resource "helm_release" "keystore_setup" { } } publishers = { - perValidatorKey = var.VALIDATOR_PUBLISHERS_PER_VALIDATOR_KEY + perReplica = var.VALIDATOR_PUBLISHERS_PER_REPLICA mnemonicStartIndex = var.VALIDATOR_PUBLISHER_MNEMONIC_START_INDEX } provers = { diff --git a/spartan/terraform/modules/web3signer/variables.tf b/spartan/terraform/modules/web3signer/variables.tf index 20b009cb6704..936e75a201f3 100644 --- a/spartan/terraform/modules/web3signer/variables.tf +++ b/spartan/terraform/modules/web3signer/variables.tf @@ -53,10 +53,10 @@ variable "VALIDATOR_PUBLISHER_MNEMONIC_START_INDEX" { type = number } -variable "VALIDATOR_PUBLISHERS_PER_VALIDATOR_KEY" { - description = "Number of publishers for each attester key" +variable "VALIDATOR_PUBLISHERS_PER_REPLICA" { + description = "Number of publisher EOAs per validator replica (pod)" type = number - default = 0 + default = 4 } variable "AZTEC_DOCKER_IMAGE" {