## Hermes setup for private zones # Hermes prerequisite ``` The IBC Relayer is developed with the Rust programming language. In order to build and run the relayer you need to install and configure Rust on your machine. Fresh Rust installation For instructions on how to install Rust on your machine please follow the official Notes about Rust Installation. The provided instructions will install all the Rust tool chain including rustc, cargo, and rustup that are required to build the project. Version requirements Hermes is developed and tested using the latest version of Rust, 1.65 at the moment. To check that your tool chain is up-to-date run: rustc --version In case you already had installed the Rust tool chain in the past, you can update your installation by running rustup update. Testing the installation After you install the Rust tool chain you can execute the following command: cargo version This should display the cargo version and confirm the proper installation. ``` Should be somewhere around that ``` rustc --version rustc 1.67.1 (d5a82bbd2 2023-02-07) ``` ``` cargo version cargo 1.67.1 (8ecd4f20a 2023-01-10) ``` install hermes `https://hermes.informal.systems/quick-start/installation.html` probably installing pre built binaries is best # create hermes configs create a hermes directory copy config from here replace the values for the chains https://github.com/arnabmitra/pio-scripts/blob/203d16462979204a10212c7443f2788dad0d4bb1/hermes/config.toml things to replace to any private network `gas_price = { price = 1905, denom = 'nhash' }` to 0vspn change the right values here ``` id = '<id>' rpc_addr = 'http://127.0.0.1:26660' grpc_addr = 'http://127.0.0.1:9091' websocket_addr = 'ws://127.0.0.1:26660/websocket' ``` # add the keys Add keys for the id's chosen on the hermes config (provide the mnemonic as needed) https://github.com/arnabmitra/pio-scripts/blob/6a9b8a067cc1d8a8abf1b5de368f2a3d20186e4d/hermes-restore-keys.sh#L7-L6 see added keys in `hermes` with `hermes --config ~/.hermes/config.toml keys list --chain testing` make sure they match up with the current `rly` implementation `rly --home /relayer keys list local` where local is the <chain_id> for e.g in my local testing ``` ➜ .hermes git:(master) ✗ hermes --config ~/.hermes/config.toml keys list --chain testing 2023-03-13T17:20:36.318397Z INFO ThreadId(01) running Hermes v1.2.0 SUCCESS - testing (tp18uev5722xrwpfd2hnqducmt3qdjsyktmtw558y) ➜ .hermes git:(master) ✗ docker exec -it $(docker container ls ``` this is critical for them to be able to access the same client now you can query all connections/channels ``` #!/bin/bash hermes --config ~/.hermes/config.toml query channels --chain <chain_id> hermes --config ~/.hermes/config.toml query connections --chain <chain_id> hermes --config ~/.hermes/config.toml query connection end --chain <chain_id> --connection <connection_id> hermes --config ~/.hermes/config.toml query channel end --chain <dest_chain> --port transfer --channel <channel_id> hermes --config ~/.hermes/config.toml query channel end --chain <source_chain> --port transfer --channel <channel_id> ``` # start hermes https://github.com/arnabmitra/pio-scripts/blob/203d16462979204a10212c7443f2788dad0d4bb1/hermes_start.sh#L8-L7 probably avoid the log redirect on the in on successful startup ``` ➜ pio-scripts git:(main) /bin/bash /Users/arnabmitra/pio-scripts/hermes_start.sh Starting hermes relayer... {"timestamp":"2023-03-13T17:24:59.336530Z","level":"INFO","fields":{"message":"running Hermes v1.2.0"},"threadId":"ThreadId(1)"} {"timestamp":"2023-03-13T17:24:59.340229Z","level":"INFO","fields":{"message":"telemetry service running, exposing metrics at http://127.0.0.1:3001/metrics"},"span":{"name":"telemetry"},"spans":[{"name":"telemetry"}],"threadId":"ThreadId(1)"} {"timestamp":"2023-03-13T17:24:59.340583Z","level":"INFO","fields":{"message":"starting REST API server listening at http://127.0.0.1:3000"},"span":{"name":"rest"},"spans":[{"name":"rest"}],"threadId":"ThreadId(1)"} {"timestamp":"2023-03-13T17:24:59.356434Z","level":"TRACE","fields":{"message":"spawned chain runtime","chain":"testing"},"span":{"chain":"testing","name":"health_check"},"spans":[{"chain":"testing","name":"health_check"}],"threadId":"ThreadId(1)"} {"timestamp":"2023-03-13T17:24:59.371905Z","level":"TRACE","fields":{"message":"parsed version specification","application":"<appd>","version":"","git_commit":"","sdk_version":"0.46.7","ibc_go_status":"Some(Version { major: 6, minor: 1, patch: 0 })","tendermint_version":"0.34.26"},"span":{"chain":"testing","name":"health_check"},"spans":[{"chain":"testing","name":"health_check"}],"threadId":"ThreadId(34)"} {"timestamp":"2023-03-13T17:24:59.371962Z","level":"DEBUG","fields":{"message":"running diagnostic on version info Cosmos SDK 0.46.7, IBC-Go 6.1.0, Tendermint 0.34.26"},"span":{"chain":"testing","name":"health_check"},"spans":[{"chain":"testing","name":"health_check"}],"threadId":"ThreadId(34)"} {"timestamp":"2023-03-13T17:24:59.371995Z","level":"WARN","fields":{"message":"Health checkup for chain 'testing' failed"},"span":{"chain":"testing","name":"health_check"},"spans":[{"chain":"testing","name":"health_check"}],"threadId":"ThreadId(34)"} {"timestamp":"2023-03-13T17:24:59.372001Z","level":"WARN","fields":{"message":" Reason: Hermes health check failed while verifying the application compatibility for chain testing:http://127.0.0.1:9090/; caused by: Ibc-Go module at version '6.1.0' does not meet compatibility requirements >=1.1, <=5"},"span":{"chain":"testing","name":"health_check"},"spans":[{"chain":"testing","name":"health_check"}],"threadId":"ThreadId(34)"} {"timestamp":"2023-03-13T17:24:59.372005Z","level":"WARN","fields":{"message":" Some Hermes features may not work in this mode!"},"span":{"chain":"testing","name":"health_check"},"spans":[{"chain":"testing","name":"health_check"}],"threadId":"ThreadId(34)"} {"timestamp":"2023-03-13T17:24:59.372274Z","level":"WARN","fields":{"message":"chain is not healthy: Hermes health check failed while verifying the application compatibility for chain testing:http://127.0.0.1:9090/; caused by: Ibc-Go module at version '6.1.0' does not meet compatibility requirements >=1.1, <=5"},"span":{"chain":"testing","name":"health_check"},"spans":[{"chain":"testing","name":"health_check"}],"threadId":"ThreadId(1)"} {"timestamp":"2023-03-13T17:24:59.376540Z","level":"TRACE","fields":{"message":"spawned chain runtime","chain":"testing2"},"span":{"chain":"testing2","name":"health_check"},"spans":[{"chain":"testing2","name":"health_check"}],"threadId":"ThreadId(1)"} {"timestamp":"2023-03-13T17:24:59.387103Z","level":"TRACE","fields":{"message":"parsed version specification","application":"<appd>","version":"","git_commit":"","sdk_version":"0.46.7","ibc_go_status":"Some(Version { major: 6, minor: 1, patch: 0 })","tendermint_version":"0.34.26"},"span":{"chain":"testing2","name":"health_check"},"spans":[{"chain":"testing2","name":"health_check"}],"threadId":"ThreadId(35)"} {"timestamp":"2023-03-13T17:24:59.387148Z","level":"DEBUG","fields":{"message":"running diagnostic on version info Cosmos SDK 0.46.7, IBC-Go 6.1.0, Tendermint 0.34.26"},"span":{"chain":"testing2","name":"health_check"},"spans":[{"chain":"testing2","name":"health_check"}],"threadId":"ThreadId(35)"} {"timestamp":"2023-03-13T17:24:59.387159Z","level":"WARN","fields":{"message":"Health checkup for chain 'testing2' failed"},"span":{"chain":"testing2","name":"health_check"},"spans":[{"chain":"testing2","name":"health_check"}],"threadId":"ThreadId(35)"} {"timestamp":"2023-03-13T17:24:59.387163Z","level":"WARN","fields":{"message":" Reason: Hermes health check failed while verifying the application compatibility for chain testing2:http://127.0.0.1:9091/; caused by: Ibc-Go module at version '6.1.0' does not meet compatibility requirements >=1.1, <=5"},"span":{"chain":"testing2","name":"health_check"},"spans":[{"chain":"testing2","name":"health_check"}],"threadId":"ThreadId(35)"} ``` # Now we can shut down the rly binary