Consensus is the task of getting a group of computers to come to an agreement on a decision. Computers can reach a consensus by following a set of steps called a consensus protocol.
Dijets implements a new consensus protocol that is scalable, robust, and decentralized. It has low latency and high throughput. It is energy efficient and does not require special computer hardware. It performs well in adversarial conditions and is resilient to “51% attacks.”
Dijets implements a laderless Byzantine fault tolerant protocol, built around a metastable mechanism via network subsampling.
Dijets Consensus protocol provides a strong probabilistic safety guarantee in the presence of Byzantine adversaries while their concurrent and leaderless nature enables them to achieve high throughput and scalability.
Unlike other blockchains that rely on proof-of-work, Dijets is quiescent and green. And unlike traditional consensus protocols where one or more nodes typically processes linear bits in the number of total nodes per decision, with Dijets no node processes more than logarithmic bits. It does not require accurate knowledge of all participants and exposes new possible tradeoffs and improvements in safety and liveness for building consensus among the participating public & Cacid nodes.
Random Sub-sampling
At its core Dijets Consensus protocol operates by repeatedly sampling the network at random, and steering correct nodes towards a common outcome.
This metastable mechanism is extremely powerful and helps Dijets transactions to achieve a sub seecond finality. It does so by moving a large network to an irreversible state quickly, where the irreversibility implies that a sufficiently large portion of the network has accepted a proposal and a conflicting proposal will not be accepted with any higher than negligible (ε) probability.
Breaking down the Protocol
To better understand Dijets Consensus Protocol, let’s review the algorithm with which nodes in Dijets Network reach an agreement over a transaction.
Parameters
- n number of participating nodes
- k (sample size): between 1 and n
- α (quorum size): between 1 and k
- β (decision threshold): >= 1
consecutiveSuccesses := 0
while not decided:
ask k random nodes about the transaction
if >= α agree that its a valid tx:
conclusion := response with >= α
if conclusion == old conclusion:
consecutiveSuccesses++
else:
consecutiveSuccesses = 1
else:
consecutiveSuccesses = 0
if consecutiveSuccesses > β:
decide(conclusion)
}
Explanation
Each node is indifferent to the transaction’s validity initially. Until one node has decided and validated the transaction, it queries k
nodes (the sample size) and confirm the transaction’s validity. If α
or more nodes reach the same conclusion, that conclusion is adopted as the new conclusion. α
is called the quorum size. If the new conclusion is the same as the old conclusion, the consecutiveSuccesses
counter is incremented. If the new conclusion is different then the old conclusion, the consecutiveSuccesses
counter to 1. If no response gets a quorum (an α majority of the same coonclusion) then the consecutiveSuccesses
counter is set to 0.
The liveness and safety thresholds are parameterizable. As the quorum size, α, increases, the safety threshold increases, and the liveness threshold decreases. This means Dijets network can tolerate more byzantine (deliberately incorrect, malicious) nodes and remain safe, meaning all nodes will eventually reach a conclusion and agree whether something is accepted or rejected.