Exactly simulate the Hush block reward until it hits zero at halving 31

This commit is contained in:
Duke Leto
2020-09-18 16:19:34 -04:00
parent 3e60d1187f
commit 0a96fdc63f

View File

@@ -53,24 +53,38 @@ printf "# block, supply, reward, subsidy, fr, totalfr, halvings\n";
# 12.5 * 100000000 / 32768 = 38146.97265625 # 12.5 * 100000000 / 32768 = 38146.97265625
# 12.5 * 100000000 / 65536 = 19073.486328125 # 12.5 * 100000000 / 65536 = 19073.486328125
# Hush Halving Heights and Block Rewards
# 1,12500000000,340000
# Halving Block Heights # 2,312500000,2020000
# 340000 + 1680000 = 2020000 # 3,156250000,3700000
# 340000 + 1680000*2 = 3700000 # 4,78125000,5380000
# 340000 + 1680000*3 = 5380000 # 5,39062500,7060000
# 340000 + 1680000*4 = 7060000 # 6,19531250,8740000
# 340000 + 1680000*5 = 8740000 # 7,9765625,10420000
# 340000 + 1680000*6 = 10420000 # 8,4882812,12100000
# 340000 + 1680000*7 = 12100000 # 9,2441406,13780000
# 340000 + 1680000*8 = 13780000 # 10,1220703,15460000
# 340000 + 1680000*9 = 15460000 # 11,610351,17140000
# 340000 + 1680000*10 = 17140000 # 12,305175,18820000
# 340000 + 1680000*11 = 18820000 # 13,152587,20500000
# 340000 + 1680000*12 = 20500000 # 14,76293,22180000
# 340000 + 1680000*13 = 22180000 # 15,38146,23860000
# 340000 + 1680000*14 = 23860000 # 16,19073,25540000
# 340000 + 1680000*15 = 25540000 # 17,9536,27220000
# 18,4768,28900000
# 19,2384,30580000
# 20,1192,32260000
# 21,596,33940000
# 22,298,35620000
# 23,149,37300000
# 24,74,38980000
# 25,37,40660000
# 26,18,42340000
# 27,9,44020000
# 28,4,45700000
# 29,2,47380000
# 30,1,49060000
# 31,0,50740000
sub hush_block_reward sub hush_block_reward
@@ -79,18 +93,65 @@ sub hush_block_reward
my $height = shift; my $height = shift;
my $halvings = 0; my $halvings = 0;
# TODO: Cover all halvings until BR=0 if ($height >= 50740000) {
if ($height >= 23860000) { $reward = 0;
$halvings = 31;
} elsif ($height >= 49060000) {
$reward = 1;
$halvings = 30;
} elsif ($height >= 47380000) {
$reward = 1;
$halvings = 29;
} elsif ($height >= 45700000) {
$reward = 2;
$halvings = 28;
} elsif ($height >= 44020000) {
$reward = 4;
$halvings = 27;
} elsif ($height >= 42340000) {
$reward = 9;
$halvings = 26;
} elsif ($height >= 40660000) {
$reward = 18;
$halvings = 25;
} elsif ($height >= 38980000) {
$reward = 37;
$halvings = 24;
} elsif ($height >= 37380000) {
$reward = 74;
$halvings = 23;
} elsif ($height >= 35620000) {
$reward = 149;
$halvings = 22;
} elsif ($height >= 33940000) {
$reward = 298;
$halvings = 21;
} elsif ($height >= 32260001) {
$reward = 596;
$halvings = 20;
} elsif ($height >= 30580000) {
$reward = 1192;
$halvings = 19;
} elsif ($height >= 28900000) {
$reward = 2384;
$halvings = 18;
} elsif ($height >= 27220000) {
$reward = 4768;
$halvings = 17;
} elsif ($height >= 25540000) {
$reward = 9536;
$halvings = 16;
} elsif ($height >= 23860000) {
$reward = 19073; # 0.486328125 deviation $reward = 19073; # 0.486328125 deviation
$halvings = 15; $halvings = 15;
} elsif ($height >= 22180000) { } elsif ($height >= 22180000) {
$reward = 38146; # 0.97265625 deviation $reward = 38146; # 0.97265625 deviation
$halvings = 14; $halvings = 14;
} elsif ($height >= 20500000) { } elsif ($height >= 20500000) {
$reward = 152587; # 0.890625sat deviation $reward = 76293; # 0.9453125 deviation
$halvings = 13; $halvings = 13;
} elsif ($height >= 18820000) { } elsif ($height >= 18820000) {
$reward = 305175; # 0.78125sat deviation $reward = 152587; # 0.890625 deviation
$halvings = 12; $halvings = 12;
} elsif ($height >= 17140000) { } elsif ($height >= 17140000) {
$reward = 305175; # 0.78125sat deviation $reward = 305175; # 0.78125sat deviation
@@ -132,8 +193,8 @@ sub hush_block_reward
return ($reward,$halvings); return ($reward,$halvings);
} }
# We know BR will go to zero between 7 and 8th halvings # Block reward is 0 at the 31st halving
while ($halvings <= 10) { while ($halvings <= 30) {
$block++; $block++;
my ($reward,$halvings) = hush_block_reward($block); my ($reward,$halvings) = hush_block_reward($block);
my $fr = int($reward / 10); my $fr = int($reward / 10);