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 +4 -4
- data/Gemfile.lock +5 -3
- data/README.md +2 -2
- data/bin/sibit +13 -11
- data/lib/sibit/bitcoinchain.rb +1 -2
- data/lib/sibit/blockchain.rb +1 -3
- data/lib/sibit/blockchair.rb +1 -2
- data/lib/sibit/btc.rb +1 -2
- data/lib/sibit/cex.rb +1 -2
- data/lib/sibit/cryptoapis.rb +1 -2
- data/lib/sibit/dry.rb +29 -0
- data/lib/sibit/version.rb +1 -1
- data/lib/sibit.rb +6 -6
- data/sibit.gemspec +2 -1
- metadata +22 -7
- /data/lib/sibit/{bitcoin/base58.rb → base58.rb} +0 -0
- /data/lib/sibit/{bitcoin/key.rb → key.rb} +0 -0
- /data/lib/sibit/{bitcoin/script.rb → script.rb} +0 -0
- /data/lib/sibit/{bitcoin/tx.rb → tx.rb} +0 -0
- /data/lib/sibit/{bitcoin/txbuilder.rb → txbuilder.rb} +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 1dd376cf7257a4cf89035007b18896c215315cacacf9f5d228afc27c9f279cb3
|
|
4
|
+
data.tar.gz: a610165efa18b499479a81816086e8ddad79399ee6d2e0d780594f5b38c18e91
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
74
|
+
Sibit::Blockchain.new(http: http, log: log)
|
|
74
75
|
when 'btc'
|
|
75
|
-
|
|
76
|
+
Sibit::Btc.new(http: http, log: log)
|
|
76
77
|
when 'bitcoinchain'
|
|
77
|
-
|
|
78
|
+
Sibit::Bitcoinchain.new(http: http, log: log)
|
|
78
79
|
when 'blockchair'
|
|
79
|
-
|
|
80
|
+
Sibit::Blockchair.new(http: http, log: log)
|
|
80
81
|
when 'cex'
|
|
81
|
-
|
|
82
|
+
Sibit::Cex.new(http: http, log: log)
|
|
82
83
|
when 'fake'
|
|
83
|
-
|
|
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
|
-
|
|
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
|
data/lib/sibit/bitcoinchain.rb
CHANGED
|
@@ -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
|
|
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).
|
data/lib/sibit/blockchain.rb
CHANGED
|
@@ -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
|
|
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
|
data/lib/sibit/blockchair.rb
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
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).
|
data/lib/sibit/cryptoapis.rb
CHANGED
|
@@ -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
|
|
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
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/
|
|
8
|
-
require_relative 'sibit/
|
|
9
|
-
require_relative 'sibit/
|
|
10
|
-
require_relative 'sibit/
|
|
11
|
-
require_relative 'sibit/
|
|
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.
|
|
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 = '>=
|
|
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.
|
|
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: '
|
|
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
|