bitcoinrb 1.15.0 → 1.16.0
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/bitcoinrb.gemspec +5 -4
- data/lib/bitcoin/bip321_uri.rb +95 -32
- data/lib/bitcoin/bip324/ell_swift_pubkey.rb +3 -1
- data/lib/bitcoin/bip324/fs_chacha20.rb +3 -0
- data/lib/bitcoin/bip324.rb +1 -1
- data/lib/bitcoin/bip85_entropy.rb +79 -29
- data/lib/bitcoin/bit_stream.rb +2 -2
- data/lib/bitcoin/block.rb +46 -7
- data/lib/bitcoin/block_filter.rb +3 -2
- data/lib/bitcoin/block_header.rb +31 -8
- data/lib/bitcoin/bloom_filter.rb +5 -2
- data/lib/bitcoin/chainparams/regtest.yml +0 -1
- data/lib/bitcoin/chainparams/signet.yml +1 -1
- data/lib/bitcoin/constants.rb +13 -3
- data/lib/bitcoin/descriptor/combo.rb +13 -1
- data/lib/bitcoin/descriptor/expression.rb +35 -15
- data/lib/bitcoin/descriptor/multi.rb +9 -1
- data/lib/bitcoin/descriptor/multi_a.rb +4 -0
- data/lib/bitcoin/descriptor/musig.rb +1 -0
- data/lib/bitcoin/descriptor/pk.rb +7 -0
- data/lib/bitcoin/descriptor/pkh.rb +5 -0
- data/lib/bitcoin/descriptor/raw.rb +1 -1
- data/lib/bitcoin/descriptor/sh.rb +1 -0
- data/lib/bitcoin/descriptor/sp.rb +2 -2
- data/lib/bitcoin/descriptor/tr.rb +29 -3
- data/lib/bitcoin/descriptor/wpkh.rb +1 -0
- data/lib/bitcoin/descriptor/wsh.rb +1 -0
- data/lib/bitcoin/descriptor.rb +59 -35
- data/lib/bitcoin/ext/array_ext.rb +3 -0
- data/lib/bitcoin/ext/ecdsa.rb +7 -1
- data/lib/bitcoin/ext_key.rb +10 -0
- data/lib/bitcoin/gcs_filter.rb +21 -6
- data/lib/bitcoin/key.rb +66 -14
- data/lib/bitcoin/key_path.rb +8 -5
- data/lib/bitcoin/message/addr.rb +1 -0
- data/lib/bitcoin/message/addr_v2.rb +1 -0
- data/lib/bitcoin/message/base.rb +8 -1
- data/lib/bitcoin/message/block.rb +4 -8
- data/lib/bitcoin/message/block_transaction_request.rb +11 -8
- data/lib/bitcoin/message/block_transactions.rb +2 -1
- data/lib/bitcoin/message/cf_parser.rb +1 -0
- data/lib/bitcoin/message/cfcheckpt.rb +3 -3
- data/lib/bitcoin/message/cfheaders.rb +5 -4
- data/lib/bitcoin/message/cfilter.rb +3 -3
- data/lib/bitcoin/message/error.rb +3 -1
- data/lib/bitcoin/message/fee_filter.rb +1 -0
- data/lib/bitcoin/message/filter_add.rb +3 -1
- data/lib/bitcoin/message/filter_load.rb +4 -4
- data/lib/bitcoin/message/get_cfcheckpt.rb +1 -0
- data/lib/bitcoin/message/header_and_short_ids.rb +26 -11
- data/lib/bitcoin/message/headers.rb +10 -2
- data/lib/bitcoin/message/headers_parser.rb +4 -2
- data/lib/bitcoin/message/inventories_parser.rb +2 -1
- data/lib/bitcoin/message/inventory.rb +15 -6
- data/lib/bitcoin/message/merkle_block.rb +4 -4
- data/lib/bitcoin/message/network_addr.rb +13 -13
- data/lib/bitcoin/message/ping.rb +1 -0
- data/lib/bitcoin/message/pong.rb +1 -0
- data/lib/bitcoin/message/reject.rb +1 -0
- data/lib/bitcoin/message/send_cmpct.rb +2 -2
- data/lib/bitcoin/message/send_tx_rcncl.rb +1 -1
- data/lib/bitcoin/message/version.rb +23 -8
- data/lib/bitcoin/message.rb +15 -0
- data/lib/bitcoin/message_sign.rb +44 -6
- data/lib/bitcoin/mnemonic.rb +8 -0
- data/lib/bitcoin/out_point.rb +6 -2
- data/lib/bitcoin/partial_tree.rb +41 -28
- data/lib/bitcoin/payment_code.rb +26 -8
- data/lib/bitcoin/psbt/hd_key_path.rb +1 -2
- data/lib/bitcoin/psbt/input.rb +199 -48
- data/lib/bitcoin/psbt/key_origin_info.rb +2 -0
- data/lib/bitcoin/psbt/output.rb +9 -6
- data/lib/bitcoin/psbt/proprietary.rb +6 -3
- data/lib/bitcoin/psbt/tx.rb +9 -4
- data/lib/bitcoin/psbt.rb +46 -0
- data/lib/bitcoin/rpc/bitcoin_core_client.rb +54 -13
- data/lib/bitcoin/rpc/error.rb +43 -0
- data/lib/bitcoin/rpc.rb +1 -0
- data/lib/bitcoin/script/script.rb +114 -33
- data/lib/bitcoin/script/script_interpreter.rb +11 -6
- data/lib/bitcoin/script/tx_checker.rb +7 -2
- data/lib/bitcoin/script_witness.rb +5 -1
- data/lib/bitcoin/secp256k1/ruby.rb +10 -4
- data/lib/bitcoin/silent_payment.rb +6 -3
- data/lib/bitcoin/slip39/share.rb +35 -9
- data/lib/bitcoin/slip39/sss.rb +26 -11
- data/lib/bitcoin/slip39.rb +13 -5
- data/lib/bitcoin/taproot/control_block.rb +6 -1
- data/lib/bitcoin/taproot/custom_depth_builder.rb +12 -0
- data/lib/bitcoin/tx.rb +35 -14
- data/lib/bitcoin/tx_in.rb +2 -2
- data/lib/bitcoin/tx_out.rb +2 -2
- data/lib/bitcoin/util.rb +49 -28
- data/lib/bitcoin/validation.rb +64 -12
- data/lib/bitcoin/version.rb +1 -1
- data/lib/bitcoin/wallet/account.rb +35 -11
- data/lib/bitcoin/wallet/base.rb +40 -15
- data/lib/bitcoin/wallet/utxo.rb +22 -4
- data/lib/bitcoin.rb +16 -4
- metadata +24 -9
data/lib/bitcoin.rb
CHANGED
|
@@ -38,6 +38,7 @@ module Bitcoin
|
|
|
38
38
|
autoload :Base58, 'bitcoin/base58'
|
|
39
39
|
autoload :Secp256k1, 'bitcoin/secp256k1'
|
|
40
40
|
autoload :Mnemonic, 'bitcoin/mnemonic'
|
|
41
|
+
autoload :Validation, 'bitcoin/validation'
|
|
41
42
|
autoload :ValidationState, 'bitcoin/validation'
|
|
42
43
|
autoload :RPC, 'bitcoin/rpc'
|
|
43
44
|
autoload :Wallet, 'bitcoin/wallet'
|
|
@@ -50,7 +51,6 @@ module Bitcoin
|
|
|
50
51
|
autoload :KeyPath, 'bitcoin/key_path'
|
|
51
52
|
autoload :Descriptor, 'bitcoin/descriptor'
|
|
52
53
|
autoload :SLIP39, 'bitcoin/slip39'
|
|
53
|
-
autoload :Aezeed, 'bitcoin/aezeed'
|
|
54
54
|
autoload :PaymentCode, 'bitcoin/payment_code'
|
|
55
55
|
autoload :BIP85Entropy, 'bitcoin/bip85_entropy'
|
|
56
56
|
autoload :Errors, 'bitcoin/errors'
|
|
@@ -121,7 +121,11 @@ module Bitcoin
|
|
|
121
121
|
end
|
|
122
122
|
|
|
123
123
|
# hex string convert to binary
|
|
124
|
+
# @raise [ArgumentError] If this is not a hex string of even length. An odd length would be padded
|
|
125
|
+
# with a zero nibble and a character which is not a hex digit would be read as one, so that for
|
|
126
|
+
# example a 63 character private key would silently become a different key.
|
|
124
127
|
def htb
|
|
128
|
+
raise ArgumentError, 'Not a hex string of even length.' unless valid_hex?
|
|
125
129
|
[self].pack('H*')
|
|
126
130
|
end
|
|
127
131
|
|
|
@@ -164,7 +168,7 @@ module Bitcoin
|
|
|
164
168
|
when Bitcoin::Opcodes::OP_PUSHDATA4
|
|
165
169
|
offset += 4
|
|
166
170
|
end
|
|
167
|
-
self[offset..-1]
|
|
171
|
+
self[offset..-1] || '' # A length field cut short leaves no data.
|
|
168
172
|
end
|
|
169
173
|
|
|
170
174
|
def valid_pushdata_length?
|
|
@@ -185,19 +189,27 @@ module Bitcoin
|
|
|
185
189
|
else
|
|
186
190
|
opcode
|
|
187
191
|
end
|
|
192
|
+
return false if len.nil? # The length field itself is cut short.
|
|
188
193
|
self.bytesize == len + offset
|
|
189
194
|
end
|
|
190
195
|
|
|
191
196
|
# whether value is hex or not hex
|
|
192
|
-
# @return [Boolean] return true if data is hex
|
|
197
|
+
# @return [Boolean] return true if data is hex of even length, including an empty string. A string
|
|
198
|
+
# which is not valid in its encoding, e.g. binary data labelled as UTF-8, is not hex either.
|
|
193
199
|
def valid_hex?
|
|
194
|
-
|
|
200
|
+
# Matching the bytes does not raise for an invalid byte sequence. A valid ASCII compatible string
|
|
201
|
+
# is matched as it is, to avoid a copy.
|
|
202
|
+
bytes = valid_encoding? && encoding.ascii_compatible? ? self : b
|
|
203
|
+
bytes.bytesize.even? && !bytes.match?(/[^0-9a-fA-F]/)
|
|
195
204
|
end
|
|
196
205
|
|
|
197
206
|
end
|
|
198
207
|
|
|
199
208
|
class ::Integer
|
|
209
|
+
# @return [String] the hex string of this integer, padded to an even length.
|
|
210
|
+
# @raise [ArgumentError] If this is negative, which has no such hex string: to_s(16) gives it a '-' sign.
|
|
200
211
|
def to_even_length_hex
|
|
212
|
+
raise ArgumentError, 'A negative integer has no even length hex string.' if negative?
|
|
201
213
|
hex = to_s(16)
|
|
202
214
|
hex.rjust((hex.length / 2.0).ceil * 2, '0')
|
|
203
215
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: bitcoinrb
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.16.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- azuchi
|
|
@@ -15,14 +15,14 @@ dependencies:
|
|
|
15
15
|
requirements:
|
|
16
16
|
- - "~>"
|
|
17
17
|
- !ruby/object:Gem::Version
|
|
18
|
-
version: 0.
|
|
18
|
+
version: 0.6.0
|
|
19
19
|
type: :runtime
|
|
20
20
|
prerelease: false
|
|
21
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
22
22
|
requirements:
|
|
23
23
|
- - "~>"
|
|
24
24
|
- !ruby/object:Gem::Version
|
|
25
|
-
version: 0.
|
|
25
|
+
version: 0.6.0
|
|
26
26
|
- !ruby/object:Gem::Dependency
|
|
27
27
|
name: murmurhash3
|
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -43,14 +43,14 @@ dependencies:
|
|
|
43
43
|
requirements:
|
|
44
44
|
- - ">="
|
|
45
45
|
- !ruby/object:Gem::Version
|
|
46
|
-
version: 1.
|
|
46
|
+
version: 1.6.0
|
|
47
47
|
type: :runtime
|
|
48
48
|
prerelease: false
|
|
49
49
|
version_requirements: !ruby/object:Gem::Requirement
|
|
50
50
|
requirements:
|
|
51
51
|
- - ">="
|
|
52
52
|
- !ruby/object:Gem::Version
|
|
53
|
-
version: 1.
|
|
53
|
+
version: 1.6.0
|
|
54
54
|
- !ruby/object:Gem::Dependency
|
|
55
55
|
name: siphash
|
|
56
56
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -71,14 +71,14 @@ dependencies:
|
|
|
71
71
|
requirements:
|
|
72
72
|
- - ">="
|
|
73
73
|
- !ruby/object:Gem::Version
|
|
74
|
-
version: 0.
|
|
74
|
+
version: 0.8.0
|
|
75
75
|
type: :runtime
|
|
76
76
|
prerelease: false
|
|
77
77
|
version_requirements: !ruby/object:Gem::Requirement
|
|
78
78
|
requirements:
|
|
79
79
|
- - ">="
|
|
80
80
|
- !ruby/object:Gem::Version
|
|
81
|
-
version: 0.
|
|
81
|
+
version: 0.8.0
|
|
82
82
|
- !ruby/object:Gem::Dependency
|
|
83
83
|
name: base32
|
|
84
84
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -107,20 +107,34 @@ dependencies:
|
|
|
107
107
|
- - "~>"
|
|
108
108
|
- !ruby/object:Gem::Version
|
|
109
109
|
version: 0.2.0
|
|
110
|
+
- !ruby/object:Gem::Dependency
|
|
111
|
+
name: bigdecimal
|
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
|
113
|
+
requirements:
|
|
114
|
+
- - ">="
|
|
115
|
+
- !ruby/object:Gem::Version
|
|
116
|
+
version: '0'
|
|
117
|
+
type: :runtime
|
|
118
|
+
prerelease: false
|
|
119
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
120
|
+
requirements:
|
|
121
|
+
- - ">="
|
|
122
|
+
- !ruby/object:Gem::Version
|
|
123
|
+
version: '0'
|
|
110
124
|
- !ruby/object:Gem::Dependency
|
|
111
125
|
name: secp256k1rb
|
|
112
126
|
requirement: !ruby/object:Gem::Requirement
|
|
113
127
|
requirements:
|
|
114
128
|
- - '='
|
|
115
129
|
- !ruby/object:Gem::Version
|
|
116
|
-
version: 0.8.
|
|
130
|
+
version: 0.8.1
|
|
117
131
|
type: :runtime
|
|
118
132
|
prerelease: false
|
|
119
133
|
version_requirements: !ruby/object:Gem::Requirement
|
|
120
134
|
requirements:
|
|
121
135
|
- - '='
|
|
122
136
|
- !ruby/object:Gem::Version
|
|
123
|
-
version: 0.8.
|
|
137
|
+
version: 0.8.1
|
|
124
138
|
- !ruby/object:Gem::Dependency
|
|
125
139
|
name: logger
|
|
126
140
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -307,6 +321,7 @@ files:
|
|
|
307
321
|
- lib/bitcoin/psbt/tx.rb
|
|
308
322
|
- lib/bitcoin/rpc.rb
|
|
309
323
|
- lib/bitcoin/rpc/bitcoin_core_client.rb
|
|
324
|
+
- lib/bitcoin/rpc/error.rb
|
|
310
325
|
- lib/bitcoin/script/multisig.rb
|
|
311
326
|
- lib/bitcoin/script/script.rb
|
|
312
327
|
- lib/bitcoin/script/script_error.rb
|