-
Notifications
You must be signed in to change notification settings - Fork 129
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
Implement sovereign -> consumer chain changeover #288
Comments
AFAIK, the important thing for IBC clients to keep their connection is for the Here is @zmanian's idea:
As stated in point 2, replacing the validator set results in a light client state being created where the old validator set signs a Here's an alternate technique which should work with no code outside of CCV:
The benefit of this technique is that it requires very little extra code to be written. The only thing that needs to happen is for us to disable the check here @mpoke is this safe to do? |
That is correct. The "no more than a 1/3 change" is a requirement for the bisection protocol of light clients. This was what @josef-widder said about this:
|
Some concerns / comments I have re. this design:
|
This code doesn't check that the This check is actually not needed. There is no requirement for the local validator set to match the |
Note that |
After talking with @mpoke today, I think that my suggested technique has too many problems. The handshake will not be able to work because the provider chain expects the consumer chain IBC client to have the provider chain validator set, not the sovereign validator set. We should probably go with Zaki's idea, which I will flesh out more here:
|
I agree that this approach is the way to go, but there are some things that need to be sorted out. Problem statement:
Note: We distinguish between a sovereign chain wanting to become a consumer chain and a chain that wants to start from the beginning as a consumer chain. Here we focus only on the former. Requirements:
Approach:
Note: The first two steps can happen also after the gov proposal passes. As a side effect, the entire Channel Initialization protocol is no longer needed. In other words, once |
Implementation plan for Marius's proposal above:
|
Is there any worry about needing to trust what is being received over ibc from the sovereign chain? (Because it will have its own valset at that time) |
Nothing is received over IBC from the sovereign chain. The IBC channel is used to send the provider valset (aka the consumer initial valset) to the sovereign chain so that the control of the sovereign chain can be passed to this valset. |
How do the client updates work for other chains connected to the sovereign -> consumer chain? |
@jackzampolin This should work directly by relaying a ClientUpdate message, i.e., https://github.com/cosmos/ibc-go/blob/b601462fbce9dd34620cd9129ff9b9057ee5c186/modules/core/keeper/msg_server.go#L62. Since the last block of the sovereign has |
@mpoke is this in the spec yet? |
@jtremback Yes. There is a PR open on the spec repo cosmos/ibc#840 |
We've started to work on this cc @jstr1121 @jtremback |
@asalzmann please check the latest version of the spec, i.e., cosmos/ibc#840 |
Especially the comment in the BeginBlockInit method, i.e.,
|
@asalzmann @jstr1121 lmk if there's anyway I can help guide any efforts! Happy to hop on a call |
Implementation: Stride-Labs#1 |
Superseded by #756 |
We know this should be theoretically possible, but we have never actually tested (to my knowledge) the transition of a sovereign chain to a consumer chain.
Conditions of satisfaction:
There are a few different ways this could be done, we should use this thread to plan them out.
The text was updated successfully, but these errors were encountered: