Skip to content

Configuration Parameters

Root-Level

chain_id required

Chain ID that must be included in each transaction. Used to prevent replay attacks.

Type: String
Env:CHAIN_ID
toml
chain_id = "00000000-0000-0000-0000-000000000000"
shell
CHAIN_ID="00000000-0000-0000-0000-000000000000"

public_key required

Public key of the peer.

Type: String, public key multihash
Env:PUBLIC_KEY
toml
public_key = "ed0120FAFCB2B27444221717F6FCBF900D5BE95273B1B0904B08C736B32A19F16AC1F9"
shell
PUBLIC_KEY="ed0120FAFCB2B27444221717F6FCBF900D5BE95273B1B0904B08C736B32A19F16AC1F9"

private_key required

Private key of the peer.

Type:todo private-key
Env:PRIVATE_KEY
toml
private_key = "8026208F4C15E5D664DA3F13778801D23D4E89B76E94C1B94B389544168B6CB894F84F"
shell
PRIVATE_KEY="8026208F4C15E5D664DA3F13778801D23D4E89B76E94C1B94B389544168B6CB894F84F"

trusted_peers

List of predefined trusted peers.

Type:

Array of strings in format PUBLIC_KEY@ADDRESS

Env:TRUSTED_PEERS
toml
trusted_peers = [
    "ed01201C61FAF8FE94E253B93114240394F79A607B7FA55F9E5A41EBEC74B88055768B@127.0.0.1:1337",
    "ed0120CC25624D62896D3A0BFD8940F928DC2ABF27CC57CEFEB442AA96D9081AAE58A1@127.0.0.1:1338",
    "ed0120FACA9E8AA83225CB4D16D67F27DD4F93FC30FFA11ADC1F5C88FD5495ECC91020@127.0.0.1:1339",
    "ed01208E351A70B6A603ED285D666B8D689B680865913BA03CE29FB7D13A166C4E7F1F@127.0.0.1:1340",
]
shell
# as JSON
TRUSTED_PEERS='["ed01204EE2FCD53E1730AF142D1E23951198678295047F9314B4006B0CB61850B1DB10@irohad2:1339","ed01209897952D14BDFAEA780087C38FF3EB800CB20B882748FC95A575ADB9CD2CB21D@irohad1:1338","ed0120CACF3A84B8DC8710CE9D6B968EE95EC7EE4C93C85858F026F3B4417F569592CE@irohad3:1340"]'

Genesis

genesis.file

File path to the SCALE-encoded genesis block.

Type: String, file path (relative to the config file or CWD)
Env:GENESIS
toml
[genesis]
file = "./genesis.scale"
shell
GENESIS="./genesis.scale"

genesis.public_key required

Public key of the genesis key pair.

Type: String, public key multihash
Env:GENESIS_PUBLIC_KEY
toml
[genesis]
public_key = "ed01208BA62848CF767D72E7F7F4B9D2D7BA07FEE33760F79ABE5597A51520E292A0CB"
shell
GENESIS_PUBLIC_KEY="ed01208BA62848CF767D72E7F7F4B9D2D7BA07FEE33760F79ABE5597A51520E292A0CB"

Network

network.address required

Address for p2p communication for consensus (sumeragi) and block synchronization (block_sync) purposes.

Type: String, socket address (host/IPv4/IPv6 + port)
Env:P2P_ADDRESS
toml
[network]
address = "0.0.0.0:1337"
shell
P2P_ADDRESS=0.0.0.0:1337

network.public_address required

Peer-to-peer address (external, as seen by other peers).

Will be gossiped to connected peers so that they can gossip it to other peers.

Type: String, socket address (host/IPv4/IPv6 + port)
Env:P2P_PUBLIC_ADDRESS
toml
[network]
public_address = "0.0.0.0:5000"
shell
P2P_PUBLIC_ADDRESS=0.0.0.0:5000

network.block_gossip_size

The amount of blocks that can be sent in a single synchronization message.

Type: Number
Default:4
toml
[network]
block_gossip_size = 256

network.block_gossip_period_ms

The time interval between requests to peers for the most recent block.

More frequent gossiping shortens the time to sync, but can overload the network.

Type: Number, duration in milliseconds
Default:10_000 (10 seconds)
toml
[network]
block_gossip_period_ms = 1_000

network.transaction_gossip_size

Max number of transactions in a gossip batch message.

Smaller size leads to longer time to synchronise, but useful if you have high packet loss.

Type: Number
Default:500
toml
[network]
transaction_gossip_size = 256

network.transaction_gossip_period_ms

Period of gossiping pending transaction between peers.

More frequent gossiping shortens the time to sync, but can overload the network.

Type: Number, duration in milliseconds
Default:1_000 (1 second)
toml
[network]
transaction_gossip_period_ms = 5_000

network.idle_timeout_ms

Duration of time after which connection with peer is terminated if peer is idle.

Type: Number, duration in milliseconds
Default:60_000 (1 minute)
toml
[network]
idle_timeout_ms = 60_000

Torii

torii.address required

Address to which the Torii server must listen and to which the client(s) make their requests.

Type: String, socket address (host/IPv4/IPv6 + port)
Env:API_ADDRESS
toml
[torii]
address = "0.0.0.0:8080"
shell
API_ADDRESS=0.0.0.0:8080

torii.max_content_len

The maximum number of bytes in a raw request body accepted by the Transaction Endpoint.

This limit is used to prevent DOS attacks.

Type:

Number (of bytes)

Default:

16_777_216 (1622016 \cdot 2^{20}, or 16 MiB)

toml
[torii]
max_content_len = 16_777_216

torii.query_idle_time_ms

The time a query can remain in the store if unaccessed.

Type: Number, duration in milliseconds
Default:10_000 (10 seconds)
toml
[torii]
query_idle_time_ms = 10_000

torii.query_store_capacity

The upper limit of the number of live queries.

Type: Number
Default:128
toml
[torii]
query_store_capacity = 128

torii.query_store_capacity_per_user

The upper limit of the number of live queries for a single user.

Type: Number
Default:128
toml
[torii]
query_store_capacity_per_user = 128

Logger

logger.level

General logging verbosity (see logger.filter for refined configuration).

Type:

String, possible values:

  • TRACE: All events, including low-level operations.
  • DEBUG: Debug-level messages, useful for diagnostics.
  • INFO: General informational messages.
  • WARN: Warnings that indicate potential issues.
  • ERROR: Errors that disrupt normal function but allow continued operation.

Choose the level that best suits your use case. Refer to Stack Overflow for additional details on how to use different log levels.

Default:INFO
Env:LOG_LEVEL
toml
[logger]
level = "INFO"
shell
LOG_LEVEL=INFO

Runtime update

This parameter is subject for runtime configuration update.

logger.filter

Refined log filters in addition to logger.level. Allows to customize logging verbosity per-target.

Type:

String, consists of one or more comma-separated directives. Each directive may have a corresponding maximum verbosity level which enables (e.g., selects for) spans and events that match. Iroha considers less exclusive levels (like trace or info) to be more verbose than more exclusive levels (like error or warn).

At a high level, the syntax for directives consists of several parts:

target[span{field=value}]=level

For more details, see tracing-subscriber documentation.

Env:LOG_FILTER
toml
[logger]
filter = "iroha_core=debug,iroha_p2p=debug"
shell
LOG_FILTER=iroha_core=debug,iroha_p2p=debug

Compatibility with logger.level

logger.filter works together with logger.level and neither one overwrites another one.

For example, if logger.level is set to INFO and logger.filter is set to iroha_core=debug, the resulting filter set will be info,iroha_core=debug (i.e. info for all modules, debug for iroha_core).

Runtime update

This parameter is subject for runtime configuration update.

logger.format

Logs format.

Type:

String, possible values:

  • full: The default formatter. This emits human-readable, single-line logs for each event that occurs, with the current span context displayed before the formatted representation of the event.
  • compact: A variant of the default formatter, optimized for short line lengths. Fields from the current span context are appended to the fields of the formatted event, and span names are not shown; the verbosity level is abbreviated to a single character.
  • pretty: Emits excessively pretty, multi-line logs, optimized for human readability. This is primarily intended to be used in local development and debugging, or for command-line applications, where automated analysis and compact storage of logs is less of a priority than readability and visual appeal.
  • json: Outputs newline-delimited JSON logs. This is intended for production use with systems where structured logs are consumed as JSON by analysis and viewing tools. The JSON output is not optimized for human readability.

For more details and sample outputs, see tracing-subscriber documentation.

Default:full
Env:LOG_FORMAT
toml
[logger]
format = "json"
shell
LOG_FORMAT=json

Kura

Kura is the persistent storage engine of Iroha (Japanese for warehouse).

kura.blocks_in_memory

At most N last blocks will be stored in memory.

Older blocks will be dropped from memory and loaded from the disk if they are needed.

Type: Number
Default:128
Env:KURA_BLOCKS_IN_MEMORY
toml
[kura]
blocks_in_memory = 256
shell
KURA_BLOCKS_IN_MEMORY=256

kura.init_mode

Kura initialisation mode

Type:

String, possible values:

  • strict: strict validation of all blocks
  • fast: Fast initialisation with only basic checks
Default:strict
Env:KURA_INIT_MODE
toml
[kura]
init_mode = "fast"
shell
KURA_INIT_MODE=fast

kura.store_dir

Specifies the directory[^paths] where the blocks are stored.

See also: snapshot.store_dir.

Type: String, file path (relative to the config file or CWD)
Default:./storage
Env:KURA_STORE_DIR
toml
[kura]
store_dir = "/path/to/storage"
shell
KURA_STORE_DIR=/path/to/storage

kura.debug.output_new_blocks debug

Flag to enable printing new blocks to console.

Type:todo bool
Default:false
Env:KURA_DEBUG_OUTPUT_NEW_BLOCKS
toml
[kura.debug]
output_new_blocks = true
shell
KURA_DEBUG_OUTPUT_NEW_BLOCKS=true

Queue

queue.capacity

The upper limit of the number of transactions waiting in the queue.

Type: Number
Default:65_536
toml
[queue]
capacity = 1_048_576

queue.capacity_per_user

The upper limit of the number of transactions waiting in the queue for a single user.

Use this option to apply throttling.

Type: Number
Default:65_536
toml
[queue]
capacity_per_user = 1_048_576

queue.transaction_time_to_live_ms

The transaction will be dropped after this time if it is still in the queue.

Type: Number, duration in milliseconds
Default:86_400_000 (24 hours)
toml
[queue]
transaction_time_to_live_ms = 43_200_000

Sumeragi

sumeragi.debug.force_soft_fork debug

TODO

Type:todo bool
Default:false
toml
[sumeragi.debug]
force_soft_fork = true

Snapshot

This module is responsible for reading and writing snapshots of the World State View.

TODO: explain the purpose of snapshots, file formats, etc

Wipe Snapshots

In case if something is wrong with the snapshots system, and you want to start from a blank page (in terms of snapshots), you could remove the directory specified by snapshot.store_dir.

snapshot.mode

The mode the Snapshot system functions in.

Type:

String, possible values:

  • read_write: Iroha creates snapshots with a period specified by snapshot.create_every_ms. On startup, Iroha reads an existing snapshot (if any) and verifies that it is up-to-date with the blocks storage.
  • readonly: Similar to read_write but Iroha doesn't create any snapshots.
  • disabled: Iroha neither creates new snapshots nor reads an existing one on startup.
Default:read_write
Env:SNAPSHOT_MODE
toml
[snapshot]
mode = "readonly"
shell
SNAPSHOT_MODE=readonly

snapshot.create_every_ms

Frequency of snapshots.

Type: Number, duration in milliseconds
Default:600_000 (10 minutes)
toml
[snapshot]
create_every_ms = 60_000

snapshot.store_dir

Directory where to store snapshots.

See also: kura.store_dir

Type: String, file path (relative to the config file or CWD)
Default:./storage/snapshot
Env:SNAPSHOT_STORE_DIR
toml
[snapshot]
store_dir = "/path/to/storage"
shell
SNAPSHOT_STORE_DIR="/path/to/storage"

Telemetry

TODO

name and url must be paired.

All telemetry section is optional.

telemetry.name

The node's name to be displayed on the telemetry.

Type: String
toml
[telemetry]
name = "iroha"

telemetry.url

The url of the telemetry. TODO update example value

Type: String
toml
[telemetry]
url = "ws://substrate.telemetry.iroha"

telemetry.min_retry_period_ms

The minimum period of time to wait before reconnecting.

Type: Number, duration in milliseconds
Default:1_000 (1 second)
toml
[telemetry]
min_retry_period_ms = 5_000

telemetry.max_retry_delay_exponent

The maximum exponent of 2 that is used for increasing delay between reconnections.

Type: Number
Default:4
toml
[telemetry]
max_retry_delay_exponent = 4

dev_telemetry.out_file

The filepath to write dev-telemetry to

Type: String, file path (relative to the config file or CWD)
toml
[dev_telemetry]
out_file = "/path/to/file.json"