bitcoinrb 0.3.0 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.ruby-version +1 -1
- data/.travis.yml +5 -3
- data/README.md +17 -6
- data/bitcoinrb.gemspec +7 -7
- data/exe/bitcoinrbd +5 -0
- data/lib/bitcoin.rb +34 -11
- data/lib/bitcoin/bip85_entropy.rb +111 -0
- data/lib/bitcoin/block_filter.rb +14 -0
- data/lib/bitcoin/block_header.rb +2 -0
- data/lib/bitcoin/chain_params.rb +9 -8
- data/lib/bitcoin/chainparams/regtest.yml +1 -1
- data/lib/bitcoin/chainparams/signet.yml +39 -0
- data/lib/bitcoin/chainparams/testnet.yml +1 -1
- data/lib/bitcoin/constants.rb +45 -12
- data/lib/bitcoin/descriptor.rb +1 -1
- data/lib/bitcoin/errors.rb +19 -0
- data/lib/bitcoin/ext.rb +5 -0
- data/lib/bitcoin/ext/ecdsa.rb +31 -0
- data/lib/bitcoin/ext/json_parser.rb +46 -0
- data/lib/bitcoin/ext_key.rb +50 -19
- data/lib/bitcoin/key.rb +46 -29
- data/lib/bitcoin/key_path.rb +12 -5
- data/lib/bitcoin/message.rb +7 -0
- data/lib/bitcoin/message/base.rb +1 -0
- data/lib/bitcoin/message/cf_parser.rb +16 -0
- data/lib/bitcoin/message/cfcheckpt.rb +36 -0
- data/lib/bitcoin/message/cfheaders.rb +40 -0
- data/lib/bitcoin/message/cfilter.rb +35 -0
- data/lib/bitcoin/message/fee_filter.rb +1 -1
- data/lib/bitcoin/message/filter_load.rb +3 -3
- data/lib/bitcoin/message/get_cfcheckpt.rb +29 -0
- data/lib/bitcoin/message/get_cfheaders.rb +24 -0
- data/lib/bitcoin/message/get_cfilters.rb +25 -0
- data/lib/bitcoin/message/header_and_short_ids.rb +1 -1
- data/lib/bitcoin/message/inventory.rb +1 -1
- data/lib/bitcoin/message/merkle_block.rb +1 -1
- data/lib/bitcoin/message/network_addr.rb +3 -3
- data/lib/bitcoin/message/ping.rb +1 -1
- data/lib/bitcoin/message/pong.rb +1 -1
- data/lib/bitcoin/message/send_cmpct.rb +2 -2
- data/lib/bitcoin/message/version.rb +7 -0
- data/lib/bitcoin/mnemonic.rb +7 -7
- data/lib/bitcoin/network/peer.rb +9 -4
- data/lib/bitcoin/network/peer_discovery.rb +1 -1
- data/lib/bitcoin/node/cli.rb +14 -10
- data/lib/bitcoin/node/configuration.rb +3 -1
- data/lib/bitcoin/node/spv.rb +9 -1
- data/lib/bitcoin/opcodes.rb +14 -1
- data/lib/bitcoin/out_point.rb +7 -0
- data/lib/bitcoin/payment_code.rb +92 -0
- data/lib/bitcoin/psbt/hd_key_path.rb +1 -1
- data/lib/bitcoin/psbt/input.rb +8 -17
- data/lib/bitcoin/psbt/output.rb +1 -1
- data/lib/bitcoin/psbt/tx.rb +11 -16
- data/lib/bitcoin/rpc/bitcoin_core_client.rb +22 -12
- data/lib/bitcoin/rpc/request_handler.rb +2 -2
- data/lib/bitcoin/script/script.rb +68 -28
- data/lib/bitcoin/script/script_error.rb +27 -1
- data/lib/bitcoin/script/script_interpreter.rb +164 -67
- data/lib/bitcoin/script/tx_checker.rb +64 -14
- data/lib/bitcoin/secp256k1.rb +1 -0
- data/lib/bitcoin/secp256k1/native.rb +138 -25
- data/lib/bitcoin/secp256k1/rfc6979.rb +43 -0
- data/lib/bitcoin/secp256k1/ruby.rb +82 -54
- data/lib/bitcoin/sighash_generator.rb +156 -0
- data/lib/bitcoin/slip39/sss.rb +5 -2
- data/lib/bitcoin/store.rb +2 -1
- data/lib/bitcoin/store/chain_entry.rb +1 -0
- data/lib/bitcoin/store/db/level_db.rb +2 -2
- data/lib/bitcoin/store/utxo_db.rb +226 -0
- data/lib/bitcoin/tx.rb +17 -88
- data/lib/bitcoin/tx_in.rb +4 -5
- data/lib/bitcoin/tx_out.rb +2 -3
- data/lib/bitcoin/util.rb +43 -6
- data/lib/bitcoin/version.rb +1 -1
- data/lib/bitcoin/wallet.rb +1 -0
- data/lib/bitcoin/wallet/account.rb +2 -1
- data/lib/bitcoin/wallet/base.rb +3 -3
- data/lib/bitcoin/wallet/db.rb +1 -1
- data/lib/bitcoin/wallet/master_key.rb +1 -0
- data/lib/bitcoin/wallet/utxo.rb +37 -0
- metadata +50 -32
data/lib/bitcoin/tx_in.rb
CHANGED
@@ -37,13 +37,12 @@ module Bitcoin
|
|
37
37
|
hash, index = buf.read(36).unpack('a32V')
|
38
38
|
i.out_point = OutPoint.new(hash.bth, index)
|
39
39
|
sig_length = Bitcoin.unpack_var_int_from_io(buf)
|
40
|
-
|
41
|
-
|
42
|
-
i.script_sig.chunks[0] = sig
|
40
|
+
if sig_length == 0
|
41
|
+
i.script_sig = Bitcoin::Script.new
|
43
42
|
else
|
44
|
-
i.script_sig = Script.parse_from_payload(
|
43
|
+
i.script_sig = Script.parse_from_payload(buf.read(sig_length))
|
45
44
|
end
|
46
|
-
i.sequence = buf.read(4).
|
45
|
+
i.sequence = buf.read(4).unpack1('V')
|
47
46
|
i
|
48
47
|
end
|
49
48
|
|
data/lib/bitcoin/tx_out.rb
CHANGED
@@ -18,14 +18,13 @@ module Bitcoin
|
|
18
18
|
|
19
19
|
def self.parse_from_payload(payload)
|
20
20
|
buf = payload.is_a?(String) ? StringIO.new(payload) : payload
|
21
|
-
value = buf.read(8).
|
21
|
+
value = buf.read(8).unpack1('q')
|
22
22
|
script_size = Bitcoin.unpack_var_int_from_io(buf)
|
23
23
|
new(value: value, script_pubkey: Script.parse_from_payload(buf.read(script_size)))
|
24
24
|
end
|
25
25
|
|
26
26
|
def to_payload
|
27
|
-
|
28
|
-
[value].pack('Q') << Bitcoin.pack_var_int(s.length) << s
|
27
|
+
[value].pack('Q') << script_pubkey.to_payload(true)
|
29
28
|
end
|
30
29
|
|
31
30
|
def to_empty_payload
|
data/lib/bitcoin/util.rb
CHANGED
@@ -33,7 +33,7 @@ module Bitcoin
|
|
33
33
|
|
34
34
|
# @return an integer for a valid payload, otherwise nil
|
35
35
|
def unpack_var_int(payload)
|
36
|
-
case payload.
|
36
|
+
case payload.unpack1('C')
|
37
37
|
when 0xfd
|
38
38
|
payload.unpack('xva*')
|
39
39
|
when 0xfe
|
@@ -47,14 +47,14 @@ module Bitcoin
|
|
47
47
|
|
48
48
|
# @return an integer for a valid payload, otherwise nil
|
49
49
|
def unpack_var_int_from_io(buf)
|
50
|
-
uchar = buf.read(1)&.
|
50
|
+
uchar = buf.read(1)&.unpack1('C')
|
51
51
|
case uchar
|
52
52
|
when 0xfd
|
53
|
-
buf.read(2)&.
|
53
|
+
buf.read(2)&.unpack1('v')
|
54
54
|
when 0xfe
|
55
|
-
buf.read(4)&.
|
55
|
+
buf.read(4)&.unpack1('V')
|
56
56
|
when 0xff
|
57
|
-
buf.read(8)&.
|
57
|
+
buf.read(8)&.unpack1('Q')
|
58
58
|
else
|
59
59
|
uchar
|
60
60
|
end
|
@@ -79,7 +79,16 @@ module Bitcoin
|
|
79
79
|
|
80
80
|
# byte convert to the sequence of bits packed eight in a byte with the least significant bit first.
|
81
81
|
def byte_to_bit(byte)
|
82
|
-
byte.
|
82
|
+
byte.unpack1('b*')
|
83
|
+
end
|
84
|
+
|
85
|
+
# padding zero to the left of binary string until bytesize.
|
86
|
+
# @param [String] binary string
|
87
|
+
# @param [Integer] bytesize total bytesize.
|
88
|
+
# @return [String] padded binary string.
|
89
|
+
def padding_zero(binary, bytesize)
|
90
|
+
return binary unless binary.bytesize < bytesize
|
91
|
+
('00' * (bytesize - binary.bytesize)).htb + binary
|
83
92
|
end
|
84
93
|
|
85
94
|
# generate sha256-ripemd160 hash for value
|
@@ -87,6 +96,15 @@ module Bitcoin
|
|
87
96
|
Digest::RMD160.hexdigest(Digest::SHA256.digest(hex.htb))
|
88
97
|
end
|
89
98
|
|
99
|
+
# Generate tagged hash value.
|
100
|
+
# @param [String] tag tag value.
|
101
|
+
# @param [String] msg the message to be hashed.
|
102
|
+
# @return [String] the hash value with binary format.
|
103
|
+
def tagged_hash(tag, msg)
|
104
|
+
tag_hash = Digest::SHA256.digest(tag)
|
105
|
+
Digest::SHA256.digest(tag_hash + tag_hash + msg)
|
106
|
+
end
|
107
|
+
|
90
108
|
# encode Base58 check address.
|
91
109
|
# @param [String] hex the address payload.
|
92
110
|
# @param [String] addr_version the address version for P2PKH and P2SH.
|
@@ -119,6 +137,25 @@ module Bitcoin
|
|
119
137
|
OpenSSL::HMAC.digest(DIGEST_NAME_SHA256, key, data)
|
120
138
|
end
|
121
139
|
|
140
|
+
# check whether +addr+ is valid address.
|
141
|
+
# @param [String] addr an address
|
142
|
+
# @return [Boolean] if valid address return true, otherwise false.
|
143
|
+
def valid_address?(addr)
|
144
|
+
begin
|
145
|
+
Bitcoin::Script.parse_from_addr(addr)
|
146
|
+
true
|
147
|
+
rescue Exception
|
148
|
+
false
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
122
152
|
end
|
123
153
|
|
154
|
+
module HexConverter
|
155
|
+
|
156
|
+
def to_hex
|
157
|
+
to_payload.bth
|
158
|
+
end
|
159
|
+
|
160
|
+
end
|
124
161
|
end
|
data/lib/bitcoin/version.rb
CHANGED
data/lib/bitcoin/wallet.rb
CHANGED
@@ -3,6 +3,7 @@ module Bitcoin
|
|
3
3
|
|
4
4
|
# the account in BIP-44
|
5
5
|
class Account
|
6
|
+
include Bitcoin::HexConverter
|
6
7
|
|
7
8
|
PURPOSE_TYPE = {legacy: 44, nested_witness: 49, native_segwit: 84}
|
8
9
|
|
@@ -42,7 +43,7 @@ module Bitcoin
|
|
42
43
|
|
43
44
|
def to_payload
|
44
45
|
payload = account_key.to_payload
|
45
|
-
payload << Bitcoin.pack_var_string(name.
|
46
|
+
payload << Bitcoin.pack_var_string(name.unpack1('H*').htb)
|
46
47
|
payload << [purpose, index, receive_depth, change_depth, lookahead].pack('I*')
|
47
48
|
payload
|
48
49
|
end
|
data/lib/bitcoin/wallet/base.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require 'leveldb'
|
1
|
+
require 'leveldb-native'
|
2
2
|
module Bitcoin
|
3
3
|
module Wallet
|
4
4
|
|
@@ -20,14 +20,14 @@ module Bitcoin
|
|
20
20
|
# @param [String] wallet_id new wallet id.
|
21
21
|
# @param [String] path_prefix wallet file path prefix.
|
22
22
|
# @return [Bitcoin::Wallet::Base] the wallet
|
23
|
-
def self.create(wallet_id = 1, path_prefix = default_path_prefix)
|
23
|
+
def self.create(wallet_id = 1, path_prefix = default_path_prefix, purpose = Account::PURPOSE_TYPE[:native_segwit])
|
24
24
|
raise ArgumentError, "wallet_id : #{wallet_id} already exist." if self.exist?(wallet_id, path_prefix)
|
25
25
|
w = self.new(wallet_id, path_prefix)
|
26
26
|
# generate seed
|
27
27
|
raise RuntimeError, 'the seed already exist.' if w.db.registered_master?
|
28
28
|
master = Bitcoin::Wallet::MasterKey.generate
|
29
29
|
w.db.register_master_key(master)
|
30
|
-
w.create_account('Default')
|
30
|
+
w.create_account(purpose, 'Default')
|
31
31
|
w
|
32
32
|
end
|
33
33
|
|
data/lib/bitcoin/wallet/db.rb
CHANGED
@@ -0,0 +1,37 @@
|
|
1
|
+
module Bitcoin
|
2
|
+
module Wallet
|
3
|
+
class Utxo
|
4
|
+
attr_reader :tx_hash
|
5
|
+
attr_reader :index
|
6
|
+
attr_reader :block_height
|
7
|
+
attr_reader :value
|
8
|
+
attr_reader :script_pubkey
|
9
|
+
|
10
|
+
def initialize(tx_hash, index, value, script_pubkey, block_height = nil)
|
11
|
+
@tx_hash = tx_hash
|
12
|
+
@index = index
|
13
|
+
@block_height = block_height
|
14
|
+
@value = value
|
15
|
+
@script_pubkey = script_pubkey
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.parse_from_payload(payload)
|
19
|
+
return nil if payload.nil?
|
20
|
+
|
21
|
+
tx_hash, index, block_height, value, payload = payload.unpack('H64VVQa*')
|
22
|
+
|
23
|
+
buf = StringIO.new(payload)
|
24
|
+
script_size = Bitcoin.unpack_var_int_from_io(buf)
|
25
|
+
script_pubkey = Bitcoin::Script.parse_from_payload(buf.read(script_size));
|
26
|
+
new(tx_hash, index, value, script_pubkey, block_height == 0 ? nil : block_height )
|
27
|
+
end
|
28
|
+
|
29
|
+
def to_payload
|
30
|
+
payload = [tx_hash, index, block_height.nil? ? 0 : block_height, value].pack('H64VVQ')
|
31
|
+
s = script_pubkey.to_payload
|
32
|
+
payload << Bitcoin.pack_var_int(s.length) << s
|
33
|
+
payload
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bitcoinrb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- azuchi
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-01-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ecdsa
|
@@ -136,20 +136,6 @@ dependencies:
|
|
136
136
|
- - ">="
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '0'
|
139
|
-
- !ruby/object:Gem::Dependency
|
140
|
-
name: rest-client
|
141
|
-
requirement: !ruby/object:Gem::Requirement
|
142
|
-
requirements:
|
143
|
-
- - ">="
|
144
|
-
- !ruby/object:Gem::Version
|
145
|
-
version: '0'
|
146
|
-
type: :runtime
|
147
|
-
prerelease: false
|
148
|
-
version_requirements: !ruby/object:Gem::Requirement
|
149
|
-
requirements:
|
150
|
-
- - ">="
|
151
|
-
- !ruby/object:Gem::Version
|
152
|
-
version: '0'
|
153
139
|
- !ruby/object:Gem::Dependency
|
154
140
|
name: iniparse
|
155
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -193,35 +179,35 @@ dependencies:
|
|
193
179
|
- !ruby/object:Gem::Version
|
194
180
|
version: 3.8.5
|
195
181
|
- !ruby/object:Gem::Dependency
|
196
|
-
name:
|
182
|
+
name: json_pure
|
197
183
|
requirement: !ruby/object:Gem::Requirement
|
198
184
|
requirements:
|
199
185
|
- - ">="
|
200
186
|
- !ruby/object:Gem::Version
|
201
|
-
version:
|
187
|
+
version: 2.3.1
|
202
188
|
type: :runtime
|
203
189
|
prerelease: false
|
204
190
|
version_requirements: !ruby/object:Gem::Requirement
|
205
191
|
requirements:
|
206
192
|
- - ">="
|
207
193
|
- !ruby/object:Gem::Version
|
208
|
-
version:
|
194
|
+
version: 2.3.1
|
209
195
|
- !ruby/object:Gem::Dependency
|
210
|
-
name:
|
196
|
+
name: bip-schnorr
|
211
197
|
requirement: !ruby/object:Gem::Requirement
|
212
198
|
requirements:
|
213
|
-
- - "
|
199
|
+
- - ">="
|
214
200
|
- !ruby/object:Gem::Version
|
215
|
-
version:
|
201
|
+
version: 0.3.2
|
216
202
|
type: :runtime
|
217
203
|
prerelease: false
|
218
204
|
version_requirements: !ruby/object:Gem::Requirement
|
219
205
|
requirements:
|
220
|
-
- - "
|
206
|
+
- - ">="
|
221
207
|
- !ruby/object:Gem::Version
|
222
|
-
version:
|
208
|
+
version: 0.3.2
|
223
209
|
- !ruby/object:Gem::Dependency
|
224
|
-
name: leveldb-
|
210
|
+
name: leveldb-native
|
225
211
|
requirement: !ruby/object:Gem::Requirement
|
226
212
|
requirements:
|
227
213
|
- - ">="
|
@@ -252,16 +238,16 @@ dependencies:
|
|
252
238
|
name: rake
|
253
239
|
requirement: !ruby/object:Gem::Requirement
|
254
240
|
requirements:
|
255
|
-
- - "
|
241
|
+
- - ">="
|
256
242
|
- !ruby/object:Gem::Version
|
257
|
-
version:
|
243
|
+
version: 12.3.3
|
258
244
|
type: :development
|
259
245
|
prerelease: false
|
260
246
|
version_requirements: !ruby/object:Gem::Requirement
|
261
247
|
requirements:
|
262
|
-
- - "
|
248
|
+
- - ">="
|
263
249
|
- !ruby/object:Gem::Version
|
264
|
-
version:
|
250
|
+
version: 12.3.3
|
265
251
|
- !ruby/object:Gem::Dependency
|
266
252
|
name: rspec
|
267
253
|
requirement: !ruby/object:Gem::Requirement
|
@@ -290,7 +276,21 @@ dependencies:
|
|
290
276
|
- - ">="
|
291
277
|
- !ruby/object:Gem::Version
|
292
278
|
version: '0'
|
293
|
-
|
279
|
+
- !ruby/object:Gem::Dependency
|
280
|
+
name: webmock
|
281
|
+
requirement: !ruby/object:Gem::Requirement
|
282
|
+
requirements:
|
283
|
+
- - ">="
|
284
|
+
- !ruby/object:Gem::Version
|
285
|
+
version: 3.11.1
|
286
|
+
type: :development
|
287
|
+
prerelease: false
|
288
|
+
version_requirements: !ruby/object:Gem::Requirement
|
289
|
+
requirements:
|
290
|
+
- - ">="
|
291
|
+
- !ruby/object:Gem::Version
|
292
|
+
version: 3.11.1
|
293
|
+
description: The implementation of Bitcoin Protocol for Ruby.
|
294
294
|
email:
|
295
295
|
- azuchi@chaintope.com
|
296
296
|
executables:
|
@@ -317,6 +317,7 @@ files:
|
|
317
317
|
- exe/bitcoinrbd
|
318
318
|
- lib/bitcoin.rb
|
319
319
|
- lib/bitcoin/base58.rb
|
320
|
+
- lib/bitcoin/bip85_entropy.rb
|
320
321
|
- lib/bitcoin/bit_stream.rb
|
321
322
|
- lib/bitcoin/block.rb
|
322
323
|
- lib/bitcoin/block_filter.rb
|
@@ -325,9 +326,14 @@ files:
|
|
325
326
|
- lib/bitcoin/chain_params.rb
|
326
327
|
- lib/bitcoin/chainparams/mainnet.yml
|
327
328
|
- lib/bitcoin/chainparams/regtest.yml
|
329
|
+
- lib/bitcoin/chainparams/signet.yml
|
328
330
|
- lib/bitcoin/chainparams/testnet.yml
|
329
331
|
- lib/bitcoin/constants.rb
|
330
332
|
- lib/bitcoin/descriptor.rb
|
333
|
+
- lib/bitcoin/errors.rb
|
334
|
+
- lib/bitcoin/ext.rb
|
335
|
+
- lib/bitcoin/ext/ecdsa.rb
|
336
|
+
- lib/bitcoin/ext/json_parser.rb
|
331
337
|
- lib/bitcoin/ext_key.rb
|
332
338
|
- lib/bitcoin/gcs_filter.rb
|
333
339
|
- lib/bitcoin/key.rb
|
@@ -341,6 +347,10 @@ files:
|
|
341
347
|
- lib/bitcoin/message/block_transaction_request.rb
|
342
348
|
- lib/bitcoin/message/block_transactions.rb
|
343
349
|
- lib/bitcoin/message/block_txn.rb
|
350
|
+
- lib/bitcoin/message/cf_parser.rb
|
351
|
+
- lib/bitcoin/message/cfcheckpt.rb
|
352
|
+
- lib/bitcoin/message/cfheaders.rb
|
353
|
+
- lib/bitcoin/message/cfilter.rb
|
344
354
|
- lib/bitcoin/message/cmpct_block.rb
|
345
355
|
- lib/bitcoin/message/error.rb
|
346
356
|
- lib/bitcoin/message/fee_filter.rb
|
@@ -350,6 +360,9 @@ files:
|
|
350
360
|
- lib/bitcoin/message/get_addr.rb
|
351
361
|
- lib/bitcoin/message/get_block_txn.rb
|
352
362
|
- lib/bitcoin/message/get_blocks.rb
|
363
|
+
- lib/bitcoin/message/get_cfcheckpt.rb
|
364
|
+
- lib/bitcoin/message/get_cfheaders.rb
|
365
|
+
- lib/bitcoin/message/get_cfilters.rb
|
353
366
|
- lib/bitcoin/message/get_data.rb
|
354
367
|
- lib/bitcoin/message/get_headers.rb
|
355
368
|
- lib/bitcoin/message/header_and_short_ids.rb
|
@@ -391,6 +404,7 @@ files:
|
|
391
404
|
- lib/bitcoin/node/spv.rb
|
392
405
|
- lib/bitcoin/opcodes.rb
|
393
406
|
- lib/bitcoin/out_point.rb
|
407
|
+
- lib/bitcoin/payment_code.rb
|
394
408
|
- lib/bitcoin/payments.rb
|
395
409
|
- lib/bitcoin/payments/output.pb.rb
|
396
410
|
- lib/bitcoin/payments/payment.pb.rb
|
@@ -416,7 +430,9 @@ files:
|
|
416
430
|
- lib/bitcoin/script_witness.rb
|
417
431
|
- lib/bitcoin/secp256k1.rb
|
418
432
|
- lib/bitcoin/secp256k1/native.rb
|
433
|
+
- lib/bitcoin/secp256k1/rfc6979.rb
|
419
434
|
- lib/bitcoin/secp256k1/ruby.rb
|
435
|
+
- lib/bitcoin/sighash_generator.rb
|
420
436
|
- lib/bitcoin/slip39.rb
|
421
437
|
- lib/bitcoin/slip39/share.rb
|
422
438
|
- lib/bitcoin/slip39/sss.rb
|
@@ -426,6 +442,7 @@ files:
|
|
426
442
|
- lib/bitcoin/store/db.rb
|
427
443
|
- lib/bitcoin/store/db/level_db.rb
|
428
444
|
- lib/bitcoin/store/spv_chain.rb
|
445
|
+
- lib/bitcoin/store/utxo_db.rb
|
429
446
|
- lib/bitcoin/tx.rb
|
430
447
|
- lib/bitcoin/tx_in.rb
|
431
448
|
- lib/bitcoin/tx_out.rb
|
@@ -437,6 +454,7 @@ files:
|
|
437
454
|
- lib/bitcoin/wallet/base.rb
|
438
455
|
- lib/bitcoin/wallet/db.rb
|
439
456
|
- lib/bitcoin/wallet/master_key.rb
|
457
|
+
- lib/bitcoin/wallet/utxo.rb
|
440
458
|
- lib/openassets.rb
|
441
459
|
- lib/openassets/marker_output.rb
|
442
460
|
- lib/openassets/payload.rb
|
@@ -460,8 +478,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
460
478
|
- !ruby/object:Gem::Version
|
461
479
|
version: '0'
|
462
480
|
requirements: []
|
463
|
-
rubygems_version: 3.
|
481
|
+
rubygems_version: 3.2.3
|
464
482
|
signing_key:
|
465
483
|
specification_version: 4
|
466
|
-
summary:
|
484
|
+
summary: The implementation of Bitcoin Protocol for Ruby.
|
467
485
|
test_files: []
|