The History of Delegated Proof-of-Stake (DPOS)

DPOS (aka Delegated Proof-of-Stake) was invented by Daniel Larimer as a replacement for the Proof-Of-Work consensus algorithm used by Bitcoin and most other cryptocurrencies at that time. All the blockchains developed by Dan (including BitShares, Steem, and EOS) use DPOS to select their block producers.

In this post, I’m going to discuss the history that led to the invention of DPOS. I was working closely with Dan at the time of its invention, and this is how it happened, to the best of my recollection.

Before I get into the details of DPOS history, however, I’ll need to go over some background material on how blocks get added to a blockchain network.

Ordering transactions (e.g. a transfer of money) in a blockchain network

One of the most important functions of a blockchain network is to create a time-ordered list of transactions, with groups of these transactions being stored in a sequence of linked blocks called a blockchain. This time-ordering is important, because it prevents someone from spending their cryptocurrency more than once (an attack known as a “double-spend”).

In order to process new transactions, one of the computers in the blockchain network needs to decide a valid ordering for new transactions it has received, put them in a block, and then broadcast that block to all the other computers in the blockchain network. The other computers in the blockchain network can then check that block, and if it passes the rules of the blockchain network, they add it to their local copy of the blockchain. Then after some time delay (often referred to as the block interval), another computer will repeat the steps above, and another block will get added to the blockchain.

Problems with a blockchain network that uses a single computer to generate all the blocks

In theory, the rules of a blockchain could assign a single computer in the network that generates all the blocks. But there are several problems with this idea.

For one thing, it makes for a very fragile network: if that one computer crashes or loses its connection to the internet, no one’s transactions could be processed as long as that computer was unable to communicate with the other computers in the network (in other words, no one could make money transfers).

Another problem is that a single computer making all the blocks can block all transfers of anyone it pleases, effectively “freezing” money stored in an account. This is because the computer that makes a block gets to choose which transactions it puts in a block. If it doesn’t want to include a transaction, it can just pretend it never saw it. However, even this computer could only freeze funds, it can’t actually steal them (because it can only block transactions, it can’t make a fake transaction that moves money from an account it doesn’t own, because that’s against the rules of the blockchain).

Whose computer makes the next block in the blockchain?

But the ability to arbitrarily freeze funds in the network is a lot of power and you also don’t want your financial network to depend on the health of one computer, so Bitcoin, the first cryptocurrency, was designed with a feature called “mining” that allows computers in the network to compete for the right to generate the next block in the blockchain.

How Bitcoin mining (also known as “Proof-of-Work” or POW for short) works

With “mining”, each computer that competes for the right to make the next block (a miner) races against the other computers to find a brute source solution to a math problem. Because the computers must solve this math problem and prove they have the correct solution, mining-based cryptocurrencies are also known as “Proof-Of-Work” (POW) cryptocurrencies.

Generally speaking, the miners with the fastest computers will be the first to find the solution, then broadcast a block to the blockchain network that includes their solution. If the other computers in the network agree that the solution is correct, this becomes the next block in the blockchain.

At first, mining was seemingly a great solution to the problem of selecting who would produce the next block. Any miner in the network could produce the next block, so even if one miner decided not to include a user’s transactions, the transactions would likely get included by the next miner. So in the worst case, a user’s transactions might get delayed a few blocks.

But computers doing mining consume a lot of power solving those math problems, which costs money. To enable miners to cover their expenses (and to even profit from their mining), miners are paid block rewards when they successfully produce a block. This leads to an arms-race among miners, and ultimately Bitcoin miners resorted to using very specialized and expensive equipment to gain a mining advantage. Unfortunately, this made it too expensive for most people to mine Bitcoin, and over time most bitcoin blocks started getting produced by a very few people with very expensive equipment.

Steps leading to the invention of Delegated Proof-of-Stake (DPOS)

In 2013, I was working with Dan Larimer to create a new cryptocurrency called BitShares. BitShares was being designed as a blockchain-based decentralized exchange (i.e. a place where users could do peer-to-peer trading of cryptocurrencies and other commodities). My team was mainly working on the peer-to-peer network code and the command-line wallet, and Dan’s team was working on the blockchain code, including the method for determining which computer in the network gets to make the next block. Despite the separation of work, perhaps not surprisingly, we would often discuss implementation ideas, and sometimes people from my team would help out on the blockchain side when there was a problem.

Why not go with tried-and-true Proof-of-Work?

Proof-of-work consumed a lot of computing resources (so the blockchain had to pay a lot to the miners) and was relatively slow for our needs as a trading platform. The Bitcoin network had a block time of 10 minutes and we were aiming for a block time of 10s (ultimately we set the block time to 3s). So Dan ruled out using proof-of-work for selecting the next block producer.

A single block producer? A single failure point and too much trust

For fastest speed, Dan’s first idea was to just a single block producer. This does actually have some performance advantages, because everyone could send their transactions to that single block producer which allows for transactions to be included into a block faster. But having a single point of failure made this seem unworkable and you’re really placing a lot of power in one person’s hands.

What about a group of “trustees”? Still requires too much trust

Dan’s next idea was just to have a set of trustees: trustworthy individuals in the newly-born BitShares community who would be assigned to produce blocks in round robin order. The idea was that even if one trustee didn’t include a transaction, the next would. So the only way a transaction would be blocked was if all the trustees decided to block the transaction. One of the big attractions of this idea was it’s utter simplicity, which meant it could be coded very quickly, and we were under serious time pressure to get a functional blockchain network operating before funding ran out.

While the trustees idea was very feasible from a technical perspective and very attractive because of it’s easy implementation, it was also somewhat fragile in that it relied on a fixed set of computers in the network and it didn’t have any mechanism for how to change that list of users over time, except by hardforking in a new set of trustees.

It also placed a lot of trust in the trustees, and crypto-anarchists generally don’t want to place too much trust in anyone. So I and others argued that it required too much trust, and wouldn’t be acceptable by the crypto community. After a day or so, Dan conceded the point and went looking for a new method to quickly select the next block producer.

Proof-Of-Stake (POS): an alternative way to select the next block producer based on coin stake

Dan next started looking at proof-of-stake systems. Proof-of-stake (POS) was the new up-and-coming method of selecting block producers at that time and the most well-known implementations were Peercoin and NXT. NXT was of particular interest, because it was also being designed to support a decentralized exchange similar to BitShares.

Proof-of-Stake consensus algorithms select the next block producer based on a combination of how many coins a block producer has, how long he has held the coins (a factor called “coin age”), along with some randomization.

Probably the most interesting idea about POS consensus algorithms was that they relied on the self-interest of the block producers to prevent them from colluding to block transactions. The idea is simple: by design of POS-based blockchains, the block producers hold a large proportional share of the coins. The value of those coins is supported by people who are willing to accept those coins for other goods. And if users decide that the block producers might stop processing their individual transactions, the coins will likely lose value, so block producers are incentivized to process the transactions of other users in the general case.

I honestly don’t recall why Dan chose not to implement a POS consensus algorithm. It had its detractors, including claims that it was subject to “nothing-at-stake” attacks. I do have a vague memory from the time when I was reading the POS algorithm for NXT that it seemed quite complicated (for example, use of randomization in the block producer selection process sounds a bit messy and computing coin-age would have added computational complexity), and I suspect this weighed heavily in his decision to avoid implementing a POS consensus algorithm, especially given the time pressure to get a functional consensus algorithm working quickly with limited funding.

The invention of Delegated Proof-of-Stake

But Dan has always been a strong proponent of economic analysis, especially when it comes to blockchain design, and I believe this was his main attraction to Proof-of-Stake systems.

Yet, at the same time he also liked the design simplicity of the trustee model discussed earlier (easy to implement, predictable block production, works great as long as you can trust the trustees).

So DPOS was essentially a synthesis of these two ideas, combined with a twist: instead of large stake holders directly producing the blocks, the stake holders would elect the block producers to make the blocks. Here the block producers fulfill a role similar to the trustees in his original plan for the consensus algorithm. But under DPOS, they don’t need to be trusted quite as much and the system has a defined mechanism for how the trustees are chosen and replaced, requiring no hardfork to replace them.

A final note on “freezing funds” on a blockchain

It always amazes me how business men who act as “thought leaders” and “influencers” often don’t understand the basics of the technological revolution that they purport to be leading.

One thing that inspired me to write this post was a recent tweet by Changpeng Zhao, the CEO of Binance, aka CZ Binance on twitter, that me laugh. CZ said: “Blockchains should NOT have freeze features.”

CZ was apparently upset that the Steem blockchain could freeze the funds of an account and thought that this was some special feature of a DPOS-based blockchain. Yet, as I hope you’ve learned from this post, every existing blockchain network, including the Bitcoin network, can freeze the funds in an account, as long as all the block producers on that network agree to do so. All they have to do is agree not to include the transactions into their blocks.

Note that this isn’t really a “feature” of blockchain technology, in the sense that blockchain developers didn’t all conspired to design their blockchains to work this way. It’s mostly a limitation of the technology, at least as far as we’ve been able to design blockchains so far.

The fewer the number of block producers on a blockchain, the easier it is to achieve the necessary coordination to freeze an account’s funds. This means, for example, that the top bitcoin mining pools could likely freeze an account’s funds for a very long time assuming they decided it made sense. But generally it’s assumed this won’t happen, because they are paid in Bitcoin and arbitrarily freezing someone’s funds is generally not going to be viewed favorably by the people that support the value of Bitcoin.

So a blockchain’s economics have to be designed so as to discourage the chain’s block producers from freezing an account without a good reason. I’ll probably talk about some ways to do this in my next post.

More to come

As mentioned previously, I wrote this post mainly to lay the groundwork for my next post, which will look at the economics and philosophy of DPOS, explore its advantages and weaknesses, and ideas for how to improve it. Unfortunately, I’m pretty busy lately, so it may take a while before I write the followup post on this topic. I’m publishing this one now as it was mostly written when I wrote my earlier posts, and finishing it up today was a nice way to relax and focus my thoughts.


Comments
Steemie currently dosen't allow you to make comments. If you want to write something, write it using another frontend (like Steemit)
Click there to view this post on Steemit.com
  • @toofasteddie

    Excellent synthesis . At least, one advantage of this crisis is that everyone can learn something about blockchain technology.

  • @olaexcel

    Thanks for this wonderful update, I think by now everyone should understand some of the things and the implications about keeping large amount asset to exchange.🙏💓🙏

    Posted using Partiko Android

  • @lighteye

    Very informative, @blocktrades, I’m still learning what blockchain is and what it can be, so this was an important lecture. Thank you.

  • @knowhow92

    Awesome blog. Even a newbie in tech like me could understand most of the things mentioned. I'll be on the lookout for part 2 .

  • @scipio

    Superb explanation Dan! (Of course) I already knew about the inner technical workings of dPOS, but this was the first time I've read about the dPOS "invention process" itself, and how you were involved in the feedback and thought process.

    Cool!

  • @yabapmatt

    Yea, I also cringed when I saw the comment about blockchains having "freeze features". What you said about the "leaders" and "influencers" in the space not understanding the basics of the technology is unfortunately the sad reality.

  • @joshman

    Superb and timely! This should be required reading.

    Please don't take too long with the next edition! :-)

  • @marki99

    Can we have an update on the negotiations with Tron?

    I understand it's a sensitive subject and not everything can be said publicly, but a rough picture would be nice.

    Is he listening? Will he remove the witness votes? Do you believe hardforking is now the most likely outcome?

  • @galberto

    Great Compilatión of General know about the fuction of Blockchain world. Thank you so much.

  • @mstafford

    Thanks for sharing your experience, and I'm looking forward to hearing your thoughts more specifically related to strengths / weakness.

    It's definitely interesting to see into the evolution of DPoS.

  • @udezee

    Thanks for this timely message. I will admit the genesis of how dpos started is an eye opener. So freezing generally just means to collectively ignore a transaction while the person funds remains theirs. And is an idle function of the blockchain.

  • @abitcoinskeptic

    ~ Thanks for very clear explaining and lovely history lesson

    I look forward to your next post. =)

  • @deanliu

    Thanks for writing this brief history. I wish that your next post can address how and why some key numbers/parameters of Steem's DPOS are decided like top 20/21 witnesses, 30 witness votes per account and etc, which are very relevant to the recent controversy.

  • @mballesteros

    When you say that all witnesses can agree to freeze an account transaction. So, you mean that every transaction in the chain is identified by the account name? Is that how you know which transaction to freeze or ignore? Forgive my ignorance, but I'm having a hard time understanding this.

  • @retrocommodore

    A really excellent post laying out the groundwork and history of the system.

  • @enjar

    Really cool to read and understand bit more about the history.

  • @argsolver

    @blocktrades you don't mention it directly but I assume the Ripple consensus protocol was traken into consideration.

    I always thought about Bitshares as a Ripple alike system, but with the capability of being run by anonymous entities who are economically stimulated not to collude against the network.

    Now because of the Tron attack thanks to the help of the centralized exchanges (Binance, Huobi, Poloniex), the STEEM network has been put in a situation that resembles the early days of Ripple, when most of the validators (witnesses) are controlled by the same entity.

    The obvious difference, is that from TRONs perspective, there is no real economical incentive to protect the value of the STEEM chain. Ripple acted as a "benevolent chain dictator" until they managed to decentralize the validators.

    At this point, I don't see how a fork can be avoided, because Justin Sun has no real incentive to act as a "Benevolent dictator" for the STEEM chain.

    What about a group of “trustees”? Still requires too much trust

    Dan’s next idea was just to have a set of trustees: trustworthy individuals in >the newly-born BitShares community who would be assigned to produce >blocks in round robin order.

  • @d-pend

    I had no idea of your history extending to those formative days! Although not sure I totally understood the fine points about POS, you explained clearly enough the motivations to seek an alternative in the form of the new dPOS that a layman should be able to grasp how it came about. Quite ingenious, actually, though we're still in somewhat "early days" of figuring out how to make the system totally trustless and resistant to different attack vectors.

    Like other commenters, I wonder if we can explore in a major way various alternative options for witness voting — 1 SP, X votes (X being 1-30), the ability to vote for as many witnesses as you want, where the % of VESTs is split up between them, etc. What about an exponential curve of witness voting? Perhaps in the context of this series you might be able to enlighten us as to the decision to go with the 30x multiplication if you were around for that?

    Anyway, grateful you are finding the time to keep the solid posts up in these hectic circumstances — there is still such widespread ignorance as to the basic functioning of blockchain that it's really important to have concisely-written articles like this available for people who are interested—I guess we are really all still early adopters? It feels weird to say that when we're a decade deep into BTC's life, but in the grand scheme of things that's really not so long. Be well @blocktrades :-)

  • @cloudspyder

    Thank you for your time posting this article. It is truly great if everyone knows about the blockchain.

  • @cmplxty

    This is awesome thanks for the little history lesson. I’m still learning about the environment and this was cool to know and understand. Look forward to the next edition!

  • @cjsdns

    You were in a great place of history. We support you. Thanks for the very useful post.

  • @dr-frankenstein

    Yet, as I hope you’ve learned from this post, every existing blockchain network, including the Bitcoin network, can freeze the funds in an account, as long as all the block producers on that network agree to do so. All they have to do is agree not to include the transactions into their blocks.

    You are comparing Bitcoin to Steem which I think is a bit misleading considering the scale of both chains and different mechanisms they operate on. It's not that easy.

    If something similar to SegWit (theoretically speaking) would happen on Steem, the implementation would be instant because there is a huge centralization of power. This means a simple culture war could lead many people to lose their stakes by a HF/SF.

    However, on the Bitcoin chain, SegWit transactions are yet to reach 100%, even after years of its implementation.

  • @dksart

    Thanks for sharing, very cool historic info.

    Just for my own curiosity, I see you will be doing an updated post. Did you guys ever have any discussions on the economic aspect of how this blockchain functions, did anyone ever say, hey wait a minute, this is just a functional form of oligarchy...?

    I really enjoy the social media aspect of the STEEM blockchain, but after I joined and learned how it works it became apparent to me, that the coded rules are exactly how an oligarch government of a country would function.

  • @v4vapid

    Thank you so much for this post, for those people like me that are interested in the details but not as technically savvy as those involved in development, this DPOS history lesson is very comprehensible. On a slightly different topic, CZ and Binance have just released their 'apology' letter to the Steem community that was less than satisfactory. It includes veiled threats to the Steem token and Steem users.

    Hopefully, the STEEM community and TRON will reach a consensus in an efficient manner. If they fail to reach an agreement and it poses potential risks/damages to STEEM users on Binance, we reserve the right to take corresponding actions at the consent of our users.

    So, effectively they still RESERVE the right to interfere in Steem's governance in certain cases. Simultaneously, this seems to somewhat contradict other statements in the letter, specifically that Binance states it will,

    stay neutral and has no interest in on-chain governance beyond the Binance ecosystem.

    As a community member, I find this troubling as CZ also recently tweeted that Binance is considering integrating some form of off-chain 'voting' mechanism from their website.

    Interestingly, if we implement this vote feature, Binance users collectively will have, by far, the deciding vote. People who care may need to deposit to Binance to vote.

    This thread includes statements, such as "we don't want to do this.." but "we may be forced to implement this now". These are clear and continued threats to Steem's governance structure by a centralized entity and outside party. Personally, I'm completely against this as it poses yet another clear threat to on-chain governance and decentralized protocols. I don't trust binance or investors with no 'skin in the game' to have undue influence over any blockchain. In order to vote, users should stake their tokens directly to the blockchain, imo.

    As someone who operates a crypto-exchange what are your thoughts on this?

    CZ March 8 VOting.png

  • @valued-customer

    I was unaware of your deep roots in DPoS and early work with Dan. While you may further enlighten me with your next post, I am also interested in knowing more about your genesis as well. How did you get involved with peer to peer work with Dan? From whence did you come to it?

    Thanks!

  • @theoretical

    Back in early 2014, the consensus mechanism that eventually became DPoS was actually the first blockchain design problem I ever attempted. At the time I was just a community member flaming the forums with my opinions on how BitShares should be built. (I'd mined a meager handful of PTS, and wanted to do what I could to help the yet-to-be-built BitShares succeed.) I just wrote a post about the early history of DPoS with my own perspective and memory of details from those days.

  • @asimpleman

    Appreciate your work. You made it easy to understand even for a non technical guy.

  • @happyphoenix

    Dear @blocktrades, could I translate this article into Indonesian language?

  • @ava77

    DPOS = Cosmos network

  • @kramgelo

    I enjoy reading it. History always interest me.. Very cool post..

  • @danmaruschak

    Yet, as I hope you’ve learned from this post, every existing blockchain network, including the Bitcoin network, can freeze the funds in an account, as long as all the block producers on that network agree to do so. All they have to do is agree not to include the transactions into their blocks.

    So during the time when 22.2 was active for many top-20 witnesses, if the steemit account did some of the transactions that 22.2 was designed to block like issuing a transfer, would the transactions have eventually gone through because one of the non-22.2 witnesses (either in the top-20 or the timeshared backups) would have eventually encountered them and processed them (having no reason not to under the code they were running at the time)?

  • @kus-knee

    Scholarly article. One for the textbooks!

  • @salted

    Cringe indeed. I think the most worrying comment CZ made was at the end -'but if other witnesses are inclined to remove our users’ ability to vote in the future, we may be forced to implement it now' Power mixed with limited knowledge is a shitstorm waiting to happen...

    Really looking forward to your next post for improvments

  • @ervin-lemark

    This article is for history- and textbooks. Thank you very much for taking the time to write it.

    Yes, in times like these, changes (can) happen. Hopefully for the better.

    The consensus was formed in the defense of the blockchain. It was an act of survival. Next steps, when the fight to survive won't be needed any longer, hopefully, is to put in place better governance, reputation system, power/wealth distribution, visibility/discoverability of the content, ... All the boring stuff :)

    !BEER

  • @beerlover
    https://cdn.steemitimages.com/DQmaHThyECGhEx8tSfHZbiMFRNYjJ35K92cDgiJjkzBUaJo/One%20sip%20of%20BEER%20for%20you.gif

    View or trade BEER.


    Hey @blocktrades, here is a little bit of BEER from @ervin-lemark for you. Enjoy it!

    Learn how to earn FREE BEER each day by staking.

  • @nitin21

    yes

  • @bobinson

    I was considering DPOS as a alternation of the LMAX Disruptor ..

  • @flaws

    Hey @blocktrades, some friends redirected me to this article and told me that a Spanish translation might be a good idea, so I made a voluntary Spanish translation, I hope there is not a problem with it.

    In the next article do you plan to talk about the "promises" that certain entities can make in a DPOS network? I think it would be interesting to read a bit about it from your perspective

  • @moeknows

    Hey @blocktrades. Thanks for the good breakdown not only explaining the algorithms, but in relating to how they were developed at the beginning stages. It was a good post.

  • @edicted

    every existing blockchain network, including the Bitcoin network, can freeze the funds in an account, as long as all the block producers on that network agree to do so

    I thought it was hilarious when he said blockchains shouldn't be able to freeze accounts. Like... really? Could you explain how the super-majority on Steem can stop the other 3 witnesses from including those transactions? There is like some kind of veto round and their block doesn't get included if they try to process it?

  • @twinner

    Very good post, but downvoted due to disagreement on rewards, since Author is early miner and permanently top witness for four years. A lot of the minnows would prefer that such posts would be 100% Burn Posts.

  • @violetmed

    Very interesting!

    Posted using Partiko iOS

  • @bomex

    Very inspiring and motivating to keep the spirit of work, with the best ideas. Thank for sharing.. you'r the best forever @blocktrades.. and success is always for you

  • @tonytrillions

    !giphy awesome

    Posted using Partiko Android

  • @bagelpot

    This means, for example, that the top bitcoin mining pools could likely freeze an account’s funds for a very long time assuming they decided it made sense. But generally it’s assumed this won’t happen, because they are paid in Bitcoin and arbitrarily freezing someone’s funds is generally not going to be viewed favorably by the people that support the value of Bitcoin.

    No, it is not that. Right now, if all the major pools censor your transaction, you can simply go to Nicehash and buy enough hash for producing a block, which will include your transaction. That will have a cost that is slightly above 12.5btc, but you get 12.5btc back, and you will get exposed to some variance risk. However, this means that, essentially, any significant enough amount of funds cannot be freezed. At least, not just by policy.

    Now, the only option to effectively freeze the funds in pow chain would be to explicitly fork them out, to make a soft fork that explicitly considers your transaction invalid. However, that protocol change needs to get adopted by everyone, not just by the major pools, because otherwise, with any miner-only enforced softfork, it pays off to drop it and trick competing miners to get stuck in a shorter subchain.

    This, the fact that miners are competing with each other, is the thing that protects against censorship in pow chains, and not any economic based common goods consideration.

  • @chireerocks

    @blocktrades, Thank you for sharing all these very important Point Of Concepts. In recent days many questions raised upon DPOS System. Hope that going forward some important measures will be taken to strengthen it so that we can put a full stop to Potential Takeover Attempts. Stay blessed team.

    Posted using Partiko Android

  • @aliriera

    Felicitaciones por entregarnos sus experiencias y esta interesante historia, sobre todo ahora que bitcoin comienza a bajar. La experiencia es muy útil. Esperaré la próxima publicación.

  • @moeknows

    @blocktrades I'm very curious if you have discussed the current situation with Dan Larimer, and if you have, what are his thoughts on it from a blockchain development perspective?

  • @fracasgrimm

    Is blocktrades back open for trading?

  • @luca1777

    Hi Blocktrades, trying to sign in my blocktrades, to sell some steem, i got this "funny" Consent again (for giving up all my rights), that i got last year already. Back than it was a bug y'all wanted to fix. It asking for all rights so i had to deny. Please tell me how to proceed..? Thank you

  • @seanytan

    hi @blocktrades, would like to check when the buy/sell will be enabled?