I agree that this would be very nice to have. We will likely end up on something similar in the end. But it needs to come in phases:
Understand (on chain) if nodes are healthy or not - essentially done today
Be able to calculate (on chain) the decentralization - to be done, currently in progress
Be able to add&remove nodes from subnets, conditioned by a set of tolerances as you say - to be done
I.e. we can’t have nodes added and removed from subnets dynamically without the first 2 completed.
We could do it manually though. So we need to ask around if this would be reasonable to everyone. The challenge is: adding nodes to subnets will slow down consensus, so we can’t have too many nodes in the important subnets. But we could add some. However, if decentralization actually improves, it will be difficult later on to remove the nodes and worsen the decentralization. I’m pretty sure some community or even DFINITY members would be against it
That’s what the formal tolerances would be for. As long as the coefficients are within tolerance, they should be tolerated
Regarding dynamic subnet membership changes initiated on-chain, would that result in a proposal or would the change execute without requiring an NNS vote? I guess a vote wouldn’t be required, so subnet membership proposals would become a thing of the past?
In theory yes. In practice… might be harder to justify worsening the decentralization for the key subnets. So in practice these changes might be a one-way street.
Correct, that’s where I’d like to get eventually. I think that subnet membership change proposals can be deprecated at some point, or in other words I don’t see a reason why this wouldn’t be possible. And the set of “tolerances” seem like the way to get there. We just need all the necessary pieces in the NNS to calculate whether a certain configuration is within the tolerances.
Nice! I think it’ll be an awesome plus for the IC to have a self-healing mechanism like this! Very cool.
Thinking on this a bit further, I wonder if it would still make sense to keep the Subnet Membership proposal type around (just on the off chance DAO intervention is ever needed). One possibility that comes to mind is if the system ever gets stuck in some sort of local optima that it cannot easily escape from with the algorithm used for calculating subnet membership changes on-chain. A more computationally expensive calculation could be performed off-chain to determine something closer to the global optimum.