blocktrail 0.1.1 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 062f9418266bb358ba7f063ced14752a269ef9a6
4
- data.tar.gz: 7b2d1288241f340a5349536c05616b58fd053ebe
3
+ metadata.gz: 8da1ca5d1737c659ec931c03a3cd92f74e9d8ad6
4
+ data.tar.gz: e8100d3c06b043db500fa6b16344b1b8152e1af9
5
5
  SHA512:
6
- metadata.gz: c3a0b9a92041cb26a8ad8545f22f2c3e70d7fcc76973c7188f98816a6fe77d7e4f3a3f63049d01d5374715ec16d3ca783356257f80e2b5ed9431dec7982d73da
7
- data.tar.gz: 09264284127666883b3c19588c8dd433ea3f0ecd2cba43d93a8aa5131b93cdff9be8b1b0d1fc2764e6a6cbc6a77cc7b17ec9bab1a0f550334d7c6847519a0a07
6
+ metadata.gz: be245e748cf019b3cbe3091bb9614dcb9ecf4defe2a0f2a8e1506b4a14a4860c2876a8758a5d16bcf148ad424948debac4f9df0ebadb44573bb520b30edf3d5d
7
+ data.tar.gz: bcccaa6f01747cc4dddfe6a58d841422a734e7b3bdbb0ad81cc403207c625b5dafb2d77986648518a57947f48f34a66057808cde9f34c729ee887cbc79eef6da
data/README.md CHANGED
@@ -2,7 +2,7 @@ BlockTrail Ruby SDK
2
2
  =====================
3
3
  This is the BlockTrail Ruby SDK. This SDK contains methods for easily interacting with the BlockTrail API.
4
4
 
5
- [![Gem Version](https://badge.fury.io/rb/blocktrail@2x.png)](https://badge.fury.io/rb/blocktrail)
5
+ [![Gem Version](https://badge.fury.io/rb/blocktrail.png)](https://badge.fury.io/rb/blocktrail)
6
6
 
7
7
  IMPORTANT! FLOATS ARE EVIL!!
8
8
  ----------------------------
@@ -22,6 +22,7 @@ Gem::Specification.new do |spec|
22
22
  spec.require_paths = ["lib"]
23
23
 
24
24
  spec.add_dependency "rest-client", "~> 2.0"
25
+ spec.add_dependency "api-auth", "~> 2.1"
25
26
 
26
27
  spec.add_development_dependency "bundler", "~> 1.14"
27
28
  spec.add_development_dependency "rake", "~> 10.0"
@@ -5,3 +5,7 @@ client = Blocktrail::Client.new('YOUR_API_KEY_HERE', 'YOUR_API_SECRET_HERE')
5
5
  address = client.address('1dice8EMZmqKvrGE4Qc9bUFf9PX3xaYDp')
6
6
  client.price
7
7
  client.address_transactions('1dice8EMZmqKvrGE4Qc9bUFf9PX3xaYDp')['data']
8
+ client.verify_address('16dwJmR4mX5RguGrocMfN9Q9FR2kZcLw2z', 'HPMOHRgPSMKdXrU6AqQs/i9S7alOakkHsJiqLGmInt05Cxj6b/WhS7kJxbIQxKmDW08YKzoFnbVZIoTI2qofEzk=')
9
+
10
+ # with testnet and debug info
11
+ client = Blocktrail::Client.new('YOUR_API_KEY_HERE', 'YOUR_API_SECRET_HERE', 'v1', true, true)
@@ -2,6 +2,7 @@ require 'rest-client'
2
2
  require 'digest/md5'
3
3
  require 'json'
4
4
  require 'blocktrail/exceptions'
5
+ require 'api-auth'
5
6
 
6
7
  module Blocktrail
7
8
  class Client
@@ -27,8 +28,7 @@ module Blocktrail
27
28
  {
28
29
  'Content-Type' => 'application/json',
29
30
  'User-Agent': "#{Blocktrail::SDK_USER_AGENT}/#{Blocktrail::VERSION}",
30
- 'Date': Time.now.utc.iso8601,
31
- 'Content-MD5': Digest::MD5.hexdigest('')
31
+ 'Date': Time.now.utc.iso8601
32
32
  }
33
33
  end
34
34
 
@@ -69,19 +69,23 @@ module Blocktrail
69
69
  end
70
70
 
71
71
  def address_transactions(address, page = 1, limit = 20, sort_dir = 'asc')
72
- get("/address/#{address}/transactions", headers: { params: { page: page, limit: limit, sort_dir: sort_dir } })
72
+ get("/address/#{address}/transactions", {}, params: { page: page, limit: limit, sort_dir: sort_dir })
73
73
  end
74
74
 
75
75
  def address_unconfirmed_transactions(address, page = 1, limit = 20, sort_dir = 'asc')
76
- get("/address/#{address}/unconfirmed-transactions", headers: { params: { page: page, limit: limit, sort_dir: sort_dir } })
76
+ get("/address/#{address}/unconfirmed-transactions", {}, params: { page: page, limit: limit, sort_dir: sort_dir })
77
77
  end
78
78
 
79
79
  def address_unspent_outputs(address, page = 1, limit = 20, sort_dir = 'asc')
80
- get("/address/#{address}/unspent-outputs", headers: { params: { page: page, limit: limit, sort_dir: sort_dir } })
80
+ get("/address/#{address}/unspent-outputs", {}, params: { page: page, limit: limit, sort_dir: sort_dir })
81
+ end
82
+
83
+ def verify_address(address, signature)
84
+ post("/address/#{address}/verify", { signature: signature })
81
85
  end
82
86
 
83
87
  def all_blocks(page = 1, limit = 20, sort_dir = 'asc')
84
- get("/all-blocks", headers: { params: { page: page, limit: limit, sort_dir: sort_dir } })
88
+ get("/all-blocks", {}, params: { page: page, limit: limit, sort_dir: sort_dir })
85
89
  end
86
90
 
87
91
  def block_latest
@@ -93,7 +97,7 @@ module Blocktrail
93
97
  end
94
98
 
95
99
  def block_transactions(block, page = 1, limit = 20, sort_dir = 'asc')
96
- get("/block/#{block}/transactions", headers: { params: { page: page, limit: limit, sort_dir: sort_dir } })
100
+ get("/block/#{block}/transactions", {}, params: { page: page, limit: limit, sort_dir: sort_dir })
97
101
  end
98
102
 
99
103
  def transaction(txhash)
@@ -101,7 +105,7 @@ module Blocktrail
101
105
  end
102
106
 
103
107
  def all_webhooks(page = 1, limit = 20)
104
- get("/webhooks", headers: { params: { page: page, limit: limit } })
108
+ get("/webhooks", {}, params: { page: page, limit: limit })
105
109
  end
106
110
 
107
111
  def webhook(identifier)
@@ -109,21 +113,59 @@ module Blocktrail
109
113
  end
110
114
 
111
115
  def webhook_events(identifier, page = 1, limit = 20)
112
- get("/webhook/#{identifier}/events", headers: { params: { page: page, limit: limit } })
116
+ get("/webhook/#{identifier}/events", {}, params: { page: page, limit: limit })
113
117
  end
114
118
 
115
119
  def price
116
120
  get("/price")
117
121
  end
118
122
 
123
+ # Payments API
124
+
125
+ def all_wallets(page = 1, limit = 20)
126
+ get("/wallets", nil, {}, params: { page: page, limit: limit })
127
+ end
128
+
129
+ def get_wallet(identifier)
130
+ get("/wallet/#{identifier}")
131
+ end
132
+
133
+ def get_wallet_balance(identifier)
134
+ get("/wallet/#{identifier}/balance")
135
+ end
136
+
137
+ def wallet_discovery(identifier, gap = 200)
138
+ get("/wallet/#{identifier}/discovery", {}, params: { gap: gap })
139
+ end
140
+
141
+ def get_new_derivation(identifier, path)
142
+ post("/wallet/#{identifier}/path", { path: path })
143
+ end
144
+
119
145
  private
120
146
 
121
147
  def request(method, url, payload = {}, headers = {})
122
148
  url = "https://api.blocktrail.com/#{api_version}/#{testnet ? 't' : ''}btc#{url}"
123
- headers = default_headers.merge(headers).merge({ params: default_params })
149
+
150
+ headers['Content-MD5'] = if payload.empty?
151
+ Digest::MD5.hexdigest('') # needs url here
152
+ else
153
+ Digest::MD5.hexdigest(payload.to_json)
154
+ end
155
+
156
+ headers && headers[:params] ? headers[:params].merge!(default_params) : headers[:params] = default_params
157
+ headers = default_headers.merge(headers)
124
158
  payload = payload.to_json
159
+ if debug
160
+ puts 'URL: ' + url.inspect
161
+ puts 'Headers: ' + headers.inspect
162
+ puts 'Payload: ' + payload.inspect
163
+ end
164
+
165
+ request = RestClient::Request.new(method: method, url: url, payload: payload, headers: headers)
166
+ signed_request = ApiAuth.sign!(request, api_key, api_secret, digest: 'sha256')
167
+ response = signed_request.execute
125
168
 
126
- response = RestClient::Request.execute(method: method, url: url, payload: payload, headers: headers)
127
169
  if debug
128
170
  puts 'Request: ' + response.request.inspect
129
171
  puts 'Status code: ' + response.code.inspect
@@ -1,3 +1,3 @@
1
1
  module Blocktrail
2
- VERSION = '0.1.1'
2
+ VERSION = '0.2.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: blocktrail
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yuri Skurikhin
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-03-19 00:00:00.000000000 Z
11
+ date: 2017-03-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '2.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: api-auth
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '2.1'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '2.1'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement