blocktrail 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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