You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Summary or problem description #1795 has removed policy contract's Initialize effectively moving default values from the storage to the code. It's a bit dangerous in that now node implementation can change these values without any notice, bypassing regular governance mechanisms unless some particular value is to be set via committee-signed transactions.
So while the problem of future changes to the policy contract and their influence on Initialize and state root is absolutely valid, I think it can be solved in a bit different manner keeping regular governance scheme in the loop and giving more transparency for the end user.
Do you have any solution you want to propose?
I'd propose reverting this change and establishing a protocol for new policy values rollout.
This would mean that the initial set of the values would be the same (and would never change!), it would be stored as usual, so that no software update could affect it (and all the network would always be in agreement regarding these values) and these values could only be changed via committee-signed transaction (as it was originally intended to).
For the new policy values we would use the following protocol:
release Neo update with some NewPolicyValue
its initialization shouldn't be added to Initialize
GetNewPolicyValue would just throw an error until it's initialized
code using this value should be prepared for this error and fallback to old behavior (when this value didn't exist at all) in this case
SetNewPolicyValue would be available with regular committee check
push (high priority) committee-signed transaction that invokes SetNewPolicyValue and sets it to whatever default value we need
everything works as usual afterwards
GetNewPolicyValue returns the value set by committee and code may use it for whatever purposes
it can by updated with SetNewPolicyValue again if needed
We may also add some dependency on block number in the logic (like this setting is only valid to get after block X). And in the future this mechanism could also be tied to the VM/execution engine versioning, but the basic idea would be the same --- every policy value would be stored in the storage and have some transaction associated with its creation/change, either genesis or committee-signed one.
Neo Version
Neo 3
Where in the software does this update applies to?
Other: Policy contract and governance
The text was updated successfully, but these errors were encountered:
Summary or problem description
#1795 has removed policy contract's
Initialize
effectively moving default values from the storage to the code. It's a bit dangerous in that now node implementation can change these values without any notice, bypassing regular governance mechanisms unless some particular value is to be set via committee-signed transactions.So while the problem of future changes to the policy contract and their influence on
Initialize
and state root is absolutely valid, I think it can be solved in a bit different manner keeping regular governance scheme in the loop and giving more transparency for the end user.Do you have any solution you want to propose?
I'd propose reverting this change and establishing a protocol for new policy values rollout.
This would mean that the initial set of the values would be the same (and would never change!), it would be stored as usual, so that no software update could affect it (and all the network would always be in agreement regarding these values) and these values could only be changed via committee-signed transaction (as it was originally intended to).
For the new policy values we would use the following protocol:
NewPolicyValue
Initialize
GetNewPolicyValue
would just throw an error until it's initializedSetNewPolicyValue
would be available with regular committee checkSetNewPolicyValue
and sets it to whatever default value we needGetNewPolicyValue
returns the value set by committee and code may use it for whatever purposesSetNewPolicyValue
again if neededWe may also add some dependency on block number in the logic (like this setting is only valid to get after block X). And in the future this mechanism could also be tied to the VM/execution engine versioning, but the basic idea would be the same --- every policy value would be stored in the storage and have some transaction associated with its creation/change, either genesis or committee-signed one.
Neo Version
Where in the software does this update applies to?
The text was updated successfully, but these errors were encountered: