bitcoin_reward_era 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 16608263e0df7b5b6ec7bc9935aedde97fe0dd3c
4
- data.tar.gz: eef312efde3b543cbf76b829e08d64882f439043
3
+ metadata.gz: c1f73829b4afd9b52f56b93e78605af2df905510
4
+ data.tar.gz: ad12bf9921581b06e81f943ca4a4ad1b9419b4ea
5
5
  SHA512:
6
- metadata.gz: f1f79db458e33370135bcaa07779784af19d6cca7cfdf5639e6c676c625a1f22061682ee26e67b234a2aed21669ee2a8878d6c7a645d43a3c77071e6f75d998a
7
- data.tar.gz: 6fe32ac7ef5bebb96e270e95faa844ded44eecd6366275e66d2a52ba646d0186ea15c3668190b707a021c4ef85234d0c7062f6b2834981ee9313ff88b3fcb5fe
6
+ metadata.gz: db3fee494ac3a35aa3e524ad8d5fe4e142465b3e46473d526dbea19a48bf2ed7d2fd2ddb587769fe5c9355d3e1176b8546b58710a6ea9adbddb6169dc3e37da2
7
+ data.tar.gz: f3b6d46f2bbe24487345179c0186d81b9d895de4d566bb1c6b9a31241add6faf1a781d542ec3baac11a5a46c8a4dc6ae91b73470fef3678fcd253c000facd794
@@ -16,5 +16,5 @@ Style/Documentation:
16
16
  Style/MethodDefParentheses:
17
17
  EnforcedStyle: require_no_parentheses
18
18
 
19
- Style/RegexpLiteral:
20
- MaxSlashes: 0
19
+ Style/SpaceAroundOperators:
20
+ Enabled: false
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- bitcoin_reward_era (0.0.1)
4
+ bitcoin_reward_era (0.0.2)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -9,6 +9,7 @@ GEM
9
9
  ast (2.0.0)
10
10
  astrolabe (1.3.0)
11
11
  parser (>= 2.2.0.pre.3, < 3.0)
12
+ awesome_print (1.6.1)
12
13
  diff-lcs (1.2.5)
13
14
  minitest (5.5.1)
14
15
  parser (2.2.0.3)
@@ -23,7 +24,7 @@ GEM
23
24
  diff-lcs (>= 1.2.0, < 2.0)
24
25
  rspec-support (~> 3.2.0)
25
26
  rspec-support (3.2.2)
26
- rubocop (0.29.1)
27
+ rubocop (0.30.0)
27
28
  astrolabe (~> 1.3)
28
29
  parser (>= 2.2.0.1, < 3.0)
29
30
  powerpack (~> 0.1)
@@ -35,9 +36,10 @@ PLATFORMS
35
36
  ruby
36
37
 
37
38
  DEPENDENCIES
39
+ awesome_print (~> 1.6)
38
40
  bitcoin_reward_era!
39
41
  bundler (~> 1.8)
40
- minitest (~> 5.5.1)
42
+ minitest (~> 5.5, >= 5.5.1)
41
43
  rake (~> 10)
42
44
  rspec-expectations (~> 3.2)
43
45
  rspec-mocks (~> 3.2)
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem representing Bitcoin reward eras.
2
2
 
3
- 100% BigDecimal math (not Float or Fixnum).
3
+ 100% BigDecimal arithmetic.
4
4
 
5
5
  ```
6
6
  gem install 'bitcoin_reward_era'
@@ -12,7 +12,7 @@ Gem::Specification.new do |spec|
12
12
  spec.summary = 'Bitcoin reward era gem'
13
13
 
14
14
  spec.description = "Bitcoin reward era gem.\n" \
15
- '100% BigDecimal math (not Float or Fixnum).'
15
+ '100% BigDecimal arithmetic.'
16
16
 
17
17
  spec.homepage = 'https://github.com/tmornini/bitcoin_reward_era'
18
18
  spec.license = 'MIT'
@@ -24,6 +24,7 @@ Gem::Specification.new do |spec|
24
24
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename f }
25
25
  spec.require_paths = ['lib']
26
26
 
27
+ spec.add_development_dependency 'awesome_print', '~> 1.6'
27
28
  spec.add_development_dependency 'bundler', '~> 1.8'
28
29
  spec.add_development_dependency 'rake', '~> 10'
29
30
  spec.add_development_dependency 'minitest', '~> 5.5', '>= 5.5.1'
@@ -0,0 +1,28 @@
1
+ # -*- encoding : utf-8 -*-
2
+
3
+ require 'delegate'
4
+ require 'bigdecimal'
5
+
6
+ module BitcoinRewardEra
7
+ class Amount < SimpleDelegator
8
+ def initialize amount
9
+ super(BigDecimal amount)
10
+ end
11
+
12
+ def inspect
13
+ to_s
14
+ end
15
+
16
+ def to_json _state_ = nil
17
+ %("#{self}")
18
+ end
19
+
20
+ def to_s pattern = 'F'
21
+ __getobj__.to_s pattern
22
+ end
23
+
24
+ def to_str
25
+ to_s
26
+ end
27
+ end
28
+ end
@@ -1,40 +1,40 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
 
3
- require 'bigdecimal'
4
3
  require 'time'
5
4
 
5
+ require 'bitcoin_reward_era/amount'
6
+
6
7
  module BitcoinRewardEra
7
8
  class Calculator
8
- BLOCKS_PER_REWARD_ERA = 210_000
9
- SECONDS_PER_REWARD_ERA = BLOCKS_PER_REWARD_ERA * 10 * 60
9
+ BLOCKS_PER_REWARD_ERA = Amount.new(210_000)
10
+ SECONDS_PER_REWARD_ERA = Amount.new(BLOCKS_PER_REWARD_ERA * 10 * 60)
10
11
  GENESIS_BLOCK_TIME = Time.at(1_231_006_505).utc
11
12
 
12
13
  attr_reader :reward_era_number
13
14
 
14
15
  def initialize config
15
- @representation_klass = config[:representation_klass] || Representation
16
- @bigdecimal_klass = config[:bigdecimal_klass] || BigDecimal
17
16
  @time_klass = config[:time_klass] || Time
17
+ @amount_klass = config[:amount_klass] || Amount
18
18
 
19
- @reward_era_number = config[:reward_era_number].to_i
19
+ @reward_era_number = @amount_klass.new config[:reward_era_number]
20
20
  end
21
21
 
22
- def first_block_in_era
23
- last_reward_era_number * BLOCKS_PER_REWARD_ERA
22
+ def first_block
23
+ Amount.new last_reward_era_number * BLOCKS_PER_REWARD_ERA
24
24
  end
25
25
 
26
26
  def btc_per_block
27
- reward = BigDecimal 50
27
+ initial_reward = @amount_klass.new 50
28
28
 
29
- truncate_at_satoshis reward / (2**last_reward_era_number)
29
+ truncate_at_satoshis initial_reward / (2**last_reward_era_number)
30
30
  end
31
31
 
32
32
  def year
33
- beginning_of_reward_era.year + portion_of_year
33
+ Amount.new this_year + portion_of_year
34
34
  end
35
35
 
36
36
  def start_btc
37
- btc_in_circulation = 0
37
+ btc_in_circulation = BigDecimal 0
38
38
 
39
39
  1.upto last_reward_era_number do |ren|
40
40
  btc_in_circulation +=
@@ -42,11 +42,11 @@ module BitcoinRewardEra
42
42
  .btc_per_block * BLOCKS_PER_REWARD_ERA
43
43
  end
44
44
 
45
- btc_in_circulation
45
+ Amount.new btc_in_circulation
46
46
  end
47
47
 
48
48
  def btc_added
49
- end_btc - start_btc
49
+ Amount.new end_btc - start_btc
50
50
  end
51
51
 
52
52
  def end_btc
@@ -54,41 +54,41 @@ module BitcoinRewardEra
54
54
  end
55
55
 
56
56
  def btc_increase_percentage
57
- btc_added / last_calculator.end_btc
57
+ Amount.new btc_added / last_calculator.end_btc
58
58
  end
59
59
 
60
60
  def end_btc_percent_of_limit
61
- end_btc / final_calculator.end_btc
61
+ Amount.new end_btc / final_calculator.end_btc
62
62
  end
63
63
 
64
64
  def supply_inflation_rate
65
- ((1 + btc_increase_percentage)**0.25) - 1
65
+ Amount.new(((1 + btc_increase_percentage)**0.25) - 1)
66
66
  end
67
67
 
68
68
  private
69
69
 
70
+ def truncate_at_satoshis amount
71
+ string = amount.to_s '8F'
72
+
73
+ truncation_match = string.match(/^\d+[.]\d+/)
74
+
75
+ @amount_klass.new truncation_match[0]
76
+ end
77
+
70
78
  def last_reward_era_number
71
- @reward_era_number - 1
79
+ Amount.new @reward_era_number - 1
72
80
  end
73
81
 
74
82
  def next_reward_era_number
75
- @reward_era_number + 1
83
+ Amount.new @reward_era_number + 1
76
84
  end
77
85
 
78
86
  def final_reward_era_number
79
- 34
80
- end
81
-
82
- def truncate_at_satoshis btc
83
- string = btc.to_s '8F'
84
-
85
- truncation_match = string.match(/^\d+[.]\d+/)
86
-
87
- BigDecimal truncation_match[0]
87
+ Amount.new 34
88
88
  end
89
89
 
90
90
  def seconds_since_block_zero
91
- first_block_in_era * 60 * 10
91
+ Amount.new first_block * 60 * 10
92
92
  end
93
93
 
94
94
  def beginning_of_reward_era
@@ -96,28 +96,25 @@ module BitcoinRewardEra
96
96
  end
97
97
 
98
98
  def this_year
99
- beginning_of_reward_era.year
99
+ Amount.new beginning_of_reward_era.year
100
100
  end
101
101
 
102
102
  def portion_of_year
103
103
  next_year = this_year + 1
104
104
 
105
- beginning_of_this_year = Time.new(this_year, 1, 1, 0, 0, 0, '+00:00').utc
106
- beginning_of_next_year = Time.new(next_year, 1, 1, 0, 0, 0, '+00:00').utc
105
+ beginning_of_this_year =
106
+ Time.new(this_year, 1, 1, 0, 0, 0, '+00:00').utc.to_i
107
+
108
+ beginning_of_next_year =
109
+ Time.new(next_year, 1, 1, 0, 0, 0, '+00:00').utc.to_i
107
110
 
108
- portion_of_this_year =
109
- (beginning_of_reward_era - beginning_of_this_year) /
110
- (beginning_of_next_year - beginning_of_this_year)
111
+ bd_beginning_of_reward_era = BigDecimal beginning_of_reward_era.to_i
111
112
 
112
- # ap beginning_of_this_year: beginning_of_this_year,
113
- # beginning_of_this_year_i: beginning_of_this_year.to_i,
114
- # beginning_of_reward_era: beginning_of_reward_era,
115
- # beginning_of_reward_era_i: beginning_of_reward_era.to_i,
116
- # beginning_of_next_year: beginning_of_next_year,
117
- # beginning_of_next_year_i: beginning_of_next_year.to_i,
118
- # portion_of_this_year: portion_of_this_year
113
+ bd_portion_of_year =
114
+ BigDecimal(bd_beginning_of_reward_era - beginning_of_this_year) /
115
+ BigDecimal(beginning_of_next_year - beginning_of_this_year)
119
116
 
120
- portion_of_this_year
117
+ Amount.new bd_portion_of_year
121
118
  end
122
119
 
123
120
  def last_calculator
@@ -11,7 +11,7 @@ module BitcoinRewardEra
11
11
 
12
12
  def to_representation
13
13
  {
14
- block: @calculator.first_block_in_era,
14
+ first_block: @calculator.first_block,
15
15
  reward_era_number: @calculator.reward_era_number,
16
16
  btc_per_block: @calculator.btc_per_block,
17
17
  year: @calculator.year,
@@ -26,7 +26,7 @@ module BitcoinRewardEra
26
26
 
27
27
  def to_s
28
28
  [
29
- format('%7d', @calculator.first_block_in_era),
29
+ format('%7d', @calculator.first_block),
30
30
  format('%10d', @calculator.reward_era_number),
31
31
  align(@calculator.btc_per_block, 2),
32
32
  align(@calculator.year, 4, 3),
@@ -1,5 +1,5 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
 
3
3
  module BitcoinRewardEra
4
- VERSION = '0.0.1'
4
+ VERSION = '0.0.2'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bitcoin_reward_era
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tom Mornini
@@ -10,6 +10,20 @@ bindir: exe
10
10
  cert_chain: []
11
11
  date: 2015-04-06 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: awesome_print
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -102,7 +116,7 @@ dependencies:
102
116
  version: '0.29'
103
117
  description: |-
104
118
  Bitcoin reward era gem.
105
- 100% BigDecimal math (not Float or Fixnum).
119
+ 100% BigDecimal arithmetic.
106
120
  email:
107
121
  - tom@subledger.com
108
122
  executables:
@@ -120,6 +134,7 @@ files:
120
134
  - bitcoin_reward_era.gemspec
121
135
  - exe/btc_money_supply
122
136
  - lib/bitcoin_reward_era.rb
137
+ - lib/bitcoin_reward_era/amount.rb
123
138
  - lib/bitcoin_reward_era/calculator.rb
124
139
  - lib/bitcoin_reward_era/report.rb
125
140
  - lib/bitcoin_reward_era/representation.rb