Hello All,
Not that any of you know who I am or care, however I have dire news for anyone even remotely invested in this coin.
Short story is they did a botch job with the code for this coin. I, like others, were expecting the reward to halve at some point. So I looked around to see when that might occur.
Result: It won't ever halve. 200 coins is hardcoded PoW reward forever, well not forever, PoS will pick up at block 1,000,000. but by then, Max supply will have been hit.
Do some simple math and realize that 1,000,000 * 200 = 200 mil which is far in excess of the stated 84mil max coin cap.
Working backwards you find:
84,000,000 / 200 = 420,000
This means we run out of rewards (PoW&PoS) on block 420,000 with no intervention.
current block : ~289,000
Please correct me if i'm wrong. but in a few months we will be mining empty PoW blocks. And PoS will have a 0% a year return, since we will hit max supply long before the millionth block.Github open source code:
https://github.com/coppercoinet/Coppercoin open /src/main.h
There you will see the max coin supply:
(line 50) static const int64_t MAX_MONEY = 84000000 * COIN;
And in /src/main.cpp
(Line 1000 -> 1009)
// miner's coin base reward
int64_t GetProofOfWorkReward(int64_t nFees)
{
int64_t nSubsidy =
200 * COIN;
if (fDebug && GetBoolArg("-printcreation"))
printf("GetProofOfWorkReward() : create=%s nSubsidy=%"PRId64"\n", FormatMoney(nSubsidy).c_str(), nSubsidy);
return nSubsidy + nFees;
}
Now, we could fix this. But I cannot edit this fork.
Solution (as proposed by me, so feel free to chime in)
Start havling the coin ASAP. so we don't max out half way through the initial PoW phase.
Do this by setting up a variable to track how often we halve, then add the logic into the function which sets mining rewards.
In Main.H
Add a static variable to keep track of our halving.
static const int REWARD_HALVE = 800000; //80,000 POW reward halves every 80k blocks
In Main.CPP
(Replace the function defined above line 1000->1009 with this)
// miner's coin base reward
int64_t GetProofOfWorkReward(int64_t nFees)
{
int64_t nSubsidy = 200 * COIN;
int halvings = (nHeight - 220000) / REWARD_HALVE; //(-220,000) to account for current block height. since this is a botch job)
// Force block reward to zero when right shift is undefined.
if (halvings >= 64)
return nFees; // Subsidy is cut in half every 80,000 blocks which will occur approximately every 1.8 months.
nSubsidy >>= halvings; if (fDebug && GetBoolArg("-printcreation"))
printf("GetProofOfWorkReward() : create=%s nSubsidy=%"PRId64"\n", FormatMoney(nSubsidy).c_str(), nSubsidy);
return nSubsidy + nFees;
}
This will cause the mining reward to halve at the 300k
th block. meaning instead of 200 copper you will start earning 100 copper per block.
Then it'll halve to 50 per block in another 80k blocks.
This means the remaining PoW phase will look like this:
POW reward Block Max coins that reward
200 300000 60000000
50 80000 4000000
100 80000 8000000
25 80000 2000000
12.5 80000 1000000
6.25 80000 500000
3.125 80000 250000
1.5625 80000 125000
0.78125 80000 62500
0.390625 80000 31250
1,020,000 75,968,750 coins (well slightly less but oh well)
This will leave the PoS at 3% for close to 4 years.
POS
Year 1 78,247,812.50
Year 2 80,595,246.88
Year 3 83,013,104.28
Year 4 85,503,497.41 //Hit max somewhere before the end of year 4. From then on only transaction fees as reward for PoS mining.
So, there is your solution. But the devs are afk. So this coin will likely fall flat on it's face in a few months when those blocks start churning out 0's.