sibit 0.30.0 → 0.30.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: 630864e9ab6ffc8c64cca7cd4e4a413f1924b756bf126c103630ff2a05146ecb
4
- data.tar.gz: 68e15a268fc7caf94ebc9d824212daab7f4c823e282db75abfec1b1c747ab53e
3
+ metadata.gz: 1dd376cf7257a4cf89035007b18896c215315cacacf9f5d228afc27c9f279cb3
4
+ data.tar.gz: a610165efa18b499479a81816086e8ddad79399ee6d2e0d780594f5b38c18e91
5
5
  SHA512:
6
- metadata.gz: 87245d26c76ed83e20606a99217fdf81f7c3952cda04efe3b8578908166fff04d73beb41a8ce9a723c6f535a12a67aea561b819aeb72535a93443d52dce6225f
7
- data.tar.gz: 0d777da50586ea0edc315536dfab3333ed3babbeb815d054120609a55610dd5fe90b38e80c93387f368071031c453b32e1f26c7fb079526806d3f5882a1924de
6
+ metadata.gz: 588b35b318760b910ba00f2ed13af88ba325f59e21191faab27d7596771d54c9f4e5a6d419d80e6a3e6f4594a1089bfaf58ef107ccf7e78f738aa9258c181a19
7
+ data.tar.gz: b347020232596daa847f6b3398f9cdaa7ad56ea6b03cf157377a8652922d93e7df33c18d639f1ee6bd324254fd453e24fb2992a8cea76ec00b3814ecc6081ae6
data/Gemfile.lock CHANGED
@@ -3,6 +3,7 @@ PATH
3
3
  specs:
4
4
  sibit (0.0.0)
5
5
  backtrace (~> 0.3)
6
+ decoor (~> 0.1)
6
7
  iri (~> 0.5)
7
8
  json (~> 2)
8
9
  loog (~> 0.6)
@@ -57,6 +58,7 @@ GEM
57
58
  cucumber-messages (31.1.0)
58
59
  cucumber-tag-expressions (8.1.0)
59
60
  date (3.5.1)
61
+ decoor (0.1.0)
60
62
  diff-lcs (1.6.2)
61
63
  docile (1.4.1)
62
64
  elapsed (0.2.1)
@@ -75,7 +77,6 @@ GEM
75
77
  logger (~> 1.0)
76
78
  memoist3 (1.0.0)
77
79
  mini_mime (1.1.5)
78
- mini_portile2 (2.8.9)
79
80
  minitest (6.0.1)
80
81
  prism (~> 1.5)
81
82
  minitest-reporters (1.7.1)
@@ -84,8 +85,9 @@ GEM
84
85
  minitest (>= 5.0)
85
86
  ruby-progressbar
86
87
  multi_test (1.1.0)
87
- nokogiri (1.18.10)
88
- mini_portile2 (~> 2.8.2)
88
+ nokogiri (1.18.10-arm64-darwin)
89
+ racc (~> 1.4)
90
+ nokogiri (1.18.10-x86_64-linux-gnu)
89
91
  racc (~> 1.4)
90
92
  openssl (4.0.0)
91
93
  os (1.1.4)
data/README.md CHANGED
@@ -91,13 +91,13 @@ If everything looks correct, remove the `--dry` and run again,
91
91
  To use an HTTPS proxy for all requests:
92
92
 
93
93
  ```bash
94
- $ sibit --proxy=host:port balance 1PfsYNygsuVL8fvBarJNQnHytkg4rGih1U
94
+ sibit --proxy=host:port balance 1PfsYNygsuVL8fvBarJNQnHytkg4rGih1U
95
95
  ```
96
96
 
97
97
  The proxy address may include authentication credentials:
98
98
 
99
99
  ```bash
100
- $ sibit --proxy=user:password@host:port balance 1PfsYNygsuVL8fvBarJNQnHytkg4rGih1U
100
+ sibit --proxy=user:password@host:port balance 1PfsYNygsuVL8fvBarJNQnHytkg4rGih1U
101
101
  ```
102
102
 
103
103
  All operations are performed through the [Blockchain API].
data/bin/sibit CHANGED
@@ -18,6 +18,7 @@ require_relative '../lib/sibit/blockchain'
18
18
  require_relative '../lib/sibit/blockchair'
19
19
  require_relative '../lib/sibit/btc'
20
20
  require_relative '../lib/sibit/cex'
21
+ require_relative '../lib/sibit/dry'
21
22
  require_relative '../lib/sibit/fake'
22
23
  require_relative '../lib/sibit/firstof'
23
24
  require_relative '../lib/sibit/version'
@@ -62,32 +63,33 @@ Options are:"
62
63
  raise e.message
63
64
  end
64
65
 
66
+ raise 'Try --help' if opts.arguments.empty?
67
+
65
68
  begin
66
- raise 'Try --help' if opts.arguments.empty?
67
69
  log = opts[:verbose] ? Loog::VERBOSE : Loog::NULL
68
70
  http = opts[:proxy] ? Sibit::HttpProxy.new(opts[:proxy]) : Sibit::Http.new
69
71
  apis = opts[:api].map(&:downcase).map do |a|
70
- api = nil
71
72
  case a
72
73
  when 'blockchain'
73
- api = Sibit::Blockchain.new(http: http, log: log, dry: opts[:dry])
74
+ Sibit::Blockchain.new(http: http, log: log)
74
75
  when 'btc'
75
- api = Sibit::Btc.new(http: http, log: log, dry: opts[:dry])
76
+ Sibit::Btc.new(http: http, log: log)
76
77
  when 'bitcoinchain'
77
- api = Sibit::Bitcoinchain.new(http: http, log: log, dry: opts[:dry])
78
+ Sibit::Bitcoinchain.new(http: http, log: log)
78
79
  when 'blockchair'
79
- api = Sibit::Blockchair.new(http: http, log: log, dry: opts[:dry])
80
+ Sibit::Blockchair.new(http: http, log: log)
80
81
  when 'cex'
81
- api = Sibit::Cex.new(http: http, log: log, dry: opts[:dry])
82
+ Sibit::Cex.new(http: http, log: log)
82
83
  when 'fake'
83
- api = Sibit::Fake.new
84
+ Sibit::Fake.new
84
85
  else
85
86
  raise Sibit::Error, "Unknown API \"#{a}\""
86
87
  end
87
- api = RetriableProxy.for_object(api, on: Sibit::Error) if opts[:attempts] > 1
88
- api
89
88
  end
90
- sibit = Sibit.new(log: log, api: Sibit::FirstOf.new(apis, log: log, verbose: true))
89
+ api = Sibit::FirstOf.new(apis, log: log, verbose: true)
90
+ api = Sibit::Dry.new(api, log: log) if opts[:dry]
91
+ api = RetriableProxy.for_object(api, on: Sibit::Error) if opts[:attempts] > 1
92
+ sibit = Sibit.new(log: log, api: api)
91
93
  case opts.arguments[0]
92
94
  when 'price'
93
95
  puts sibit.price
@@ -19,10 +19,9 @@ require_relative 'version'
19
19
  # License:: MIT
20
20
  class Sibit::Bitcoinchain
21
21
  # Constructor.
22
- def initialize(log: Loog::NULL, http: Sibit::Http.new, dry: false)
22
+ def initialize(log: Loog::NULL, http: Sibit::Http.new)
23
23
  @http = http
24
24
  @log = log
25
- @dry = dry
26
25
  end
27
26
 
28
27
  # Current price of BTC in USD (float returned).
@@ -22,10 +22,9 @@ require_relative 'version'
22
22
  # License:: MIT
23
23
  class Sibit::Blockchain
24
24
  # Constructor.
25
- def initialize(log: Loog::NULL, http: Sibit::Http.new, dry: false)
25
+ def initialize(log: Loog::NULL, http: Sibit::Http.new)
26
26
  @http = http
27
27
  @log = log
28
- @dry = dry
29
28
  end
30
29
 
31
30
  # Current price of BTC in USD (float returned).
@@ -108,7 +107,6 @@ class Sibit::Blockchain
108
107
 
109
108
  # Push this transaction (in hex format) to the network.
110
109
  def push(hex)
111
- return if @dry
112
110
  Sibit::Json.new(http: @http, log: @log).post(
113
111
  Iri.new('https://blockchain.info/pushtx'),
114
112
  hex
@@ -20,11 +20,10 @@ require_relative 'version'
20
20
  # License:: MIT
21
21
  class Sibit::Blockchair
22
22
  # Constructor.
23
- def initialize(key: nil, log: Loog::NULL, http: Sibit::Http.new, dry: false)
23
+ def initialize(key: nil, log: Loog::NULL, http: Sibit::Http.new)
24
24
  @key = key
25
25
  @http = http
26
26
  @log = log
27
- @dry = dry
28
27
  end
29
28
 
30
29
  # Current price of BTC in USD (float returned).
data/lib/sibit/btc.rb CHANGED
@@ -21,10 +21,9 @@ require_relative 'version'
21
21
  # License:: MIT
22
22
  class Sibit::Btc
23
23
  # Constructor.
24
- def initialize(log: Loog::NULL, http: Sibit::Http.new, dry: false)
24
+ def initialize(log: Loog::NULL, http: Sibit::Http.new)
25
25
  @http = http
26
26
  @log = log
27
- @dry = dry
28
27
  end
29
28
 
30
29
  # Current price of BTC in USD (float returned).
data/lib/sibit/cex.rb CHANGED
@@ -18,10 +18,9 @@ require_relative 'json'
18
18
  # License:: MIT
19
19
  class Sibit::Cex
20
20
  # Constructor.
21
- def initialize(log: Loog::NULL, http: Sibit::Http.new, dry: false)
21
+ def initialize(log: Loog::NULL, http: Sibit::Http.new)
22
22
  @http = http
23
23
  @log = log
24
- @dry = dry
25
24
  end
26
25
 
27
26
  # Current price of BTC in USD (float returned).
@@ -19,11 +19,10 @@ require_relative 'version'
19
19
  # License:: MIT
20
20
  class Sibit::Cryptoapis
21
21
  # Constructor.
22
- def initialize(key, log: Loog::NULL, http: Sibit::Http.new, dry: false)
22
+ def initialize(key, log: Loog::NULL, http: Sibit::Http.new)
23
23
  @key = key
24
24
  @http = http
25
25
  @log = log
26
- @dry = dry
27
26
  end
28
27
 
29
28
  # Current price of BTC in USD (float returned).
data/lib/sibit/dry.rb ADDED
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ # SPDX-FileCopyrightText: Copyright (c) 2019-2025 Yegor Bugayenko
4
+ # SPDX-License-Identifier: MIT
5
+
6
+ require 'decoor'
7
+ require 'loog'
8
+
9
+ # Dry mode decorator for API classes.
10
+ #
11
+ # Wraps any API object and prevents push() from sending transactions.
12
+ # All other methods are delegated to the wrapped API unchanged.
13
+ #
14
+ # Author:: Yegor Bugayenko (yegor256@gmail.com)
15
+ # Copyright:: Copyright (c) 2019-2025 Yegor Bugayenko
16
+ # License:: MIT
17
+ class Sibit::Dry
18
+ def initialize(api, log: Loog::NULL)
19
+ @api = api
20
+ @log = log
21
+ end
22
+
23
+ decoor(:api)
24
+
25
+ def push(_hex)
26
+ @log.info("Transaction not pushed, dry mode is ON (#{@origin.class.name})")
27
+ nil
28
+ end
29
+ end
data/lib/sibit/version.rb CHANGED
@@ -9,5 +9,5 @@
9
9
  # License:: MIT
10
10
  class Sibit
11
11
  # Current version of the library.
12
- VERSION = '0.30.0'
12
+ VERSION = '0.30.1'
13
13
  end
data/lib/sibit.rb CHANGED
@@ -4,11 +4,11 @@
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  require 'loog'
7
- require_relative 'sibit/bitcoin/base58'
8
- require_relative 'sibit/bitcoin/key'
9
- require_relative 'sibit/bitcoin/script'
10
- require_relative 'sibit/bitcoin/tx'
11
- require_relative 'sibit/bitcoin/txbuilder'
7
+ require_relative 'sibit/base58'
8
+ require_relative 'sibit/key'
9
+ require_relative 'sibit/script'
10
+ require_relative 'sibit/tx'
11
+ require_relative 'sibit/txbuilder'
12
12
  require_relative 'sibit/blockchain'
13
13
  require_relative 'sibit/version'
14
14
 
@@ -100,7 +100,7 @@ class Sibit
100
100
  # +change+: the address where the change has to be sent to
101
101
  def pay(amount, fee, sources, target, change, skip_utxo: [])
102
102
  p = price('USD')
103
- sources = sources.map { |k| [Key.new(k).addr, k] }.to_h
103
+ sources = sources.to_h { |k| [Key.new(k).addr, k] }
104
104
  satoshi = satoshi(amount)
105
105
  builder = TxBuilder.new
106
106
  unspent = 0
data/sibit.gemspec CHANGED
@@ -12,7 +12,7 @@ Gem::Specification.new do |s|
12
12
  if s.respond_to? :required_rubygems_version=
13
13
  s.required_rubygems_version = Gem::Requirement.new('>= 0')
14
14
  end
15
- s.required_ruby_version = '>= 2.5'
15
+ s.required_ruby_version = '>= 3.0'
16
16
  s.name = 'sibit'
17
17
  s.version = Sibit::VERSION
18
18
  s.license = 'MIT'
@@ -30,6 +30,7 @@ Gem::Specification.new do |s|
30
30
  s.rdoc_options = ['--charset=UTF-8']
31
31
  s.extra_rdoc_files = ['README.md', 'LICENSE.txt']
32
32
  s.add_dependency 'backtrace', '~> 0.3'
33
+ s.add_dependency 'decoor', '~> 0.1'
33
34
  s.add_dependency 'iri', '~> 0.5'
34
35
  s.add_dependency 'json', '~> 2'
35
36
  s.add_dependency 'loog', '~> 0.6'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sibit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.30.0
4
+ version: 0.30.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yegor Bugayenko
@@ -23,6 +23,20 @@ dependencies:
23
23
  - - "~>"
24
24
  - !ruby/object:Gem::Version
25
25
  version: '0.3'
26
+ - !ruby/object:Gem::Dependency
27
+ name: decoor
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '0.1'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '0.1'
26
40
  - !ruby/object:Gem::Dependency
27
41
  name: iri
28
42
  requirement: !ruby/object:Gem::Requirement
@@ -133,24 +147,25 @@ files:
133
147
  - features/step_definitions/steps.rb
134
148
  - features/support/env.rb
135
149
  - lib/sibit.rb
150
+ - lib/sibit/base58.rb
136
151
  - lib/sibit/bestof.rb
137
- - lib/sibit/bitcoin/base58.rb
138
- - lib/sibit/bitcoin/key.rb
139
- - lib/sibit/bitcoin/script.rb
140
- - lib/sibit/bitcoin/tx.rb
141
- - lib/sibit/bitcoin/txbuilder.rb
142
152
  - lib/sibit/bitcoinchain.rb
143
153
  - lib/sibit/blockchain.rb
144
154
  - lib/sibit/blockchair.rb
145
155
  - lib/sibit/btc.rb
146
156
  - lib/sibit/cex.rb
147
157
  - lib/sibit/cryptoapis.rb
158
+ - lib/sibit/dry.rb
148
159
  - lib/sibit/error.rb
149
160
  - lib/sibit/fake.rb
150
161
  - lib/sibit/firstof.rb
151
162
  - lib/sibit/http.rb
152
163
  - lib/sibit/httpproxy.rb
153
164
  - lib/sibit/json.rb
165
+ - lib/sibit/key.rb
166
+ - lib/sibit/script.rb
167
+ - lib/sibit/tx.rb
168
+ - lib/sibit/txbuilder.rb
154
169
  - lib/sibit/version.rb
155
170
  - logo.svg
156
171
  - sibit.gemspec
@@ -166,7 +181,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
166
181
  requirements:
167
182
  - - ">="
168
183
  - !ruby/object:Gem::Version
169
- version: '2.5'
184
+ version: '3.0'
170
185
  required_rubygems_version: !ruby/object:Gem::Requirement
171
186
  requirements:
172
187
  - - ">="
File without changes
File without changes
File without changes
File without changes
File without changes