Hi everyone!
Love the proposal and love the idea of updating the proof-of-burn system to a proof-of-transfer system. Seems like a clear upgrade.
On that note, I have a few comments on this proposal. The biggest one I’ve included below, which outlines what I see as an issue with the “prepare” round and the reward set that can cause the system to inevitably devolve into proof of stake.
In the SIP-007 proof-of-transfer proposal, it appears that the “prepare” process can be gamed in order to provide unfair advantages to miners with more funds, thus leading to a system where the rich get richer.
To illustrate this, we can consider a simplified version where there is 1 address in the reward set per cycle. Not that the same issue applies with 5 addresses per reward set, but to a lesser degree, and we will build up to this condition below.
Imagine that every block there is only 1 address randomly selected from the eligible “whale” addresses (addresses with 0.02% holdings). Then, each round, most miners would be able to give up their Bitcoin for a chance at winning the Stacks, while the owner of the recipient address would be able to send all of their Bitcoin and send it to themselves in order to virtually guarantee that they will be rewarded the Stacks.
In this scenario, the miner risked nothing and gained the Stacks reward for free. It is easy to see how the system would devolve into a steady state in which the only miners operating are those with whale addresses and where those whale miners are only participating in rounds in which they are the only guaranteed recipients. One could argue that this isn’t a total breakdown of the system, but is in actuality simply a devolution into proof-of-stake with pooling.
It is also important to consider that this should not just be a theoretical devolution, but rather a necessary devolution if one assumes any reasonably efficient mining market (like Bitcoin).
Now we can consider the scenario with 5 addresses per reward set. The path to devolution is not as apparent here, and it would undoubtedly take a bit longer to play out, but the same properties apply.
In each round, most miners would be able to give up their Bitcoin for a chance to win the stacks, while the owners of 1/5 of the recipient addresses would be able to send 20% more for the same amount of risk, thus getting 1.25x the votes as everyone else. Every round, there should be up to 5 miners who have the ability to get 1.25x the votes that round. And in certain rounds, certain miners would get even more because they would own more than 1 recipient address for the round:
- 1/5 owned = 1.25x advantage (can transfer 1.25 Bitcoin and only risk 1)
- 2/5 owned = 1.67x advantage (can transfer 1.67 Bitcoin and only risk 1)
- 3/5 owned = 2.5x advantage (can transfer 2.5 Bitcoin and only risk 1)
- 4/5 owned = 5x advantage (can transfer 5 Bitcoin and only risk 1)
We should assume an efficient market with the Bitcoin-to-Stacks conversion. A big part of this is that at any point in time, miners could choose to purchase Stacks on exchanges rather than mine. This means that after a certain number of rounds, the amount of Bitcoin spent should vary around some average amount, as miners seek to predict how many Bitcoin will be transferred for Stacks and thus how much expected profit they will make by participating in any given block.
With this knowledge of the average amount, it should be apparent that miners with a recipient address in the set should be the only miners who participate, as they will be the ones with a 1.25x advantage.
Miners who do not do this analysis and who do not practice discerning mining will progressively realize that they are losing money, as they are receiving mining rewards at below market rate, and will then go to the exchanges to purchase stacks instead. The only miners left will be the whale address miners who focus on the blocks with their own recipient addresses. This will essentially be a proof-of-stake mining system, with a layer of obfuscation.
This process can be exacerbated if miners band together and create alliances. Together, these miners would be able to own 2/5 addresses or more in certain blocks, and so would be able to gain 1.67x advantages, which would be even less feasible for other miners to compete with. The larger the miner alliances, the larger the advantages.
All in all, over time, the senders who play the simulated proof-of-stake game and only mine in the blocks in which they own recipient addresses will be the ones who continually make profits while the miners who do not play the game (and instead play the honest proof-of-transfer game) will continually make losses.
Now onto the solution.
The way to fix this would be to add a third phase in the beginning in which miners must commit to a given round and post collateral before the recipient addresses in that round are revealed. If this is done, then the collateral can be seized if the miner does not actually participate in the round.
The collateral can be posted in Stacks by having the miner send a commitment transaction from an address with a Stacks balance. The protocol has control over the Stacks balances, so it has the capacity to seize the collateral in the instance that a miner fails to send the Bitcoin in the round.
The amount of Stacks required to be posted as collateral could be the same amount as the potential reward for that block. This would ensure that there is no possible way that any miner could cheat and come out net positive.
In summary, the collateral posting system would prevent miners from selectively participating only in rounds in which they get a percentage of the proceeds. It would mean that every round is effectively the same to all participants. And it should mean that the system does not devolve into proof-of-stake.