blockchain 2.0.0 → 3.0.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/README.md +23 -6
- data/Rakefile +6 -7
- data/blockchain.gemspec +1 -3
- data/docs/blockexplorer.md +235 -64
- data/docs/createwallet.md +32 -15
- data/docs/exchangerates.md +42 -17
- data/docs/pushtx.md +17 -11
- data/docs/receive.md +49 -22
- data/docs/statistics.md +71 -8
- data/docs/wallet.md +61 -79
- data/lib/blockchain.rb +1 -0
- data/lib/blockchain/blockexplorer.rb +195 -91
- data/lib/blockchain/client.rb +56 -0
- data/lib/blockchain/createwallet.rb +34 -19
- data/lib/blockchain/exchangerates.rb +55 -28
- data/lib/blockchain/pushtx.rb +21 -9
- data/lib/blockchain/receive.rb +52 -26
- data/lib/blockchain/statistics.rb +90 -29
- data/lib/blockchain/version.rb +1 -1
- data/lib/blockchain/wallet.rb +39 -42
- data/test/test_block.rb +97 -0
- data/test/test_exchangerates.rb +31 -0
- data/test/test_pushtx.rb +11 -0
- data/test/test_statistics.rb +35 -0
- data/test/test_wallet.rb +44 -0
- metadata +14 -18
- data/lib/blockchain/util.rb +0 -35
data/test/test_block.rb
ADDED
@@ -0,0 +1,97 @@
|
|
1
|
+
require 'blockchain'
|
2
|
+
require_relative '../lib/blockchain/blockexplorer'
|
3
|
+
require 'test/unit'
|
4
|
+
|
5
|
+
class TestBlockExplorer < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def test_get_block_bad_hash_api_exception
|
8
|
+
assert_raise( Blockchain::Client::APIException ) { Blockchain::BlockExplorer.new.get_block_by_hash("a") }
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_get_block_correct_hash_no_exception
|
12
|
+
assert_nothing_raised do Blockchain::BlockExplorer.new.get_block_by_hash("0000000000000000019336c7ada4df81cfa3fb22e1851b3964cf65e3da1afe27") end
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_get_tx_bad_has_api_exception
|
16
|
+
assert_raise( Blockchain::Client::APIException ) { Blockchain::BlockExplorer.new.get_tx_by_hash("a") }
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_get_tx_correct_hash_no_exception
|
20
|
+
assert_nothing_raised do Blockchain::BlockExplorer.new.get_tx_by_hash("4ff162eceb4392a38f269aab1ee1df567ae06875042b3ab6b53bd334c2e9e888") end
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_get_block_height_bad_argument_exception
|
24
|
+
assert_raise do Blockchain::BlockExplorer.new.get_block_height(-1) end
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_get_block_height_correct_argument_no_exception
|
28
|
+
assert_nothing_raised do Blockchain::BlockExplorer.new.get_block_height(1000) end
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_get_address_by_hash160_bad_hash_api_exception
|
32
|
+
assert_raise Blockchain::Client::APIException do Blockchain::BlockExplorer.new.get_address_by_hash160("buns") end
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_get_address_by_hash160_correct_hash_no_exception
|
36
|
+
assert_nothing_raised do Blockchain::BlockExplorer.new.get_address_by_hash160("1d6fdd6a2002594cfd6aad36ba635a303a23d795") end
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_get_address_base58_bad_hash_api_exception
|
40
|
+
assert_raise Blockchain::Client::APIException do Blockchain::BlockExplorer.new.get_address_by_base58("buns") end
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_get_address_base58_correct_hash_no_exception
|
44
|
+
assert_nothing_raised do Blockchain::BlockExplorer.new.get_address_by_base58("13gec5DMEG3eW4CcEqLB2fBLPwZUwJqeC9") end
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_get_xpub_bad_xpub_api_exception
|
48
|
+
assert_raise Blockchain::Client::APIException do Blockchain::BlockExplorer.new.get_xpub('buns') end
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_get_xpub_correct_xpub_no_exception
|
52
|
+
assert_nothing_raised do Blockchain::BlockExplorer.new.get_xpub("xpub6CmZamQcHw2TPtbGmJNEvRgfhLwitarvzFn3fBYEEkFTqztus7W7CNbf48Kxuj1bRRBmZPzQocB6qar9ay6buVkQk73ftKE1z4tt9cPHWRn") end
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_get_xpub_correct_xpub_not_nil
|
56
|
+
assert_not_nil Blockchain::BlockExplorer.new.get_xpub("xpub6CmZamQcHw2TPtbGmJNEvRgfhLwitarvzFn3fBYEEkFTqztus7W7CNbf48Kxuj1bRRBmZPzQocB6qar9ay6buVkQk73ftKE1z4tt9cPHWRn").address
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_get_multi_address_bad_address_api_exception
|
60
|
+
assert_raise Blockchain::Client::APIException do Blockchain::BlockExplorer.new.get_multi_address(['buns']) end
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_get_multi_address_correct_address_no_excpetion
|
64
|
+
assert_nothing_raised do Blockchain::BlockExplorer.new.get_multi_address(['13gec5DMEG3eW4CcEqLB2fBLPwZUwJqeC9',
|
65
|
+
'xpub6CmZamQcHw2TPtbGmJNEvRgfhLwitarvzFn3fBYEEkFTqztus7W7CNbf48Kxuj1bRRBmZPzQocB6qar9ay6buVkQk73ftKE1z4tt9cPHWRn']) end
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_get_unspent_outputs_bad_address_api_exception
|
69
|
+
assert_raise Blockchain::Client::APIException do Blockchain::BlockExplorer.new.get_unspent_outputs(['buns']) end
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_get_unspent_outputs_correct_address_no_excpetion
|
73
|
+
assert_nothing_raised do Blockchain::BlockExplorer.new.get_unspent_outputs(['13gec5DMEG3eW4CcEqLB2fBLPwZUwJqeC9',
|
74
|
+
'xpub6CmZamQcHw2TPtbGmJNEvRgfhLwitarvzFn3fBYEEkFTqztus7W7CNbf48Kxuj1bRRBmZPzQocB6qar9ay6buVkQk73ftKE1z4tt9cPHWRn']) end
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_get_latest_block_not_nil
|
78
|
+
assert_not_nil Blockchain::BlockExplorer.new.get_latest_block
|
79
|
+
end
|
80
|
+
|
81
|
+
def test_get_unconfirmed_tx_not_nil
|
82
|
+
assert_not_nil Blockchain::BlockExplorer.new.get_unconfirmed_tx
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_get_blocks_bad_time_api_exception
|
86
|
+
assert_raise Blockchain::Client::APIException do Blockchain::BlockExplorer.new.get_blocks(time = -1) end
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_get_blocks_bad_poolname_api_exception
|
90
|
+
assert_raise Blockchain::Client::APIException do Blockchain::BlockExplorer.new.get_blocks(pool_name = 'wombat') end
|
91
|
+
end
|
92
|
+
|
93
|
+
def test_get_blocks_correct_params_no_exception
|
94
|
+
assert_nothing_raised do Blockchain::BlockExplorer.new.get_blocks(1493052735, 'BTCC Pool') end
|
95
|
+
end
|
96
|
+
|
97
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'Blockchain'
|
2
|
+
require_relative '../lib/blockchain/exchangerates'
|
3
|
+
require 'test/unit'
|
4
|
+
|
5
|
+
class TestExchangeRates < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def test_get_ticker_not_nil
|
8
|
+
assert_not_nil Blockchain::ExchangeRateExplorer.new.get_ticker
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_to_btc_invalid_ccy_api_exception
|
12
|
+
assert_raise Blockchain::Client::APIException do Blockchain::ExchangeRateExplorer.new.to_btc('mau', 300) end
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_to_btc_invalid_value_api_exception
|
16
|
+
assert_raise Blockchain::Client::APIException do Blockchain::ExchangeRateExplorer.new.to_btc('USD', 'aaa') end
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_to_btc_valid_args_no_exception
|
20
|
+
assert_nothing_raised do Blockchain::ExchangeRateExplorer.new.to_btc('USD', 500) end
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_from_btc_invalid_value_api_exception
|
24
|
+
assert_raise Blockchain::Client::APIException do Blockchain::ExchangeRateExplorer.new.from_btc('GBP', 'cook') end
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_from_btc_valid_args_no_exception
|
28
|
+
assert_nothing_raised do Blockchain::ExchangeRateExplorer.new.from_btc('GBP', 100000000) end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
data/test/test_pushtx.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'Blockchain'
|
2
|
+
require_relative '../lib/blockchain/pushtx'
|
3
|
+
require 'test/unit'
|
4
|
+
|
5
|
+
class TestPushTx < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def test_push_tx_nil_param_api_exception
|
8
|
+
assert_raise Blockchain::Client::APIException do Blockchain::PushTx.new.pushtx(nil) end
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'Blockchain'
|
2
|
+
require_relative '../lib/blockchain/statistics'
|
3
|
+
require 'test/unit'
|
4
|
+
|
5
|
+
class TestStatistics < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def test_get_stats_not_nil
|
8
|
+
assert_not_nil Blockchain::StatisticsExplorer.new.get_statistics
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_get_chart_wrong_name_api_exception
|
12
|
+
assert_raise Blockchain::Client::APIException do Blockchain::StatisticsExplorer.new.get_chart('bomba') end
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_get_chart_invalid_timespan_api_exception
|
16
|
+
assert_raise Blockchain::Client::APIException do Blockchain::StatisticsExplorer.new.get_chart('transactions-per-second', 'dongledays') end
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_get_chart_invalid_rolling_avg_api_exception
|
20
|
+
assert_raise Blockchain::Client::APIException do Blockchain::StatisticsExplorer.new.get_chart('transactions-per-second', rolling_average = 'dongledays') end
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_get_chart_valid_params_no_exception
|
24
|
+
assert_nothing_raised do Blockchain::StatisticsExplorer.new.get_chart('transactions-per-second', '5weeks', '8hours') end
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_get_pools_invalid_timespan_argument_error
|
28
|
+
assert_raise ArgumentError do Blockchain::StatisticsExplorer.new.get_pools(11) end
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_get_pools_valid_params_no_exception
|
32
|
+
assert_nothing_raised do Blockchain::StatisticsExplorer.new.get_pools end
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
data/test/test_wallet.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'blockchain'
|
2
|
+
require_relative '../lib/blockchain/wallet'
|
3
|
+
require_relative '../lib/blockchain/createwallet'
|
4
|
+
require 'test/unit'
|
5
|
+
|
6
|
+
# Local waller service must be running for carrying out these tests
|
7
|
+
|
8
|
+
class TestWallet < Test::Unit::TestCase
|
9
|
+
|
10
|
+
def test_get_balance_not_nil
|
11
|
+
assert_nothing_raised do Blockchain::Wallet.new('773d4edb-bffe-4790-8712-8d232ce04b0c', 'Password1!', 'http://localhost:3000/', 'Password2!').get_balance end
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_list_addresses_not_nil
|
15
|
+
assert_not_nil Blockchain::Wallet.new('773d4edb-bffe-4790-8712-8d232ce04b0c', 'Password1!', 'http://localhost:3000/', 'Password2!').list_addresses
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_get_address_invalid_address_api_exception
|
19
|
+
assert_raise Blockchain::Client::APIException do puts Blockchain::Wallet.new('773d4edb-bffe-4790-8712-8d232ce04b0c', 'Password1!', 'http://localhost:3000/', 'Password2!').get_address('booboo').address end
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_get_address_valid_address_no_exception
|
23
|
+
wallet = Blockchain::Wallet.new('773d4edb-bffe-4790-8712-8d232ce04b0c', 'Password1!', 'http://localhost:3000/', 'Password2!')
|
24
|
+
addr = wallet.list_addresses[1]
|
25
|
+
assert_nothing_raised Blockchain::Client::APIException do wallet.get_address(addr.address) end
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_new_address_no_exception
|
29
|
+
assert_nothing_raised do Blockchain::Wallet.new('773d4edb-bffe-4790-8712-8d232ce04b0c', 'Password1!', 'http://localhost:3000/', 'Password2!').new_address end
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_archive_address_no_exception
|
33
|
+
wallet = Blockchain::Wallet.new('773d4edb-bffe-4790-8712-8d232ce04b0c', 'Password1!', 'http://localhost:3000/', 'Password2!')
|
34
|
+
addr = wallet.list_addresses[1]
|
35
|
+
assert_nothing_raised do wallet.archive_address(addr.address) end
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_unarchive_address_no_exception
|
39
|
+
wallet = Blockchain::Wallet.new('773d4edb-bffe-4790-8712-8d232ce04b0c', 'Password1!', 'http://localhost:3000/', 'Password2!')
|
40
|
+
addr = wallet.list_addresses[1]
|
41
|
+
assert_nothing_raised do wallet.unarchive_address(addr.address) end
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: blockchain
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Blockchain
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-05-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -38,20 +38,6 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '10.0'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: rspec
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '3.4'
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - "~>"
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '3.4'
|
55
41
|
description: Blockchain API library (Ruby, v1)
|
56
42
|
email:
|
57
43
|
- support@blockchain.zendesk.com
|
@@ -74,14 +60,19 @@ files:
|
|
74
60
|
- docs/wallet.md
|
75
61
|
- lib/blockchain.rb
|
76
62
|
- lib/blockchain/blockexplorer.rb
|
63
|
+
- lib/blockchain/client.rb
|
77
64
|
- lib/blockchain/createwallet.rb
|
78
65
|
- lib/blockchain/exchangerates.rb
|
79
66
|
- lib/blockchain/pushtx.rb
|
80
67
|
- lib/blockchain/receive.rb
|
81
68
|
- lib/blockchain/statistics.rb
|
82
|
-
- lib/blockchain/util.rb
|
83
69
|
- lib/blockchain/version.rb
|
84
70
|
- lib/blockchain/wallet.rb
|
71
|
+
- test/test_block.rb
|
72
|
+
- test/test_exchangerates.rb
|
73
|
+
- test/test_pushtx.rb
|
74
|
+
- test/test_statistics.rb
|
75
|
+
- test/test_wallet.rb
|
85
76
|
homepage: https://github.com/blockchain/api-v1-client-ruby
|
86
77
|
licenses:
|
87
78
|
- MIT
|
@@ -106,4 +97,9 @@ rubygems_version: 2.5.1
|
|
106
97
|
signing_key:
|
107
98
|
specification_version: 4
|
108
99
|
summary: Blockchain API library (Ruby, v1)
|
109
|
-
test_files:
|
100
|
+
test_files:
|
101
|
+
- test/test_block.rb
|
102
|
+
- test/test_exchangerates.rb
|
103
|
+
- test/test_pushtx.rb
|
104
|
+
- test/test_statistics.rb
|
105
|
+
- test/test_wallet.rb
|
data/lib/blockchain/util.rb
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
require 'net/http'
|
2
|
-
|
3
|
-
module Blockchain
|
4
|
-
|
5
|
-
class APIException < StandardError
|
6
|
-
end
|
7
|
-
|
8
|
-
BASE_URL = 'https://blockchain.info/'
|
9
|
-
TIMEOUT_SECONDS = 10
|
10
|
-
|
11
|
-
def self.call_api(resource, method: 'get', data: nil, base_url: nil)
|
12
|
-
base_url ||= BASE_URL
|
13
|
-
url = URI.parse(base_url + resource)
|
14
|
-
http = Net::HTTP.new(url.host, url.port)
|
15
|
-
http.use_ssl = base_url.start_with? 'https://'
|
16
|
-
http.read_timeout = TIMEOUT_SECONDS
|
17
|
-
|
18
|
-
request = nil
|
19
|
-
if method == 'get'
|
20
|
-
url.query = data.nil? ? nil : URI.encode_www_form(data)
|
21
|
-
request = Net::HTTP::Get.new(url.request_uri)
|
22
|
-
elsif method == 'post'
|
23
|
-
request = Net::HTTP::Post.new(url.request_uri)
|
24
|
-
request.content_type = 'application/x-www-form-urlencoded'
|
25
|
-
if data != nil then request.set_form_data(data) else {} end
|
26
|
-
end
|
27
|
-
|
28
|
-
response = http.request(request)
|
29
|
-
if response.code != '200'
|
30
|
-
raise APIException, response.body
|
31
|
-
end
|
32
|
-
return response.body
|
33
|
-
end
|
34
|
-
|
35
|
-
end
|