Distributed consensus problem
prawn-cake opened this issue · comments
As a subtask of #2.
Before going forward we need to understand how the users will come to a consensus in the distributed p2p network.
All the research can be collected here
To research
- Proof-of-work_system - used by bitcoin, easy to implement
- Proof-of-stake - proposed by ethereum
- Paxos (just listing it here, not worth looking at)
- Raft - used in the db world, worth to check if it can be applied here as well
- Hashgraph - some new thing
- Async BFT protocol - another set of protocols for distributed consensus
- Overview article about latest known blockchain consensus algorithms
- CORFU - Distributed shared log
To read some fundamentals about Byzantine faults and failures (problems of generals attacking Byzantine)
- Good basics about Byzantine faults and failures
- This article adds more blockchain context (but read the previous one first)
- Satoshi Nakamoto's email
- Super helpful video explaining the basics of the bitcoin protocol
Suggested:
Proof of Authority can also be looked at.
Looks good. But all of those new consensus protocols introduce more unknown variables and complications with unknown benefit (biggest systems like Bitcoin and Ethereum still use proof-of-work and only testing other algorithms)
E.g how to elect witnesses in case of DPoS or in case of PoA - potential validators are required to obtain public notary license
doesn't sound appealing.
But, given the fact that the project tends to be smart contracts system and not crypto-currency (it doesn't require solving double-spending problem), it should provide append-only capability in distibuted manner.
I started writing RFC document to describe possible architechture of the consensus protocol. And of course I'd like to have some feedback and ready to listen to fresh ideas.