Skip to main content
Version: Next 🚧

Mithril signer node

info

Mithril signer is responsible for producing individual signatures that are collected and aggregated by the Mithril aggregator.

tip
Mithril networks

Here is an updated list of all Mithril networks, including their configurations and current statuses:

Last update: 07/21/2023

release-mainnet​

Information-
Mithril networkrelease-mainnet
Cardano networkmainnet
Cardano magic Id-
SupportedYes βœ”οΈ
StatusBeta 🟒
Aggregator endpointhttps://aggregator.release-mainnet.api.mithril.network/aggregator ↗️
Genesis verification keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-mainnet/genesis.vkey ↗️
Era reader adapter typecardano-chain
Era reader addresshttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-mainnet/era.addr ↗️
Era reader verification keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-mainnet/era.vkey ↗️
Build fromLatest release ↗️
caution

In this documentation, we use the following generic identifiers:

  • YOUR_CARDANO_NETWORK You need to replace this with the name of the network that runs on your Cardano node (eg, preprod)
  • YOUR_AGGREGATOR_ENDPOINT You need to replace this with the endpoint of an aggregator that runs on the Cardano network you are targeting (eg, https://aggregator.release-preprod.api.mithril.network/aggregator)
  • YOUR_GENESIS_VERIFICATION_KEY You need to replace this with the genesis verification key URL that runs on the Cardano network you are targeting (eg, https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey)
  • YOUR_ERA_READER_ADAPTER_TYPE You need to replace this with the era reader adapter type used by the Mithril network you are targeting (eg, cardano-chain)
  • YOUR_ERA_READER_ADDRESS You need to replace this with the era reader address URL used by the Mithril network you are targeting (eg, https://raw.githubusercontent.com/input-output-hk/mithril/main/address.addr)
  • YOUR_ERA_READER_VERIFICATION_KEY You need to replace this with the era reader verification key URL used by the Mithril network you are targeting (eg, https://raw.githubusercontent.com/input-output-hk/mithril/main/TEST_ONLY_era.vkey)

Resources​

NodeSource repositoryRust documentationDocker packages
Mithril signer↗️↗️↗️

Pre-requisites​

  • Install the latest stable version of the correctly configured Rust toolchain.

  • 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 **Build from** column of the **Mithril networks** table above
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]

-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
tip

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​

Each Release / Pre-Release distribution comes with pre compiled binaries ready to use or wrapped in a debian package for linuxΒΉ.

You can download them from the Release / Pre-Release distribution page that depends on the Mithril Network you are targeting.

These links are available in the Build From column of the above Mithril Networks table.

ΒΉ 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:

  1. In a configuration file, depending on the --run-mode parameter. If the runtime mode is testnet, the file is located in ./conf/testnet.json.
  2. The value can be overridden by an environment variable with the parameter name in uppercase.

Here is a list of the available parameters:

ParameterCommand line (long)Command line (short)Environment variableDescriptionDefault valueExampleMandatory
verbose--verbose-vVERBOSEVerbosity level-Parsed from the number of occurrences: -v for Warning, -vv for Info, -vvv for Debug and -vvvv for Traceβœ”οΈ
run_mode--run-mode-rRUN_MODERuntime modedev-βœ”οΈ
cardano_cli_path--CARDANO_CLI_PATHCardano CLI tool path-cardano-cliβœ”οΈ
cardano_node_socket_path--CARDANO_NODE_SOCKET_PATHPath of the socket used by the Cardano CLI tool to communicate with the Cardano node-/tmp/cardano.sockβœ”οΈ
db_directory--db-directory-DB_DIRECTORYDirectory to snapshot from the Cardano node/db-βœ”οΈ
network--NETWORKCardano network-testnet or mainnet or devnetβœ”οΈ
network_magic--NETWORK_MAGICCardano network magic number (for testnet and devnet)-1097911063 or 42-
party_id--PARTY_IDParty Id of the signer, usually the Pool Id of the SPO-pool1pxaqe80sqpde7902er5kf6v0c7y0sv6d5g676766v2h829fvs3x-
run_interval--RUN_INTERVALInterval between two runtime cycles in ms-60000βœ”οΈ
aggregator_endpoint--AGGREGATOR_ENDPOINTAggregator node endpoint-https://aggregator.pre-release-preview.api.mithril.network/aggregatorβœ”οΈ
data_stores_directory--DATA_STORES_DIRECTORYDirectory to store signer data (stake, protocol initializers, ...)-./mithril-signer/storesβœ”οΈ
store_retention_limit--STORE_RETENTION_LIMITMaximum number of records in stores. If not set, no limit is set.---
kes_secret_key_path--KES_SECRET_KEY_PATHPath 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_PATHPath 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_TYPEEra reader adapter type that can be cardano-chain, file or bootstrap.bootstrap--
era_reader_adapter_params--era-reader-adapter-params-ERA_READER_ADAPTER_PARAMSEra 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_SERVEREnable metrics HTTP server (Prometheus endpoint on /metrics)false--
metrics_server_ip--metrics-server-ip-METRICS_SERVER_IPMetrics HTTP server IP0.0.0.0--
metrics_server_port--metrics-server-port-METRICS_SERVER_PORTMetrics HTTP server listening port9090--