@@ -141,6 +141,11 @@ in ''
141141# desired_producer_tps: ${ toString desired_producer_tps }
142142# desired_producer_sleep: ${ toString desired_producer_sleep }
143143
144+ ${ import ./utils/keys.nix
145+ { inherit coreutils jq cardano-cli testnet_magic ;
146+ }
147+ }
148+
144149${ import ./utils/utxo.nix
145150 { inherit coreutils cardano-cli jq testnet_magic ;
146151 inherit outs_per_split_transaction funds_submit_tries ;
@@ -151,108 +156,6 @@ ${import ./utils/utxo.nix
151156 }
152157}
153158
154- ################################################################################
155- # Hack: Given a node "i" and proposal number and a DRep number create always the
156- # same address keys.
157- # Only supports up to 99 nodes, 9999 proposals and 999999 DReps by adding the
158- # missing Hex chars.
159- # Returns the file path without the extensions (the ".skey" or ".vkey" part).
160- ################################################################################
161- function create_node_prop_drep_key_files {
162-
163- # Function arguments.
164- local node_str=$1 # String for the key file name (not for the socket).
165- local node_i=$2 # This "i" is part of the node name ("node-i").
166- local prop_i=$3
167- local drep_i=$4
168-
169- local filename=./"'' ${node_str}"-prop-"'' ${prop_i}"-drep-"'' ${drep_i}"
170- # Now with the extensions.
171- local skey="'' ${filename}".skey
172- local vkey="'' ${filename}".vkey
173-
174- # Only create if not already there!
175- if ! test -f "'' ${vkey}"
176- then
177- ${ jq } /bin/jq --null-input \
178- --argjson node_i "'' ${node_i}" \
179- --argjson prop_i "'' ${prop_i}" \
180- --argjson drep_i "'' ${drep_i}" \
181- '
182- {"type": "PaymentSigningKeyShelley_ed25519",
183- "description": "Payment Signing Key",
184- "cborHex": (
185- "5820b02868d722df021278c78be3b7363759b37f5852b8747b488bab"
186- + (if $node_i <= 9
187- then ("0" + ($node_i | tostring))
188- elif $node_i >= 10 and $node_i <= 99
189- then ( $node_i | tostring)
190- else (error ("Node ID above 99"))
191- end
192- )
193- + (if $prop_i <= 9
194- then ( "000" + ($prop_i | tostring))
195- elif $prop_i >= 10 and $prop_i <= 99
196- then ( "00" + ($prop_i | tostring))
197- elif $prop_i >= 100 and $prop_i <= 999
198- then ( "0" + ($prop_i | tostring))
199- elif $prop_i >= 1000 and $prop_i <= 9999
200- then ( ($prop_i | tostring))
201- else (error ("Proposal ID above 9999"))
202- end
203- )
204- + (if $drep_i <= 9
205- then ( "00000" + ($drep_i | tostring))
206- elif $drep_i >= 10 and $drep_i <= 99
207- then ( "0000" + ($drep_i | tostring))
208- elif $drep_i >= 100 and $drep_i <= 999
209- then ( "000" + ($drep_i | tostring))
210- elif $drep_i >= 1000 and $drep_i <= 9999
211- then ( "00" + ($drep_i | tostring))
212- elif $drep_i >= 10000 and $drep_i <= 99999
213- then ( "0" + ($drep_i | tostring))
214- elif $drep_i >= 100000 and $drep_i <= 999999
215- then ( ($drep_i | tostring))
216- else (error ("DRep ID above 999999"))
217- end
218- )
219- )
220- }
221- ' \
222- > "'' ${skey}"
223- ${ cardano-cli } /bin/cardano-cli conway key verification-key \
224- --signing-key-file "'' ${skey}" \
225- --verification-key-file "'' ${vkey}"
226- fi
227- ${ coreutils } /bin/echo "'' ${filename}"
228- }
229-
230- ################################################################################
231- # Get address of the node-proposal-drep combination!
232- ################################################################################
233- function build_node_prop_drep_address {
234-
235- # Function arguments.
236- local node_str=$1 # String for the key file name (not for the socket).
237- local node_i=$2 # This "i" is part of the node name ("node-i").
238- local prop_i=$3
239- local drep_i=$4
240-
241- local filename addr
242- filename="$(create_node_prop_drep_key_files "'' ${node_str}" "'' ${node_i}" "'' ${prop_i}" "'' ${drep_i}")"
243- addr="'' ${filename}.addr"
244- # Only create if not already there!
245- if ! test -f "'' ${addr}"
246- then
247- local vkey="'' ${filename}".vkey
248- ${ cardano-cli } /bin/cardano-cli address build \
249- --testnet-magic ${ toString testnet_magic } \
250- --payment-verification-key-file "'' ${vkey}" \
251- > "'' ${addr}"
252- fi
253- ${ coreutils } /bin/cat "'' ${addr}"
254- }
255-
256159################################################################################
257160# Evenly distribute the "utxo_*key" genesis funds to all producer nodes.
258161# To be called before `governance_funds_producer`.
@@ -289,7 +192,7 @@ function governance_funds_genesis {
289192 )"
290193 local producer_addr
291194 # Drep 0 is No DRep (funds for the node).
292- producer_addr="$(build_node_prop_drep_address "'' ${producer_name}" "'' ${producer_i}" 0 0)"
195+ producer_addr="$(build_x_y_z_address "'' ${producer_name}" "'' ${producer_i}" 0 0)"
293196 producers_addrs_array+=("'' ${producer_addr}")
294197 ${ coreutils } /bin/echo "governance_funds_genesis: Splitting to: '' ${producer_name} - '' ${producer_i} - 0 - ('' ${producer_addr})"
295198 done
@@ -326,9 +229,9 @@ function governance_funds_producer {
326229 ../../node-specs.json \
327230 )"
328231 local producer_addr producer_vkey producer_skey
329- producer_addr="$(build_node_prop_drep_address "'' ${producer_name}" "'' ${producer_i}" 0 0)"
330- producer_vkey="$(create_node_prop_drep_key_files "'' ${producer_name}" "'' ${producer_i}" 0 0)".vkey
331- producer_skey="$(create_node_prop_drep_key_files "'' ${producer_name}" "'' ${producer_i}" 0 0)".skey
232+ producer_addr="$(build_x_y_z_address "'' ${producer_name}" "'' ${producer_i}" 0 0)"
233+ producer_vkey="$(create_x_y_z_key_files "'' ${producer_name}" "'' ${producer_i}" 0 0)".vkey
234+ producer_skey="$(create_x_y_z_key_files "'' ${producer_name}" "'' ${producer_i}" 0 0)".skey
332235
333236 # Wait for initial funds to arrive!
334237 ${ coreutils } /bin/echo "governance_funds_producer: Wait for funds: $(${ coreutils } /bin/date --rfc-3339=seconds)"
@@ -349,7 +252,7 @@ function governance_funds_producer {
349252 for prop_i in {1..${ toString proposals_count } }
350253 do
351254 local producer_prop_addr
352- producer_prop_addr="$(build_node_prop_drep_address "'' ${producer_name}" "'' ${producer_i}" "'' ${prop_i}" 0)"
255+ producer_prop_addr="$(build_x_y_z_address "'' ${producer_name}" "'' ${producer_i}" "'' ${prop_i}" 0)"
353256 producer_prop_addr_array+=("'' ${producer_prop_addr}")
354257 ${ coreutils } /bin/echo "governance_funds_producer: Splitting to: '' ${producer_name} - '' ${producer_i} - '' ${prop_i} - '' ${producer_prop_addr}"
355258 done
@@ -374,8 +277,8 @@ function governance_funds_producer {
374277 do
375278
376279 local producer_prop_vkey producer_prop_skey
377- producer_prop_vkey="$(create_node_prop_drep_key_files "'' ${producer_name}" "'' ${producer_i}" "'' ${prop_i}" 0)".vkey
378- producer_prop_skey="$(create_node_prop_drep_key_files "'' ${producer_name}" "'' ${producer_i}" "'' ${prop_i}" 0)".skey
280+ producer_prop_vkey="$(create_x_y_z_key_files "'' ${producer_name}" "'' ${producer_i}" "'' ${prop_i}" 0)".vkey
281+ producer_prop_skey="$(create_x_y_z_key_files "'' ${producer_name}" "'' ${producer_i}" "'' ${prop_i}" 0)".skey
379282
380283 local producer_dreps_addrs_array=()
381284 local drep_step=0
@@ -385,7 +288,7 @@ function governance_funds_producer {
385288 do
386289 local producer_drep_addr
387290 actual_drep="$((drep_step + i))"
388- producer_drep_addr="$(build_node_prop_drep_address "'' ${producer_name}" "'' ${producer_i}" "'' ${prop_i}" "'' ${actual_drep}")"
291+ producer_drep_addr="$(build_x_y_z_address "'' ${producer_name}" "'' ${producer_i}" "'' ${prop_i}" "'' ${actual_drep}")"
389292 producer_dreps_addrs_array+=("'' ${producer_drep_addr}")
390293 ${ coreutils } /bin/echo "governance_funds_producer: Splitting to: '' ${producer_name} - '' ${producer_i} - '' ${prop_i} - '' ${actual_drep} - '' ${producer_drep_addr}"
391294 done
@@ -522,8 +425,8 @@ function governance_create_withdrawal {
522425 socket_path="$(get_socket_path "'' ${node_str}")"
523426
524427 local node_drep_skey node_drep_addr
525- node_drep_skey="$(create_node_prop_drep_key_files "'' ${node_str}" "'' ${node_i}" 0 "'' ${drep_i}")".skey
526- node_drep_addr="$(build_node_prop_drep_address "'' ${node_str}" "'' ${node_i}" 0 "'' ${drep_i}")"
428+ node_drep_skey="$(create_x_y_z_key_files "'' ${node_str}" "'' ${node_i}" 0 "'' ${drep_i}")".skey
429+ node_drep_addr="$(build_x_y_z_address "'' ${node_str}" "'' ${node_i}" 0 "'' ${drep_i}")"
527430
528431 # Funds needed for this governance action ?
529432 local action_deposit
@@ -719,8 +622,8 @@ function governance_vote_proposal {
719622 for drep_i in '' ${dreps_array[*]}
720623 do
721624 local node_drep_skey node_drep_addr
722- node_drep_skey="$(create_node_prop_drep_key_files "'' ${node_str}" "'' ${node_i}" "'' ${prop_i}" "'' ${drep_i}")".skey
723- node_drep_addr="$(build_node_prop_drep_address "'' ${node_str}" "'' ${node_i}" "'' ${prop_i}" "'' ${drep_i}")"
625+ node_drep_skey="$(create_x_y_z_key_files "'' ${node_str}" "'' ${node_i}" "'' ${prop_i}" "'' ${drep_i}")".skey
626+ node_drep_addr="$(build_x_y_z_address "'' ${node_str}" "'' ${node_i}" "'' ${prop_i}" "'' ${drep_i}")"
724627 # UTxO are created for 1 vote per transaction so all runs have the same
725628 # number of UTxOs. We grab the funds from the first address/UTxO.
726629 if test -z "'' ${funds_tx-}"
0 commit comments