The EOS blockchain is a more recent distributed ledger that uses Delegated Proof-of-Stake (D-POS) for reaching consensus. Compared to Proof-of-Work-based blockchains such as Bitcoin or the current version of Ethereum, EOS allows to reach consensus much faster and supports more transactions per second.

I have originally written this article as a guest contribution at on November 20th, 2018, and I am re-publishing it here for the purpose of long-term archival.

Voting is an integral part of EOS. All EOS accounts (token holders) can vote in a continuous weighted multiple winner approval voting for block producers, which produce new blocks in a round-based fashion. That way token holders govern the EOS blockchain by delegating their power to block producers, which make changes to the blockchain. In case producers refuse to make the desired changes, they can be voted out by the token holders.

The original distribution of tokens on the EOS blockchain was determined by means of a massive token sale on the Ethereum blockchain. The following figure 1 shows transactions on Ethereum for that particular ICO. For example, the big dot in the center represents, one of the largest token exchanges. The EOS token sale network itself has many interesting structural properties, but that is another story and shall be told another time.

Figure 1: Transactions involving the EOS token sale smart contract on Ethereum. Node size indicates degree, colours indicate different communities within the transactional network (found by the Louvain method). The graph consists of 800K nodes and 1.5M edges.

After the token sale on Ethereum ended, the resulting amount of tokens per address was used as an input for the genesis of the new EOS blockchain.

EOS account holders can use their tokens for different purposes: 1) to transfer or receive tokens to/from other accounts or smart contracts, 2) to allocate resources such as CPU, bandwidth, and RAM for their decentralised applications, or 3) to vote for block producers.

Voting for producers can be done either directly or via a proxy. With direct voting, an account can vote for between one to 30 producers. The voting power of an account is determined by its number of staked tokens. If an account directly votes for only one producer candidate, the producer candidate will receive a number of votes equal to the number of tokens staked by the account. If an account votes for more than one producer candidate, then each producer candidate will as well receive a number of votes equal to the number of tokens staked by the account, i.e., there is no dilution of votes if an account votes for multiple producer candidates.

As an alternative to direct voting, an account can delegate its voting power to a proxy, which can be any account on EOS. A proxy votes for producer candidates the same way as all other accounts, however, the voting power of a proxy is increased by the vote delegations it receives from token holders.

The idea behind proxy voting on EOS is that token holders do not have to check the actions of producers on a day-to-day basis, but instead delegate the task of producer selection to trustworthy proxies. Proxies can, for example, advertise by paying attention to certain criteria when selecting producers (regional and organisational diversity among producers, quality of a producer’s IT infrastructure).

Each account who has tokens staked can cast votes at any time. However, the weight of votes decays over time, unless the account holder does not re-cast votes. This is a built-in mechanism to incentivise account holders to constantly review the behaviour of producers and reconsider voting for a functional set of producers.

This is the voting distribution of EOS votes for the top 100 producers on November 2nd 2018 at around noon:

Figure 2: Distribution of direct votes and proxy votes for the 100 most voted producer candidates on the EOS blockchain on 2018–11–2.

Block production on EOS happens in rounds of 63 seconds. Before each new round, both direct votes and proxy votes a tallied by approval voting with multiple winners: for each account the sum of all received votes is calculated, and the top 21 accounts win. They become producers and jointly produce the next 126 blocks, where each producer is responsible to create 6 blocks in a row (0.5s per block * 6 blocks per producer * 21 producers = 63 seconds).

Producers verify the blocks of other producers and sign them almost immediately. Once 15 producers have signed a block it is deemed irreversible. The “15 out of 21” majority vote among producers is one important aspect of providing Byzantine Fault Tolerance (BFT). The same two-thirds majority among producers is required, for example, to freeze accounts or to change the code of an account on the EOS blockchain without hard forking the entire blockchain.

The combination of D-POS and BFT typically allows the EOS network to reach consensus in about 1 second.

Compared to Proof-of-Work-based Blockchains, EOS is much faster and provides higher amounts of transactions per second (almost 4.000 TPS have been observed already).

There are many other cool things to say about EOS (built-in role-based permission management, transactions-as-proof-of-stake, etc.), however, let’s talk about the real elephant in the room.

Who is pulling the strings? 1B tokens were issued through the token sale and a few million have been created through block production in the meantime. However, only about 50% of total tokens have been staked so far and only about 25% of total tokens are voting. Just think about having 25% voter turnout in your next federal election…

Interestingly, among the 25% of total tokens who voted, approximately half voted directly and the other half voted via a proxy.

The EOS voting network can be visualized as follows, for example:

Figure 3: EOS voting network. Grey nodes: 35K EOS account who voted for producer candidates. Pink nodes: 444 producer candidates who received votes. Circle radius represents percentage of received total votes. There are 500K edges in the graph.

Around 35.000 accounts (shown in grey) voted for 444 producer candidates (shown in pink). The bigger the circle radius, the higher the percentage of received total votes. However, votes are by far not evenly spread across producer candidates.

This is how the voting network looks like if we highlight the elected producers in green:

Figure 4: EOS voting network. Grey nodes: 35K EOS account who voted for producer candidates. Pink nodes: 432 producer candidates who received votes, but did not get elected as producers. Green nodes: 21 producer candidates with highest amount of received votes, thus being elected as producers. Circle radius represents percentage of received total votes. Edges represent a “voted for” relationship. There are 500K edges in the graph.

But where are the votes coming from? And to which extend?

Let us assume for a moment that each of the 35K accounts would hold exactly one token for voting. Just like in a democracy: one person, one vote (and let us ignore issues such as Sybil attacks etc. for the moment). If we visualised the resulting voting power per account (and keep the layout of the network to make it comparable with the graph from before), the voting network would look like this:

Figure 5: Hypothetical visualisation of the EOS voting network if every account had exactly one token for voting.

However, you probably already guessed it: the true voting power distribution looks different:

Figure 6: EOS Voting Network: voting power per account (equals number of staked tokens). Circle radius represents percentage of total number of staked tokens. Most addresses can’t be seen in this graph, because their voting power is too small to be represented by a whole pixel.

Such a distribution is not an issue per se. One of the fundamental building blocks of the (current) D-POS implementation of EOS is just to do this: give power to the ones who hold many tokens. Of course, the questions is, how to keep the blockchain truly decentralised and how to avoid an oligarchy. With the current distribution of tokens it would be easy for the top token holders to vote for a group of Byzantine producers who could delay or block certain transactions.

One necessary prerequisite for the development of a deeper understanding of the interrelations in voting-based blockchains is to map the status quo. And the analysis of the underlying voting network is one important building block for future Distributed Ledger Analytics.

If you happen to be in Berlin (Europe) and also enjoy working on Distributed Ledger Analytics, then let’s have a coffee. Ping me at @peterruppel or

This article (including all pictures) is licensed under the Attribution 4.0 International (CC BY 4.0) license. Author: Peter Ruppel, 2018.