-
Notifications
You must be signed in to change notification settings - Fork 397
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ICS 03/04: Some questions about handshake #1001
Comments
Hi @michwqy. Question 1The flow that usually happens is that the relayer will send
The connection identifiers on both sides don't necessarily need to be the same. And for the identifiers we used Question 2
Those extra connection ends might be a problem for relayers, but other than that it should be fine. There's an issue in ibc-go that encountered this problem as well. There are ways to handle with this problem, but I don't think they need to be part of the handshake protocol. Each implementation can decide on their own how to (if they want to) handle it. |
@michwqy Did you my comments above help with the questions you had? If they did, can I then please close the issue? |
@michwqy I will assume your questions have been answered and close the issue now. Thanks! |
These questions may seem a bit silly, but I need some help to better understand the handshake process. Connections and channels have a similar handshake process, and I will use connections as an example.
Question 1
Both
connOpenInit
andconnOpenTry
need to create a connection end with a new identifier. If both Chain A and Chain B want to establish a connection with the other party, both parties will create anINIT
state connection end, and then each party will create aTRYOPEN
state connection end to complete the handshake with the other party. Finally, there will be two connections. I think this is a bit strange, why can't we directly use the two connection ends ofINIT
state to complete the handshake. Besides, it seems that the connection ends ofINIT
andTRYOPEN
states will share the identifier count. Is there a problem with this? LikeconnOpenInit
ran out of identifiers, resulting in the inability to executeconnOpenTry
.Question 2
A
INIT
state connection end of the counterparty chain can be used to create multipleTRYOPEN
state connection ends, becauseconnOpenTry
only verifies the counterparty connection end's state and does not check if it already has a correspondingTRYOPEN
state connection end. However, only one of theseTRYOPEN
state connection ends will match theINIT
state connection end in theconnOpenAck
because theconnOpenAck
will change connection end's state. The remaining connection ends will freeze in their previous states. I think these frozen connection ends will interfere with the normal use of users. Why can't we close these connection/channel ends that can't complete the handshake, or check if there is already a corresponding end inconnOpenTry
?The text was updated successfully, but these errors were encountered: