Skip to main content
Version: main

Golang ICA Controller vs CosmWasm ICA Controller

The golang implementation of the ICS-27 controller standard is also widely deployed on IBC enabled chains, with some notable exceptions being the Cosmos Hub and Osmosis.

A contract developer could use the golang implementation of the ICA controller by submitting CosmosMsg::Stargate messages which would be handled by the golang implementation of the ICA controller.

warning

Using the golang implementation comes with a great disadvantage, which is that the golang implementation does not make callbacks to the contract that submitted the CosmosMsg::Stargate message! This means that the contract that submitted the CosmosMsg::Stargate message will not be able to know the result of the ICA transaction, nor the address of the newly created account on the other chain without intervention.

tip

Currently, Neutron and Nolus have custom bindings for the golang implementation of the ICA controller standard, which make callbacks to the contract that submitted the CosmosMsg::Stargate message. This means that you can use the golang implementation of the ICA controller standard on Neutron and Nolus without any problems. However, any applications that are built on these chains will not be able to be ported to other chains.

cw-ica-controller solves this problem by making callbacks to a contract that the developer specifies. This means that the users of cw-ica-controller can use the same contract on any chain that supports CosmWasm.

But there is more! cw-ica-controller is also able to do some things that the golang API limits you from doing.

Featurecw-ica-controllergolang ica-controllerneutron bindingsDescription
CallbacksGolang implementation does not make callbacks
Submit cosmwasm_std::CosmosMsgsGolang implementation requires ICA transactions to be submitted in protobuf or proto3json format.
Reopen an ICA channel with different paramsIn golang implementation, if the channel closes due to timeout the channel can only be reopened with the same parameters.
Change ownercw-ica-controller uses cw-ownable for owner management
Live upgradesIn golang implementation, new features require coordinated chain upgrades which could get blocked on upgrading CosmosSDK.
Permanent channel closureGolang implementation allows any relayer to always reopen any ICA channel (with the same parameters).