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.
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.
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.
Feature | cw-ica-controller | golang ica-controller | neutron bindings | Description |
---|---|---|---|---|
Callbacks | ✅ | ❌ | ✅ | Golang implementation does not make callbacks |
Submit cosmwasm_std::CosmosMsg s | ✅ | ❌ | ❌ | Golang implementation requires ICA transactions to be submitted in protobuf or proto3json format. |
Reopen an ICA channel with different params | ✅ | ❌ | ❌ | In golang implementation, if the channel closes due to timeout the channel can only be reopened with the same parameters. |
Change owner | ✅ | ❌ | ✅ | cw-ica-controller uses cw-ownable for owner management |
Live upgrades | ✅ | ❌ | ❌ | In golang implementation, new features require coordinated chain upgrades which could get blocked on upgrading CosmosSDK. |
Permanent channel closure | ✅ | ❌ | ❌ | Golang implementation allows any relayer to always reopen any ICA channel (with the same parameters). |