I’m curious about whether or not this is possible without dramatically incentivizing bad behavior on the part of miners. The most “naive” way to implement something like this would be to pick 4 addresses from the reward set at each block (rather than the 2 currently done) using the cryptographic sortition, and then using the miner’s address as a random input to select which of the two addresses they would send to. However, miners can change their addresses, especially when incentivized to do so, and they would be in this case: they could prefer selection of certain reward addresses over others (i.e., ones they control or are paid to receive from). Other mechanisms for doing this per-miner selection may not be susceptible to this, but it’s not obvious to me that such mechanisms exist.
Moving it from 2 to 4 slots per block actually solves the issue until 1.5B stx, and moving it to 6 solves the issue until 2B stx.
Modifying the number of slots in the reward cycle as a mechanism for dynamic change could work. If the threshold is fixed at 100k, and the length of cycles is 2000, then the number of slots per block could dynamically change from 2 to 3 to 4, etc., as necessary to include every slot. However, increasing the number of slots per transaction does have a real impact on the size of the miner’s transactions, and therefore the amount of “loss” due to bitcoin fees, which directly impacts the profitability of mining. This is a real trade-off: fees would increase 20-50% depending on how many new slots there are.
In general, I would be open to bigger proposed changes than the ones currently proposed in SIP-015. However, I’m pretty wary of adding these items to SIP-015 myself: the implementation impacts of some of the things proposed in this forum thread are large, and I don’t fully understand all of the consequences of what’s proposed here. There are ways to address those concerns, but they will take time.
What I’d recommend is first trying to figure out whether or not any of these mechanisms could be compatible with SIP-015’s PoX contract-- that is, that the changes could be proposed in a subsequent SIP, and implemented as a future hard fork if there’s sufficient support without requiring a new PoX contract entirely: one of the painful parts of SIP-015 is that it requires a new PoX contract pox-2
, which users and pools will need to migrate to. Having to do that another time would add a lot of pain to subsequent proposals and could jeopardize support for them (or maybe not, if there’s sufficient demand for those features). Then, if you have a specific proposal, with fleshed out details, then you should solicit feedback for that. This forum thread is hard to follow, and it’s hard to figure what is specifically being proposed. In responding to various comments, there seem to be changes suggested, and it ends up not being clear exactly what the final design would be. Some of that may just be because a forum thread isn’t a great tool for these kinds of discussions. I prefer github discussion posts for this reason: you can create threads within the thread.