0.7-testing and miner/minter reward


#1

RFC-0007 reduces min fee for smaller transactions to 0.001 PPC while keeping cost of kb same at 0.01. our source code contains several checks of coinbase rewards for miner/minter that look like this:

if (nStakeReward > GetProofOfStakeReward(nCoinAge) - GetMinFee() + MIN_TX_FEE)
    return state.DoS(100, error("CheckInputs() : %s stake reward exceeded", GetHash().ToString().c_str()));

and since coinstake for POS or POW blocks never exceeded 1000 bytes, that if statement has been effectively reduced to nStakeReward > GetProofOfStakeReward(nCoinAge).

After the changes in RFC-0007 were implemented we now have situations when POW coinstake is greater than 100 bytes and therefore for these cases GetMinFee > MIN_TX_FEE.

for example POW block 0000000000822ddcbc3a3cdd7e71c5fa997e6ab56a595389b42122ebd26eb289 has coinbase transaction dfae79604ac14ce2bded81bff8777a457c9f892d13a0ed586d32d993d78fac2c that is 120 bytes long and GetMinFee returns 1200, which is 200 units greater than MIN_TX_FEE of 0.001 PPC.

my initial understanding and implementation was that miner/minter had a budget of 1000 bytes, so in cases when coinstake is less than 1000 bytes, block producer was allowed extra reward (up to 0.009 PPC). but that was rejected by @sigmike as an error.

what should we do?


#2

I personally feel that we should reward miners who keep coinstake small. I say give the bonus, but I worry that it will generate an additional reward for stake grinding (making lots of little outputs to increase the chance of minting a block). This bonus would act like a static reward, similar to if we fixed the PoS block reward. For some analysis of this, see the alternative implementations section here:

This is a very interesting problem.


#3

Is there a way to keep this the same, such that we ignore up to 1000 bytes in the coinstake, without offering a rebate for coinstakes less than 1000? That would probably be the least controversial solution.


#4

I agree, that would be least problematic solution, I’ve implemented that and testing it at the moment.