{ // modules provide specific functionality for ibc. they take both an info object, which is the same per module type, and a config object, which is specific to the module implementation (i.e. rpc urls, contract addresses). "modules": { // state modules describe how to read state from a chain // // info.chain_id is the id of the chain the module reads state from // info.ibc_spec_id is the ibc specification the module reads state for "state": [ // preconfigured state module to read state from the ibc-union implementation running on union-testnet-9 { "enabled": true, "path": "/path/to/modules/voyager-state-module-cosmos-sdk-union", "info": { "chain_id": "union-testnet-9", "ibc_spec_id": "ibc-union" }, "config": { "ws_url": "http://rpc.testnet-9.union.build", "grpc_url": "http://grpc.testnet-9.union.build", "ibc_host_contract_address": "union17e93ukhcyesrvu72cgfvamdhyracghrx4f7ww89rqjg944ntdegscxepme" } }, // preconfigured state module to read state from the ibc-union implementation running on the holesky ethereum testnet. { "enabled": true, "path": "/path/to/modules/voyager-state-module-ethereum", "info": { // holesky chain id. "chain_id": "17000", // since this is reading state for an ibc-union implementation, this must stay as ibc-union. any other value will error on startup. "ibc_spec_id": "ibc-union" }, "config": { // the address of the IBCHandler contract on holesky. "ibc_handler_address": "0xfa4E502A3bf5f4Bc3EF0e17960b3Cd868d70E809", // an archive rpc url pointing to holesky. "eth_rpc_api": "https://rpc.17000.holesky.chain.kitchen" } }, // the state module to read state from the ibc-union implementation running on your chain. fill in the empty values with the relevant information. { "enabled": true, "path": "/path/to/modules/voyager-state-module-cosmos-sdk-union", "info": { "chain_id": "", // since this is reading state for an ibc-union implementation, this must stay as ibc-union. any other value will error on startup. "ibc_spec_id": "ibc-union" }, "config": { // the rpc url for your chain (the tendermint rpc, default port 26657). this can be http or websocket. "ws_url": "", // the grpc url for your chain (the cosmos sdk grpc, default port 9090). "grpc_url": "", // the contract address of the ibc-union contract on your chain. "ibc_host_contract_address": "" } } ], // proof modules provide state proofs of ibc state on a chain. these are separate from state modules since the storage backend of a chain is separate from the vm implementation (think zkevms vs regular evm, the interface is the same but the trie implementation is different). similar to the state module, they take two info values: // // info.chain_id is the id of the chain the module reads proofs from // info.ibc_spec_id is the ibc specification the module reads proofs for "proof": [ { // preconfigured proof module for union-testnet-9. "enabled": true, "path": "/path/to/modules/voyager-proof-module-cosmos-sdk-union", "info": { "chain_id": "union-testnet-9", "ibc_spec_id": "ibc-union" }, "config": { "ws_url": "http://rpc.testnet-9.union.build", "grpc_url": "http://grpc.testnet-9.union.build", "ibc_host_contract_address": "union17e93ukhcyesrvu72cgfvamdhyracghrx4f7ww89rqjg944ntdegscxepme" } }, // preconfigured proof module for the holesky ethereum testnet. { "enabled": true, "path": "/path/to/modules/voyager-proof-module-ethereum", "info": { "chain_id": "17000", "ibc_spec_id": "ibc-union" }, "config": { "ibc_handler_address": "0xfa4E502A3bf5f4Bc3EF0e17960b3Cd868d70E809", "eth_rpc_api": "https://rpc.17000.holesky.chain.kitchen" } }, // the state module to read proofs from the ibc-union implementation running on your chain. for a cosmwasm chain running ibc-union, all of the values are the same as the state module. { "enabled": true, "path": "/path/to/modules/voyager-proof-module-cosmos-sdk-union", "info": { "chain_id": "", "ibc_spec_id": "ibc-union" }, "config": { "ws_url": "", "grpc_url": "", "ibc_host_contract_address": "" } } ], // consensus modules provide functionality for querying the latest (potentially finalized) height and timestamp from a chain. they take two info values: // // info.chain_id is the id of the chain the module provides finality information for. // info.consensus_type is the type of consensus mechanism the chain `info.chain_id` uses. "consensus": [ // preconfigured consensus module for union-testnet-9. { "enabled": true, "path": "/path/to/modules/voyager-consensus-module-cometbls", "info": { "chain_id": "union-testnet-9", "consensus_type": "cometbls" }, "config": { "ws_url": "http://rpc.testnet-9.union.build", "grpc_url": "http://grpc.testnet-9.union.build", "ibc_host_contract_address": "union17e93ukhcyesrvu72cgfvamdhyracghrx4f7ww89rqjg944ntdegscxepme" } }, // preconfigured consensus module for the holesky ethereum testnet. { "enabled": true, "path": "/path/to/modules/voyager-consensus-module-ethereum", "info": { "chain_id": "17000", "consensus_type": "ethereum" }, "config": { "chain_spec": "mainnet", "eth_rpc_api": "https://rpc.17000.holesky.chain.kitchen", "eth_beacon_rpc_api": "https://beacon.17000.holesky.chain.kitchen" } }, // the consensus module for your tendermint-based chain. { "enabled": true, "path": "/path/to/modules/voyager-consensus-module-tendermint", "info": { "chain_id": "", "consensus_type": "tendermint" }, // these values are the same as the state and proof modules. "config": { "ws_url": "", "grpc_url": "" } } ], // client modules provide encoding and decoding for different light client states (client state, consensus state, header (i.e. client update), and proofs. // these are all preconfigured for a cosmos&comwasm<->union<->holesky setup. "client": [ { "enabled": true, "path": "/path/to/modules/voyager-client-module-state-lens-evm", "info": { "client_type": "state-lens/evm", "consensus_type": "ethereum", "ibc_interface": "ibc-cosmwasm", "ibc_spec_id": "ibc-union" } }, { "enabled": true, "path": "/path/to/modules/voyager-client-module-state-lens-ics23-ics23", "info": { "client_type": "state-lens/ics23-ics23", "consensus_type": "tendermint", "ibc_interface": "ibc-solidity", "ibc_spec_id": "ibc-union" } }, { "enabled": true, "path": "/path/to/modules/voyager-client-module-cometbls", "info": { "client_type": "cometbls", "consensus_type": "cometbls", "ibc_interface": "ibc-solidity", "ibc_spec_id": "ibc-union" } }, { "enabled": true, "path": "/path/to/modules/voyager-client-module-cometbls", "info": { "client_type": "cometbls", "consensus_type": "cometbls", "ibc_interface": "ibc-cosmwasm", "ibc_spec_id": "ibc-union" } }, { "enabled": true, "path": "/path/to/modules/voyager-client-module-cometbls", "info": { "client_type": "cometbls", "consensus_type": "cometbls", "ibc_interface": "ibc-go-v8/08-wasm", "ibc_spec_id": "ibc-union" } }, { "enabled": true, "path": "/path/to/modules/voyager-client-module-tendermint", "info": { "client_type": "tendermint", "consensus_type": "tendermint", "ibc_interface": "ibc-cosmwasm", "ibc_spec_id": "ibc-union" } }, { "enabled": true, "path": "/path/to/modules/voyager-client-module-ethereum", "info": { "client_type": "ethereum", "consensus_type": "ethereum", "ibc_interface": "ibc-cosmwasm", "ibc_spec_id": "ibc-union" }, "config": { "chain_spec": "mainnet" } } ], // client bootstrap modules provide functionality for bootstrapping a client of the configured chain, tracked by a client type, on a counterparty. "client_bootstrap": [ // client bootstrap module for a state lens client connecting to holesky, running on your chain. { "enabled": true, "path": "/path/to/modules/voyager-client-bootstrap-module-state-lens-evm", "info": { "chain_id": "17000", "client_type": "state-lens/ics23/mpt" }, "config": { "l1_client_id": 5, "l2_client_id": 1, "timestamp_offset": 0, "state_root_offset": 32, "storage_root_offset": 64 } }, { "enabled": true, "path": "/path/to/modules/voyager-client-bootstrap-module-state-lens-ics23-ics23", "info": { // configure your chain id here. "chain_id": "", "client_type": "state-lens/ics23/ics23" }, "config": { "l1_client_id": 1, "l2_client_id": 2, // the ibc-union contract address running on your chain. "l2_contract_address": "" } }, { // preconfigured client bootstrap module for holesky. "enabled": true, "path": "/path/to/modules/voyager-client-bootstrap-module-ethereum", "info": { "chain_id": "17000", "client_type": "ethereum" }, "config": { "chain_spec": "mainnet", "ibc_handler_address": "0xfa4E502A3bf5f4Bc3EF0e17960b3Cd868d70E809", "eth_rpc_api": "https://rpc.17000.holesky.chain.kitchen", "eth_beacon_rpc_api": "https://beacon.17000.holesky.chain.kitchen" } }, { // preconfigured client bootstrap module for union-testnet-9. "enabled": true, "path": "/path/to/modules/voyager-client-bootstrap-module-cometbls", "info": { "chain_id": "union-testnet-9", "client_type": "cometbls" }, "config": { "ws_url": "http://rpc.testnet-9.union.build", "grpc_url": "http://grpc.testnet-9.union.build", "ibc_host_contract_address": "union17e93ukhcyesrvu72cgfvamdhyracghrx4f7ww89rqjg944ntdegscxepme" } }, { // fill in the values for your chain here. "enabled": true, "path": "/path/to/modules/voyager-client-bootstrap-module-tendermint", "info": { "chain_id": "", "client_type": "tendermint" }, "config": { "ws_url": "", "grpc_url": "" } } ] }, "plugins": [ { "enabled": true, "path": "/path/to/modules/voyager-event-source-plugin-cosmos-sdk", "config": { "chain_id": "union-testnet-9", "ws_url": "http://rpc.testnet-9.union.build", "grpc_url": "http://grpc.testnet-9.union.build" } }, { "enabled": true, "path": "/path/to/modules/voyager-event-source-plugin-cosmos-sdk", "config": { "chain_id": "", "ws_url": "", "grpc_url": "" } }, { "enabled": true, "path": "/path/to/modules/voyager-event-source-plugin-ethereum", "config": { "chain_id": "17000", "ibc_handler_address": "0xfa4E502A3bf5f4Bc3EF0e17960b3Cd868d70E809", "eth_rpc_api": "https://rpc.17000.holesky.chain.kitchen", "eth_beacon_rpc_api": "https://beacon.17000.holesky.chain.kitchen" } }, { "enabled": true, "path": "/path/to/modules/voyager-transaction-plugin-cosmos-sdk", "config": { "chain_id": "union-testnet-9", "ibc_host_contract_address": "union17e93ukhcyesrvu72cgfvamdhyracghrx4f7ww89rqjg944ntdegscxepme", "keyring": { "name": "union-devnet", "keys": [ { "type": "raw", "name": "union-key-1", // the private key of a funded account on union-testnet-9 to use for relaying. "key": "" } ] }, "gas_config": { "gas_price": "1.0", "gas_denom": "muno", "gas_multiplier": "1.1", "max_gas": 10000000 }, "ws_url": "http://rpc.testnet-9.union.build", "grpc_url": "http://grpc.testnet-9.union.build" } }, { "enabled": true, "path": "/path/to/modules/voyager-transaction-plugin-cosmos-sdk", "config": { // configure the chain id for your chain here. "chain_id": "", // the ibc-union contract running on your chain. "ibc_host_contract_address": "", "keyring": { "name": "your-chain-testnet", "keys": [ { "type": "raw", // the name of this key. this will be used in logs. "name": "your-chain-key-1", // the private key of a funded account on your chain to use for relaying. "key": "" } ] }, // configure the gas config accordingly for your chain. "gas_config": { "gas_price": "1.0", "gas_denom": "", "gas_multiplier": "1.1", "max_gas": 10000000 }, "ws_url": "", "grpc_url": "" } }, { "enabled": true, "path": "/path/to/modules/voyager-transaction-plugin-ethereum", "config": { "chain_id": "17000", "ibc_handler_address": "0xfa4E502A3bf5f4Bc3EF0e17960b3Cd868d70E809", "multicall_address": "0x64A764A734648fA636525C7e4b3cE38Ca256b647", "keyring": { "name": "holesky", "keys": [ { "type": "raw", "name": "holesky-key-1", // the private key of a funded account on holesky to use for relaying. "key": "" } ] }, "eth_rpc_api": "https://rpc.17000.holesky.chain.kitchen" } }, // transaction batching plugins { // preconfigured for union-testnet-9 "enabled": true, "path": "/path/to/modules/voyager-plugin-transaction-batch", "config": { "chain_id": "union-testnet-9", "client_configs": { "min_batch_size": 1, "max_batch_size": 4, "max_wait_time": { "secs": 1, "nanos": 0 } } } }, // preconfigured for holesky { "enabled": true, "path": "/path/to/modules/voyager-plugin-transaction-batch", "config": { "chain_id": "17000", "client_configs": { "min_batch_size": 1, "max_batch_size": 4, "max_wait_time": { "secs": 1, "nanos": 0 } } } }, { "enabled": true, "path": "/path/to/modules/voyager-plugin-transaction-batch", "config": { // fill in the chain id of your chain here. "chain_id": "", "client_configs": { "min_batch_size": 1, "max_batch_size": 4, "max_wait_time": { "secs": 1, "nanos": 0 } } } }, // client update plugins { // preconfigued for updating cometbls clients tracking union-testnet-9. "enabled": true, "path": "/path/to/modules/voyager-client-update-plugin-cometbls", "config": { "chain_id": "union-testnet-9", "ws_url": "http://rpc.testnet-9.union.build", "grpc_url": "http://grpc.testnet-9.union.build", "prover_endpoints": ["https://galois.testnet-9.union.build:443"] } }, // TODO: Configure these properly // { // "enabled": true, // "path": "/path/to/modules/voyager-client-update-plugin-state-lens-evm", // "config": { // "l0_client_id": 1, // "l1_client_id": 2, // "l1_chain_id": "union-testnet-9", // "l2_chain_id": "17000", // "l1_ws_url": "http://rpc.testnet-9.union.build", // "l2_rpc_url": "https://rpc.17000.holesky.chain.kitchen" // } // }, // { // "enabled": true, // "path": "/path/to/modules/voyager-client-update-plugin-state-lens-ics23-ics23", // "config": { // "l0_client_id": 1, // "l1_client_id": 2, // "l1_chain_id": "union-testnet-9", // "l2_chain_id": "", // "l1_ws_url": "http://rpc.testnet-9.union.build", // "l2_ws_url": "" // } // }, { "enabled": true, "path": "/path/to/modules/voyager-client-update-plugin-ethereum", "config": { "chain_id": "17000", "chain_spec": "mainnet", "ibc_handler_address": "0xfa4E502A3bf5f4Bc3EF0e17960b3Cd868d70E809", "eth_rpc_api": "https://rpc.17000.holesky.chain.kitchen", "eth_beacon_rpc_api": "https://beacon.17000.holesky.chain.kitchen" } }, { "enabled": true, "path": "/path/to/modules/voyager-client-update-plugin-tendermint", // fill in the values for your chain here. "config": { "chain_id": "", "ws_url": "", "grpc_url": "" } } ], "voyager": { "num_workers": 50, "queue": { "type": "pg-queue", "database_url": "postgres://postgres:postgrespassword@127.0.0.1:5432/default", "max_connections": 50, "min_connections": 50 }, "optimizer_delay_milliseconds": 100 } }