Patch Gaia
The guide below refers specifically to patching your gaia chain so that the
relayer can initiate the closing of channels by submitting a ChanCloseInit
message.
Without this modification, the transaction will be rejected.
We also describe how to test the channel closing feature.
-
Clone the Cosmos SDK
git clone https://github.com/cosmos/cosmos-sdk.git ~/go/src/github.com/cosmos/cosmos-sdk cd ~/go/src/github.com/cosmos/cosmos-sdk
-
Apply these diffs:
--- a/x/ibc/applications/transfer/module.go +++ b/x/ibc/applications/transfer/module.go @@ -305,7 +305,7 @@ func (am AppModule) OnChanCloseInit( channelID string, ) error { // Disallow user-initiated channel closing for transfer channels - return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "user cannot close channel") + return nil }
-
Append the line below (watch for the placeholder
<your>
) as the last line in yourgo.mod
in thegaia
clone:
replace github.com/cosmos/cosmos-sdk => /Users/<your>/go/src/github.com/cosmos/cosmos-sdk
- Now
make build
andmake install
your local copy ofgaia
In order to test the correct operation during the channel close, perform the steps below.
-
The channel should be in state open-open:
-
Transfer of 5555
samoleans
fromibc-1
toibc-0
. This results in a Tx toibc-1
for aMsgTransfer
packet. Make sure you're not relaying this packet (Hermes should not be running on this path).hermes tx ft-transfer --timeout-height-offset 1000 --denom samoleans --dst-chain ibc-1 --src-chain ibc-0 --src-port transfer --src-channel channel-1 --amount 5555
-
Now do the first step of channel closing: the channel will transition to close-open:
hermes tx chan-close-init --dst-chain ibc-0 --src-chain ibc-1 --dst-connection connection-0 --dst-port transfer --src-port transfer --dst-channel channel-0 --src-channel channel-1
-
Trigger timeout on close to ibc-1
hermes tx packet-recv --dst-chain ibc-0 --src-chain ibc-1 --src-port transfer --src-channel channel-1
-
Close the channel
hermes tx chan-close-confirm --dst-chain ibc-1 --src-chain ibc-0 --dst-connection connection-1 --dst-port transfer --src-port transfer --dst-channel channel-1 --src-channel channel-0
-
Verify that the two ends are in Close state:
hermes query channel end --chain ibc-0 --port transfer --channel channel-0 hermes query channel end --chain ibc-1 --port transfer --channel channel-1