class BitcoinRewardEra::Calculator
Constants
- BLOCKS_PER_REWARD_ERA
- GENESIS_BLOCK_TIME
- SECONDS_PER_REWARD_ERA
Attributes
reward_era_number[R]
Public Class Methods
new(config)
click to toggle source
# File lib/bitcoin_reward_era/calculator.rb, line 14 def initialize config @time_klass = config[:time_klass] || Time @amount_klass = config[:amount_klass] || Amount @reward_era_number = @amount_klass.new config[:reward_era_number] end
Public Instance Methods
btc_added()
click to toggle source
# File lib/bitcoin_reward_era/calculator.rb, line 47 def btc_added Amount.new end_btc - start_btc end
btc_increase_percentage()
click to toggle source
# File lib/bitcoin_reward_era/calculator.rb, line 55 def btc_increase_percentage Amount.new btc_added / last_calculator.end_btc end
btc_per_block()
click to toggle source
# File lib/bitcoin_reward_era/calculator.rb, line 25 def btc_per_block initial_reward = @amount_klass.new 50 truncate_at_satoshis initial_reward / (2**last_reward_era_number) end
end_btc()
click to toggle source
# File lib/bitcoin_reward_era/calculator.rb, line 51 def end_btc next_calculator.start_btc end
end_btc_percent_of_limit()
click to toggle source
# File lib/bitcoin_reward_era/calculator.rb, line 59 def end_btc_percent_of_limit Amount.new end_btc / final_calculator.end_btc end
first_block()
click to toggle source
# File lib/bitcoin_reward_era/calculator.rb, line 21 def first_block Amount.new last_reward_era_number * BLOCKS_PER_REWARD_ERA end
start_btc()
click to toggle source
# File lib/bitcoin_reward_era/calculator.rb, line 35 def start_btc btc_in_circulation = BigDecimal 0 1.upto last_reward_era_number do |ren| btc_in_circulation += self.class.new(reward_era_number: ren) .btc_per_block * BLOCKS_PER_REWARD_ERA end Amount.new btc_in_circulation end
supply_inflation_rate()
click to toggle source
# File lib/bitcoin_reward_era/calculator.rb, line 63 def supply_inflation_rate Amount.new(((1 + btc_increase_percentage)**0.25) - 1) end
year()
click to toggle source
# File lib/bitcoin_reward_era/calculator.rb, line 31 def year Amount.new this_year + portion_of_year end
Private Instance Methods
beginning_of_reward_era()
click to toggle source
# File lib/bitcoin_reward_era/calculator.rb, line 93 def beginning_of_reward_era GENESIS_BLOCK_TIME + seconds_since_block_zero end
final_calculator()
click to toggle source
# File lib/bitcoin_reward_era/calculator.rb, line 127 def final_calculator self.class.new reward_era_number: final_reward_era_number end
final_reward_era_number()
click to toggle source
# File lib/bitcoin_reward_era/calculator.rb, line 85 def final_reward_era_number Amount.new 34 end
last_calculator()
click to toggle source
# File lib/bitcoin_reward_era/calculator.rb, line 119 def last_calculator self.class.new reward_era_number: last_reward_era_number end
last_reward_era_number()
click to toggle source
# File lib/bitcoin_reward_era/calculator.rb, line 77 def last_reward_era_number Amount.new @reward_era_number - 1 end
next_calculator()
click to toggle source
# File lib/bitcoin_reward_era/calculator.rb, line 123 def next_calculator self.class.new reward_era_number: next_reward_era_number end
next_reward_era_number()
click to toggle source
# File lib/bitcoin_reward_era/calculator.rb, line 81 def next_reward_era_number Amount.new @reward_era_number + 1 end
portion_of_year()
click to toggle source
# File lib/bitcoin_reward_era/calculator.rb, line 101 def portion_of_year next_year = this_year + 1 beginning_of_this_year = Time.new(this_year, 1, 1, 0, 0, 0, '+00:00').utc.to_i beginning_of_next_year = Time.new(next_year, 1, 1, 0, 0, 0, '+00:00').utc.to_i bd_beginning_of_reward_era = BigDecimal beginning_of_reward_era.to_i bd_portion_of_year = BigDecimal(bd_beginning_of_reward_era - beginning_of_this_year) / BigDecimal(beginning_of_next_year - beginning_of_this_year) Amount.new bd_portion_of_year end
seconds_since_block_zero()
click to toggle source
# File lib/bitcoin_reward_era/calculator.rb, line 89 def seconds_since_block_zero Amount.new first_block * 60 * 10 end
this_year()
click to toggle source
# File lib/bitcoin_reward_era/calculator.rb, line 97 def this_year Amount.new beginning_of_reward_era.year end
truncate_at_satoshis(amount)
click to toggle source
# File lib/bitcoin_reward_era/calculator.rb, line 69 def truncate_at_satoshis amount string = amount.to_s '8F' truncation_match = string.match(/^\d+[.]\d+/) @amount_klass.new truncation_match[0] end