I'm a huge fan of removing POW. For us in WeNano that would make integrations a lot easier and less dependent on other services. I do think there are issues though, many of those discussed in the Consequences of removing POW with the election scheduler upgrade post.
One of the issues is of course how easy/cheap it will be to spam the network. The motivation to spam is to disrupt the use of the network or make it more expensive to run a node by ledger bloat. This post does not go into the last issue, but tries to allow the removal of POW, but at the same have a way for services that want to make sure their blocks is prioritized across the network have a way of doing this, without it requiring them to have a huge balance.
There are three major changes in this proposal
- Making pow optional in a block
- Adding a 129th bucket called the pow bucket or the priority bucket(P bucket from now on)
- Increasing the pow difficulty significantly(50x-250x over todays base level, this obv needs to be discussed in detail)
The concept is pretty simple really; we add an additional bucket the nodes pass over in the election scheduler that only include blocks that has pow. Similar to other buckets it will order by LRU. Contrary to other buckets though, this bucket will take up 50% of the election scheduler if needed. Instead of a round robin of all buckets, I’m thinking doing it like this: bucket 0 -> bucket P -> bucket 1 -> bucket P -> bucket 2 -> bucket P …. All the way to bucket 128 and start over again.
The reason I say up to 50% is because in regular usage 99% of services and wallets will not use pow in their blocks, and the nodes will use the regular 128 buckets, except perhaps some large financial actors in the network who want to use it on every block to be 100% sure their transaction is confirmed instantly. But if the bucket you are going to use is under heavy load, or your transactions has taken more than 10-15 seconds to get confirmed, a service/you as a user, can choose to (re)broadcast the block with the pow, and get it prioritized immediately. This also makes spamming the network even with a high balance less useful, as services can choose to use the P bucket instead, removing the incentive to attack it, which is really what is important. If an attacker wants to spam the P bucket, he has to cover 50% of the total capacity of the network at a huge price for him.
As much as we like the network to be equally available to everyone, I believe having 50% of the capacity of the network available to those who want to pay a «fee» by using higher pow, just gives them an additional security in using the network, knowing they at any point can choose to pay a price to get their transaction confirmed instantly.
An additional benefit to this over only letting a huge balance be the way to get prioritized is with upcoming block hand off(mentioned here: https://forum.nano.org/t/work-generation-changes-for-consideration/914). With this change, a service can provide the pow to a customers receive block and they will be prioritized even if their balance is low, and the network is under heavy load.
Let me know your thoughts on this, I’m sure there are ways to improve it, or there is something I’ve missed that makes this not work as intended.