

Once this is done the messages are passed to the main loop. This includes deserialization, validity check, membership check, signature check, duplicate check, etc. ProcessMessage Threads - These are a set of threads running that take care of the initial message processing.The main threads of execution are as follows: If a node is shut down or restarted, the state will be replayed from disk (if enabled in the configuration) before joining back in the consensus and recovering any missing values. It acts like an append only log indexed in memory. DiskStore - This is where decided values are stored to disk and loaded as needed.StateMachine - This is where the application lives, it gives inputs as proposals to consensus and receives decided values.
#Google cloud print not working godocs code


Basically this keeps track of the set of public keys that are considered to be the members of the current consensus instance. MemberCheckers - Each instance of consensus has a member checker.It handles connections and sends and receives messages from the network. MainChannel - This is were the networking code is.The main code components of a consensus node are as follows: See the godoc for more details (in progress). Ways of scaling - different broadcasts, using multi/threshold signatures, randomized mebmer selection.Total/causal ordering - different consistency requirements.State machines - counter, random bytes, transactions, assets.Cryptography - signatures, encrpyted/authenticated channels, threshold signatures,.Consensus algorithms - binary consensus, multivalue consensus, reliable broadcasts.Overview of implemented algorithms/configurations The readme and associated godocs give a highlevel overview,Įventaully results will be written up more clearly in technical reports. Instead just take key ideas in ways that can be May not follow the algorithms of the papers exactly, and Note that techniques are used from various papers, but they The idea is to allow many different algorithms to be able to be run Tracking membership, checking signatures, scaling mechanisms, ensuring progress and recovery after faults of the network or nodes, helping slow nodes catch up, disk storage, etc. The general code takes care of things like: networking, The structure of the project is designed so that consensusĪlgorithms will be relatively small in terms of line of code, with the general code handling most of the work. It is for investigatingĭifferent ideas in a wide range of situations. Or say that one solution is better than another. This project is not meant to measure "transactions per second", Scratch using Golang and standard libraries. Other than dependent cryptographic libraries it is built from This is a hobby project so things will change and be added/removed/fixed/broken and undetermined intervals. It (currently) focuses on algorithms that do no require synchronyįor correctness, and tolerate up to 1/3 of Byzantine faults. The intention of this project is to test Byzantine fault tolerate consensus algorithms Note this is an experimental project for experiments only.
