sibit 0.3.0 → 0.3.1

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: ba379da20ae654c4299c0f9e17069c2940e3040dfd2194dc329a59c3b4b0aebd
4
- data.tar.gz: '097b99e3666986b4ed2dddf46c39996ae8be476b1e1bff63e30257830b2b4a6a'
3
+ metadata.gz: 2f80cc342ac38e79dc1fd04b6bf020fb650b7daf17403082afc90a92fee3732f
4
+ data.tar.gz: bd83f713454e8a6b490b9a5d64982a51928e8a0511aa032bdbfec67a716027e1
5
5
  SHA512:
6
- metadata.gz: 157a29f6c6c4c53b06feb75151d772ed9a9a82f62909e947d9df12d85f988ef08b8659a82988b43041d4c8379bd21b93b3cacf7e3b4b289fffab448b98881399
7
- data.tar.gz: 0a5fca4e48e0e1d34e13b421295aea80162d07784f02bd0f425343e8dac0dc5aa7c48452807056d6d0b417eba5dd3ea121be2a8cdceb686ee732d3ff5cd5eee0
6
+ metadata.gz: 9021d4dc32b50715c33959e4dbd20a61e2051d0f95dd662581328242140568ad398f4a7af6bf296bede38dc55a5e397d55afc9528e3a2f6bba83388b4f141ee3
7
+ data.tar.gz: 4438637556ea58c5a402f5048156f2d306d09748001a13ca5738d2589d1262795783eed810dff0473f20aa9c1ae4b8f6bff4829b4f52ab5b81e012150547b243
data/bin/sibit CHANGED
@@ -76,7 +76,10 @@ Options are:"
76
76
  raise "Command #{opts.arguments[0]} is not supported"
77
77
  end
78
78
  rescue StandardError => ex
79
- puts "ERROR: #{ex.message}"
80
- # puts Backtrace.new(ex).to_s
79
+ if opts[:verbose]
80
+ puts Backtrace.new(ex).to_s
81
+ else
82
+ puts "ERROR: #{ex.message}"
83
+ end
81
84
  exit(255)
82
85
  end
data/features/cli.feature CHANGED
@@ -15,5 +15,5 @@ Feature: Command Line Processing
15
15
  Then Exit code is zero
16
16
 
17
17
  Scenario: Bitcoin balance can be checked
18
- When I run bin/sibit with "balance 1MZT1fa6y8H9UmbZV6HqKF4UY41o9MGT5f"
18
+ When I run bin/sibit with "balance 1MZT1fa6y8H9UmbZV6HqKF4UY41o9MGT5f --verbose"
19
19
  Then Exit code is zero
data/lib/sibit/version.rb CHANGED
@@ -26,5 +26,5 @@
26
26
  # License:: MIT
27
27
  class Sibit
28
28
  # Current version of the library.
29
- VERSION = '0.3.0'
29
+ VERSION = '0.3.1'
30
30
  end
data/lib/sibit.rb CHANGED
@@ -20,8 +20,9 @@
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 'net/http'
24
+ require 'uri'
23
25
  require 'bitcoin'
24
- require 'typhoeus'
25
26
  require 'json'
26
27
 
27
28
  # Sibit main class.
@@ -34,21 +35,26 @@ require 'json'
34
35
  # License:: MIT
35
36
  class Sibit
36
37
  # Constructor.
38
+ #
39
+ # You may provide the log you want to see the messages in. If you don't
40
+ # provide anything, the console will be used. The object you provide
41
+ # has to respond to the method +debug+ or +puts+ in order to receive logging
42
+ # messages.
37
43
  def initialize(log: STDOUT)
38
44
  @log = log
39
45
  end
40
46
 
41
- # Generate new Bitcon private key and returns in Hash160 format.
47
+ # Generates new Bitcon private key and returns in Hash160 format.
42
48
  def generate
43
49
  Bitcoin::Key.generate.priv
44
50
  end
45
51
 
46
- # Create Bitcon address using the private key in Hash160 format.
52
+ # Creates Bitcon address using the private key in Hash160 format.
47
53
  def create(pvt)
48
54
  key(pvt).addr
49
55
  end
50
56
 
51
- # Get the balance of the address, in satoshi.
57
+ # Gets the balance of the address, in satoshi.
52
58
  def balance(address)
53
59
  json = get_json("https://blockchain.info/rawaddr/#{address}")
54
60
  debug("Total transactions: #{json['n_tx']}")
@@ -56,7 +62,16 @@ class Sibit
56
62
  json['final_balance']
57
63
  end
58
64
 
59
- # Send a payment and return the transaction hash.
65
+ # Sends a payment and returns the transaction hash.
66
+ #
67
+ # If the payment can't be signed (the key is wrong, for example) or the
68
+ # previous transaction is not found, or there is a network error, or
69
+ # any other reason, you will get an exception. In this case, just try again.
70
+ # It's safe to try as many times as you need. Don't worry about duplicating
71
+ # your transaction, the Bitcoin network will filter duplicates out.
72
+ #
73
+ # If there are more than 1000 UTXOs in the address where you are trying
74
+ # to send bitcoins from, this method won't be helpful.
60
75
  #
61
76
  # +pvt+: the private key as a Hash160 string
62
77
  # +amount+: the amount either in satoshis or ending with 'BTC', like '0.7BTC'
@@ -127,22 +142,24 @@ class Sibit
127
142
  key
128
143
  end
129
144
 
145
+ def age(start)
146
+ "#{((Time.now - start) * 1000).round}ms"
147
+ end
148
+
130
149
  def post_tx(body)
131
- uri = 'https://blockchain.info/pushtx'
132
- request = Typhoeus::Request.new(uri, method: :post, body: { tx: body })
133
- request.run
134
- response = request.response
135
- raise "Invalid response at #{uri}: #{response.code}" unless response.code == 200
136
- debug("POST #{uri}: #{response.code}")
150
+ start = Time.now
151
+ uri = URI('https://blockchain.info/pushtx')
152
+ res = Net::HTTP.post_form(uri, tx: body)
153
+ raise "Failed to post tx to #{uri}: #{res.code}" unless res.code == '200'
154
+ debug("POST #{uri}: #{res.code} in #{age(start)}")
137
155
  end
138
156
 
139
157
  def get_json(uri)
140
- request = Typhoeus::Request.new(uri, method: :get, headers: {})
141
- request.run
142
- response = request.response
143
- raise "Invalid response at #{uri}: #{response.code}" unless response.code == 200
144
- debug("GET #{uri}: #{response.code}")
145
- JSON.parse(response.body)
158
+ start = Time.now
159
+ res = Net::HTTP.get_response(URI(uri))
160
+ raise "Failed to retrieve #{uri}: #{res.code}" unless res.code == '200'
161
+ debug("GET #{uri}: #{res.code} in #{age(start)}")
162
+ JSON.parse(res.body)
146
163
  end
147
164
 
148
165
  def debug(msg)
data/sibit.gemspec CHANGED
@@ -48,11 +48,10 @@ and Ruby 2.3+.'
48
48
  s.test_files = s.files.grep(%r{^(test|spec|features)/})
49
49
  s.rdoc_options = ['--charset=UTF-8']
50
50
  s.extra_rdoc_files = ['README.md', 'LICENSE.txt']
51
- s.add_runtime_dependency 'backtrace', '0.3.0'
51
+ s.add_runtime_dependency 'backtrace', '>=0.3'
52
52
  s.add_runtime_dependency 'bitcoin', '0.2.0'
53
- s.add_runtime_dependency 'json', '2.2.0'
54
- s.add_runtime_dependency 'slop', '4.6.2'
55
- s.add_runtime_dependency 'typhoeus', '1.3.1'
53
+ s.add_runtime_dependency 'json', '>=2'
54
+ s.add_runtime_dependency 'slop', '>=4.6'
56
55
  s.add_development_dependency 'codecov', '0.1.10'
57
56
  s.add_development_dependency 'cucumber', '1.3.17'
58
57
  s.add_development_dependency 'debase', '0.2.2'
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sibit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yegor Bugayenko
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-04-10 00:00:00.000000000 Z
11
+ date: 2019-04-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: backtrace
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 0.3.0
19
+ version: '0.3'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 0.3.0
26
+ version: '0.3'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bitcoin
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -42,44 +42,30 @@ dependencies:
42
42
  name: json
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: 2.2.0
47
+ version: '2'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: 2.2.0
54
+ version: '2'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: slop
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: 4.6.2
61
+ version: '4.6'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '='
67
- - !ruby/object:Gem::Version
68
- version: 4.6.2
69
- - !ruby/object:Gem::Dependency
70
- name: typhoeus
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - '='
74
- - !ruby/object:Gem::Version
75
- version: 1.3.1
76
- type: :runtime
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - '='
66
+ - - ">="
81
67
  - !ruby/object:Gem::Version
82
- version: 1.3.1
68
+ version: '4.6'
83
69
  - !ruby/object:Gem::Dependency
84
70
  name: codecov
85
71
  requirement: !ruby/object:Gem::Requirement