
utilized.
Agreement refers to the problem of maintaining a
single global truth in the face of a decentralized account-
ing system. While similar to the correctness problem,
the difference lies in the fact that while a malicious
user of the network may be unable to create a fraudu-
lent transaction (defying correctness), it may be able to
create multiple correct transactions that are somehow
unaware of each other, and thus combine to create a
fraudulent act. For example, a malicious user may make
two simultaneous purchases, with only enough funds in
their account to cover each purchase individually, but
not both together. Thus each transaction by itself is
correct, but if executed simultaneously in such a way
that the distributed network as a whole is unaware of
both, a clear problem arises, commonly referred to as
the “Double-Spend Problem” [1]. Thus the agreement
problem can be summarized as the requirement that only
one set of globally recognized transactions exist in the
network.
Utility is a slightly more abstract problem, which we
define generally as the “usefulness” of a distributed pay-
ment system, but which in practice most often simplifies
to the latency of the system. A distributed system that
is both correct and in agreement but which requires one
year to process a transaction, for example, is obviously
an inviable payment system. Additional aspects of util-
ity may include the level of computing power required
to participate in the correctness and agreement processes
or the technical proficiency required of an end user to
avoid being defrauded in the network.
Many of these issues have been explored long before
the advent of modern distributed computer systems, via
a problem known as the “Byzantine Generals Problem”
[2]. In this problem, a group of generals each control
a portion of an army and must coordinate an attack by
sending messengers to each other. Because the gener-
als are in unfamiliar and hostile territory, messengers
may fail to reach their destination (just as nodes in a
distributed network may fail, or send corrupted data in-
stead of the intended message). An additional aspect
of the problem is that some of the generals may be
traitors, either individually, or conspiring together, and
so messages may arrive which are intended to create a
false plan that is doomed to failure for the loyal gener-
als (just as malicious members of a distributed system
may attempt to convince the system to accept fraudulent
transactions, or multiple versions of the same truthful
transaction that would result in a double-spend). Thus
a distributed payment system must be robust both in
the face of standard failures, and so-called “Byzantine”
failures, which may be coordinated and originate from
multiple sources in the network.
In this work, we analyze one particular implemen-
tation of a distributed payment system: the Ripple Pro-
tocol. We focus on the algorithms utilized to achieve
the above goals of correctness, agreement, and utility,
and show that all are met (within necessary and predeter-
mined tolerance thresholds, which are well-understood).
In addition, we provide code that simulates the consen-
sus process with parameterizable network size, number
of malicious users, and message-sending latencies.
2. Definitions, Formalization and
Previous Work
We begin by defining the components of the Ripple
Protocol. In order to prove correctness, agreement, and
utility properties, we first formalize those properties into
axioms. These properties, when grouped together, form
the notion of consensus: the state in which nodes in the
network reach correct agreement. We then highlight
some previous results relating to consensus algorithms,
and finally state the goals of consensus for the Ripple
Protocol within our formalization framework.
2.1 Ripple Protocol Components
We begin our description of the ripple network by defin-
ing the following terms:
• Server:
A server is any entity running the Ripple
Server software (as opposed to the Ripple Client
software which only lets a user send and receive
funds), which participates in the consensus pro-
cess.
• Ledger:
The ledger is a record of the amount
of currency in each user’s account and represents
the “ground truth” of the network. The ledger is
repeatedly updated with transactions that success-
fully pass through the consensus process.
• Last-Closed Ledger:
The last-closed ledger is
the most recent ledger that has been ratified by the
consensus process and thus represents the current
state of the network.
• Open Ledger:
The open ledger is the current
operating status of a node (each node maintains
its own open ledger). Transactions initiated by
end users of a given server are applied to the open
2