We started out on Verium to solve a major centralizing issue with PoW which is that of the mining hardware to a few manufacturers developing ASICs which then also have a mining advantage. This can result in a cornering of the market and slowly more and more, decentralization of the network can be lost. Additionally, it makes entry into mining for the average person impractical. Cpu-only mining addresses this directly and we have succeeded to such a degree, simple inexpensive ARM devices are most efficient for mining Verium. However one thing we were not able to solve up to this point is the centralization of mining to a few large pools which have a significant share of the consensus. One such possible solution to this is a more decentralized pool called p2pool where there is a consensus of mining shares per miner on a separate chain. We now have a working port of the standard python p2pool for Verium. There are a couple issues, one is the Verium hashes are intensive to check and a python implementation is orders of magnitude slower than the c/assembly we have built into the wallet. There are ways to incorporate c and assembly into python but it’s sort of a hack and will never give the same performance. The other major issue with p2pool in general is that because there is all these decentralized hashes checked by the p2pool network there is extra overhead and p2pool on any network yields a lower mining efficiency and even more so in our case because our hashes are cpu-intensive purposefully.
There is a few different options all of which have pros and cons.
-
Port p2pool to another language and build it from the ground up for Verium. This would result in a better p2pool than currently exists but would take a while as it’s a full code up of not only a decentralized pool but also a p2p network.
-
Forget p2pool as it has some inherent efficiency and scalability issues even with the best implementation and support and urge miners and pool operators to use a new more decentralized stratum protocol like betterhash. This can work quite well but like p2pool could suffer from a lack of use as there is no direct incentives to use this method, in fact there may be more incentives to not use it like p2pool.
-
Build a p2pool-like mechanism into the Verium main-chain, this would be relatively easy and quick to implement as it would utilize existing optimized code and the Verium network itself and would enable more decentralized mining with direct incentives. Downside being a fork that changes the way rewards are distributed on the Verium network.
Personally I’m in favor of number 3 and will explain why below as well as give an overview of the proposal. I’m also curious what the community thinks as 3 would be a fork of the network.
The proposal for 3 is as follows:
I think the only way we can have an effective decentralized pool mechanism is on chain. I’m leaning toward adding mini blocks on the Verium chain which only contain an address associated with a winning hash at a difficulty which is calculated based on a blocktime 10x faster than a regular block. This way we scale with block frequency like Verium currently does, we use the Verium chain and code for block shares and split rewards as a proportion of rolling blockshares (fast mini-blocks) for the full block in which transactions are processed via regular difficulty.
It’s not that hard to code up also because most is already there in the current codebase. This ultimately would be an on main-chain implementation of a p2pool type system in c++ utilizing network, all incentives and consensus mechanism implementations inherent in Verium. I think this is only thing that will really work as it will have the lowest latency for a consensus of shares for mining and the most incentives built-in.
In short it would work like this:
-
Have a second difficulty function that targets a blocktime 10x faster. If this difficulty is met but regular isn’t, no transactions are included and only an address and winning hash is included in the block.
-
If a hash meets the regular difficulty it is a normal block transactions are processed like normal but reward is proportionately split among addresses that solved mini-blocks over a fixed number of blocks (say 500).
I think the reason besides efficiency the decentralized pools failed is because they were not built in and resulted in disadvantages compared to centralized pooling. In this system all nodes and pools need to process mini-blocks and can earn a fraction of a block via the Verium consensus.
As more miners come on and cpus in parallel get faster these mini blocks will speed up too and be 10x more frequent than regular blocks. So right now they would come every 24 seconds. These blocks will not include rewards or any transactions. So they will be small and can easily be processed by main chain fast with very low latency. They will also never need to get bigger in terms of data size. A fixed size for a winning hash and address.
In short solominers and pools would get their proportional share of the reward of each block via the Verium protocol and this would largely remove extra incentives to mine at a pool as a small miner would get a payout at least once a day from the Verium network directly.
For clarity:
- Is p2pool
- Is new stratum
- Is on-chain proportional rewards
EDIT(g4b): voting will happen here. NOTE: voting will start after a reviewable testnet implementation of proposal #3 is up and running