diff --git a/cli/commands/bridge/relays/ibc.go b/cli/commands/bridge/relays/ibc.go index 0c2afe06..e5a1d6bb 100644 --- a/cli/commands/bridge/relays/ibc.go +++ b/cli/commands/bridge/relays/ibc.go @@ -81,9 +81,30 @@ func startIbcRelay(diveContext *common.DiveContext, enclaveContext *enclaves.Enc } } + + if chainA == "icon" { + startIbcRelayIconToCosmos(diveContext, enclaveContext, common.RelayServiceNameIconToCosmos) + } + return starlarkExecutionResponse } +func startIbcRelayIconToCosmos(diveContext *common.DiveContext, enclaveContext *enclaves.EnclaveContext, serviceName string) (string, error) { + params := fmt.Sprintf(`{"service_name": "%s"}`, serviceName) + + executionData, _, err := enclaveContext.RunStarlarkRemotePackage(diveContext.Ctx, common.DiveRemotePackagePath, "services/bridges/ibc/src/bridge.star", "start_relay", params, false, 4, []kurtosis_core_rpc_api_bindings.KurtosisFeatureFlag{}) + + executionSerializedData, services, _, err := diveContext.GetSerializedData(executionData) + + if err != nil { + diveContext.StopServices(services) + return "", err + + } + + return executionSerializedData, nil +} + func startCosmosChainsAndSetupIbcRelay(diveContext *common.DiveContext, enclaveCtx *enclaves.EnclaveContext, chains *Chains) (string, error) { params := chains.getIbcRelayParams() diff --git a/cli/common/constants.go b/cli/common/constants.go index 17347f70..0fa423cd 100644 --- a/cli/common/constants.go +++ b/cli/common/constants.go @@ -14,6 +14,7 @@ const ( DiveArchwayNodeScript = "services/cosmvm/archway/src/node-setup/start_node.star" DiveArchwayDefaultNodeScript = "services/cosmvm/archway/archway.star" DiveNeutronNodeScript = "services/cosmvm/neutron/src/node-setup/start_node.star" + RelayServiceNameIconToCosmos = "ibc-relayer" DiveNeutronDefaultNodeScript = "services/cosmvm/neutron/neutron.star" DiveBridgeScript = "main.star" DiveDryRun = false diff --git a/main.star b/main.star index c4f179b4..1f898b77 100644 --- a/main.star +++ b/main.star @@ -313,7 +313,7 @@ def run_cosmos_ibc_relay_for_already_running_chains(plan, src_chain_config, dst_ } # Open BTP network on ICON chain - icon_setup_node.open_btp_network(plan, src_chain_service_name, src_data, src_chain_config["endpoint"], src_chain_config["keystore_path"], src_chain_config["keypassword"], src_chain_config["nid"]) + tx_result_open_btp_network = icon_setup_node.open_btp_network(plan, src_chain_service_name, src_data, src_chain_config["endpoint"], src_chain_config["keystore_path"], src_chain_config["keypassword"], src_chain_config["nid"]) icon_bind_port = icon_relay_setup.bindPort(plan, src_chain_service_name, deploy_icon_contracts["xcall_connection"], src_chain_config["keystore_path"], src_chain_config["keypassword"], src_chain_config["nid"], src_chain_config["endpoint"], deploy_icon_contracts["ibc_core"], "xcall") @@ -333,11 +333,20 @@ def run_cosmos_ibc_relay_for_already_running_chains(plan, src_chain_config, dst_ config_data["contracts"][src_chain_service_name] = deploy_icon_contracts config_data["contracts"][dst_chain_service_name] = deploy_cosmos_contracts + src_chain_id = src_chain_config["network_name"].split('-', 1)[1] + + network_id = icon_setup_node.hex_to_int(plan, src_chain_service_name, src_chain_config["nid"]) + btp_network_id = icon_setup_node.hex_to_int(plan, src_chain_service_name, tx_result_open_btp_network["extract.network_id"]) + btp_network_type_id = icon_setup_node.hex_to_int(plan, src_chain_service_name, tx_result_open_btp_network["extract.network_type_id"]) + src_chain_data = { - "chain_id": "0xacbc4e", + "chain_id": src_chain_id, "rpc_address": src_chain_config["endpoint"], "ibc_address": deploy_icon_contracts["ibc_core"], "password": src_chain_config["keypassword"], + "network_id": network_id, + "btp_network_id": btp_network_id, + "btp_network_type_id": btp_network_type_id } dst_chain_data = { diff --git a/services/bridges/ibc/src/bridge.star b/services/bridges/ibc/src/bridge.star index 9eabdfe6..7156c7b9 100644 --- a/services/bridges/ibc/src/bridge.star +++ b/services/bridges/ibc/src/bridge.star @@ -125,6 +125,9 @@ def start_cosmos_relay_for_icon_to_cosmos(plan, src_chain_config, dst_chain_conf "CHAINID": src_chain_config["chain_id"], "RPCADDRESS": src_chain_config["rpc_address"], "IBCADDRESS": src_chain_config["ibc_address"], + "ICONNETWORKNID": src_chain_config["network_id"], + "BTPNETWORKID": src_chain_config["btp_network_id"], + "BTPNETWORKTYPEID": src_chain_config["btp_network_type_id"] } plan.render_templates( @@ -247,4 +250,4 @@ def start_channel(plan, service_name, path_name, src_port, dst_port): def start_relay(plan, service_name): plan.print("Starting Relay") - plan.exec(service_name = service_name, recipe = ExecRecipe(command = ["/bin/sh", "-c", "ln -sf /proc/1/fd/1 /root/.relayer/relay.log && rly start 1>&2"])) + plan.exec(service_name = service_name, recipe = ExecRecipe(command = ["/bin/sh", "-c", "ln -sf /proc/1/fd/1 /root/.relayer/relay.log && rly start 1>&2 &"])) diff --git a/services/bridges/ibc/static-files/config/icon.json.tpl b/services/bridges/ibc/static-files/config/icon.json.tpl index 2261bc6e..89182f2e 100644 --- a/services/bridges/ibc/static-files/config/icon.json.tpl +++ b/services/bridges/ibc/static-files/config/icon.json.tpl @@ -7,9 +7,9 @@ "timeout": "30s", "keystore": "keystore", "password": "gochain", -"icon-network-id": 3, -"btp-network-id": 1, -"btp-network-type-id": 1, +"icon-network-id": {{.ICONNETWORKNID}}, +"btp-network-id": {{.BTPNETWORKID}}, +"btp-network-type-id": {{.BTPNETWORKTYPEID}}, "start-height": 0, "ibc-handler-address":"{{.IBCADDRESS}}", "first-retry-block-after": 0, diff --git a/test/functional/dive_test.go b/test/functional/dive_test.go index 43f35125..1a2ad786 100644 --- a/test/functional/dive_test.go +++ b/test/functional/dive_test.go @@ -374,7 +374,7 @@ var _ = ginkgo.Describe("DIVE CLI App", func() { ginkgo.It("should start IBC relay between already running custom icon and neutron chain", func() { dive.RunCustomIconNode() dive.RunNeutronNode() - cmd.Args = append(cmd.Args, "bridge", "ibc", "--chainA", "icon", "--chainB", "neutron", "--chainAServiceName", "icon-node-0xacbc4e", "--chainBServiceName", "neutron-node-test-chain1") + cmd.Args = append(cmd.Args, "bridge", "ibc", "--chainA", "icon", "--chainB", "neutron", "--chainAServiceName", "icon-node-0x42f1f3", "--chainBServiceName", "neutron-node-test-chain1") err := cmd.Run() gomega.Expect(err).NotTo(gomega.HaveOccurred()) })