Proof of Stake systems suffer from a number of potential centralization issues and I want to open the discussion around how to address them. I’ll kick off with a real basic overview of what we’re working on so everyone is on the same page. I’ll also present the best approach I’ve seen, which effectively acts like a tax-and-universal-income system, along with its challenges.
At the core, we are building an open, public protocol which is similar in principle to (but more technologically advanced than) what Ethereum has created. Ultimately, it functions like a global computer where developers write programs and deploy them onto the blockchain, where they become immutable. The blockchain acts similarly to a database but with a killer difference – instead of being hardware located inside a specific company’s data center, it relies on a dynamic network of independent and potentially adversarial players to perform its key functions of compute and storage.
This is its greatest strength and greatest challenge. The strength comes from the decentralization and security that you gain by engaging a diverse network of participants (“nodes”) to run the chain (via software they run on their computers or mobile phones). This allows the creation of a new web where centralized companies don’t control the access points and the data. The challenge is that the behavior of these nodes is governed entirely by free market forces baked into the protocol. If the incentives of network nodes aren’t aligned sufficiently or if the market doesn’t clear properly, the system fails.
Nodes are incentivized to provide work for the system by gaining access to two income streams – they get “block rewards” paid out for participating in the creation of each block (which occurs roughly once per second and are paid by minting new tokens [inflation]) and they get a portion of the transaction fees that the consumers of their work (the applications that are running on top of this whole system) pay to perform transactions, computations or storage operations. Over time, the inflationary block rewards should reduce in favor of transaction fees making up most of the reward structure.
Nodes are incentivized to provide good behavior by forcing them to use a staking mechanism – they must put up a stake of tokens in order to participate in these income streams and, if their behavior is proven to be adversarial, their stake is slashed.
A successful system needs to have a large number of nodes, which provides strong decentralization and, in our implementation, significant network scalability as well. It also needs to provide enough liquidity for the consumers of the system (the applications build on top of it) to purchase the tokens they need to pay for their transactions on the system. And it needs to ensure that fees aren’t so high that these application developers decline to develop on top of the platform.
These incentives aren’t difficult to juggle in the short term but, in the long term, the sustainability of different approaches begins to break down. Specifically, it is challenging to create a system where nodes are properly incentivized to join the system in the first place but do not end up with the largest players controlling most of the wealth and thus re-centralizing the system.
This is because the rewards you receive for participating as a node and staking are proportional to your stake. If I control 10% of the total system tokens, I can expect to earn 10% of the overall rewards from the block rewards and my share of transaction fees. But, in practice, not 100% of the total system stake participates as nodes in this process. Practically speaking, this is because many token holders have other reasons for holding the tokens (eg speculation or for future payment of network fees) and aren’t inclined to lock them up as stake to run a node of their own. In systems that put this to practice, only 50-60% of total amount of stake participates in the early staking process as nodes.
Unfortunately, this means that that 50-60% of tokens will begin to accrue a greater and greater proportion of the system wealth (100% of the inflationary block rewards and transaction fees accrue to them), ultimately choking out the casual users over time and centralizing control of the system in a plutocratic fashion. This reduces the incentive to actually use the system in the first place and also destroys liquidity on the margins the system needs to function.
An ideal system has incentives to participate in staking while also ensuring that there is a counterbalancing decentralizing force which dynamically redistributes some wealth in a way which tunes the balance of the system. This is made more challenging since all players are completely anonymous and you must assume that any of them can easily split their stake into many anonymous accounts or merge stakes into a single centralized account. This effect significantly reduces the viability of quadratic approaches, where greater wealth has fewer “votes” or less claim on a monetary output, because they are all easy to game by sophisticated players at the expense of unsophisticated ones.
Unrelated problems are also interesting, like achieving consensus between nodes which is fault tolerant, attack resistant and disallows frontrunning transactions, but here we’ll stick to the macro problems of centralizing forces.
These are very complex systems but there is also plenty of precedent that systems like this do work and achieve Nash equilibrium… for the most part. The tough part is designing systems that strengthen over time (balance decentralization, performance and security) without the benefit of a central authority to coordinate rather than spin out of balance and decay. Here’s the best approach I’ve seen to this problem:
“The Fountain of Money” aka Redistribution / UBI
In what we’ve taken to calling the “Fountain of Money” regime, a tax on the system (which comes out of the inflation rate) is levied and redistributed to a broader set of participants in the system. The goal is to make sure much of this redistribution reaches outside of the staking nodes. One example is to provide distributions to all accounts that have transacted on the system within a given period.
This functions almost like a Universal Basic Income.
One challenge, as with all cases of rewards in anonymous systems, is making things Sybil resistant, so approaches typically return to easier-to-measure metrics like rewarding based on proportionality of participation (eg how many transaction fees you’ve paid in a time period). This shouldn’t be too problematic since our best customers get rewarded more. But it may not bring new people into the system. And these exact mechanics may be better accomplished by simply taking measures to reduce transaction fees in approximately the same proportion.
Another distribution approach rewards accounts that have been active within a certain time period on either a fixed or lottery basis. This is not Sybil resistant, though, and might incentivize algorithmic creation of new accounts for every transaction (and which effectively spams the system in other ways).
The biggest challenge is properly tuning this approach. If there isn’t enough of a tax/redistribution, it fails to accomplish its goals. If it is too big (imagine 50% annual tax or more), it punitively deflates the stakes of nodes. Should it be fixed and potentially miss the mark or have dynamic elements?
Even a fixed solution acts somewhat dynamically if the broader parameters of the system have been tuned so inflation reduces over time (eg a fixed-amount inflation rather than a fixed-% inflation rate), thus the amount allocated to redistribution would presumably also reduce over time (if it’s a fixed percent of the overall inflation amount). In a system where the inflation has reduced to zero, the only centralizing force for stakers is transaction fees, which will (hopefully by that point) actually be a much larger amount anyway.
If we’re serious about making this tax tied as closely as possible to the centralizing force at play, it would need one component coming from inflation (due to block rewards) and another tied to transaction fees. I won’t claim to have a good solution right now for tuning this algorithmically so our best bet out of the gate might be choosing what seems like a reasonable fixed rate and using governance to adjust over time. Unfortunately, plutocratic capture of governance in PoS means they’d be unlikely to vote against their interest and ever reduce this tax.
Ultimately, I haven’t seen a better approach than this but the devil is in the details.