4 Consensus Protocol
Throughout the protocol, each party builds and processes their own hashgraph. A hashgraph is a directed
acyclic graph which represents the flow of gossip through the network from its owner’s perspective. Its
vertices store the messages it has received from other parties and its edges help determine the set of parties
that propagated that message before it was first seen by the hashgraph’s owner. Thus, when a party plearns
a new message, it also learns the chain of parties that gossiped the message before preceived it. We will see
below that enough information is embedded in a hashgraph to allow parties to commit transactions to their
log without needing a networked voting protocol.
At a high level, the protocol works like so: Upon receiving a message m, a party adds it as a vertex to its
hashgraph. It then processes its locally-stored hashgraph to see if any new information should be committed
to the log. Then it produces a message of its own that it adds to its hashgraph. This message points to m,
encoding the chain of gossip, and contains a set of transactions the party wants to add to everyone’s log.
The networked and local aspects of the protocol trigger each other in this way indefinitely, as the parties
construct an ever-increasing log of transactions.
We will first describe the hashgraph data structure and the way it can be used to commit transactions
in more detail. Then we will discuss the protocol itself and how it applies the properties of a hashgraph to
implement atomic broadcast.
4.1 The HashGraph data structure
The hashgraph data structure is a directed acyclic graph. We call the messages sent during the protocol
events. The vertices in a hashgraph represent events that its owner has either created or validated upon
receipt. As noted above, honest parties create events upon receiving an event from another party. An event
contains a set of transactions that its creator wants to commit to the log as well as these pieces of metadata:
a creator ID, a timestamp from the creator’s local clock, and a cryptographic signature by the creator. It
also holds hashes of two other events, called a self-parent and an other-parent respectively. These effectively
act as parent pointers, and we represent them as such in hashgraph diagrams. If an event was created by an
honest party, we call it an honest event.
Given some event y, we will use the notation y.transactions,y.timestamp,y.creator, etc. to refer to
these fields. We will now formally define the event properties mentioned above.
Definition 2 (self-parent).An honest event’s self-parent is its creator’s previous event.
Definition 3 (other-parent).An honest event’s other-parent is some earlier event created by a different
party. Honest parties only create events upon receiving an event from another party.
Definition 4 (ancestors and descendants).An ancestor of some event xis any event that can be reached
by traversing parent pointers in the subgraph rooted at x. An ancestor of xis a self-ancestor if it can be
reached solely using self-parent pointers. If some event yis an ancestor of x, we say xis a descendant of
y.
The above description applies to all honest events except the very first “genesis” event each party creates.
A genesis event is a dummy event with no parents that parties create on their own in order to start the
protocol.
Figure 1 is a diagram of a hashgraph. The vertices represent events, and the edges represent parent
relationships. Events in the same column are created by the same party and time flows upward. As a result,
when an honest party creates an event, that event’s self-parent is directly beneath it and its other-parent
lies in a different column. In the diagram, we say that event Ais an ancestor of event D. Likewise, event D
is a descendant of event A.
A hashgraph is supposed to reveal what participating parties have learned over time. For example, if
party p1holds the hashgraph in Figure 1, then columns 2 through 5 tell p1about what events p2through
p5are aware of. To maintain this property, we require that an honest party only adds a new event yto its
3