2023-05-25 15:05:38 +00:00
|
|
|
#!/usr/bin/bash
|
|
|
|
|
|
|
|
# Copyright (c) 2023 Status Research & Development GmbH.
|
|
|
|
# Licensed under either of:
|
|
|
|
# - Apache License, version 2.0
|
|
|
|
# - MIT license
|
|
|
|
# at your option. This file may not be copied, modified, or distributed
|
|
|
|
# except according to those terms.
|
|
|
|
|
|
|
|
# This script will receive a single numeric argument representing the
|
|
|
|
# instance ID of the signer. It will range from 0 to 9.
|
|
|
|
# Usually, only a single signer will be launched to produce signatures
|
|
|
|
# for all validators, but if threshold signing is enabled through the
|
|
|
|
# `--signer-nodes N` parameter, the simulation script will launch
|
|
|
|
# multiple instances working with partial validator keys.
|
|
|
|
SIGNER_NODE_IDX=$1
|
|
|
|
|
|
|
|
# These directories store the keystores and secrets generated by the
|
|
|
|
# simulation script. These are either full validator keys or partial
|
|
|
|
# validator keys depending on the `--signer-nodes` parameter (see above).
|
2023-06-02 21:41:57 +00:00
|
|
|
SECRETS_DIR="${DATA_DIR}/secrets_shares/$((SIGNER_NODE_IDX + 1))"
|
|
|
|
KEYSTORES_DIR="${DATA_DIR}/validators_shares/$((SIGNER_NODE_IDX + 1))"
|
2023-05-25 15:05:38 +00:00
|
|
|
|
|
|
|
# You can re-arrange the keystore files to match the layout expected by
|
|
|
|
# your signer. The example below demonstrates how this is done when working
|
|
|
|
# with the Consensys Web3Signer:
|
|
|
|
#
|
2023-06-02 21:41:57 +00:00
|
|
|
# for validator_pubkey in $(ls "$SECRETS_DIR")
|
2023-05-25 15:05:38 +00:00
|
|
|
# do
|
2023-06-02 21:41:57 +00:00
|
|
|
# mv "$SECRETS_DIR/$validator_pubkey" "$SECRETS_DIR/$validator_pubkey.txt"
|
|
|
|
# mv "$KEYSTORES_DIR/$validator_pubkey/keystore.json" "$KEYSTORES_DIR/$validator_pubkey.json"
|
2023-05-25 15:05:38 +00:00
|
|
|
# done
|
|
|
|
|
|
|
|
# Here you need to launch your signer server process.
|
|
|
|
# You must make sure that it will listen on the `$((BASE_REMOTE_SIGNER_PORT + SIGNER_NODE_IDX))` port.
|
|
|
|
# The new process must be launched in the background.
|
|
|
|
# Preferrably, you will also create a log file in the `${DATA_DIR}/logs` directory.
|
|
|
|
|
|
|
|
# Here is an example way to achieve the above with the web3signer binary:
|
|
|
|
#
|
|
|
|
# web3signer \
|
|
|
|
# --http-listen-port=$(( BASE_REMOTE_SIGNER_PORT + SIGNER_NODE_IDX )) \
|
|
|
|
# --logging=DEBUG \
|
|
|
|
# --metrics-enabled=true \
|
|
|
|
# --metrics-port=$(( BASE_REMOTE_SIGNER_METRICS_PORT + SIGNER_NODE_IDX )) \
|
|
|
|
# eth2 \
|
|
|
|
# --slashing-protection-enabled=false \
|
2023-06-02 21:41:57 +00:00
|
|
|
# --keystores-passwords-path="${SECRETS_DIR}" \
|
|
|
|
# --keystores-path="${KEYSTORES_DIR}" \
|
2023-05-25 15:05:38 +00:00
|
|
|
# --network="${RUNTIME_CONFIG_FILE}" &> "${DATA_DIR}/web3signer.log" &
|
|
|
|
|
|
|
|
# Finally, you must write the PIDs of any created processes in the `pids` directory
|
|
|
|
# The names of the PID files can be arbitrary, but make sure they are unique for each launched instance
|
|
|
|
echo $! > "${DATA_DIR}/pids/my-custom-signer.${SIGNER_NODE_IDX}"
|