LTO Network - Technical Paper
LTO Network - Technical Paper
network
Blockchain for Decentralized Workflows
www.lto.network
F
Abstract
Digitalization and automation of business processes offer great benefits in terms of
productivity and cost reduction. Organizations struggle to tap into these benefits for inter-
organizational processes, partly due to a lack of trust. Bitcoin has proven how blockchain
can use distribution and cryptography to provide a system that does not rely on trust.
LTO builds upon this foundation with a decentralized workflow engine employed for
ad-hoc collaboration. Information is shared between parties using per-process private
event chains and hashed on a public blockchain. This hybrid approach allows organi-
zations to meet any data protection regulations and prevents scalability issues that are
typically associated with blockchain projects.
I NTRODUCTION
The digital revolution has resulted in many changes that make our lives more
efficient[1]. This wave of progress has taken place primarily in consumer-facing
and internal business processes. When it comes to inter-organizational processes
we have to acknowledge that the changes are less drastic. Faxing has largely
been replaced by e-mail, and the typewriter is replaced by a word processor,
but beyond these superficial changes, execution of the underlying processes have
hardly changed.
The first reason that automation has been absent is the reluctance of corpora-
tions to rely on external systems operated by a counterparty[2], as the distribution
of information plays an important role in the outcome of a relationship[3]. Where
there is a natural power imbalance, one party may take control, forcing all others to
use its centrally managed system. We see this when dealing with the government
and to some extent with corporations. In a situation where no single party can
claim control, automation simply doesn’t happen[4].
To achieve automation for inter-organizational processes, for over two decades
people have experimented with decentralized workflows[5]. In these studies and
experiments, a high level of trust and fair play is assumed, focusing primarily on
solving technological challenges. In reality, this is a false assumption as a lack of
trust prevents successful pilots from making it to production.
A second reason for the absence of automation is the correlation between
efficiency and corruption[6]. Traditionally large corporations and government
bodies require a large number of people to execute a process. A fair amount of
bureaucracy is required to coordinate such processes. This increases the costs of
bribery, reducing the incentive to automate. Increasing efficiency negates this effect.
This paper shows how both problems may be solved using blockchain, provid-
ing a solution where all parties can be on equal footing.
1
C ONTENTS
Part I. Live Contracts 3
4 Scenario 5
4.1 States . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
4.2 Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
4.3 Actors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
4.4 Assets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
5 Data-objects 5
5.1 Immutability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
5.2 Forms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
5.3 Documents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
5.4 Custom types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
6 Identities 6
6.1 Inviting identities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
6.2 Updating an identity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
7 Process 6
7.1 Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
7.2 Manual actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
7.3 System actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
7.4 Sub-processes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
7.5 Projection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
7.6 Data operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
7.7 Passive testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
8 Adaptive workflows 7
8.1 Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
8.2 Deviation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
8.3 Scenario update . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
9 Event chain 8
9.1 Cryptographic signatures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
9.2 Hash chain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
10 Distribution 8
10.1 Private chain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
10.2 Genesis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
11 Consensus mechanism 8
11.1 Chance of a conflict . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
11.2 Branch validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
11.3 Cascading rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
11.4 Unanchored events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
11.5 Merging branches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
11.6 Forks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2
12 Privacy 10
12.1 Linked data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
12.2 GDPR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
12.3 Zero-knowledge proofs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
13 Common patterns 10
13.1 Chain interaction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
13.2 Explicit synchronization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
15 Consensus algorithm 12
15.1 Leasing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
15.2 Raffle factor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
15.3 Forge probability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
15.4 Fair PoS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
15.5 Generator signature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
15.6 NG protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
16 Transaction types 13
16.1 Anchoring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
16.2 Authentication and authorization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
16.3 Certificates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
16.4 Chain of trust . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
16.5 Smart accounts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
17 Summary blocks 14
17.1 Key block size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
17.2 Growth without aggregation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
17.3 Segregated witness . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
17.4 Aggregation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
17.5 Difference to pruning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
17.6 Summary block size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
17.7 Total size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
17.8 History nodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
18 Network vulnerability 16
18.1 Importance inflation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
18.2 Nothing at stake . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
18.3 LPoS centralization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
18.4 Denial of service attack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
18.5 SHA-2 vulnerability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
19 Architecture 18
19.1 Micro architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
19.2 Application layers and services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
20 UI Layer 18
21 Application Layer 18
21.1 Web server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
21.2 Workflow engine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
24 Container orchestration 19
3
2.1 Deterministic Finite State Machine The event chain (see section 9) is able to function as a com-
Any blockchain logic needs to be deterministic[18]. Where munication channel between two FSMs. When two processes
computer programs may require extra effort to comply with are isolated by using different event chains, this communication
this requirement, a DFSM is deterministic by definition. channel is non-deterministic, which inherently makes the whole
system non-deterministic[20]. This can be overcome by making
acknowledgments part of the FSM as shown in section 13.1.
start q0
2.4 Contract as automaton
Document declined Request review
A Finite State Machine can be applied as an agreement between
q1 the participants by formalizing obligations, permissions and
prohibitions that parties impose on the other[21]. Contracts like
Document accepted financial agreements[22] and service contracts[23] can be fully
digitized as FSM.
q2 However, these representations are not sufficient to be used
Party 2 signed Party 1 signed as workflow, as they do not define the orchestration, com-
munication, and choreography within a process. These factors
q4 q3 can be incorporated, however, this causes the FSM to grow
exponentially in complexity[24].
Party 1 signed Party 2 signed For practicality, an FSM will at best represent an incomplete
q5 contract. This doesn’t have to be a problem as these gaps
may be filled by default rules[25]. The system does allow
Fig. 2: Example of a Finite State Machine visualized as a flowchart renegotiation of a Live Contract, either to resolve a particular
situation or in general, as shown in section 8.
Another thing to note is that not every action in a process
2.2 Extended Finite State Machine
constitutes a binding factor. In figure 1, the acceptance of the
Also visualized in figure 2 is how a problem arises when text of a document does not constitute a binding agreement, as
multiple actions are required to get to a state, but the order this only occurs when the document is signed. To facilitate this
in which they occur is arbitrary. This can be modeled as a distinction, actions can be categorized as either informative or
transition path for every possible order, as is done in figure 2. performative actions[26].
However, with this approach, the number of states and state
transitions will grow exponentially with the number of actions.
This makes the visualization of the workflow less clear, but also 3 A LTERNATIVE MODELING METHODOLOGIES
makes it harder and more error-prone to define the workflow. Communicating extended finite state machines are commonly
This is why instead of using a regular FSM, a Live Contract used in describing telecommunication systems and other real-
uses an Extended Finite State Machine[19] (EFSM), allowing time systems[27], but not business processes.
for conditional state transitions. More common notations for workflows provide additional
Figure 3 defines the same workflow as in figure 2 using an challenges when modeling decentralized inter-organizational
EFSM. processes.
With LTO only a single node or a single actor executes an 7.7 Passive testing
action, meaning actions do not need to be deterministic. As A scenario that contains a loop consisting exclusively of system
such, concepts like oracles are not needed. actions could result in an infinite loop causing a massive
amount of transactions. When validating, we want to reject
7.2 Manual actions scenarios that have such a construct.
Applications built on the LTO platform must inform human Determining if a program can run forever is known as the
actors which actions they may perform in the current state. A halting problem[41]. The problem has been proven unsolvable
human actor will sign his own response event before submit- for Turing-complete machines. However, it can be solved for
ting it to his node, which will distribute it to all parties. FSMs[42]. Since an FSM has a finite amount of transition paths,
they can all be checked for loops.
Passive tests for EFSM models are complicated by the
7.3 System actions presence of infeasible paths. This problem has been well-
System actions do not require human interference but are documented but remains unsolved[19, 43]. For simplicity rea-
executed by the node automatically. As such, the node signs sons, we can assume any path to be feasible by ignoring the
the response, rather than the human user. conditions. We accept that this may cause false positives.
These actions are always performed by a single system and
do not have to be deterministic. Other parties validate the 8 A DAPTIVE WORKFLOWS
response and can reject it if needed. Because there is no human
A scenario will model the most typical cases of a process. It’s
interference involved in system actions, the actions are signed
impossible to foresee all situations in advance and tedious to
by the system itself instead of the actor.
model every possible edge case. Taking a code-is-law approach
It’s also possible to schedule a system action to be executed
would make the system rigid. Instead, Live Contracts supports
at a later time. This is specified in the scenario. It allows
three methods of resolving such issues.
for a timeout on a state or polling an external source at a
predetermined frequency.
System actions are automatically executed and may yield 8.1 Comments
an error when used incorrectly or when they fail otherwise. For Comments are used to communicate with other identities.
these actions, not one but two state transitions must be defined. They can, for example, be used to resolve conflicts or conduct
One for a successful execution and one in case of an error. discussions outside of the process. Using comments instead of
off-chain communication methods makes sure that the conver-
sations are logged on the blockchain. It also allows backtracking
7.4 Sub-processes
to check when in the procedure certain conversations took
A process based on an FSM can only be in one state at a time. place.
Sub-processes allow a Live Contract to hold multiple states and Comments are not restricted to text messages. It is also
make it possible for different procedures to be done in parallel. possible to use images or documents to assist in the commu-
While these processes share an event chain, the data for each nication. Comments are not part of the process, meaning that
process is still isolated. adding a comment does not trigger a state transition. This way
To facilitate sub-processes, a Live Contract may contain sub- it is always possible to conduct a discussion about subjects that
scenarios that can be instantiated from the main scenario. were not predefined in the procedure.
To ensure nobody can falsify or forge events of others, each LTO is a distributed system, where all parties are able to
event is signed before submitted using asymmetric cryptogra- participate via their own node. Nodes distribute all events to
phy. The signed event also serves as a receipt, allowing other their peers, who process them. This means there is a brief
parties to prove that the action has been executed by the signing moment where the state of the process between the nodes
identity. differs. Eventual consistency[50] guarantees that, given that
The platform uses ED25519[44] signatures. These elliptic- there is no new event submitted, eventually the state of the
curve signatures are widely used, well supported and con- process on all nodes will be the same.
sidered secure by institutions like NIST[45] and ENISA[46]. However, sometimes new events are submitted before con-
Elliptic curve cryptography allows for faster single-signature sistency has been achieved. At this moment, it is possible that
verification and signing without losing security. It also reduces two or more nodes append an event upon the event chain. Dur-
the needed size of both the keys and the signatures. Note that ing a Byzantine failure[51], all nodes believe their information
this method on itself doesn’t grant complete security, as any is valid. However, the overall system is in an inconsistent state.
party is still able to falsify or forge their own events. In other In this state, nodes would no longer accept new events from
words, cryptographic signatures can’t prove an event did not one another and need to be able to come to a consensus, rather
occur. than halt.
Distributed applications use a different kind of consensus
algorithm for this. In general, this is a case of Byzantine fault
9.2 Hash chain tolerance (BFT). Early Byzantine fault tolerance methods do
Each event can be uniquely identified using its SHA-2 256bit not scale well [52]. The invention of better scaling consensus
hash. This industry standard algorithm is fast and resistant algorithms like proof-of-work [53], proof-of-stake [54] and proof-
to pre-image and second-preimage attacks as well as colli- of-authorization [55] made it possible to create distributed net-
sions[47]. It’s the recommended cryptographic hashing algo- works with a large number of participants, also called dis-
rithm by NIST[48]. tributed ledger technology.
Embedding the hash of the previous event in the hash of the While these consensus methods scale much better than
next event creates a hash chain, which records the chronology traditional BFT methods, they have a need for a relatively high
of the events. When used in combination with cryptographic amount of participants in order to be secure. The event chain is
signatures, a hash chain provides an adequate measure of a private blockchain with relatively few participants, meaning
proving that a specific sequence of events resulted in the current those algorithms won’t work. Rather than trusting on a majority
state[49]. vote, nodes consider their state correct unless proven otherwise.
For a conflict to occur by accident, two parties must add a block conflict becomes more or less linear based on the network delay
to their chain before they received the others chain update. and transaction frequency.
Let’s call the chance of somebody propagating an update to By using individual shared nothing events chains with
the chain P (x). This chance depends on the amount of blocks decoupled message queues, the transaction frequency will be
being added to the chain during a given time frame, the time it very low. This marginalizes the chance on a conflict.
takes to propagate this block to the rest of the network and the
amount of entities contributing to the chain in this time frame. 11.2 Branch validation
Assuming everybody contributes equally to the network this
can be derived to formula (1) A node can only prove the other party was aware of the chain
up to the point of its last event. Any party is allowed to branch
f ·t the chain after their last commit. If a party tries to branch
P (x) = (1)
n the chain from a point before his last event, that branch is
with: automatically discarded by all (other) parties and the event is
f = Total amount of transactions / time frame logged.
n = Total amount of active participants Before accepting the new events from the conflicting branch,
t = Time it takes to propagate a block to the rest of the network they are validated similar to any received set of events; The
event must be signed correctly by one of the identities and
This chance can be used to calculate the probability that the event must be anchored where the timestamp of the event
a conflict will occur. This probability is derived by subtracting matches that of the anchor within given boundaries.
the chance of not having a conflict from 1. When there is no
conflict it means either nobody has contributed to the chain 11.3 Cascading rules
that moment, the chance of which is calculated in formula (2),
In case of a conflict, the following rules are applied in this order
(1 − P (x))n (2)
• the priority of the event,
or only one node contributed to the chain, the chance of which • the priority of the actor,
is calculated in formula (3). • the order of anchoring.
n−1
P (x) · (1 − P (x)) · n. (3) An action in the scenario may be given priority, this trans-
lates to the event priority. Additionally, some other event types
Therefore the chance of a conflict is calculated by (4). like comments have a lower priority as the exact sequence is
P (c) = 1 − (1 − P (x))n − P (x) · (1 − P (x))n−1 · n. (4) not of any importance. In case of a conflict occurs, the block that
contains the action with the highest priority will be accepted.
With a network delay of 1200ms we see about chance on a In case the priority is the same, rules are applied based on
conflict of < 2%: identity, creating different levels of authority within the process.
Every actor in the scenario may be given a priority level. By
default, this priority is the same for all actors. To resolve the
·10−2 conflict, the events added by the actor with the highest priority
f = 10 must be accepted.
Chance of conflict
2 f = 0.5 · n If both the events priorities and the identities authorities are
the same, the third method of consensus is applied. Nodes must
anchor events on the global blockchain. The order of transaction
on this global blockchain is fixed in mined blocks. Therefore the
1 order in which the events have been anchored on the global
blockchain can be used to achieve consensus. When this is
the case, the block that was anchored first must be accepted.
0 As such, a consensus of the private event chain is reached
5 10 15 20 25 via consensus on the public blockchain. On the public chain,
Number of active participants consensus is reached by anonymous collaboration between a
large number of participants.
Fig. 5: This plot shows how the chance of a conflict occurring Using priorities allows a front-running attack, where an
increases when the number of participants increases. However, actor may respond upon an event by creating a new branch
it stabilizes if the total number of transactions stays the same. that subsequently invalidates that action. Priorities should only
be used where this is not a problem.
Figure 5 shows that the chance of a conflict occurring is
more or less constant when the number of participants increases 11.4 Unanchored events
but the total number of transactions stay the same. However,
when the number of participants increases usually the number When a block is received that has not been anchored yet, one
of transactions increase as well. For example, more participants may decide to accept the block anyway. This is, of course, if no
may lead to more comments. When this is the case, the chance conflict arises by accepting it. If the anchoring of the block has
of a conflict increases exponentially with the number of partic- merely been delayed, accepting it would prevent unnecessary
ipants. delays in the process itself. On the other hand, if the block is
LTO works with very few active participants on a single never anchored, no real problems arise. If everybody accepts
event chain. This reduces the chance of a conflict. With 5 the block, the process may continue as normal and the block
or more participants, the number of active participants is no may be anchored later.
longer relevant. With more than 10 participants the chance of a
10
where every node sees all transactions. When an anchoring raffle factor r = 1 + (0.5 · e−0.5·(ST ratio−1) )
transaction is broadcasted it’s instantly visible, and after ap- This formula results in a large standard deviation of the
proximately 3 seconds it’s pre-approved using NG (section bell curve.
15.6). The transaction is in a block within a minute.
Nodes can keep track of all anchored hashes or only of 1.6
their own. If needed they can create a receipt independently
(section 16.1). There is no need for a centralized service. 1.4
raffle factor
15.3 Forge probability To combat this, as well as reduce the chance of forks, Fair
The chance of being selected to forge is P (f orge) = S · r. PoS uses the generation signature of 100 blocks ago. Any
The contributed transactions T are calculated over time. When change in balance on the node or in leases changes Ti for a
calculating P (f orge), S must be constant over the same period given Xn . Nonetheless, any group controlling at least 1/3 of
of time to prevent the possibility of abuse. the tokens can still get a 30% advantage.
PoI requires the staked balance and raffle factor to be
constant over a fixed period of blocks. This would make it even
Start staking b c
more vulnerable for such an attack.
a Stop staking As a solution, the generation is not a hash that can be
publicly calculated. Instead, a node must hash the previous
generations signature and sign that hash with its private key.
1 2 3 4 5 6 This serves as a generation signature. Contrary to Nxt and
Waves, a node can only calculate Ti for itself, making it im-
a = Moment when P(forge) is calculated possible to determine the generators in advance.
b = Moment when you forge a block
15.6 NG protocol
c = Moment when tokens are still locked
The NG protocol was proposed to reduce the scalability issues
Fig. 7: Timeline for staking tokens and forging blocks. Time is on Bitcoin. While it was never implemented on Bitcoin, Waves
measured in number of summary blocks. NG is active on their main net since December 2017.
With NG, two type of blocks are generated; the micro
block and the key block. The node that was previously elected
15.4 Fair PoS may continue validating transactions, creating micro blocks on
The formula that decides which node is eligible to forge a new average every 3 seconds. When a new node is elected it creates
block, is based on the Fair Proof of Stake algorithm[74] created a key block from the outstanding micro blocks. Transactions in
by Waves. This is an improvement on the original Nxt PoS a micro block can be considered secure to some extent, and are
algorithm, which overvalues higher stakes. suitable for low-risk transactions like anchoring.
For a further understanding about the underlying algorithm, The reward of the transaction fees is split between the node
please read the ”Fair Proof of Stake” paper[74]. that forged the micro block and the node that forged the key
To convert this algorithm from PoS to PoI, the formula block in a 40% - 60% split. This split must always be in favor of
applies the raffle factor to the staked balance to result in the the key block forger. Otherwise, there would be an incentive to
effective balance as bi · r. disregard the already forged micro blocks and create new micro
blocks yourself.
• Ti as block generation time for i-th account, In a public stress test Waves’ NG has been proven to be able
• Xn is the generation signature, to process up to 6000 Tx/min, with a peak of 17,000 Tx/min[75].
• r raffle factor, Potentially the NG protocol could handle up to 1000 Tx/sec or
• bi percentage of staked vs total staked, 60,000 Tx/min.
• Λn is the base target NG reduces practical latency and is a key component for
• Tmin = 5 is a constant for delay between blocks, other optimizations.
• C1 = 70, a constant defining shape of delay distribution,
• C2 = 5E17 is a constant to adjust base target.
16 T RANSACTION TYPES
log(Xn /Xmax ) The LTO global blockchain uses predefined transaction types.
Ti = Tmin + C1 · log(1 − C2 · ) This allows for more compact blocks and removes the need for
r · bi · Λn
scripting. The list of transaction types may be extended in the
If you receive a new block before the time delay is reached, future if needed. The types of transactions that are currently
this block must be added to the chain and a new time delay possible are:
must be calculated. The previous Ti is no longer relevant. Each
node calculates Ti itself, this information is not supplied by a • Anchor: used to verify transaction from the private
generator. This means that there is no point in using an incorrect blockchains,
stake in the calculations. • Issue a certificate: used to declare relationships between
identities,
• Extend/revoke a certificate: used to extend or remove
15.5 Generator signature
such a relationship,
The block hash is never considered in determining the time • Transfer token: used to send tokens to another identity,
delay Ti . That hash is based on the contents of the block, which • Stake tokens: used to let a participant stake or lease
is determined by the node forging the block. If this hash played tokens,
any part in determining who could forge the next, it would be • Cancel staking: used to stop staking or leasing tokens,
trivial to manipulate Ti . A node could create several different • Set script transaction: used to configure smart accounts.
blocks and only broadcast the one that has the lowest time for
itself.
To prevent this, only the generation signature is used. This 16.1 Anchoring
signature is a secondary hash chain, using only the previous Anchoring is the method of taking a hash of a document or
generation signature, plus the public key of the generator. With other data and storing it within a transaction on the blockchain.
Nxt this is completely deterministic, making it susceptible to be The goal is to make it impossible for anyone, including the
taken advantage of[71]. creator, to back-date or forward-date his document[76].
14
Every event of the private event chain is anchored onto mimics the chain of trust as done with PKI validation but
the global blockchain. Third party applications may use the without the central authority. Rather than an absolute root
global chain to anchor documents for proof of existence. We certificate, the blockchain address of our organization or an
estimate that 99% of all transactions on the global chain will organization we do business with functions as trust root.
be anchoring transactions. Considering that most transactions
are for anchoring, aggregating these reduces the disk space 16.5 Smart accounts
required by the blockchain.
By default, any transaction for an account must be signed using
When forging a block, a node creates a Merkle tree[77]
the private key associated with the account. Waves introduced
from the transactions in the order presented in the list. Only
the concept of smart accounts, allowing anyone to customize
the Merkle root is added to the blockchain. As part of the
this logic[78].
validation, each node recreates this Merkle tree.
To do so, this logic can be scripted using a Non-Turing
Nodes are able to index every anchor hash. However, to
complete language. This script is only used to verify or deny
reduce disk size, most nodes should opt to extract the Merkle
a transaction for a specific account. It cannot trigger other
path of its own anchor transactions. This path forms the receipt
transactions. As such, this type of smart contract does not
that can be stored with the original data (like the event).
prevent aggregation. A further limitation is placed on LTO
smart accounts to ensure this.
16.2 Authentication and authorization LTO does not have data transactions, other transactions
Challenge/response authentication methods, like username are not accessible from the script. You may validate whether
and password verification, requires a centralized system. In a transaction has been signed by one or more other parties,
a fully decentralized system, we rely on cryptographic signa- enabling multi-signature. Rather than specifying these accounts
tures to provide authentication. While information isn’t shared directly, the requirement may reference a certificate instead.
between the event chains, parties can still be identified across There are other limitations one might place on an account
chains given the key pair used for signing. as well. An account can be locked, only allow the transfer of
In a broader sense, parties can sign any type of information tokens after a number of blocks, require a minimum number
this way. This is a similar use case as currently presented by of tokens to remain on the account or only allow transferring
PKI certificates. The reliance on Central Authorities to issue tokens to specific accounts.
and revoke certificates has hindered the adoption of it as a Anchoring transactions are an exception. They always need
replacement for challenge/response authentication. to be signed with the private key of the account. This logic is in
With public blockchains, public/private key pairs can be place to apply future optimizations and can’t be modified.
created and used without the need for a central authority. A Using multi-signature is recommended when running a
key pair forms a unique identity, which can be referenced via node. The account associated with the node typically holds a
an address which is determined from the hash of the public key. large number of tokens in order to stake and anchor. The private
key to this account is known to the node. With multi-signature,
obtaining that key won’t give direct access to those tokens.
16.3 Certificates
A certificate transaction allows any identity to convey informa-
17 S UMMARY BLOCKS
tion about another identity by referencing its address. Unlike
tokens, granting and revoking an account is fully under control Anchoring is a low-impact, non-disrupting method to bring
of the issuer. an extra layer of security to the blockchain. We anticipate that
The certificate can be given a specific type chosen by the other applications that do not use Live Contracts, will also use
party that issued the certificate. While not required, it’s rec- the anchoring feature.
ommended that a certificate is acknowledged by the recipient One aspect of the blockchain that counteracts scalability is
account before displayed to others. the fact that the blockchain will keep growing[79]. The size
puts certain requirements on the hardware to keep a copy. It
also puts a burden on new nodes that have to play back the
16.4 Chain of trust whole chain. To reduce the growing speed of the chain, it uses
While a public address with a private key pair is a method of summary blocks.
authentication, it doesn’t provide a solution for authorization.
Certificates can be used to specify relationships between iden- 17.1 Key block size
tities.
Table 3 shows the structure of a key block on the blockchain.
This is a similar approach to the Web of Trust (WoT). The
The global chain should be scalable up to 50 million transac-
WoT has a number of drawbacks over PKI, which we do not
tions per day. This is about five times the expected usage. The
have on our platform.
size of such a key block is determined by the block data and
Establishing and revoking a relationship or marking an
the transaction data (5).
identity as compromised is simple, instant and irrevocable
on the blockchain. Blockchain transactions are timestamped, Keyblock size = d + t (5)
which allows for verifying the existence of relationships on a
certain point in time. with:
Rather than simply setting an identity, we set a specific d = block data,
relationship. The transaction doesn’t confirm or deny any other t = transaction data.
information about the identity except the existence of the re-
lationship, removing the need of physically meeting the other Before calculating the expected blocksize, the following
party. assumptions are made:
In a given context, we only care about finding a chain of • 99.98% of the transactions are anchoring transactions
trust between two identities based on this relationship. This (table 5). This is the main use of the global blockchain,
15
• The other 0.02% are issue certificate transactions (ta- The second to last summary block and all blocks before
ble 7), that are final. Nodes will not consider forks before that point,
• All other transactions are infrequent and can be ne- regardless of the longest chain. This means that only the trans-
glected, actions of the previous 500 to 1000 key blocks have to be stored.
• All transactions are uniformly distributed over the By removing transaction data from the key blocks after it has
blocks, been stored in a summary block, key block size is reduced from
• On average one key block per minute is generated, 11.3MB to 277 bytes, making them negligible compared to the
• Every day 1440 key blocks are created. summary blocks.
The block data is 277 bytes big (table 3). Under the assump-
tions made previously, the size of the transaction data can be 17.5 Difference to pruning
calculated by equation (6). At first glance, this approach has similarities to blockchain
pruning, as you only maintain a limited set of transactions. The
T ransaction data size = n · (0.9998 · a + 0.0002 · c) (6)
danger with pruning is in the introduction of a falsified state,
with: threatening the immutability nature.
a = Size of an anchor transaction (table 5), The danger comes from distributing the state of the
c = Size of an issue certificate transaction (table 7), blockchain. With segregated witness, transactions are applied
n = Amount of transaction per block. without signature validation, relying on the concept of finality.
Still, every node needs to apply all transactions from genesis to
This makes the total size of a key block about 3.8MB. calculate the current state.
The actual transaction data is not used to calculate the
block’s signature but is rather stored as an attachment next to
17.2 Growth without aggregation
the block (table 2). As events without transactions, key blocks
With 3.8MB per block and 1440 blocks per day, the blockchain are part of the blockchain and can’t be ignored. If transactions
would grow 5.47GB per day / 2TB per year, if the blockchain are applied without validation, aggregating them holds little
would continuously run a full capacity. risk.
The expected usage is on average 10 million transactions,
growing the blockchain 1.1GB per day. This results in about
17.6 Summary block size
3.65 billion transaction or about 400GB per year.
For Bitcoin, with 340 million transactions total[80], it takes Summary blocks contain all information about non-anchor
about 7 days to synchronize from genesis, depending on net- transactions and an aggregated version of all the transaction
work and hardware speed. fees and other token transfers. They are rather larger blocks,
With billions of transactions, doing this naively could mean especially compared to the key blocks. To reduce the amount of
waiting weeks or even months for the global blockchain to memory used, the transaction fees and token transfer transac-
synchronize. tions get reduced to a balance change per participant (table (4)).
One of the goals of aggregating transactions is to require Besides this aggregation, the summary will also contain the
only 20 minutes of synchronization per year, again depending other transactions. To calculate the expected size of a summary
on network and hardware speed. With 365 summery blocks in a block, the following assumptions are made:
year, a node should be able to process a summery block within • There is a total of 200000 participants,
3 seconds. • Every day 1 summary block is created,
• Based on the assumptions in the previous section we
17.3 Segregated witness can assume that the balance change summary is the only
Segregated witness is a strategy employed in Bitcoin to reduce significant part of a summary block.
the data in a block[81] by separating a transaction into data that Using these assumptions, the size of a summary block can
needs to be processed and data to verify the transaction in the be calculated. Using equation 7, this results in about 10.3MB.
block. This second part is called the witness data, containing
signatures amongst other things.
Finality is the guarantee that blocks that are sufficiently Summary block size = T ransaction summary = p · e (7)
deep will never be removed from the blockchain. Regardless with:
of probabilistic finality or protocol finality, witness data is no p = Amount of participants in the last 1500 blocks,
longer useful if the block is guaranteed to not be reverted. e = Size of a balance change summary entry (table 4.
Nodes are free to remove witness data for blocks that reached
finality, saving disk space.
We’ve built on the logic of segregated witness for the
concept of summary blocks.
17.7 Total size
The total size of the blockchain consists of two parts. A static
17.4 Aggregation
part and a growing part. The static part consists of the last 1000
Aggregation blocks are special blocks that are created every key blocks . Those will still contain the attachment data (5).
1440 blocks (about once a day). They contain aggregated values
of all the blocks since the previous summary block. When Static part = n · k (8)
replaying the chain, only the summary blocks need to be with:
applied to get close to the current state. After this, only the n = Amount of keyblocks stored with transaction data,
blocks created after the last summary block still have to be k = Size of a keyblock (5).
replayed. This decreases the replay time significantly.
16
Using equation 8 results in the total size of the static part to no costs is undesirable, as it could aid an attacker trying to
being about 11.3GB. Because only the last 1000 blocks are undermine the network with a 51% attack. The maximum raffle
stored completely, which means including transactions, this factor of 1.5 ensures a high cost of inflating importance.
size may differ slightly, but won’t grow noticeably.
The growing part consists of the summary blocks (7) and 18.2 Nothing at stake
what is left of the key blocks after the transaction data is
removed. We’ll define the size as growth per year using equa- The nothing at stake principle is the assumption that nodes
tion (9). will continue to build on any forks, rather than picking the
Growing part = n · k + m · s (9) longest chain, as there is no downside in doing so[82]. If all
nodes would display such ill behavior, an attacker would only
with: need a small percentage of tokens to force the network to switch
n = Number of keyblocks per year, to the other chain; a 1% attack.
m = Number of summaryblocks per year, Such a situation is a Tragedy Of The Commons[83]. All
k = Size of a keyblock without transaction data, parties seek individual gain by abusing the system. But if
s = Size of a summaryblock (7). everybody is doing it, nobody benefits. Instead, it only leads
to undermining the network, causing a decrease in the value of
Still following the previously made assumptions this result in the underlying token.
the blockchain growing about 3.7GB per year. Waves Fair PoS has made it a lot more difficult for an unpub-
lished orphaned branch to catch up with the main branch[74].
17.8 History nodes The possibility of profiting from such behavior with bad actors
that only hold a small percentage of tokens is neglectable.
Nodes are not required to delete old transactions. By main-
A bad actor would need to create and maintain an altered
taining all transactions, history nodes are able to prove the
version of the node. The costs combined with the knowledge
correctness of the blockchain in case it’s needed. History nodes
that there is little chance of benefiting from it, should be enough
are unable to pass a falsified history, as the blocks of the history
to disincentivize this behavior[84].
node need to match those of other nodes. The network could
rely on a relatively small amount of history nodes.
There is no on-chain benefit of running a history node. It 18.3 LPoS centralization
doesn’t increase the chance of forging new blocks. Running Projects that have implemented LPoS algorithm tend to lead to
such a node must be done out of community interest or sec- a high level of centralization.
ondary income. This effect can be explained by the reward per token. A
professional setup with a near 100% uptime will not miss a
18 N ETWORK VULNERABILITY forging opportunity, yielding more reward with a set amount
of tokens being staked. This draws token holders to lease to
18.1 Importance inflation
these nodes and has a reinforcing effect as reduced overhead
A particular worry with PoI is the inflation of importance allows for higher payouts to lessors.
through dummy transactions. We can calculate the profit/loss Limiting the number of tokens per node is a flawed method
from spam transactions as a formula of the maximum raffle enabling the opportunity for a Sybil attack[85]. In a permission-
factor; less reputation system, a single node can advert itself as multi-
• Raffle factor; r, ple pseudonymous identities, circumventing this limitation.
• Percentage of staked tokens; bi , The nature of our solution means a majority of transactions
• Cost of a transaction; c, will be signed by a key pair associated with a node. The
• Total transactions on network; n, network will also consist of a relatively large number of nodes.
• Spam transactions; τ , This has no effect on PoS, while on PoI this gives the platform
• Rewards; p, users an advantage over non-user token holders.
• Profit/loss from spam; ∆p = prmax − pr=1 . An additional measure is a limitation on leveraging on
leased tokens; any node needs to own at least 10% of the tokens
it stakes.
p = (r · bi · n · c) − (τ · c) (10)
r = 1, τ = 0 → p = bi · n · c (11) 18.4 Denial of service attack
r = rmax , τ = bi · n → (rmax − 1) · bi · n · c (12) Due to the limited scalability, it’s fairly easy to overload any
public blockchain with too many transactions. Transaction fees
This gives are the primary defense against these sorts of attacks, but
∆p = ((rmax − 2) · bi · n · c) (13) transactions still need to be verified to conclude there are
insufficient funds. Even more, with a decent amount of funds,
Given it’s possible to overload the network with spam transactions as
seen with Ethereum in July 2018.
bi > 0, n > 0, c > 0, ∆p < 0 → (rmax − 2) < 0 (14) Nodes have the option to automatically increase the trans-
actions fees in case of such an attachment. Ideally, nodes gain
rmax < 2 (15)
as much from staking as is spend on transactions. As the spam
Equation 15 proves that it’s impossible to gain directly from tokens increase the rewards of transaction fees, this is used to
spam transactions, with a maximum raffle factor of less than automatically counter the attack.
two.
A raffle factor close to two would make spam transactions
nearly free. Increasing the importance of the network for little
17
24 C ONTAINER ORCHESTRATION
Since the node is build up out of multiple microservices, a
container orchestration platform is required to manage the
running of the containers. Container orchestration platforms
take care of a few tasks such as provisioning hosts, instantiating
containers, restarting failed containers, scaling the cluster by
adding or removing containers. Different container orchestra-
tion tools can be used for this purpose like Docker Swarm,
Mesos, Nomad or Kubernetes. Initially, a configuration file will
be included for Kubernetes. Each service will be configured
to run in its own Pod with its own load balancer. This is
done so individual services can scale independently of each
other. Scaling of services is managed using the Horizontal Pod
Autoscaler [87].
REFERENCES 20
[47] Henri Gilbert and Helena Handschuh. “Security analysis [68] NEM. NEM technical reference. https : / / nem . io / wp -
of SHA-256 and sisters”. In: International workshop on content / themes / nem / files / NEM techRef . pdf. Ac-
selected areas in cryptography. Springer. 2003, pp. 175–193. cessed: 13-07-2018. 2018.
[48] NIST. NIST Policy on Hash Functions. https://csrc.nist. [69] LTO. “LTO Token Economy”. In: (2018).
gov/Projects/Hash- Functions/NIST- Policy- on- Hash- [70] Waves Platform. Blockchain Leasing For Proof Of Stake.
Functions. Accessed: 13-07-2018. 2015. https : / / blog . wavesplatform . com / blockchain - leasing -
[49] Bruce Schneier and John Kelsey. “Cryptographic Support for- proof- of- stake- bac5335de049. Accessed: 13-07-2018.
for Secure Logs on Untrusted Machines.” In: USENIX 2018.
Security Symposium. Vol. 98. 1998, pp. 53–62. [71] mthcl. “The math of Nxt forging”. In: (2014).
[50] Peter Bailis and Ali Ghodsi. “Eventual consistency to- [72] Waves generators. http://dev.pywaves.org/generators/.
day: Limitations, extensions, and beyond”. In: Queue 11.3 Accessed: 28-08-2018.
(2013), p. 20. [73] Nxt Blockchain Explorer. https://nxtportal.org/monitor/.
[51] Andrew S Tanenbaum and Maarten Van Steen. Distributed Accessed: 28-08-2018.
systems: principles and paradigms. Prentice-Hall, 2007. [74] Kofman Begicheva. “Fair Proof of Stake”. In: (2018).
[52] Miguel Castro and Barbara Liskov. Byzantine fault toler- [75] Waves-NG stress test: results in! https : / / blog .
ance. US Patent 6,671,821. 2003. wavesplatform . com / waves - ng - stress - test - results - in -
[53] Satoshi Nakamoto. Bitcoin: A Peer-to-Peer Electronic Cash 44090f59bb15. Accessed: 05-09-2018.
System. https://bitcoin.org/bitcoin.pdf. Accessed: 17-05- [76] S. Haber and W.S. J Stornetta. “How to time-stamp a
2018. digital document”. In: (1991).
[54] Aggelos Kiayias et al. “Ouroboros: A provably secure [77] Ralph C. Merkle. “Method of providing digital signa-
proof-of-stake blockchain protocol”. In: Annual Interna- tures”. U.S. pat. 4309569. Jan. 5, 1982.
tional Cryptology Conference. Springer. 2017, pp. 357–388. [78] A. Begicheva and I. Smagin. “RIDE: a Smart Contract
[55] POA Network. Proof of Authority: consensus model with Language for Waves”. Pat. 2018.
Identity at Stake. https : / / medium . com / poa - network / [79] Saifedean Ammous. “Blockchain Technology: What is it
proof- of- authority- consensus- model- with- identity- at- good for?” In: (2016).
stake-d5bd15463256. Accessed: 17-05-2018. [80] Blockchain number of transaction. https://www.blockchain.
[56] Git Documentation. Git Branching - Rebasing. https : / / com / en / charts / n - transactions - total. Accessed: 05-09-
git - scm . com / book / en / v2 / Git - Branching - Rebasing. 2018.
Accessed: 09-08-2018. [81] BIP 141: Segregated Witness (Consensus layer). https : / /
[57] Aaron van Wirdum. “Rejecting Today’s Hard Fork, the github . com / bitcoin / bips / blob / master / bip - 0141 .
Ethereum Classic Project Continues on the Original mediawiki. Accessed: 05-09-2018.
Chain: Here’s Why”. In: Bitcoin Magazine 20 (2016). [82] Problems Ethereum. https://github.com/ethereum/wiki/
[58] European Parliament. REGULATION (EU) 2016/679 OF wiki/Problems. Accessed: 30-08-2018.
THE EUROPEAN PARLIAMENT AND OF THE COUN- [83] G Hardin. “The Tragedy of the Common”. In: (1969).
CIL: on the protection of natural persons with regard to the [84] Nothing considered a look at nothing at stake vulnerabil-
processing of personal data and on the free movement of ity for cryptocurrencies. https : / / pivx . org / nothing -
such data, and repealing Directive 95/46/EC (General Data considered - a - look - at - nothing - at - stake - vulnerability -
Protection Regulation). https://eur- lex.europa.eu/legal- for-cryptocurrencies/. Accessed: 30-08-2018.
content / EN / TXT / HTML / ?uri = CELEX : 32016R0679 & [85] John R Douceur. “The sybil attack”. In: International work-
from=EN. Accessed: 12-07-2018. 2016. shop on peer-to-peer systems. Springer. 2002, pp. 251–260.
[59] Olly Jackson. “Is it possible to comply with GDPR using [86] Marc Stevens et al. “The first collision for full SHA-1”. In:
blockchain?” In: International Financial Law Review (2018). (2017).
[60] S Goldwasser, S Micali, and C Rackoff. “The knowledge [87] Kubernetes. Kubernetes, Horizontal Pod Autoscaling. https:
complexity of interactive proof systems”. In: (1989). //github.com/kubernetes/community/blob/master/
[61] Blockchain costs per transaction. https://www.blockchain. contributors/design- proposals/autoscaling/horizontal-
com/charts/cost-per-transaction. Accessed: 05-09-2018. pod-autoscaler.md. Accessed: 03-08-2018.
[62] Emanuel Palm. Implications and Impact of Blockchain Trans-
action Pruning. 2017.
[63] Wenting Li et al. “Towards scalable and private indus-
trial blockchains”. In: Proceedings of the ACM Workshop
on Blockchain, Cryptocurrencies and Contracts. ACM. 2017,
pp. 9–14.
[64] Serguei Popov. “A probabilistic analysis of the nxt forg-
ing algorithm”. In: Ledger 1 (2016), pp. 69–83.
[65] Waves platform. WAVES whitepaper. https : / / blog .
wavesplatform . com / waves - whitepaper- 164dd6ca6a23.
Accessed: 16-07-2018. 2016.
[66] Chainpoint Node API: How to Create a Chainpoint Proof.
https://github.com/chainpoint/chainpoint-node/wiki/
Chainpoint- Node- API:- How- to- Create- a- Chainpoint-
Proof. Accessed: 05-09-2018.
[67] Gleb Kostarev. Review of blockchain consensus mechanisms.
https://blog.wavesplatform.com/review-of-blockchain-
consensus - mechanisms - f575afae38f2. Accessed: 13-07-
2018. 2017.
22