-
Notifications
You must be signed in to change notification settings - Fork 113
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
NEP: Lightning-Voting #82
Conversation
I like the idea, but would it be better to use a reputation system instead of banning outright? Banning nodes could affect our fault tolerance quite heavily. We would need a large number of backup nodes ready to quickly replace banned CNs. Using reputation would have the added benefit of being useful information for NEO holders who are deciding which consensus nodes to vote for. The most reputable nodes are evidently strong candidates. There is an example reputation module for BFT protocols called Guru, perhaps it could be a good reference? |
@Edgegasm, I checked out the Guru, thanks for the nice references as always! 🗡️ The point here, Edge, is that this NEP is not related to the Consensus layer itself, it is talking about an upper layer in which the Correct nodes already lost power against Byzantine nodes. Recently, @igormcoelho called my attention to the fact that if some Validators just disappear (for example loosing their private key) the NEO blockchain might get stopped because the voting for new Validators should be approved by the CN and published in the Blockchain (and, then, how to publish if the quorum can not reach Here, in this NEP, the idea is to cover cases wherein the system behaved wrongly and should be reverted (at least, Faults should not be tolerated and stakes should be lost, reputation is not a matter here since it is impossible to trust again in someone that behaved like that. |
Ah I understand, so if such a fault occurs, the remainder of the network may still preserve itself. Makes a lot of sense, you guys are thinking far ahead as usual. We're lucky to have you 😅 Could you resolve the second case by having backup candidate nodes (next most highly voted) working as record keepers and ready to assist in restarting consensus after |
I'm interested to know if others think this mechanism is needed given the voting mechanism used in NEO.
Easy to detect ones are effectively the same as just not creating a block in the time you are supposed to.
The possible types of misbehavior I see are:
All of these behaviors should be detected by services that offer wallet clients to users. Neo holders therefore would have the tools to vote out bad acting node. Ideally most of this should happen automatically in the future. The penalty of being voted out, would mean that the cost paid to be a CN node candidate would have been lost, since it is unlikely to be voted in again as a CN node. Shouldn't this be enough of a penalty already? |
Voting requires a transaction to be processed, thus, requiring CN to create a block. |
The bad entity would have to control Deep reorganizing the chain is against finality. Such a reorganization should not be designed by a mechanism in code since then finality guarantees are lost. There must be another way. If the chain were halted by a malicious entity that obtained control of That being said in practice, entities that propose to run CN nodes will be publicly known entities. In the future no same entity should control A solution using the possibility of MemPool voting that I mentioned above to recover from an In conclusion, a malicious entity could only continue to censor transactions if they control at least |
Nice insights, Jeff!
Exactly, voting associated with a proof of bad behavior of that CN (in fact, the proof will not be needed in the line of reasoning that you are supporting because the voting represents that in an intrinsic manner).
Exactly, @jsolman, you got the felling (they would just select new candidates, it would not have the need to explain about who is malicious or not).
I think that this line of reasoning you proposed is very good and also solves the problem that we could have if Thanks for these good ideas. Maybe we could think about another name for this proposal, more suitable to this new line of direction, for example:
|
It doesn’t have to, the Top 2000 holders will likely account for 99%+ of votes. |
@erikzhang, what do you think about this proposal? As suggested by @jsolman, it is now more related to an upper layer where the voting could occur. |
Closing this in favor of the native implementation in NEO 3 neo-project/neo#757. |
Reopen due to the current discussions going on at Community Assembly. @dahongfei mentioned a way of setting CN offchain. This proposal has this potential by enabling voting on mempool level. |
But |
We understand that it is non-deterministic, that is why this is meticulous....aheuahuea |
In particular, @erikzhang, the Emergency Mode (neo-project/neo#2226) also solves this. |
Fully distributed systems have the cost of safety.
It is impossible to deny that, in unlucky cases,
M
(safety level) nodes can be Byzantine and attack the Blockchain.While there are different types of possible attacks, some of them are easy to detect, such as: 1- blocks with wrong transactions; 2- blocks with double-spending; 3 - more than
f
consensus node lagging plenty of time to sign next block: among others.Considering this possibility, this NEP proposes a lightning voting experience, in which NEO holders would be able to modify validators during block creation.
In this sense, this proposal is a simple mechanism that allows voting to happen in an upper layer, namely, in the mempool.