sibit 0.21.0 → 0.21.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b6560adb5310350a01c7d22c8fa4dd58abc73e9c60c737117d8929cc1a77bdc1
4
- data.tar.gz: 31f7e57e269801972b5e3f8cb11f29d9ff847a214b29f488c0a809bc35d0341e
3
+ metadata.gz: e9a648e75088ba27f0c8c0f70ffa0bff4eab4aad0942f2c5f8b51b9eccb39109
4
+ data.tar.gz: 2682a77e3eefe9fe800dce91f3497d36a6fd6d81910c3e9f005d207b2022245f
5
5
  SHA512:
6
- metadata.gz: 87d170b48eca5cd5ecd76d6e60bbf9b2fb5575f1e203a92aab6d10547fcfbf9043f30e55d12f21e45ff6929ab46538a2c56edd103df8e48cc0e621fca1810fe2
7
- data.tar.gz: 910666d824ba0e74414e39a51d18b3e5fbbeae6af37cd4c8d15cf27e2b591a1b3d0b992f98b324e3c43dc0fa07ae5a5d19e0bb403f5958242e2f47a2eaeb412a
6
+ metadata.gz: 75579cc314eddf9d74f26d74f6ea68f1ad0e7148e5f1111b61d97b1cb6d3ec4e5c6c275074ce5d70dfd2071abb0c7436c6b408dfedae773394b63ffbc2d3dce6
7
+ data.tar.gz: 598291e668fc4aca8a2ab25e159458a0d6f47c2f856e1eb529b1d0d3d55ccaa0f86d004442906ba9ac0b8079067c6a866b76f3854bcdcdefe8bdd78225b0d1f0
data/.simplecov CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2019-2020 Yegor Bugayenko
3
+ # Copyright (c) 2019-2021 Yegor Bugayenko
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  # of this software and associated documentation files (the 'Software'), to deal
data/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2019-2020 Yegor Bugayenko
3
+ # Copyright (c) 2019-2021 Yegor Bugayenko
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  # of this software and associated documentation files (the 'Software'), to deal
data/LICENSE.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  (The MIT License)
2
2
 
3
- Copyright (c) 2019-2020 Yegor Bugayenko
3
+ Copyright (c) 2019-2021 Yegor Bugayenko
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the 'Software'), to deal
data/Rakefile CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2019-2020 Yegor Bugayenko
3
+ # Copyright (c) 2019-2021 Yegor Bugayenko
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  # of this software and associated documentation files (the 'Software'), to deal
data/bin/sibit CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
  # frozen_string_literal: true
3
3
 
4
- # Copyright (c) 2019-2020 Yegor Bugayenko
4
+ # Copyright (c) 2019-2021 Yegor Bugayenko
5
5
  #
6
6
  # Permission is hereby granted, free of charge, to any person obtaining a copy
7
7
  # of this software and associated documentation files (the 'Software'), to deal
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2019-2020 Yegor Bugayenko
3
+ # Copyright (c) 2019-2021 Yegor Bugayenko
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  # of this software and associated documentation files (the 'Software'), to deal
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2019-2020 Yegor Bugayenko
3
+ # Copyright (c) 2019-2021 Yegor Bugayenko
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  # of this software and associated documentation files (the 'Software'), to deal
data/lib/sibit.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2019-2020 Yegor Bugayenko
3
+ # Copyright (c) 2019-2021 Yegor Bugayenko
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  # of this software and associated documentation files (the 'Software'), to deal
@@ -28,7 +28,7 @@ require_relative 'sibit/blockchain'
28
28
  # Sibit main class.
29
29
  #
30
30
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
31
- # Copyright:: Copyright (c) 2019-2020 Yegor Bugayenko
31
+ # Copyright:: Copyright (c) 2019-2021 Yegor Bugayenko
32
32
  # License:: MIT
33
33
  class Sibit
34
34
  # Constructor.
@@ -55,6 +55,7 @@ class Sibit
55
55
 
56
56
  # Current price of 1 BTC in USD (or another currency), float returned.
57
57
  def price(currency = 'USD')
58
+ raise Error, "Invalid currency #{currency.inspect}" unless /^[A-Z]{3}$/.match?(currency)
58
59
  @api.price(currency)
59
60
  end
60
61
 
@@ -74,16 +75,19 @@ class Sibit
74
75
 
75
76
  # Gets the balance of the address, in satoshi.
76
77
  def balance(address)
78
+ raise Error, "Invalid address #{address.inspect}" unless /^[0-9a-zA-Z]+$/.match?(address)
77
79
  @api.balance(address)
78
80
  end
79
81
 
80
82
  # Get the height of the block.
81
83
  def height(hash)
84
+ raise Error, "Invalid block hash #{hash.inspect}" unless /^[0-9a-f]{64}$/.match?(hash)
82
85
  @api.height(hash)
83
86
  end
84
87
 
85
88
  # Get the hash of the next block.
86
89
  def next_of(hash)
90
+ raise Error, "Invalid block hash #{hash.inspect}" unless /^[0-9a-f]{64}$/.match?(hash)
87
91
  @api.next_of(hash)
88
92
  end
89
93
 
@@ -182,6 +186,8 @@ class Sibit
182
186
  # in satoshi. The callback should return non-false if the transaction
183
187
  # found was useful.
184
188
  def scan(start, max: 4)
189
+ raise Error, "Invalid block hash #{start.inspect}" unless /^[0-9a-f]{64}$/.match?(start)
190
+ raise Error, "The max number must be above zero: #{max}" if max < 1
185
191
  block = start
186
192
  count = 0
187
193
  wrong = []
data/lib/sibit/bestof.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2019-2020 Yegor Bugayenko
3
+ # Copyright (c) 2019-2021 Yegor Bugayenko
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  # of this software and associated documentation files (the 'Software'), to deal
@@ -27,7 +27,7 @@ require_relative 'log'
27
27
  # API best of.
28
28
  #
29
29
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
30
- # Copyright:: Copyright (c) 2019-2020 Yegor Bugayenko
30
+ # Copyright:: Copyright (c) 2019-2021 Yegor Bugayenko
31
31
  # License:: MIT
32
32
  class Sibit
33
33
  # Best of API.
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2019-2020 Yegor Bugayenko
3
+ # Copyright (c) 2019-2021 Yegor Bugayenko
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  # of this software and associated documentation files (the 'Software'), to deal
@@ -20,18 +20,19 @@
20
20
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
21
  # SOFTWARE.
22
22
 
23
- require 'uri'
23
+ require 'iri'
24
24
  require 'json'
25
- require_relative 'version'
25
+ require 'uri'
26
26
  require_relative 'error'
27
- require_relative 'log'
28
27
  require_relative 'http'
29
28
  require_relative 'json'
29
+ require_relative 'log'
30
+ require_relative 'version'
30
31
 
31
32
  # Bitcoinchain.com API.
32
33
  #
33
34
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
34
- # Copyright:: Copyright (c) 2019-2020 Yegor Bugayenko
35
+ # Copyright:: Copyright (c) 2019-2021 Yegor Bugayenko
35
36
  # License:: MIT
36
37
  class Sibit
37
38
  # Btc.com API.
@@ -56,7 +57,7 @@ class Sibit
56
57
  # Get hash of the block after this one.
57
58
  def next_of(hash)
58
59
  block = Sibit::Json.new(http: @http, log: @log).get(
59
- URI("https://api-r.bitcoinchain.com/v1/block/#{hash}")
60
+ Iri.new('https://api-r.bitcoinchain.com/v1/block').append(hash)
60
61
  )[0]
61
62
  raise Sibit::Error, "Block #{hash} not found" if block.nil?
62
63
  nxt = block['next_block']
@@ -69,7 +70,7 @@ class Sibit
69
70
  # Gets the balance of the address, in satoshi.
70
71
  def balance(address)
71
72
  json = Sibit::Json.new(http: @http, log: @log).get(
72
- URI("https://api-r.bitcoinchain.com/v1/address/#{address}"),
73
+ Iri.new('https://api-r.bitcoinchain.com/v1/address').append(address),
73
74
  accept: [200, 409]
74
75
  )[0]
75
76
  b = json['balance']
@@ -91,7 +92,7 @@ class Sibit
91
92
  # Gets the hash of the latest block.
92
93
  def latest
93
94
  hash = Sibit::Json.new(http: @http, log: @log).get(
94
- URI('https://api-r.bitcoinchain.com/v1/status')
95
+ Iri.new('https://api-r.bitcoinchain.com/v1/status')
95
96
  )['hash']
96
97
  @log.info("The latest block hash is #{hash}")
97
98
  hash
@@ -111,11 +112,11 @@ class Sibit
111
112
  # an exception if the block is not found.
112
113
  def block(hash)
113
114
  head = Sibit::Json.new(http: @http, log: @log).get(
114
- URI("https://api-r.bitcoinchain.com/v1/block/#{hash}")
115
+ Iri.new('https://api-r.bitcoinchain.com/v1/block').append(hash)
115
116
  )[0]
116
117
  raise Sibit::Error, "The block #{hash} is not found" if head.nil?
117
118
  txs = Sibit::Json.new(http: @http, log: @log).get(
118
- URI("https://api-r.bitcoinchain.com/v1/block/txs/#{hash}")
119
+ Iri.new('https://api-r.bitcoinchain.com/v1/block/txs').append(hash)
119
120
  )
120
121
  nxt = head['next_block']
121
122
  nxt = nil if nxt == '0000000000000000000000000000000000000000000000000000000000000000'
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2019-2020 Yegor Bugayenko
3
+ # Copyright (c) 2019-2021 Yegor Bugayenko
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  # of this software and associated documentation files (the 'Software'), to deal
@@ -21,12 +21,13 @@
21
21
  # SOFTWARE.
22
22
 
23
23
  require 'bitcoin'
24
+ require 'iri'
24
25
  require 'json'
25
26
  require 'uri'
26
- require_relative 'version'
27
27
  require_relative 'error'
28
28
  require_relative 'http'
29
29
  require_relative 'json'
30
+ require_relative 'version'
30
31
 
31
32
  # Blockchain.info API.
32
33
  #
@@ -34,7 +35,7 @@ require_relative 'json'
34
35
  # https://www.blockchain.com/api/blockchain_api
35
36
  #
36
37
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
37
- # Copyright:: Copyright (c) 2019-2020 Yegor Bugayenko
38
+ # Copyright:: Copyright (c) 2019-2021 Yegor Bugayenko
38
39
  # License:: MIT
39
40
  class Sibit
40
41
  # Blockchain.info API.
@@ -49,7 +50,7 @@ class Sibit
49
50
  # Current price of BTC in USD (float returned).
50
51
  def price(currency = 'USD')
51
52
  h = Sibit::Json.new(http: @http, log: @log).get(
52
- URI('https://blockchain.info/ticker')
53
+ Iri.new('https://blockchain.info/ticker')
53
54
  )[currency]
54
55
  raise Error, "Unrecognized currency #{currency}" if h.nil?
55
56
  price = h['15m']
@@ -58,19 +59,24 @@ class Sibit
58
59
  end
59
60
 
60
61
  # Get hash of the block after this one.
61
- def next_of(hash)
62
- json = Sibit::Json.new(http: @http, log: @log).get(
63
- URI("https://blockchain.info/rawblock/#{hash}")
64
- )
65
- nxt = json['next_block']
66
- @log.info("The next block of #{hash} is #{nxt}")
67
- nxt
62
+ def next_of(_hash)
63
+ raise Sibit::NotSupportedError, 'next_of() in Blockchain API is broken, always returns NULL'
64
+ # json = Sibit::Json.new(http: @http, log: @log).get(
65
+ # Iri.new('https://blockchain.info/rawblock').append(hash)
66
+ # )
67
+ # nxt = json['next_block'][0]
68
+ # if nxt.nil?
69
+ # @log.info("There is no block after #{hash}")
70
+ # else
71
+ # @log.info("The next block of #{hash} is #{nxt}")
72
+ # end
73
+ # nxt
68
74
  end
69
75
 
70
76
  # The height of the block.
71
77
  def height(hash)
72
78
  json = Sibit::Json.new(http: @http, log: @log).get(
73
- URI("https://blockchain.info/rawblock/#{hash}")
79
+ Iri.new('https://blockchain.info/rawblock').append(hash)
74
80
  )
75
81
  h = json['height']
76
82
  @log.info("The height of #{hash} is #{h}")
@@ -80,7 +86,7 @@ class Sibit
80
86
  # Gets the balance of the address, in satoshi.
81
87
  def balance(address)
82
88
  json = Sibit::Json.new(http: @http, log: @log).get(
83
- URI("https://blockchain.info/rawaddr/#{address}?limit=0"),
89
+ Iri.new('https://blockchain.info/rawaddr').append(address).add(limit: 0),
84
90
  accept: [200, 500]
85
91
  )
86
92
  b = json['final_balance']
@@ -97,7 +103,7 @@ class Sibit
97
103
  # of Bitcoin addresses.
98
104
  def utxos(sources)
99
105
  Sibit::Json.new(http: @http, log: @log).get(
100
- URI("https://blockchain.info/unspent?active=#{sources.join('|')}&limit=1000")
106
+ Iri.new('https://blockchain.info/unspent').add(active: sources.join('|'), limit: 1000)
101
107
  )['unspent_outputs'].map do |u|
102
108
  {
103
109
  value: u['value'],
@@ -113,7 +119,7 @@ class Sibit
113
119
  def push(hex)
114
120
  return if @dry
115
121
  Sibit::Json.new(http: @http, log: @log).post(
116
- URI('https://blockchain.info/pushtx'),
122
+ Iri.new('https://blockchain.info/pushtx'),
117
123
  hex
118
124
  )
119
125
  end
@@ -121,7 +127,7 @@ class Sibit
121
127
  # Gets the hash of the latest block.
122
128
  def latest
123
129
  hash = Sibit::Json.new(http: @http, log: @log).get(
124
- URI('https://blockchain.info/latestblock')
130
+ Iri.new('https://blockchain.info/latestblock')
125
131
  )['hash']
126
132
  @log.info("The latest block hash is #{hash}")
127
133
  hash
@@ -130,7 +136,7 @@ class Sibit
130
136
  # This method should fetch a Blockchain block and return as a hash.
131
137
  def block(hash)
132
138
  json = Sibit::Json.new(http: @http, log: @log).get(
133
- URI("https://blockchain.info/rawblock/#{hash}")
139
+ Iri.new('https://blockchain.info/rawblock').append(hash)
134
140
  )
135
141
  {
136
142
  hash: json['hash'],
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2019-2020 Yegor Bugayenko
3
+ # Copyright (c) 2019-2021 Yegor Bugayenko
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  # of this software and associated documentation files (the 'Software'), to deal
@@ -20,19 +20,20 @@
20
20
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
21
  # SOFTWARE.
22
22
 
23
- require 'uri'
24
- require 'json'
25
23
  require 'cgi'
26
- require_relative 'version'
24
+ require 'iri'
25
+ require 'json'
26
+ require 'uri'
27
27
  require_relative 'error'
28
- require_relative 'log'
29
28
  require_relative 'http'
30
29
  require_relative 'json'
30
+ require_relative 'log'
31
+ require_relative 'version'
31
32
 
32
33
  # Blockchair.com API.
33
34
  #
34
35
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
35
- # Copyright:: Copyright (c) 2019-2020 Yegor Bugayenko
36
+ # Copyright:: Copyright (c) 2019-2021 Yegor Bugayenko
36
37
  # License:: MIT
37
38
  class Sibit
38
39
  # Btc.com API.
@@ -64,7 +65,7 @@ class Sibit
64
65
  # Gets the balance of the address, in satoshi.
65
66
  def balance(address)
66
67
  json = Sibit::Json.new(http: @http, log: @log).get(
67
- URI("https://api.blockchair.com/bitcoin/dashboards/address/#{address}?#{the_key}")
68
+ Iri.new('https://api.blockchair.com/bitcoin/dashboards/address').append(address).fragment(the_key)
68
69
  )['data'][address]
69
70
  if json.nil?
70
71
  @log.info("Address #{address} not found")
@@ -94,7 +95,7 @@ class Sibit
94
95
  # Push this transaction (in hex format) to the network.
95
96
  def push(hex)
96
97
  Sibit::Json.new(http: @http, log: @log).post(
97
- URI("https://api.blockchair.com/bitcoin/push/transaction?#{the_key}"),
98
+ Iri.new('https://api.blockchair.com/bitcoin/push/transaction').fragment(the_key),
98
99
  "data=#{hex}"
99
100
  )
100
101
  @log.info("Transaction (#{hex.length} in hex) has been pushed to Blockchair")
data/lib/sibit/btc.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2019-2020 Yegor Bugayenko
3
+ # Copyright (c) 2019-2021 Yegor Bugayenko
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  # of this software and associated documentation files (the 'Software'), to deal
@@ -20,20 +20,21 @@
20
20
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
21
  # SOFTWARE.
22
22
 
23
- require 'uri'
23
+ require 'iri'
24
24
  require 'json'
25
- require_relative 'version'
25
+ require 'uri'
26
26
  require_relative 'error'
27
- require_relative 'log'
28
27
  require_relative 'http'
29
28
  require_relative 'json'
29
+ require_relative 'log'
30
+ require_relative 'version'
30
31
 
31
32
  # Btc.com API.
32
33
  #
33
34
  # Here: https://btc.com/api-doc
34
35
  #
35
36
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
36
- # Copyright:: Copyright (c) 2019-2020 Yegor Bugayenko
37
+ # Copyright:: Copyright (c) 2019-2021 Yegor Bugayenko
37
38
  # License:: MIT
38
39
  class Sibit
39
40
  # Btc.com API.
@@ -52,7 +53,7 @@ class Sibit
52
53
 
53
54
  # Gets the balance of the address, in satoshi.
54
55
  def balance(address)
55
- uri = URI("https://chain.api.btc.com/v3/address/#{address}/unspent")
56
+ uri = Iri.new('https://chain.api.btc.com/v3/address').append(address).append('unspent')
56
57
  json = Sibit::Json.new(http: @http, log: @log).get(uri)
57
58
  if json['err_no'] == 1
58
59
  @log.info("The balance of #{address} is zero (not found)")
@@ -76,13 +77,13 @@ class Sibit
76
77
  # Get hash of the block after this one.
77
78
  def next_of(hash)
78
79
  head = Sibit::Json.new(http: @http, log: @log).get(
79
- URI("https://chain.api.btc.com/v3/block/#{hash}")
80
+ Iri.new('https://chain.api.btc.com/v3/block').append(hash)
80
81
  )
81
82
  data = head['data']
82
83
  raise Sibit::Error, "The block #{hash} not found" if data.nil?
83
84
  nxt = data['next_block_hash']
84
85
  nxt = nil if nxt == '0000000000000000000000000000000000000000000000000000000000000000'
85
- @log.info("The block #{hash} is the latest, there is no next block") if nxt.nil?
86
+ @log.info("In BTC.com the block #{hash} is the latest, there is no next block") if nxt.nil?
86
87
  @log.info("The next block of #{hash} is #{nxt}") unless nxt.nil?
87
88
  nxt
88
89
  end
@@ -90,7 +91,7 @@ class Sibit
90
91
  # The height of the block.
91
92
  def height(hash)
92
93
  json = Sibit::Json.new(http: @http, log: @log).get(
93
- URI("https://chain.api.btc.com/v3/block/#{hash}")
94
+ Iri.new('https://chain.api.btc.com/v3/block').append(hash)
94
95
  )
95
96
  data = json['data']
96
97
  raise Sibit::Error, "The block #{hash} not found" if data.nil?
@@ -107,7 +108,7 @@ class Sibit
107
108
 
108
109
  # Gets the hash of the latest block.
109
110
  def latest
110
- uri = URI('https://chain.api.btc.com/v3/block/latest')
111
+ uri = Iri.new('https://chain.api.btc.com/v3/block/latest')
111
112
  json = Sibit::Json.new(http: @http, log: @log).get(uri)
112
113
  data = json['data']
113
114
  raise Sibit::Error, 'The latest block not found' if data.nil?
@@ -121,7 +122,7 @@ class Sibit
121
122
  txns = []
122
123
  sources.each do |hash|
123
124
  json = Sibit::Json.new(http: @http, log: @log).get(
124
- URI("https://chain.api.btc.com/v3/address/#{hash}/unspent")
125
+ Iri.new('https://chain.api.btc.com/v3/address').append(hash).append('unspent')
125
126
  )
126
127
  data = json['data']
127
128
  raise Sibit::Error, "The address #{hash} not found" if data.nil?
@@ -129,7 +130,7 @@ class Sibit
129
130
  next if txns.nil?
130
131
  txns.each do |u|
131
132
  outs = Sibit::Json.new(http: @http, log: @log).get(
132
- URI("https://chain.api.btc.com/v3/tx/#{u['tx_hash']}?verbose=3")
133
+ Iri.new('https://chain.api.btc.com/v3/tx').append(u['tx_hash']).add(verbose: 3)
133
134
  )['data']['outputs']
134
135
  outs.each_with_index do |o, i|
135
136
  next unless o['addresses'].include?(hash)
@@ -154,7 +155,7 @@ class Sibit
154
155
  # This method should fetch a Blockchain block and return as a hash.
155
156
  def block(hash)
156
157
  head = Sibit::Json.new(http: @http, log: @log).get(
157
- URI("https://chain.api.btc.com/v3/block/#{hash}")
158
+ Iri.new('https://chain.api.btc.com/v3/block').append(hash)
158
159
  )
159
160
  data = head['data']
160
161
  raise Sibit::Error, "The block #{hash} not found" if data.nil?
@@ -177,7 +178,8 @@ class Sibit
177
178
  all = []
178
179
  loop do
179
180
  data = Sibit::Json.new(http: @http, log: @log).get(
180
- URI("https://chain.api.btc.com/v3/block/#{hash}/tx?page=#{page}&pagesize=#{psize}")
181
+ Iri.new('https://chain.api.btc.com/v3/block')
182
+ .append(hash).append('tx').add(page: page, pagesize: psize)
181
183
  )['data']
182
184
  raise Sibit::Error, "The block #{hash} has no data at page #{page}" if data.nil?
183
185
  list = data['list']
data/lib/sibit/cex.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2019-2020 Yegor Bugayenko
3
+ # Copyright (c) 2019-2021 Yegor Bugayenko
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  # of this software and associated documentation files (the 'Software'), to deal
@@ -30,7 +30,7 @@ require_relative 'json'
30
30
  # Cex.io API.
31
31
  #
32
32
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
33
- # Copyright:: Copyright (c) 2019-2020 Yegor Bugayenko
33
+ # Copyright:: Copyright (c) 2019-2021 Yegor Bugayenko
34
34
  # License:: MIT
35
35
  class Sibit
36
36
  # Btc.com API.
@@ -45,7 +45,7 @@ class Sibit
45
45
  # Current price of BTC in USD (float returned).
46
46
  def price(currency = 'USD')
47
47
  json = Sibit::Json.new(http: @http, log: @log).get(
48
- URI("https://cex.io/api/last_price/BTC/#{currency}")
48
+ Iri.new('https://cex.io/api/last_price/BTC').append(currency)
49
49
  )
50
50
  p = json['lprice'].to_f
51
51
  @log.info("The price of BTC is #{p} #{currency}")
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2019-2020 Yegor Bugayenko
3
+ # Copyright (c) 2019-2021 Yegor Bugayenko
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  # of this software and associated documentation files (the 'Software'), to deal
@@ -20,18 +20,19 @@
20
20
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
21
  # SOFTWARE.
22
22
 
23
- require 'uri'
23
+ require 'iri'
24
24
  require 'json'
25
- require_relative 'version'
25
+ require 'uri'
26
26
  require_relative 'error'
27
- require_relative 'log'
28
27
  require_relative 'http'
29
28
  require_relative 'json'
29
+ require_relative 'log'
30
+ require_relative 'version'
30
31
 
31
32
  # Cryptoapis.io API.
32
33
  #
33
34
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
34
- # Copyright:: Copyright (c) 2019-2020 Yegor Bugayenko
35
+ # Copyright:: Copyright (c) 2019-2021 Yegor Bugayenko
35
36
  # License:: MIT
36
37
  class Sibit
37
38
  # Btc.com API.
@@ -52,7 +53,7 @@ class Sibit
52
53
  # Get hash of the block after this one.
53
54
  def next_of(hash)
54
55
  nxt = Sibit::Json.new(http: @http, log: @log).get(
55
- URI("https://api.cryptoapis.io/v1/bc/btc/mainnet/blocks/#{hash}"),
56
+ Iri.new('https://api.cryptoapis.io/v1/bc/btc/mainnet/blocks').append(hash),
56
57
  headers: headers
57
58
  )['payload']['hash']
58
59
  @log.info("The block #{hash} is the latest, there is no next block") if nxt.nil?
@@ -63,7 +64,7 @@ class Sibit
63
64
  # The height of the block.
64
65
  def height(hash)
65
66
  json = Sibit::Json.new(http: @http, log: @log).get(
66
- URI("https://api.cryptoapis.io/v1/bc/btc/mainnet/blocks/#{hash}"),
67
+ Iri.new('https://api.cryptoapis.io/v1/bc/btc/mainnet/blocks').append(hash),
67
68
  headers: headers
68
69
  )['payload']
69
70
  h = json['height']
@@ -74,7 +75,7 @@ class Sibit
74
75
  # Gets the balance of the address, in satoshi.
75
76
  def balance(address)
76
77
  json = Sibit::Json.new(http: @http, log: @log).get(
77
- URI("https://api.cryptoapis.io/v1/bc/btc/mainnet/address/#{address}"),
78
+ Iri.new('https://api.cryptoapis.io/v1/bc/btc/mainnet/address').append(address),
78
79
  headers: headers
79
80
  )['payload']
80
81
  b = (json['balance'].to_f * 100_000_000).to_i
@@ -90,7 +91,7 @@ class Sibit
90
91
  # Gets the hash of the latest block.
91
92
  def latest
92
93
  hash = Sibit::Json.new(http: @http, log: @log).get(
93
- URI('https://api.cryptoapis.io/v1/bc/btc/mainnet/blocks/latest'),
94
+ Iri.new('https://api.cryptoapis.io/v1/bc/btc/mainnet/blocks/latest'),
94
95
  headers: headers
95
96
  )['payload']['hash']
96
97
  @log.info("The latest block hash is #{hash}")
@@ -105,7 +106,7 @@ class Sibit
105
106
  # Push this transaction (in hex format) to the network.
106
107
  def push(hex)
107
108
  Sibit::Json.new(http: @http, log: @log).post(
108
- URI('https://api.cryptoapis.io/v1/bc/btc/testnet/txs/send'),
109
+ Iri.new('https://api.cryptoapis.io/v1/bc/btc/testnet/txs/send'),
109
110
  JSON.pretty_generate(hex: hex),
110
111
  headers: headers
111
112
  )
@@ -114,7 +115,7 @@ class Sibit
114
115
  # This method should fetch a Blockchain block and return as a hash.
115
116
  def block(hash)
116
117
  head = Sibit::Json.new(http: @http, log: @log).get(
117
- URI("https://api.cryptoapis.io/v1/bc/btc/mainnet/blocks/#{hash}"),
118
+ Iri.new('https://api.cryptoapis.io/v1/bc/btc/mainnet/blocks').append(hash),
118
119
  headers: headers
119
120
  )['payload']
120
121
  {
@@ -141,12 +142,8 @@ class Sibit
141
142
  all = []
142
143
  loop do
143
144
  txns = Sibit::Json.new(http: @http, log: @log).get(
144
- URI(
145
- [
146
- 'https://api.cryptoapis.io/v1/bc/btc/mainnet/txs/block/',
147
- "#{hash}?index=#{index}&limit=#{limit}"
148
- ].join
149
- ),
145
+ Iri.new('https://api.cryptoapis.io/v1/bc/btc/mainnet/txs/block/')
146
+ .append(hash).add(index: index, limit: limit),
150
147
  headers: headers
151
148
  )['payload'].map do |t|
152
149
  {
data/lib/sibit/earn.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2019-2020 Yegor Bugayenko
3
+ # Copyright (c) 2019-2021 Yegor Bugayenko
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  # of this software and associated documentation files (the 'Software'), to deal
@@ -20,17 +20,18 @@
20
20
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
21
  # SOFTWARE.
22
22
 
23
+ require 'iri'
23
24
  require 'json'
24
25
  require 'uri'
25
- require_relative 'version'
26
26
  require_relative 'error'
27
27
  require_relative 'http'
28
28
  require_relative 'json'
29
+ require_relative 'version'
29
30
 
30
31
  # Earn.com API.
31
32
  #
32
33
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
33
- # Copyright:: Copyright (c) 2019-2020 Yegor Bugayenko
34
+ # Copyright:: Copyright (c) 2019-2021 Yegor Bugayenko
34
35
  # License:: MIT
35
36
  class Sibit
36
37
  # Blockchain.info API.
@@ -66,7 +67,7 @@ class Sibit
66
67
  # a hash: { S: 12, M: 45, L: 100, XL: 200 }
67
68
  def fees
68
69
  json = Sibit::Json.new(http: @http, log: @log).get(
69
- URI('https://bitcoinfees.earn.com/api/v1/fees/recommended')
70
+ Iri.new('https://bitcoinfees.earn.com/api/v1/fees/recommended')
70
71
  )
71
72
  @log.info("Current recommended Bitcoin fees: \
72
73
  #{json['hourFee']}/#{json['halfHourFee']}/#{json['fastestFee']} sat/byte")
data/lib/sibit/error.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2019-2020 Yegor Bugayenko
3
+ # Copyright (c) 2019-2021 Yegor Bugayenko
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  # of this software and associated documentation files (the 'Software'), to deal
@@ -23,7 +23,7 @@
23
23
  # The error.
24
24
  #
25
25
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
26
- # Copyright:: Copyright (c) 2019-2020 Yegor Bugayenko
26
+ # Copyright:: Copyright (c) 2019-2021 Yegor Bugayenko
27
27
  # License:: MIT
28
28
  class Sibit
29
29
  # The error.
data/lib/sibit/fake.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2019-2020 Yegor Bugayenko
3
+ # Copyright (c) 2019-2021 Yegor Bugayenko
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  # of this software and associated documentation files (the 'Software'), to deal
@@ -25,7 +25,7 @@ require_relative 'version'
25
25
  # Fake API.
26
26
  #
27
27
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
28
- # Copyright:: Copyright (c) 2019-2020 Yegor Bugayenko
28
+ # Copyright:: Copyright (c) 2019-2021 Yegor Bugayenko
29
29
  # License:: MIT
30
30
  class Sibit
31
31
  # Fake API
data/lib/sibit/firstof.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2019-2020 Yegor Bugayenko
3
+ # Copyright (c) 2019-2021 Yegor Bugayenko
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  # of this software and associated documentation files (the 'Software'), to deal
@@ -27,7 +27,7 @@ require_relative 'log'
27
27
  # API first of.
28
28
  #
29
29
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
30
- # Copyright:: Copyright (c) 2019-2020 Yegor Bugayenko
30
+ # Copyright:: Copyright (c) 2019-2021 Yegor Bugayenko
31
31
  # License:: MIT
32
32
  class Sibit
33
33
  # First of API.
data/lib/sibit/http.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2019-2020 Yegor Bugayenko
3
+ # Copyright (c) 2019-2021 Yegor Bugayenko
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  # of this software and associated documentation files (the 'Software'), to deal
@@ -25,7 +25,7 @@ require 'net/http'
25
25
  # HTTP interface.
26
26
  #
27
27
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
28
- # Copyright:: Copyright (c) 2019-2020 Yegor Bugayenko
28
+ # Copyright:: Copyright (c) 2019-2021 Yegor Bugayenko
29
29
  # License:: MIT
30
30
  class Sibit
31
31
  # This HTTP client will be used by default.
data/lib/sibit/json.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2019-2020 Yegor Bugayenko
3
+ # Copyright (c) 2019-2021 Yegor Bugayenko
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  # of this software and associated documentation files (the 'Software'), to deal
@@ -34,7 +34,7 @@ require_relative 'log'
34
34
  # https://www.blockchain.com/api/blockchain_api
35
35
  #
36
36
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
37
- # Copyright:: Copyright (c) 2019-2020 Yegor Bugayenko
37
+ # Copyright:: Copyright (c) 2019-2021 Yegor Bugayenko
38
38
  # License:: MIT
39
39
  class Sibit
40
40
  # JSON processing.
@@ -48,8 +48,9 @@ class Sibit
48
48
  # Send GET request to the HTTP and return JSON response.
49
49
  # This method will also log the process and will validate the
50
50
  # response for correctness.
51
- def get(uri, headers: {}, accept: [200])
51
+ def get(address, headers: {}, accept: [200])
52
52
  start = Time.now
53
+ uri = URI(address.to_s)
53
54
  res = @http.client(uri).get(
54
55
  "#{uri.path.empty? ? '/' : uri.path}#{uri.query ? "?#{uri.query}" : ''}",
55
56
  {
@@ -64,10 +65,13 @@ class Sibit
64
65
  end
65
66
  @log.info("GET #{uri}: #{res.code}/#{length(res.body.length)} in #{age(start)}")
66
67
  JSON.parse(res.body)
68
+ rescue JSON::ParserError => e
69
+ raise Sibit::Error, "Can't parse JSON: #{e.message}"
67
70
  end
68
71
 
69
- def post(uri, body, headers: {})
72
+ def post(address, body, headers: {})
70
73
  start = Time.now
74
+ uri = URI(address.to_s)
71
75
  res = @http.client(uri).post(
72
76
  "#{uri.path}?#{uri.query}",
73
77
  "tx=#{CGI.escape(body)}",
data/lib/sibit/log.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2019-2020 Yegor Bugayenko
3
+ # Copyright (c) 2019-2021 Yegor Bugayenko
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  # of this software and associated documentation files (the 'Software'), to deal
@@ -23,7 +23,7 @@
23
23
  # The log.
24
24
  #
25
25
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
26
- # Copyright:: Copyright (c) 2019-2020 Yegor Bugayenko
26
+ # Copyright:: Copyright (c) 2019-2021 Yegor Bugayenko
27
27
  # License:: MIT
28
28
  class Sibit
29
29
  # Log.
data/lib/sibit/version.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2019-2020 Yegor Bugayenko
3
+ # Copyright (c) 2019-2021 Yegor Bugayenko
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  # of this software and associated documentation files (the 'Software'), to deal
@@ -22,9 +22,9 @@
22
22
 
23
23
  # Sibit main class.
24
24
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
25
- # Copyright:: Copyright (c) 2019-2020 Yegor Bugayenko
25
+ # Copyright:: Copyright (c) 2019-2021 Yegor Bugayenko
26
26
  # License:: MIT
27
27
  class Sibit
28
28
  # Current version of the library.
29
- VERSION = '0.21.0'
29
+ VERSION = '0.21.5'
30
30
  end
data/sibit.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2019-2020 Yegor Bugayenko
3
+ # Copyright (c) 2019-2021 Yegor Bugayenko
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  # of this software and associated documentation files (the 'Software'), to deal
@@ -50,6 +50,7 @@ and Ruby 2.3+.'
50
50
  s.extra_rdoc_files = ['README.md', 'LICENSE.txt']
51
51
  s.add_runtime_dependency 'backtrace', '~> 0.3'
52
52
  s.add_runtime_dependency 'bitcoin-ruby', '0.0.19'
53
+ s.add_runtime_dependency 'iri', '~> 0.5'
53
54
  s.add_runtime_dependency 'json', '~> 2'
54
55
  s.add_runtime_dependency 'retriable_proxy', '1.0.2'
55
56
  s.add_runtime_dependency 'slop', '~> 4.6'
data/test/test__helper.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2019-2020 Yegor Bugayenko
3
+ # Copyright (c) 2019-2021 Yegor Bugayenko
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  # of this software and associated documentation files (the 'Software'), to deal
data/test/test_bestof.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2019-2020 Yegor Bugayenko
3
+ # Copyright (c) 2019-2021 Yegor Bugayenko
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  # of this software and associated documentation files (the 'Software'), to deal
@@ -27,7 +27,7 @@ require_relative '../lib/sibit/bestof'
27
27
 
28
28
  # Sibit::BestOf test.
29
29
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
30
- # Copyright:: Copyright (c) 2019-2020 Yegor Bugayenko
30
+ # Copyright:: Copyright (c) 2019-2021 Yegor Bugayenko
31
31
  # License:: MIT
32
32
  class TestBestOf < Minitest::Test
33
33
  def test_not_array
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2019-2020 Yegor Bugayenko
3
+ # Copyright (c) 2019-2021 Yegor Bugayenko
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  # of this software and associated documentation files (the 'Software'), to deal
@@ -28,7 +28,7 @@ require_relative '../lib/sibit/bitcoinchain'
28
28
 
29
29
  # Sibit::Bitcoinchain test.
30
30
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
31
- # Copyright:: Copyright (c) 2019-2020 Yegor Bugayenko
31
+ # Copyright:: Copyright (c) 2019-2021 Yegor Bugayenko
32
32
  # License:: MIT
33
33
  class TestBitcoinchain < Minitest::Test
34
34
  def test_fetch_hash
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2019-2020 Yegor Bugayenko
3
+ # Copyright (c) 2019-2021 Yegor Bugayenko
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  # of this software and associated documentation files (the 'Software'), to deal
@@ -28,13 +28,13 @@ require_relative '../lib/sibit/blockchain'
28
28
 
29
29
  # Sibit::Blockchain test.
30
30
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
31
- # Copyright:: Copyright (c) 2019-2020 Yegor Bugayenko
31
+ # Copyright:: Copyright (c) 2019-2021 Yegor Bugayenko
32
32
  # License:: MIT
33
33
  class TestBlockchain < Minitest::Test
34
34
  def test_fetch_block
35
35
  hash = '0000000000000000000f676241aabc9b62b748d26192a44bc25720c34de27d19'
36
36
  stub_request(:get, "https://blockchain.info/rawblock/#{hash}")
37
- .to_return(body: '{"next_block": "n", "prev_block": "p", "hash": "h",
37
+ .to_return(body: '{"next_block": ["n"], "prev_block": "p", "hash": "h",
38
38
  "tx": [{"hash": "h1", "out": [{"hash": "oh", "value": 123}]}]}')
39
39
  sibit = Sibit::Blockchain.new
40
40
  json = sibit.block(hash)
@@ -47,9 +47,10 @@ class TestBlockchain < Minitest::Test
47
47
  end
48
48
 
49
49
  def test_next_of
50
+ skip
50
51
  hash = '0000000000000000000f676241aabc9b62b748d26192a44bc25720c34de27d19'
51
52
  stub_request(:get, "https://blockchain.info/rawblock/#{hash}")
52
- .to_return(body: '{"next_block": "nxt"}')
53
+ .to_return(body: '{"next_block": ["nxt"]}')
53
54
  sibit = Sibit::Blockchain.new
54
55
  nxt = sibit.next_of(hash)
55
56
  assert_equal('nxt', nxt)
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2019-2020 Yegor Bugayenko
3
+ # Copyright (c) 2019-2021 Yegor Bugayenko
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  # of this software and associated documentation files (the 'Software'), to deal
@@ -28,7 +28,7 @@ require_relative '../lib/sibit/blockchair'
28
28
 
29
29
  # Sibit::Blockchair test.
30
30
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
31
- # Copyright:: Copyright (c) 2019-2020 Yegor Bugayenko
31
+ # Copyright:: Copyright (c) 2019-2021 Yegor Bugayenko
32
32
  # License:: MIT
33
33
  class TestBlockchair < Minitest::Test
34
34
  def test_fetch_balance
data/test/test_btc.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2019-2020 Yegor Bugayenko
3
+ # Copyright (c) 2019-2021 Yegor Bugayenko
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  # of this software and associated documentation files (the 'Software'), to deal
@@ -28,7 +28,7 @@ require_relative '../lib/sibit/btc'
28
28
 
29
29
  # Sibit::Btc test.
30
30
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
31
- # Copyright:: Copyright (c) 2019-2020 Yegor Bugayenko
31
+ # Copyright:: Copyright (c) 2019-2021 Yegor Bugayenko
32
32
  # License:: MIT
33
33
  class TestBtc < Minitest::Test
34
34
  def test_get_zero_balance
data/test/test_cex.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2019-2020 Yegor Bugayenko
3
+ # Copyright (c) 2019-2021 Yegor Bugayenko
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  # of this software and associated documentation files (the 'Software'), to deal
@@ -28,7 +28,7 @@ require_relative '../lib/sibit/cex'
28
28
 
29
29
  # Sibit::Cex test.
30
30
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
31
- # Copyright:: Copyright (c) 2019-2020 Yegor Bugayenko
31
+ # Copyright:: Copyright (c) 2019-2021 Yegor Bugayenko
32
32
  # License:: MIT
33
33
  class TestBtc < Minitest::Test
34
34
  def test_get_price
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2019-2020 Yegor Bugayenko
3
+ # Copyright (c) 2019-2021 Yegor Bugayenko
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  # of this software and associated documentation files (the 'Software'), to deal
@@ -28,7 +28,7 @@ require_relative '../lib/sibit/cryptoapis'
28
28
 
29
29
  # Sibit::Cryptoapis test.
30
30
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
31
- # Copyright:: Copyright (c) 2019-2020 Yegor Bugayenko
31
+ # Copyright:: Copyright (c) 2019-2021 Yegor Bugayenko
32
32
  # License:: MIT
33
33
  class TestCryptoapis < Minitest::Test
34
34
  def test_fetch_block
data/test/test_fake.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2019-2020 Yegor Bugayenko
3
+ # Copyright (c) 2019-2021 Yegor Bugayenko
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  # of this software and associated documentation files (the 'Software'), to deal
@@ -27,7 +27,7 @@ require_relative '../lib/sibit/fake'
27
27
 
28
28
  # Sibit::Fake test.
29
29
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
30
- # Copyright:: Copyright (c) 2019-2020 Yegor Bugayenko
30
+ # Copyright:: Copyright (c) 2019-2021 Yegor Bugayenko
31
31
  # License:: MIT
32
32
  class TestFake < Minitest::Test
33
33
  def test_fake_object_works
@@ -41,7 +41,7 @@ class TestFake < Minitest::Test
41
41
 
42
42
  def test_scan_works
43
43
  sibit = Sibit.new(api: Sibit::Fake.new)
44
- hash = '1234567'
44
+ hash = '00000000000000000008df8a6e1b61d1136803ac9791b8725235c9f780b4ed71'
45
45
  found = false
46
46
  tail = sibit.scan(hash) do |addr, tx, satoshi|
47
47
  assert_equal(1000, satoshi)
data/test/test_firstof.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2019-2020 Yegor Bugayenko
3
+ # Copyright (c) 2019-2021 Yegor Bugayenko
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  # of this software and associated documentation files (the 'Software'), to deal
@@ -27,7 +27,7 @@ require_relative '../lib/sibit/firstof'
27
27
 
28
28
  # Sibit::FirstOf test.
29
29
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
30
- # Copyright:: Copyright (c) 2019-2020 Yegor Bugayenko
30
+ # Copyright:: Copyright (c) 2019-2021 Yegor Bugayenko
31
31
  # License:: MIT
32
32
  class TestFirstOf < Minitest::Test
33
33
  def test_not_array
data/test/test_json.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2019-2020 Yegor Bugayenko
3
+ # Copyright (c) 2019-2021 Yegor Bugayenko
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  # of this software and associated documentation files (the 'Software'), to deal
@@ -27,7 +27,7 @@ require_relative '../lib/sibit/json'
27
27
 
28
28
  # Sibit::Json test.
29
29
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
30
- # Copyright:: Copyright (c) 2019-2020 Yegor Bugayenko
30
+ # Copyright:: Copyright (c) 2019-2021 Yegor Bugayenko
31
31
  # License:: MIT
32
32
  class TestJson < Minitest::Test
33
33
  def test_loads_hash
data/test/test_live.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2019-2020 Yegor Bugayenko
3
+ # Copyright (c) 2019-2021 Yegor Bugayenko
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  # of this software and associated documentation files (the 'Software'), to deal
@@ -28,7 +28,7 @@ require_relative '../lib/sibit'
28
28
 
29
29
  # Live tests.
30
30
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
31
- # Copyright:: Copyright (c) 2019-2020 Yegor Bugayenko
31
+ # Copyright:: Copyright (c) 2019-2021 Yegor Bugayenko
32
32
  # License:: MIT
33
33
  class TestLive < Minitest::Test
34
34
  def test_block
data/test/test_sibit.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2019-2020 Yegor Bugayenko
3
+ # Copyright (c) 2019-2021 Yegor Bugayenko
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  # of this software and associated documentation files (the 'Software'), to deal
@@ -32,7 +32,7 @@ require_relative '../lib/sibit/bestof'
32
32
 
33
33
  # Sibit.
34
34
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
35
- # Copyright:: Copyright (c) 2019-2020 Yegor Bugayenko
35
+ # Copyright:: Copyright (c) 2019-2021 Yegor Bugayenko
36
36
  # License:: MIT
37
37
  class TestSibit < Minitest::Test
38
38
  def test_loads_fees
@@ -196,7 +196,8 @@ class TestSibit < Minitest::Test
196
196
  end
197
197
  sibit = Sibit.new(api: api)
198
198
  found = false
199
- tail = sibit.scan('head') do |addr, tx, satoshi|
199
+ start = '00000000000000000008df8a6e1b61d1136803ac9791b8725235c9f780b4ed71'
200
+ tail = sibit.scan(start) do |addr, tx, satoshi|
200
201
  assert_equal(123, satoshi)
201
202
  assert_equal('addr', addr)
202
203
  assert_equal('hash:0', tx)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sibit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.21.0
4
+ version: 0.21.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yegor Bugayenko
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-09-20 00:00:00.000000000 Z
11
+ date: 2021-02-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: backtrace
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
40
  version: 0.0.19
41
+ - !ruby/object:Gem::Dependency
42
+ name: iri
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.5'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.5'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: json
43
57
  requirement: !ruby/object:Gem::Requirement