22set -eu
33
44VALIDATORS_PER_NODE=${VALIDATORS_PER_NODE:- 1}
5- PUBLISHERS_PER_VALIDATOR_KEY =${PUBLISHERS_PER_VALIDATOR_KEY :- 1 }
5+ VALIDATOR_PUBLISHERS_PER_REPLICA =${VALIDATOR_PUBLISHERS_PER_REPLICA :- 4 }
66
77# We get the index in the config map from the pod name, which will have the service index within it
88# For multiple validators per node, we need to multiply the pod index by VALIDATORS_PER_NODE
@@ -11,8 +11,8 @@ KEY_INDEX=$((POD_INDEX * VALIDATORS_PER_NODE))
1111# Add the index to the start index to get the private key index
1212PRIVATE_KEY_INDEX=$(( KEY_INDEX_START + KEY_INDEX))
1313
14- # Calculate publisher key starting index for this pod
15- PUBLISHER_KEY_INDEX=$(( POD_INDEX * VALIDATORS_PER_NODE * PUBLISHERS_PER_VALIDATOR_KEY + PUBLISHER_KEY_INDEX_START))
14+ # Calculate publisher key starting index for this pod (flat per-replica pool)
15+ PUBLISHER_KEY_INDEX=$(( POD_INDEX * VALIDATOR_PUBLISHERS_PER_REPLICA + PUBLISHER_KEY_INDEX_START))
1616
1717WEB3_SIGNER_URL=${WEB3_SIGNER_URL:- " " }
1818
@@ -25,7 +25,7 @@ echo "PUBLISHER_KEY_INDEX: $PUBLISHER_KEY_INDEX"
2525echo " WEB3_SIGNER_URL: ${WEB3_SIGNER_URL} "
2626# Specific for validators that can hold multiple keys on one node
2727echo " VALIDATORS_PER_NODE: ${VALIDATORS_PER_NODE} "
28- echo " PUBLISHERS_PER_VALIDATOR_KEY : ${PUBLISHERS_PER_VALIDATOR_KEY } "
28+ echo " VALIDATOR_PUBLISHERS_PER_REPLICA : ${VALIDATOR_PUBLISHERS_PER_REPLICA } "
2929echo " MNEMONIC: $( echo $MNEMONIC | cut -d' ' -f1-2) ..."
3030
3131private_keys=()
@@ -43,13 +43,11 @@ for ((i = 0; i < VALIDATORS_PER_NODE; i++)); do
4343 addresses+=(" $address " )
4444done
4545
46- # Generate publisher keys
46+ # Generate publisher keys (shared pool for this replica)
4747publisher_private_keys=()
4848publisher_addresses=()
4949
50- total_publishers=$(( VALIDATORS_PER_NODE * PUBLISHERS_PER_VALIDATOR_KEY))
51-
52- for (( i = 0 ; i < total_publishers; i++ )) ; do
50+ for (( i = 0 ; i < VALIDATOR_PUBLISHERS_PER_REPLICA; i++ )) ; do
5351 current_pub_index=$(( PUBLISHER_KEY_INDEX + i))
5452 pub_private_key=$( cast wallet private-key " $MNEMONIC " --mnemonic-index $current_pub_index )
5553 pub_address=$( cast wallet address --private-key $pub_private_key )
@@ -59,24 +57,31 @@ for ((i = 0; i < total_publishers; i++)); do
5957done
6058
6159remoteSigner=" "
62- attesters=()
6360publishers=()
6461
6562if [ -n " $WEB3_SIGNER_URL " ]; then
6663 remoteSigner=$( jq -n ' {remoteSignerUrl: $url}' --arg url " $WEB3_SIGNER_URL " )
67- attesters=(${addresses[*]} )
6864 publishers=(${publisher_addresses[*]} )
6965else
7066 remoteSigner=" null"
71- attesters=(${private_keys[*]} )
7267 # Without web3signer, use private keys for publishers
7368 publishers=(${publisher_private_keys[*]} )
7469fi
7570
7671export KEY_STORE_DIRECTORY=" /shared/config/keys"
7772mkdir -p " $KEY_STORE_DIRECTORY "
7873
79- # Build validators array with multiple entries
74+ # Build top-level publisher array (shared by all validators on this replica)
75+ publishers_json=" ["
76+ for (( p = 0 ; p < VALIDATOR_PUBLISHERS_PER_REPLICA; p++ )) ; do
77+ if [ $p -gt 0 ]; then
78+ publishers_json+=" ,"
79+ fi
80+ publishers_json+=" \" ${publishers[$p]} \" "
81+ done
82+ publishers_json+=" ]"
83+
84+ # Build validators array with multiple entries (no per-validator publishers)
8085validators_json=" ["
8186for (( v = 0 ; v < VALIDATORS_PER_NODE; v++ )) ; do
8287 if [ $v -gt 0 ]; then
@@ -90,34 +95,23 @@ for ((v = 0; v < VALIDATORS_PER_NODE; v++)); do
9095 attester=" ${private_keys[$v]} "
9196 fi
9297
93- # Get the publisher keys for this validator
94- validator_publishers=" ["
95- for (( p = 0 ; p < PUBLISHERS_PER_VALIDATOR_KEY; p++ )) ; do
96- if [ $p -gt 0 ]; then
97- validator_publishers+=" ,"
98- fi
99- pub_index=$(( v * PUBLISHERS_PER_VALIDATOR_KEY + p))
100- validator_publishers+=" \" ${publishers[$pub_index]} \" "
101- done
102- validator_publishers+=" ]"
103-
104-
10598 validators_json+=" {
10699 \" attester\" : \" $attester \" ,
107100 \" coinbase\" : \" $attester \" ,
108- \" publisher\" : $validator_publishers ,
109101 \" feeRecipient\" : \" 0x0000000000000000000000000000000000000000000000000000000000000000\"
110102 }"
111103done
112104validators_json+=" ]"
113105
114- # Create final JSON structure
106+ # Create final JSON structure (schema v2 with top-level publisher array)
115107jq -n --argjson remoteSigner " $remoteSigner " \
116108 --argjson validators " $validators_json " \
109+ --argjson publisher " $publishers_json " \
117110' {
118- schemaVersion: 1 ,
111+ schemaVersion: 2 ,
119112 remoteSigner: $remoteSigner,
113+ publisher: $publisher,
120114 validators: $validators
121115}' > " $KEY_STORE_DIRECTORY /attesters.json"
122116
123- echo " Generated configuration for $VALIDATORS_PER_NODE validators with $PUBLISHERS_PER_VALIDATOR_KEY publishers each "
117+ echo " Generated configuration for $VALIDATORS_PER_NODE validators with $VALIDATOR_PUBLISHERS_PER_REPLICA shared publishers per replica "
0 commit comments