Troubleshooting Deployment Issues
This section offers troubleshooting tips for issues with Iroha 2 and Iroha 3 deployment. If the issue you are experiencing is not described here, contact us via Telegram.
Start with generated artifacts
For local and test deployments, prefer artifacts generated by Kagami instead of hand-written peer files:
cargo run --bin kagami -- localnet --build-line iroha3 --peers 4 --out-dir ./localnetThe generated directory contains peer configs, genesis material, start scripts, and a README for the selected build line. Use --build-line iroha2 only when the deployment intentionally targets the Iroha 2 profile.
Peer does not start
Check these items first:
irohad --config <path>points at the peer's own TOML file.public_keyandprivate_keyin the peer config belong to the same key pair.genesis.public_keymatches the key used to sign the genesis transaction.- validator peer identities use BLS-Normal keys, and
trusted_peers_popcontains proof-of-possession entries for the local key and trusted peers. - ports for Torii and P2P are not already bound by another process.
- the Kura store directory belongs to the same chain and was not copied from a different network profile.
Use config tracing when the daemon reads more than one TOML layer:
cargo run --bin irohad -- --config ./config.toml --trace-configDocker and Compose
Generate Compose from the current Kagami localnet output so the command-line arguments and config files match the checked-out code:
cargo run --bin kagami -- localnet --build-line iroha3 --peers 4 --out-dir ./localnet
cargo run --bin kagami -- docker --peers 4 --config-dir ./localnet --image hyperledger/iroha:dev --out-file ./localnet/docker-compose.yml --force
docker compose -f ./localnet/docker-compose.yml upIf a compose deployment starts and then stalls, inspect the daemon logs for:
- mismatched
chain - one peer using a different genesis transaction or manifest
- advertised P2P addresses that only work inside the container network
- local volume reuse after regenerating genesis
When testing a fresh genesis, remove the old Kura volumes before restarting the stack. Keeping old block storage with a new genesis will make replay fail.
Kubernetes
For Kubernetes, treat each validator as stateful infrastructure:
- give each peer a stable identity key and stable persistent volume
- expose P2P addresses that other peers can resolve from inside the cluster
- mount config and genesis files as immutable config for a rollout
- roll out all genesis or topology changes deliberately, not as an automatic config-map refresh
If a pod restarts repeatedly, compare the rendered config in the pod with the expected peer.template.toml and check whether the peer is replaying old Kura data.
Sora profile
Iroha 3 deployments that use Nexus, SoraFS, or multi-lane flows should start the daemon with the Sora profile enabled:
cargo run --bin irohad -- --config ./config.toml --soraor:
IROHA_SORA_PROFILE=true cargo run --bin irohad -- --config ./config.tomlUse the same profile consistently across validators in the same network.