-
Notifications
You must be signed in to change notification settings - Fork 217
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
Investigate and document the effects of code upgrade but without constitution update #3537
Comments
Good observation. I imagine this could lead to serious bugs. Would it make sense to require a combined bundle of code + const scripts to upgrade, such as to force operators to chose the old version if they don't want/need to upgrade to a new version of the constitution? |
@wintersteiger I don't think we can do that safely, because some of the new action samples just won't work on an old network. Actions/constitution are user defined, there's no guarantee they match exactly the samples we ship (indeed, we know they often differ, for good reasons), so we aren't really in a position to mandate specific constitution identities for a given version of the code. Deciding that a At a minima we should have:
We can also discuss a possible versioning scheme for actions, as a way to communicate these changes. e.g. |
Regarding versioning: the constitution is basically an application that relies on the API defined in |
@wintersteiger I don't quite understand how that works and how that helps? The constitution itself is a JS module with three hardcoded functions, Let's say wrap.cpp gets a version number, who is "we" and how does the "check" happen? The only check that can happen in the constitution file (eg. assert at the top of validate()) will be too late and will prevent any further governance including a constitution upgrade! The check would need to happen when a new code update is proposed instead, and check compatibility between a claim on the binary that represents the version of wrap.cpp (*) and the version of the constitution. Except there is no meaningful version of the constitution, because it's user-defined. So instead, what's needed is an operation that finds out if a binary supports the set of actions in the current constitution. But there is neither a way to extract that set from the constitution, nor from a binary. And even that relies on actions having fixed semantics/being immutable, and doesn't work for user-defined actions. @wintersteiger am I missing something, and is there a simple solution I am missing? (*) mrenclave isn't transparent! |
Yes, I wasn't thinking about hard rejects at runtime, that would be any good at all. Instead, I'm thinking about a declaration of the expected version of the API in But yes, user-defined actions wouldn't work and, conversely, users might have their own ideas about versioning their scripts. So, not sure it's worth the effort. |
Earlier today we discussed the following potential improvements:
|
While it would be good to get as many improvements into 2.0 as possible, I think we should not plan to get all of this into the 2.0 release, so I'm taking the 2.0 label off. |
@wintersteiger yes, you're right, I think we wanted to get the documentation clarified, but the longer term solution is out of scope for 2.x. |
It is possible that operators do not update the constitution scripts when performing the code upgrade procedure described here.
We should make sure we understand what the implications are and how the system will behave in this case.
The text was updated successfully, but these errors were encountered: