As we’re into almost 1.5 years of EOS operation, there are many lessons learned, and here are some ideas that could probably be used for a new public EOSIO chain.
Separate resource from voting
In all current EOSIO networks that I know, voting power is proportional to CPU+NET stake of an account. As a result, voters are reserving the bandwidth that they never use, and that leads to suboptimal resource allocation.
undelegatebw can be reserved to pure resource allocation as it is now. Also
undelegatebw doesn’t need to wait for 3 days and can have immediate effect. A new set of actions can be developed to stake liquid tokens for voting, so that voting tokens are separated from resource allocation tokens.
Voting done differently
The goal is to make vote trading and Sybil attacks unprofitable. Also it will be great to limit the power of whales, so that regular users have a say.
The concept of quadratic voting has been discussed since long time, also outside of blockchain: the voting power of an individual is proportional to square root of their capital. The problem with a public blockchain is that the capital can be easily split among multiple anonymous accounts and the sum of square roots will be higher than square root of the total amount.
So, the large voters need to be motivated not to split their capitals. One of approaches is to reward long-term voters from inflation, so that splitting the stake reduces the total rewards. Also the rewards should be big enough to make vote trading unprofitable.
It needs detailed modeling and testing effort, but the implementation might be as follows:
- 1% of inflation is distributed to voters that are voting since at least 1 month, but not higher than 0.1% of total rewards pool for one account (so that we can have more than 1000 motivated voters).
- Voter reward is proportional to the stake powered X (where X is between 1.0 and 2.0, needs detailed modeling. Probably X should grow slowly in time as long as voting tokens are not withdrawn). The goal is to make it unprofitable to split the voting capital.
- Voting power of each account is proportional to square root of the voting stake (which is separate from CPU+NET stake as described above).
- Only direct voting is allowed, and no proxies.
- Voting power would not decay.
- Unstaking from voting pool is immediate.
Block production, governance and infrastructure
There are several different jobs which are now delegated to block producers in most of public networks:
- Block signing. This requires a server infrastructure with sufficient performance, network stability, fault tolerance, and a stable p2p network.
- Basic public API infrastructure: the network needs public p2p and HTTP endpoints in order to allow users and servers communicate with it.
- Advanced public API infrastructure: history API, streaming services, block explorers, reporting.
- Governance: decision making, responding on threats and attacks, assigning budgets, funding proposals.
- Software development: a blockchain needs a lot of software development effort from many different vendors. Most of this development should be open source. If it’s funded by the whole network, it must be open source.
These five different jobs don’t need to be delegated to the same entities. Also they can be funded from five different budgets, and in each category voting can be performed separately.
Probably governance should be hierarchical: fundamental decisions would be made by the whole community, and daily operational work is done by a compact team (such as preparing proposals for public voting, responding to attacks, system upgrades). The core team would be elected and re-elected on a regular basis.
Probably there should be an incentive to vote with the voting tokens and not just collect dividends. On the other side, people should not be encouraged to vote randomly, just to get the rewards. This needs brainstorming.