block_io 3.0.2 → 3.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -0
- data/block_io.gemspec +1 -1
- data/lib/block_io/extended_bitcoinrb.rb +8 -3
- data/lib/block_io/version.rb +1 -1
- data/spec/larger_transaction_spec.rb +21 -1
- data/spec/test-cases/json/create_and_sign_transaction_response_witness_v1_output.json +11 -0
- data/spec/test-cases/json/prepare_transaction_response_witness_v1_output.json +64 -0
- metadata +10 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c290c375f3fb3278c9a27bc3950b2fab5933631d3e3e8eff1e7564c5ebfd9e8b
|
4
|
+
data.tar.gz: a42456ef38ce4785622494a8b95171416eb9da05d776d269ac9984f49a977897
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 317e3939e17806aedaec69f82cdd843c016342af51db8fc308fad666212f812153c239af4c768528fd7cce61f984af7704b5b06317f020a0a924f5c1b2a48969
|
7
|
+
data.tar.gz: 4d2223d07edcb8ddee3a16745c10e17b8a4a802cc793e3fd8b8c6673f7138ed728bd418799e3e4eb8ee163f2407463decf1fcad0e960822240cf9afcf606d831
|
data/README.md
CHANGED
@@ -17,6 +17,7 @@ Or install it yourself as:
|
|
17
17
|
$ gem install block_io
|
18
18
|
|
19
19
|
## Changelog
|
20
|
+
*09/28/21*: Version 3.0.3 supports witness_v1 outputs (Bech32m).
|
20
21
|
*07/21/21*: Version 3.0.2 fixes Litecoin P2SH address version.
|
21
22
|
*06/09/21*: Version 3.0.1 implements use of dynamic decryption algorithms.
|
22
23
|
*04/14/21*: BREAKING CHANGES. Version 3.0.0. Remove support for Ruby < 2.4.0, and Windows. Behavior and interfaces have changed. By upgrading you'll need to revise your code and tests.
|
data/block_io.gemspec
CHANGED
@@ -22,7 +22,7 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.add_development_dependency "rake", "~> 13.0", ">= 13.0"
|
23
23
|
spec.add_development_dependency "rspec", "~> 3.6", ">= 3.6"
|
24
24
|
spec.add_development_dependency "webmock", "~> 3.12", "< 4.0"
|
25
|
-
spec.add_runtime_dependency "bitcoinrb", "~> 0.
|
25
|
+
spec.add_runtime_dependency "bitcoinrb", "~> 0.8.0", "= 0.8.0"
|
26
26
|
spec.add_runtime_dependency "http", ">= 4.4.1", "< 6.0"
|
27
27
|
spec.add_runtime_dependency "oj", "~> 3.0", "< 4.0"
|
28
28
|
spec.add_runtime_dependency "connection_pool", ">= 2.2", "< 3.0"
|
@@ -46,12 +46,17 @@ module Bitcoin
|
|
46
46
|
r = point_field.mod(r_point.x)
|
47
47
|
return nil if r.zero?
|
48
48
|
|
49
|
+
rec = r_point.y & 1
|
50
|
+
|
49
51
|
e = ECDSA.normalize_digest(data, GROUP.bit_length)
|
50
52
|
s = point_field.mod(point_field.inverse(nonce) * (e + r * private_key))
|
51
53
|
|
52
54
|
# covert to low-s
|
53
|
-
|
54
|
-
|
55
|
+
if s > (GROUP.order / 2)
|
56
|
+
s = GROUP.order - s
|
57
|
+
rec = r_point.y & 1
|
58
|
+
end
|
59
|
+
|
55
60
|
return nil if s.zero?
|
56
61
|
|
57
62
|
signature = ECDSA::Signature.new(r, s).to_der
|
@@ -60,7 +65,7 @@ module Bitcoin
|
|
60
65
|
# public_key = Bitcoin::Key.new(priv_key: privkey.bth, :key_type => Bitcoin::Key::TYPES[:compressed]).pubkey # get rid of the key_type warning
|
61
66
|
# raise 'Creation of signature failed.' unless Bitcoin::Secp256k1::Ruby.verify_sig(data, signature, public_key)
|
62
67
|
|
63
|
-
signature
|
68
|
+
[signature, rec]
|
64
69
|
end
|
65
70
|
|
66
71
|
end
|
data/lib/block_io/version.rb
CHANGED
@@ -347,5 +347,25 @@ describe "Client.create_and_sign_transaction" do
|
|
347
347
|
|
348
348
|
end
|
349
349
|
|
350
|
-
|
350
|
+
context "witness_v1_output" do
|
351
|
+
|
352
|
+
before(:each) do
|
353
|
+
|
354
|
+
@blockio = BlockIo::Client.new(:api_key => @api_key, :pin => @insecure_pin_valid)
|
355
|
+
|
356
|
+
end
|
357
|
+
|
358
|
+
it "succeeds_on_witness_v1_output" do
|
359
|
+
|
360
|
+
request = Oj.safe_load(File.open("spec/test-cases/json/prepare_transaction_response_witness_v1_output.json").read)
|
361
|
+
expected_response = Oj.safe_load(File.open("spec/test-cases/json/create_and_sign_transaction_response_witness_v1_output.json").read)
|
362
|
+
|
363
|
+
actual_response = @blockio.create_and_sign_transaction(request)
|
364
|
+
|
365
|
+
expect(actual_response).to eq(expected_response)
|
366
|
+
|
367
|
+
end
|
368
|
+
|
369
|
+
end
|
351
370
|
|
371
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
{
|
2
|
+
"tx_type": "basic",
|
3
|
+
"tx_hex": "0100000001784ecc9b864ff9b8a97eaacd138fdf193a5d889735702a4f726d2f87631de45f0100000000ffffffff03204e000000000000225120000000c4a5cad46221b2a187905e5266362b99d5e91c6ce24d165dab93e86433204e000000000000220020000000c4a5cad46221b2a187905e5266362b99d5e91c6ce24d165dab93e864339f4c00000000000017a914026b9608a26f40f74644cc60622d1067c3696ac98700000000",
|
4
|
+
"signatures": [
|
5
|
+
{
|
6
|
+
"input_index": 0,
|
7
|
+
"public_key": "02d2cbf77287c1443759abdd35f239e7da2f52c992258653bc8dd577ae63c78628",
|
8
|
+
"signature": "304402206d093e2a14e80e01f3c8eefc76d651d01c3dedbd1f0dabf78ace5b352ca660b602202aac312b5b7f0b8c79ad22e75d2523ee39d9c62a35be4db102b5c8f3f296f662"
|
9
|
+
}
|
10
|
+
]
|
11
|
+
}
|
@@ -0,0 +1,64 @@
|
|
1
|
+
{
|
2
|
+
"status": "success",
|
3
|
+
"data": {
|
4
|
+
"network": "BTCTEST",
|
5
|
+
"tx_type": "basic",
|
6
|
+
"inputs": [
|
7
|
+
{
|
8
|
+
"input_index": 0,
|
9
|
+
"previous_txid": "5fe41d63872f6d724f2a703597885d3a19df8f13cdaa7ea9b8f94f869bcc4e78",
|
10
|
+
"previous_output_index": 1,
|
11
|
+
"input_value": "0.00060915",
|
12
|
+
"spending_address": "2MsU2DsvP7okZ2sZGZUvH3rZZuQt4pf75Am"
|
13
|
+
}
|
14
|
+
],
|
15
|
+
"outputs": [
|
16
|
+
{
|
17
|
+
"output_index": 0,
|
18
|
+
"output_category": "user-specified",
|
19
|
+
"output_value": "0.00020000",
|
20
|
+
"receiving_address": "tb1pqqqqp399et2xygdj5xreqhjjvcmzhxw4aywxecjdzew6hylgvsesf3hn0c"
|
21
|
+
},
|
22
|
+
{
|
23
|
+
"output_index": 1,
|
24
|
+
"output_category": "user-specified",
|
25
|
+
"output_value": "0.00020000",
|
26
|
+
"receiving_address": "tb1qqqqqp399et2xygdj5xreqhjjvcmzhxw4aywxecjdzew6hylgvsesrxh6hy"
|
27
|
+
},
|
28
|
+
{
|
29
|
+
"output_index": 2,
|
30
|
+
"output_category": "change",
|
31
|
+
"output_value": "0.00019615",
|
32
|
+
"receiving_address": "2MsU2DsvP7okZ2sZGZUvH3rZZuQt4pf75Am"
|
33
|
+
}
|
34
|
+
],
|
35
|
+
"input_address_data": [
|
36
|
+
{
|
37
|
+
"required_signatures": 2,
|
38
|
+
"public_keys": [
|
39
|
+
"021916c1ea9215990263e2862bcecc85397d199a4411c863983176ee3d44e27f7f",
|
40
|
+
"02d2cbf77287c1443759abdd35f239e7da2f52c992258653bc8dd577ae63c78628"
|
41
|
+
],
|
42
|
+
"address": "2MsU2DsvP7okZ2sZGZUvH3rZZuQt4pf75Am",
|
43
|
+
"address_type": "P2WSH-over-P2SH"
|
44
|
+
}
|
45
|
+
],
|
46
|
+
"user_key": {
|
47
|
+
"public_key": "02d2cbf77287c1443759abdd35f239e7da2f52c992258653bc8dd577ae63c78628",
|
48
|
+
"encrypted_passphrase": "jlPuw8CJGTWTb+O4I/IKGWGDdF9G8/MX5meX+IfuLfbb7rRABoSUGYSU2BXxxRqR95K64u8gH46h3zr/NKsj8OFv5gj4JwClM7RN03fvb+3CyXgwy4eYSSpFE6vVsdyoxJ8rshUbpf8tvCerUKC0LhE9d61q7mWYoVAik61WRwc=",
|
49
|
+
"algorithm": {
|
50
|
+
"pbkdf2_salt": "7ccf40ce398f0fb475fe91043f7dce57",
|
51
|
+
"pbkdf2_iterations": 102400,
|
52
|
+
"pbkdf2_hash_function": "SHA256",
|
53
|
+
"pbkdf2_phase1_key_length": 16,
|
54
|
+
"pbkdf2_phase2_key_length": 32,
|
55
|
+
"aes_iv": "7c69a5e81e53ba05213b35bb",
|
56
|
+
"aes_cipher": "AES-256-GCM",
|
57
|
+
"aes_auth_tag": "d19b5e48e068f3b1179a4724b3862650",
|
58
|
+
"aes_auth_data": ""
|
59
|
+
}
|
60
|
+
},
|
61
|
+
"estimated_tx_size": 260,
|
62
|
+
"expected_unsigned_txid": "e1925681c6986df2617d41c90b2bbc32cd01f7df0323ca52417b4a8677b2a160"
|
63
|
+
}
|
64
|
+
}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: block_io
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.
|
4
|
+
version: 3.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Atif Nazir
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-09-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -96,20 +96,20 @@ dependencies:
|
|
96
96
|
requirements:
|
97
97
|
- - "~>"
|
98
98
|
- !ruby/object:Gem::Version
|
99
|
-
version: 0.
|
99
|
+
version: 0.8.0
|
100
100
|
- - '='
|
101
101
|
- !ruby/object:Gem::Version
|
102
|
-
version: 0.
|
102
|
+
version: 0.8.0
|
103
103
|
type: :runtime
|
104
104
|
prerelease: false
|
105
105
|
version_requirements: !ruby/object:Gem::Requirement
|
106
106
|
requirements:
|
107
107
|
- - "~>"
|
108
108
|
- !ruby/object:Gem::Version
|
109
|
-
version: 0.
|
109
|
+
version: 0.8.0
|
110
110
|
- - '='
|
111
111
|
- !ruby/object:Gem::Version
|
112
|
-
version: 0.
|
112
|
+
version: 0.8.0
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: http
|
115
115
|
requirement: !ruby/object:Gem::Requirement
|
@@ -251,6 +251,7 @@ files:
|
|
251
251
|
- spec/test-cases/json/create_and_sign_transaction_response_sweep_p2wpkh.json
|
252
252
|
- spec/test-cases/json/create_and_sign_transaction_response_sweep_p2wpkh_over_p2sh.json
|
253
253
|
- spec/test-cases/json/create_and_sign_transaction_response_with_blockio_fee_and_expected_unsigned_txid.json
|
254
|
+
- spec/test-cases/json/create_and_sign_transaction_response_witness_v1_output.json
|
254
255
|
- spec/test-cases/json/get_balance_response.json
|
255
256
|
- spec/test-cases/json/prepare_dtrust_transaction_response_P2SH_3of5_195inputs.json
|
256
257
|
- spec/test-cases/json/prepare_dtrust_transaction_response_P2SH_4of5_195inputs.json
|
@@ -284,6 +285,7 @@ files:
|
|
284
285
|
- spec/test-cases/json/prepare_transaction_response_P2WSH-over-P2SH_1of2_253inputs.json
|
285
286
|
- spec/test-cases/json/prepare_transaction_response_P2WSH-over-P2SH_1of2_762inputs.json
|
286
287
|
- spec/test-cases/json/prepare_transaction_response_with_blockio_fee_and_expected_unsigned_txid.json
|
288
|
+
- spec/test-cases/json/prepare_transaction_response_witness_v1_output.json
|
287
289
|
- spec/test-cases/json/summarize_prepared_transaction_response_with_blockio_fee_and_expected_unsigned_txid.json
|
288
290
|
homepage: https://block.io/api/simple/ruby
|
289
291
|
licenses:
|
@@ -356,6 +358,7 @@ test_files:
|
|
356
358
|
- spec/test-cases/json/create_and_sign_transaction_response_sweep_p2wpkh.json
|
357
359
|
- spec/test-cases/json/create_and_sign_transaction_response_sweep_p2wpkh_over_p2sh.json
|
358
360
|
- spec/test-cases/json/create_and_sign_transaction_response_with_blockio_fee_and_expected_unsigned_txid.json
|
361
|
+
- spec/test-cases/json/create_and_sign_transaction_response_witness_v1_output.json
|
359
362
|
- spec/test-cases/json/get_balance_response.json
|
360
363
|
- spec/test-cases/json/prepare_dtrust_transaction_response_P2SH_3of5_195inputs.json
|
361
364
|
- spec/test-cases/json/prepare_dtrust_transaction_response_P2SH_4of5_195inputs.json
|
@@ -389,4 +392,5 @@ test_files:
|
|
389
392
|
- spec/test-cases/json/prepare_transaction_response_P2WSH-over-P2SH_1of2_253inputs.json
|
390
393
|
- spec/test-cases/json/prepare_transaction_response_P2WSH-over-P2SH_1of2_762inputs.json
|
391
394
|
- spec/test-cases/json/prepare_transaction_response_with_blockio_fee_and_expected_unsigned_txid.json
|
395
|
+
- spec/test-cases/json/prepare_transaction_response_witness_v1_output.json
|
392
396
|
- spec/test-cases/json/summarize_prepared_transaction_response_with_blockio_fee_and_expected_unsigned_txid.json
|