Mithril signer node
Mithril signer is responsible for producing individual signatures that are collected and aggregated by the Mithril aggregator.
-
For more information about the Mithril network, please see the architecture overview
-
For more information about the Mithril signer node, please see this overview
-
Check out the
Run a Mithril signer node
guide.
The Mithril network configurations are available in the Network configurations section of the user manual.
Resources
Node | Source repository | Rust documentation | Docker packages | Network configurations |
---|---|---|---|---|
Mithril signer | ↗️ | ↗️ | ↗️ | ↗️ |
Prerequisites
-
Install the latest stable version of the correctly configured Rust toolchain
-
Install build tools
build-essential
andm4
; for example, on Ubuntu/Debian/Mint, runsudo apt install build-essential m4
-
Install OpenSSL development libraries; for example, on Ubuntu/Debian/Mint, run
apt install libssl-dev
.
Download the source file
You can download the source file from GitHub (HTTPS):
git clone https://github.com/input-output-hk/mithril.git
Or (SSH):
git clone git@github.com:input-output-hk/mithril.git
Switch to the desired branch/tag:
# Replace **YOUR_BUILD_BRANCH_OR_TAG** with the appropriate branch or tag name
# Please refer to the [**Network configurations**](http://mithril.network/manual/getting-started/network-configurations) section of the user manual
git checkout **YOUR_BUILD_BRANCH_OR_TAG**
Change the directory:
cd mithril/mithril-signer
Development testing and building
Run tests:
make test
Create the help menu:
make help
Generate the Rust documentation:
make doc
Run in debug mode with the default configuration:
make debug
Release the build and run the binary
To build and run in release mode with the default configuration:
make run
Or, you can build only in release mode:
make build
Display the help menu:
./mithril-signer --help
You should see:
An implementation of a Mithril signer
Usage: mithril-signer [OPTIONS]
Options:
-r, --run-mode <RUN_MODE>
Run Mode
[env: RUN_MODE=]
[default: dev]
-v, --verbose...
Verbosity level, add more v to increase
-c, --configuration-dir <CONFIGURATION_DIR>
Directory where the configuration file is located
[default: ./config]
--disable-digests-cache
Disable immutables digests cache
--reset-digests-cache
If set the existing immutables digests cache will be reset.
Will be ignored if set in conjunction with `--disable-digests-cache`.
--enable-metrics-server
Enable metrics HTTP server (Prometheus endpoint on /metrics)
[env: ENABLE_METRICS_SERVER=]
--metrics-server-ip <METRICS_SERVER_IP>
Metrics HTTP server IP
[env: METRICS_SERVER_IP=]
[default: 0.0.0.0]
--metrics-server-port <METRICS_SERVER_PORT>
Metrics HTTP server listening port
[env: METRICS_SERVER_PORT=]
[default: 9090]
--allow-unparsable-block
If set no error is returned in case of unparsable block and an error log is written instead.
Will be ignored on (pre)production networks.
-h, --help
Print help (see a summary with '-h')
-V, --version
Print version
Run in release mode with the default configuration:
./mithril-signer
Run in release mode using a specific mode:
./mithril-signer -r preview
Run in release mode with a custom configuration using environment variables:
NETWORK=**YOUR_CARDANO_NETWORK** AGGREGATOR_ENDPOINT=**YOUR_AGGREGATOR_ENDPOINT** ./mithril-signer
If you wish to delve deeper and access several levels of logs from the Mithril signer, use the following:
- Add
-v
for some logs (WARN) - Add
-vv
for more logs (INFO) - Add
-vvv
for even more logs (DEBUG) - Add
-vvvv
for all logs (TRACE).
Download the pre-built binary
You can install a the latest released binary of the mithril-signer by running this one line command (replace YOUR_PATH with your installation path):
curl --proto '=https' --tlsv1.2 -sSf
https://raw.githubusercontent.com/input-output-hk/mithril/refs/heads/main/mithril-install.sh
| sh -s -- -c mithril-signer -d latest -p YOUR_PATH
You can also install the mithril-signer binary for other distributions:
- use
-d unstable
for the unstable version - use
-d **DISTRIBUTION_VERSION**
for a specific distribution (e.g.-d 2445.0
)
The Linux binaries target glibc
, and have a minimum requirement of glibc 2.31
(compatible with Ubuntu 20.04
or Debian Bullseye
).
Build and run a Docker container
Build a local Docker image:
make docker-build
Run a local Docker container:
make docker-run
Configuration parameters
The configuration parameters can be set in either of the following ways:
- In a configuration file, depending on the
--run-mode
parameter. If the runtime mode istestnet
, the file is located in./conf/testnet.json
. - The value can be overridden by an environment variable with the parameter name in uppercase.
Here is a list of the available parameters:
Parameter | Command line (long) | Command line (short) | Environment variable | Description | Default value | Example | Mandatory |
---|---|---|---|---|---|---|---|
verbose | --verbose | -v | VERBOSE | Verbosity level | - | Parsed from the number of occurrences: -v for Warning , -vv for Info , -vvv for Debug and -vvvv for Trace | ✔️ |
run_mode | --run-mode | -r | RUN_MODE | Runtime mode | dev | - | ✔️ |
cardano_cli_path | - | - | CARDANO_CLI_PATH | Cardano CLI tool path | - | cardano-cli | ✔️ |
cardano_node_socket_path | - | - | CARDANO_NODE_SOCKET_PATH | Path of the socket used by the Cardano CLI tool to communicate with the Cardano node | - | /tmp/cardano.sock | ✔️ |
db_directory | --db-directory | - | DB_DIRECTORY | Directory to snapshot from the Cardano node | /db | - | ✔️ |
network | - | - | NETWORK | Cardano network | - | testnet or mainnet or devnet | ✔️ |
network_magic | - | - | NETWORK_MAGIC | Cardano network magic number (for testnet and devnet ) | - | 1097911063 or 42 | - |
party_id | - | - | PARTY_ID | Party Id of the signer, usually the Pool Id of the SPO | - | pool1pxaqe80sqpde7902er5kf6v0c7y0sv6d5g676766v2h829fvs3x | Mandatory in pool Id declaration mode where the owner is not verified (decommissioned, only available when built with allow_skip_signer_certification feature, for test only) |
run_interval | - | - | RUN_INTERVAL | Interval between two runtime cycles in ms | - | 60000 | ✔️ |
aggregator_endpoint | - | - | AGGREGATOR_ENDPOINT | Aggregator node endpoint | - | https://aggregator.pre-release-preview.api.mithril.network/aggregator | ✔️ |
data_stores_directory | - | - | DATA_STORES_DIRECTORY | Directory to store signer data (stake, protocol initializers, ...) | - | ./mithril-signer/stores | ✔️ |
store_retention_limit | - | - | STORE_RETENTION_LIMIT | Maximum number of records in stores. If not set, no limit is set. | - | - | - |
kes_secret_key_path | - | - | KES_SECRET_KEY_PATH | Path to the Cardano KES secret key file. Mandatory in Pool Id certification mode where the owner is verified (experimental, soon to be stable & preferred mode) | - | - | - |
operational_certificate_path | - | - | OPERATIONAL_CERTIFICATE_PATH | Path to the Cardano operational certificate file. Mandatory in Pool Id certification mode where the owner is verified (experimental, soon to be stable & preferred mode) | - | - | - |
era_reader_adapter_type | --era-reader-adapter-type | - | ERA_READER_ADAPTER_TYPE | Era reader adapter type that can be cardano-chain , file or bootstrap . | bootstrap | - | - |
era_reader_adapter_params | --era-reader-adapter-params | - | ERA_READER_ADAPTER_PARAMS | Era reader adapter params that is an optional JSON encoded parameters structure that is expected depending on the era_reader_adapter_type parameter | - | - | - |
enable_metrics_server | --enable-metrics-server | - | ENABLE_METRICS_SERVER | Enable metrics HTTP server (Prometheus endpoint on /metrics) | false | - | - |
metrics_server_ip | --metrics-server-ip | - | METRICS_SERVER_IP | Metrics HTTP server IP | 0.0.0.0 | - | - |
metrics_server_port | --metrics-server-port | - | METRICS_SERVER_PORT | Metrics HTTP server listening port | 9090 | - | - |
allow_unparsable_block | --allow-unparsable-block | - | ALLOW_UNPARSABLE_BLOCK | If set no error is returned in case of unparsable block and an error log is written instead. Will be ignored on (pre)production networks. | false | - | - |
enable_transaction_pruning | - | - | ENABLE_TRANSACTION_PRUNING | If set, the signer will prune the cardano transactions in database older than the [network_security_parameter] | |||
network_security_parameter | - | - | NETWORK_SECURITY_PARAMETER | Also known as k , it defines the number of blocks that are required for the blockchain to be considered final, preventing any further rollback [default: 2160] . | 2160 | - | - |
preload_security_parameter | - | - | PRELOAD_SECURITY_PARAMETER | Blocks offset, from the tip of the chain, to exclude during the cardano transactions preload [default: 3000] . | 3000 | - | - |
transactions_import_block_chunk_size | - | - | TRANSACTIONS_IMPORT_BLOCK_CHUNK_SIZE | Chunk size for importing transactions, combined with transaction pruning it reduces the storage footprint of the signer by reducing the number of transactions stored on disk at any given time. | 1500 | - | - |
cardano_transactions_block_streamer_max_roll_forwards_per_poll | - | - | CARDANO_TRANSACTIONS_BLOCK_STREAMER_MAX_ROLL_FORWARDS_PER_POLL | The maximum number of roll forwards during a poll of the block streamer when importing transactions. | 1000 | - | - |
preloading_refresh_interval_in_seconds | --preloading-refresh-interval-in-seconds | - | PRELOADING_REFRESH_INTERVAL_IN_SECONDS | The preloading refresh interval in seconds. | 7200 | - | - |