Browse Source

Do calculations in satoshis to avoid FP error

pull/4/head
Jonathan "Duke" Leto 5 years ago
parent
commit
4f71319b75
  1. 19
      contrib/hush_supply

19
contrib/hush_supply

@ -2,25 +2,28 @@
use warnings;
use strict;
my $supply = 0.0;
my $block = 0;
my $amount = 12.5;
my $supply = 0.0;
my $block = 0;
my $satoshis = 100_000_000;
my $amount = int(12.5*$satoshis);
my $halvings = 0;
while ($supply <= 21_000_000) {
#while ($halvings <= 64 && $amount >= 1e-8) {
# Use this to calculate when supply hits a certain value
#while ($supply <= 21_000_000*$satoshis) {
# Use this to calculat when block rewards end
while ($halvings <= 64 && $amount >= 1) {
$block++;
if ($block < 5) {
$amount = 40_000;
$amount = 40_000 * $satoshis;
} else {
# Halving every 840000 blocks
if ($block % 840_000 == 0) {
$amount /= 2;
$halvings++;
}
$amount = 12.5 / (2**$halvings);
$amount = int(12.5*$satoshis) / (2**$halvings);
}
$supply += $amount;
# block, current supply, block reward amount, number of halvings
print "$block,$supply,$amount,$halvings\n";
printf "%s,%s,%s,%s\n", $block,$supply / $satoshis, $amount / $satoshis, $halvings;
}

Loading…
Cancel
Save