Make channel-upgrade execute command fully idempotent#171
Open
abicky wants to merge 6 commits intohyperledger-labs:mainfrom
Open
Make channel-upgrade execute command fully idempotent#171abicky wants to merge 6 commits intohyperledger-labs:mainfrom
abicky wants to merge 6 commits intohyperledger-labs:mainfrom
Conversation
94b7ac9 to
b4e2b2a
Compare
The channel-upgrade execute command is basically idempotent. However, since proposed upgrades are deleted after the channel upgrade completes, re-running the command previously failed with the error: "Error: channel upgrade is not initialized." This behavior caused instability in tests such as: https://github.com/datachainlab/cosmos-ethereum-ibc-lcp/blob/v0.2.24/tests/e2e/cases/tm2eth/scripts/test-channel-upgrade#L122 To address this, the command now exits with exit code 0 even when no proposed upgrades exist. Although some users might forget to run the channel-upgrade init command, they will be notified through the newly added log message. Signed-off-by: Takeshi Arabiki <takeshi.arabiki@datachain.jp>
Signed-off-by: Takeshi Arabiki <takeshi.arabiki@datachain.jp>
bb56307 to
f9b6353
Compare
4dc25ea to
f640855
Compare
According to the IBC spec https://github.com/cosmos/ibc/blob/main/spec/core/ics-004-channel-and-packet-semantics/UPGRADES.md#upgrade-handshake, some states may be skipped during the channel upgrade handshake. For example, the stat pair (INIT, FLUSHING) may transition directly to (FLUSHCOMPLETE, FLUSHING) without passing through FLUSHING from INIT. Signed-off-by: Takeshi Arabiki <takeshi.arabiki@datachain.jp>
f640855 to
5dd0d0d
Compare
Signed-off-by: Takeshi Arabiki <takeshi.arabiki@datachain.jp>
siburu
reviewed
Oct 29, 2025
Signed-off-by: Takeshi Arabiki <takeshi.arabiki@datachain.jp>
Signed-off-by: abicky <takeshi.arabiki@gmail.com>
b6571e0 to
01eed49
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Background
The channel-upgrade execute command is basically idempotent. However, since proposed upgrades are deleted once the channel upgrade completes, re-running the command with the target states (UNINIT, UNINIT) failed with:
This behavior caused instability in tests such as: https://github.com/datachainlab/cosmos-ethereum-ibc-lcp/blob/v0.2.24/tests/e2e/cases/tm2eth/scripts/test-channel-upgrade#L122
What changed
To address this, the command now exits with exit code 0 even when no proposed upgrades exist.
Although some users might forget to run the channel-upgrade init command, they will be notified through the newly added log message "both chains have already reached/passed the target states, or the channel upgrade has not been initialized."
I've also confirmed that the cosmos-ethereum-ibc-lcp CI passes: datachainlab/cosmos-ethereum-ibc-lcp#84.
channel-upgrade executenow immediately exits with status 0 when no proposed upgrades exist