virtex 1.0.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 0e6bcfd56ab2a8ed0d7f367edf108259c918a81d
4
+ data.tar.gz: c130f2bf7700dfceb4c75c2b51df44182dd5e552
5
+ SHA512:
6
+ metadata.gz: 087bbe40855dbb163e225df97cb6322e581ef26365a377cbef08b6e827caa2afcd6612457988c39d4e4b5859865e6958398423559a6f1adea4ce271c19158a0f
7
+ data.tar.gz: 80b7c8c511305af4e44c2bf46335e325aba668364323cfd821ce7c1988b35c7e01e6055de2f0b52da3317797d7dbc18f5b2ae78794d1af38783223d697999ee3
data/.gitignore ADDED
@@ -0,0 +1,49 @@
1
+ *.gem
2
+ *.rbc
3
+ *.sw[m-p]
4
+ .bundle
5
+ .config
6
+ .yardoc
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ /.config
19
+ /coverage/
20
+ /InstalledFiles
21
+ /pkg/
22
+ /spec/reports/
23
+ /test/tmp/
24
+ /test/version_tmp/
25
+ /tmp/
26
+
27
+ ## Specific to RubyMotion:
28
+ .dat*
29
+ .repl_history
30
+ build/
31
+
32
+ ## Documentation cache and generated files:
33
+ /.yardoc/
34
+ /_yardoc/
35
+ /doc/
36
+ /rdoc/
37
+
38
+ ## Environment normalisation:
39
+ /.bundle/
40
+ /lib/bundler/man/
41
+
42
+ Gemfile.lock
43
+ .ruby-version
44
+ .ruby-gemset
45
+
46
+ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
47
+ .rvmrc
48
+
49
+ .env
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in ca_virtex.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Coinbase, Zaratan, aianus
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,114 @@
1
+ Virtex
2
+ ==========
3
+
4
+ A thin wrapper around the CaVirtex API
5
+
6
+ ## Usage
7
+
8
+ See the CaVirtex API docs and source code for more information
9
+
10
+ ### Unauthenticated requests
11
+
12
+ ``` ruby
13
+ require 'virtex'
14
+ @virtex = Virtex::Client.new
15
+ ```
16
+
17
+ #### Orderbook
18
+
19
+ ```ruby
20
+ book = @virtex.orderbook('BTCCAD').orderbook
21
+
22
+ best_bid = book.bids.first
23
+ expect(best_bid[0]).to eq(631.481850000) # Price
24
+ expect(best_bid[1]).to eq(1.367900000) # Size
25
+
26
+ best_ask = asks.last
27
+ expect(best_ask[0]).to eq(634.974840000)
28
+ expect(best_ask[1]).to eq(9.727400000)
29
+ ```
30
+
31
+ #### Tradebook
32
+
33
+ ```ruby
34
+ trades = @virtex.tradebook('BTCCAD').trades
35
+ latest = trades.first
36
+ ```
37
+
38
+ #### Ticker
39
+
40
+ ```ruby
41
+ ticker = @virtex.ticker("BTCCAD").ticker.BTCCAD
42
+ ```
43
+
44
+ ### Authenticated requests
45
+
46
+ ```ruby
47
+ require 'virtex'
48
+ @virtex = Virtex::Client.new(ENV['VIRTEX_API_KEY'], ENV['VIRTEX_API_SECRET'])
49
+ ```
50
+
51
+ #### View Balance
52
+
53
+ ```ruby
54
+ expect(@virtex.balance.balance.CAD).to eq(0.0385)
55
+ ```
56
+
57
+ #### View Transactions
58
+
59
+
60
+ ```ruby
61
+ transactions = @virtex.transactions("BTC").transactions
62
+ ```
63
+
64
+ #### View trades
65
+
66
+ ```ruby
67
+ recent_trades = @virtex.trades.trades
68
+ ```
69
+
70
+ #### View orders
71
+
72
+ ```ruby
73
+ recent_orders = @virtex.orders.orders
74
+ ```
75
+
76
+ #### Place an order
77
+
78
+ ```ruby
79
+ # Place a new order to sell 0.1 BTC/CAD at 1000.00
80
+ new_order = @virtex.new_order!('sell', 0.1, 'BTCCAD', 1000.00).order
81
+ ```
82
+
83
+ #### Cancel an order
84
+
85
+ ```ruby
86
+ @virtex.cancel_order! 543468
87
+ ```
88
+
89
+ #### Withdraw to an external wallet
90
+
91
+ ```ruby
92
+ withdrawal = @virtex.withdraw!(0.01, 'BTC', '1DWYffTxhXgBtbswMjNViw9nNCvx3Drpvn').result
93
+ ```
94
+
95
+ ## Testing
96
+
97
+ If you'd like to contribute code or modify this gem, you can run the test suite with:
98
+
99
+ ```ruby
100
+ gem install virtex --dev
101
+ bundle exec rspec
102
+ ```
103
+
104
+ ## Contributing
105
+
106
+ 1. Fork this repo and make changes in your own copy
107
+ 2. Add a test if applicable and run the existing tests with `rspec` to make sure they pass
108
+ 3. Commit your changes and push to your fork `git push origin master`
109
+ 4. Create a new pull request and submit it back to me
110
+
111
+ ## Credits
112
+
113
+ Thanks to @Skizzk for providing an example of correctly authenticating with Virtex
114
+ Thanks to @barmstrong on whose coinbase gem I based this library
@@ -0,0 +1,145 @@
1
+ require 'httparty'
2
+ require 'hashie'
3
+
4
+ module Virtex
5
+ class Client
6
+ include HTTParty
7
+
8
+ # From 0.000000001 to 10,000,000
9
+ VIRTEX_SIGNIFICANT_DIGITS = 16
10
+ BASE_URI = 'https://cavirtex.com/api2'
11
+
12
+ def initialize(api_key=nil, api_secret=nil, options={})
13
+ @api_key = api_key
14
+ @api_secret = api_secret
15
+
16
+ # defaults
17
+ options[:base_uri] ||= BASE_URI
18
+ @base_uri = options[:base_uri]
19
+ options.each do |k,v|
20
+ self.class.send k, v
21
+ end
22
+ end
23
+
24
+ # Unauthenticated
25
+
26
+ def orderbook currencypair
27
+ do_request '/orderbook.json', { get: { 'currencypair' => currencypair } }
28
+ end
29
+
30
+ def tradebook currencypair, opts = {}
31
+ params = {
32
+ 'currencypair' => currencypair
33
+ }.merge(opts)
34
+ do_request '/trades.json', { get: params }
35
+ end
36
+
37
+ def ticker currencypair
38
+ do_request '/ticker.json', { get: { 'currencypair' => currencypair } }
39
+ end
40
+
41
+ # Authenticated
42
+
43
+ def balance
44
+ do_request '/user/balance.json'
45
+ end
46
+
47
+ def orders opts = {}
48
+ do_request '/user/orders.json', { post: opts }
49
+ end
50
+
51
+ def trades opts = {}
52
+ do_request '/user/trades.json', { post: opts }
53
+ end
54
+
55
+ def transactions currency, opts = {}
56
+ params = {
57
+ 'currency' => currency
58
+ }.merge(opts)
59
+
60
+ do_request '/user/transactions.json', { post: params }
61
+ end
62
+
63
+ def new_order! mode, amount, currencypair, price, opts = {}
64
+ params = {
65
+ 'mode' => mode,
66
+ 'amount' => amount,
67
+ 'price' => price,
68
+ 'currencypair' => currencypair
69
+ }.merge(opts)
70
+
71
+ do_request '/user/order.json', { post: params }
72
+ end
73
+
74
+ def cancel_order! id
75
+ do_request '/user/order_cancel.json', { post: { 'id' => id } }
76
+ end
77
+
78
+ def withdraw! amount, currency, address
79
+ params = {
80
+ 'amount' => amount,
81
+ 'currency' => currency,
82
+ 'address' => address
83
+ }
84
+ do_request '/user/withdraw.json', { post: params }
85
+ end
86
+
87
+ protected
88
+
89
+ def generate_api_signature(endpoint, nonce, params)
90
+ # Alphabetically sorted post parameters for signature
91
+ data = ""
92
+ params.keys.sort.each do |k|
93
+ data += params[k].to_s
94
+ end
95
+
96
+ digest = OpenSSL::Digest.new('sha256')
97
+ OpenSSL::HMAC.hexdigest(digest, @api_secret, nonce.to_s + @api_key + '/api2' + endpoint + data)
98
+ end
99
+
100
+ def do_request(path, options={})
101
+ options[:get] ||= {}
102
+ options[:post] ||= {}
103
+
104
+ path = "#{path}?#{URI.encode_www_form(options[:get])}" if !options[:get].empty?
105
+
106
+ nonce = options[:nonce] || (Time.now.to_f * 1e6).to_i
107
+
108
+ if (@api_key && @api_secret)
109
+ auth_params = {
110
+ token: @api_key,
111
+ nonce: nonce,
112
+ signature: generate_api_signature(path, nonce, options[:post])
113
+ }
114
+ else
115
+ auth_params = {}
116
+ end
117
+
118
+ r = self.class.post(path, body: options[:post].merge(auth_params))
119
+
120
+ case r.code
121
+ when 504
122
+ raise TimeoutError, "Gateway timeout, please try again later"
123
+ when 500..600
124
+ raise ServerError, "Server error: (#{r.code})"
125
+ when 401
126
+ raise UnauthorizedError
127
+ when 404
128
+ raise NotFoundError
129
+ end
130
+
131
+ # Virtex API is incorrectly returning text/html so ignore this for now
132
+ # if !r.headers['content-type'].downcase.include? 'json'
133
+ # raise Error, "Unrecognized content type #{r.headers['content-type']}"
134
+ # end
135
+
136
+ hash = Hashie::Mash.new(JSON.parse(r.body))
137
+
138
+ if hash.status == "error"
139
+ raise Error, hash.message
140
+ end
141
+
142
+ hash
143
+ end
144
+ end
145
+ end
@@ -0,0 +1,7 @@
1
+ module Virtex
2
+ class Error < StandardError; end
3
+ class ServerError < Error; end
4
+ class TimeoutError < ServerError; end
5
+ class UnauthorizedError < Error; end
6
+ class NotFoundError < Error; end
7
+ end
@@ -0,0 +1,3 @@
1
+ module Virtex
2
+ VERSION = '1.0.0'
3
+ end
data/lib/virtex.rb ADDED
@@ -0,0 +1,3 @@
1
+ require 'virtex/version'
2
+ require 'virtex/exception'
3
+ require 'virtex/client'
@@ -0,0 +1,309 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://cavirtex.com/api2/user/balance.json
6
+ body:
7
+ encoding: UTF-8
8
+ string: token=bzv6qarmw4nocmz4wdtmm5tukn9nvng1&nonce=1407048082998318&signature=7a0e066b06a62cfc5189d20afb1ba1d1d2ab06e1db8914f71fd24eb6370cf3ea
9
+ headers: {}
10
+ response:
11
+ status:
12
+ code: 200
13
+ message: OK
14
+ headers:
15
+ Server:
16
+ - cloudflare-nginx
17
+ Date:
18
+ - Sun, 03 Aug 2014 06:41:25 GMT
19
+ Content-Type:
20
+ - text/html; charset=utf-8
21
+ Transfer-Encoding:
22
+ - chunked
23
+ Connection:
24
+ - keep-alive
25
+ Set-Cookie:
26
+ - __cfduid=dc7ab4725531c12e9342d61d2b41188661407048084643; expires=Mon, 23-Dec-2019
27
+ 23:50:00 GMT; path=/; domain=.cavirtex.com; HttpOnly
28
+ - sessionid=bb9c19c9b945eedf31d2cc30f2fc98c5; expires=Sun, 03-Aug-2014 10:41:22
29
+ GMT; httponly; Max-Age=14400; Path=/; secure
30
+ Last-Modified:
31
+ - Sun, 03 Aug 2014 06:41:22 GMT
32
+ Expires:
33
+ - Sun, 03 Aug 2014 06:41:22 GMT
34
+ Vary:
35
+ - Cookie,Accept-Encoding
36
+ Cache-Control:
37
+ - max-age=0
38
+ Cf-Ray:
39
+ - 15408780dc6f0bc9-HKG
40
+ body:
41
+ encoding: UTF-8
42
+ string: '{"status": "ok", "apirate": 2, "message": "", "balance": {"LTC": 0,
43
+ "BTC": 0E-9, "CAD": 0.038500000}}'
44
+ http_version:
45
+ recorded_at: Sun, 03 Aug 2014 06:41:25 GMT
46
+ - request:
47
+ method: post
48
+ uri: https://cavirtex.com/api2/user/transactions.json
49
+ body:
50
+ encoding: UTF-8
51
+ string: currency=BTC&token=bzv6qarmw4nocmz4wdtmm5tukn9nvng1&nonce=1407052130701530&signature=5447d0703224ceaae6618465dbac7b694185179de000d40752061b708d3e0b0f
52
+ headers: {}
53
+ response:
54
+ status:
55
+ code: 200
56
+ message: OK
57
+ headers:
58
+ Server:
59
+ - cloudflare-nginx
60
+ Date:
61
+ - Sun, 03 Aug 2014 07:48:56 GMT
62
+ Content-Type:
63
+ - text/html; charset=utf-8
64
+ Transfer-Encoding:
65
+ - chunked
66
+ Connection:
67
+ - keep-alive
68
+ Set-Cookie:
69
+ - __cfduid=d7f2a4cf67af77489e4c4089d2a7d676c1407052136485; expires=Mon, 23-Dec-2019
70
+ 23:50:00 GMT; path=/; domain=.cavirtex.com; HttpOnly
71
+ - sessionid=7e590153f8b43b30106637b785912858; expires=Sun, 03-Aug-2014 11:48:53
72
+ GMT; httponly; Max-Age=14400; Path=/; secure
73
+ Last-Modified:
74
+ - Sun, 03 Aug 2014 07:48:53 GMT
75
+ Expires:
76
+ - Sun, 03 Aug 2014 07:48:53 GMT
77
+ Vary:
78
+ - Cookie,Accept-Encoding
79
+ Cache-Control:
80
+ - max-age=0
81
+ Cf-Ray:
82
+ - 1540ea6d056b052e-YYZ
83
+ body:
84
+ encoding: UTF-8
85
+ string: '{"status": "ok", "apirate": 1, "message": "", "transactions": [{"currency":
86
+ "BTC", "reason": "deposit", "total": 0.171200000, "id": 2355387, "processed":
87
+ 1407051921}]}'
88
+ http_version:
89
+ recorded_at: Sun, 03 Aug 2014 07:48:57 GMT
90
+ - request:
91
+ method: post
92
+ uri: https://cavirtex.com/api2/user/order.json
93
+ body:
94
+ encoding: UTF-8
95
+ string: mode=sell&amount=0.1&price=1000.0&currencypair=BTCCAD&token=bzv6qarmw4nocmz4wdtmm5tukn9nvng1&nonce=1407052399159746&signature=e2d4462cf29ce4d0e4e9122cf81272e9b9fa71723d3e79b8d00fa8e0f27f2fa1
96
+ headers: {}
97
+ response:
98
+ status:
99
+ code: 200
100
+ message: OK
101
+ headers:
102
+ Server:
103
+ - cloudflare-nginx
104
+ Date:
105
+ - Sun, 03 Aug 2014 07:53:31 GMT
106
+ Content-Type:
107
+ - text/html; charset=utf-8
108
+ Transfer-Encoding:
109
+ - chunked
110
+ Connection:
111
+ - keep-alive
112
+ Set-Cookie:
113
+ - __cfduid=dc5cbe10953670130feb2e5570d7985cb1407052410931; expires=Mon, 23-Dec-2019
114
+ 23:50:00 GMT; path=/; domain=.cavirtex.com; HttpOnly
115
+ - sessionid=36cf235cfaa9581cb7b0eb72e024e3f1; expires=Sun, 03-Aug-2014 11:53:28
116
+ GMT; httponly; Max-Age=14400; Path=/; secure
117
+ Last-Modified:
118
+ - Sun, 03 Aug 2014 07:53:28 GMT
119
+ Expires:
120
+ - Sun, 03 Aug 2014 07:53:28 GMT
121
+ Vary:
122
+ - Cookie,Accept-Encoding
123
+ Cache-Control:
124
+ - max-age=0
125
+ Cf-Ray:
126
+ - 1540f1205e4d0528-YYZ
127
+ body:
128
+ encoding: UTF-8
129
+ string: '{"status": "ok", "apirate": 2, "message": "", "order": {"status": "open",
130
+ "id": 543468}}'
131
+ http_version:
132
+ recorded_at: Sun, 03 Aug 2014 07:53:32 GMT
133
+ - request:
134
+ method: post
135
+ uri: https://cavirtex.com/api2/user/order_cancel.json
136
+ body:
137
+ encoding: UTF-8
138
+ string: id=543468&token=bzv6qarmw4nocmz4wdtmm5tukn9nvng1&nonce=1407052456858152&signature=cba571fea974418fea652ac6c698f241723d9aa7622fed906fd699e50f7e3da2
139
+ headers: {}
140
+ response:
141
+ status:
142
+ code: 200
143
+ message: OK
144
+ headers:
145
+ Server:
146
+ - cloudflare-nginx
147
+ Date:
148
+ - Sun, 03 Aug 2014 07:54:29 GMT
149
+ Content-Type:
150
+ - text/html; charset=utf-8
151
+ Transfer-Encoding:
152
+ - chunked
153
+ Connection:
154
+ - keep-alive
155
+ Set-Cookie:
156
+ - __cfduid=d6bc11d8c18572860ebd4624c89c4fa201407052462131; expires=Mon, 23-Dec-2019
157
+ 23:50:00 GMT; path=/; domain=.cavirtex.com; HttpOnly
158
+ - sessionid=7b5cc98aab3b9f1e91b73b2ed3412d6b; expires=Sun, 03-Aug-2014 11:54:26
159
+ GMT; httponly; Max-Age=14400; Path=/; secure
160
+ Last-Modified:
161
+ - Sun, 03 Aug 2014 07:54:26 GMT
162
+ Expires:
163
+ - Sun, 03 Aug 2014 07:54:26 GMT
164
+ Vary:
165
+ - Cookie,Accept-Encoding
166
+ Cache-Control:
167
+ - max-age=0
168
+ Cf-Ray:
169
+ - 1540f2605db1053a-YYZ
170
+ body:
171
+ encoding: UTF-8
172
+ string: '{"status": "ok", "apirate": 3, "message": "", "id": 543468}'
173
+ http_version:
174
+ recorded_at: Sun, 03 Aug 2014 07:54:30 GMT
175
+ - request:
176
+ method: post
177
+ uri: https://cavirtex.com/api2/user/orders.json
178
+ body:
179
+ encoding: UTF-8
180
+ string: token=bzv6qarmw4nocmz4wdtmm5tukn9nvng1&nonce=1407052609966936&signature=8e6296434a8ec0b31a867a346d0e842ab774eec4a9d474d9a96a92b81ce1def8
181
+ headers: {}
182
+ response:
183
+ status:
184
+ code: 200
185
+ message: OK
186
+ headers:
187
+ Server:
188
+ - cloudflare-nginx
189
+ Date:
190
+ - Sun, 03 Aug 2014 07:56:53 GMT
191
+ Content-Type:
192
+ - text/html; charset=utf-8
193
+ Transfer-Encoding:
194
+ - chunked
195
+ Connection:
196
+ - keep-alive
197
+ Set-Cookie:
198
+ - __cfduid=dbcf42e9c89809e7b5236b0bc4217fe211407052613068; expires=Mon, 23-Dec-2019
199
+ 23:50:00 GMT; path=/; domain=.cavirtex.com; HttpOnly
200
+ - sessionid=ba85c15f4af23edd5598e55e49cbd932; expires=Sun, 03-Aug-2014 11:56:50
201
+ GMT; httponly; Max-Age=14400; Path=/; secure
202
+ Last-Modified:
203
+ - Sun, 03 Aug 2014 07:56:50 GMT
204
+ Expires:
205
+ - Sun, 03 Aug 2014 07:56:50 GMT
206
+ Vary:
207
+ - Cookie,Accept-Encoding
208
+ Cache-Control:
209
+ - max-age=0
210
+ Cf-Ray:
211
+ - 1540f60fafe40528-YYZ
212
+ body:
213
+ encoding: UTF-8
214
+ string: '{"status": "ok", "apirate": 4, "message": "", "orders": [{"status":
215
+ "canceled", "requested": 1000.000000000, "created": 1407052408, "price": 1000.000000000,
216
+ "completed": 1407052466, "remaining": 0.100000000, "currency": "BTC", "amount":
217
+ 0.100000000, "mode": "sell", "id": 543468, "with_currency": "CAD"}]}'
218
+ http_version:
219
+ recorded_at: Sun, 03 Aug 2014 07:56:53 GMT
220
+ - request:
221
+ method: post
222
+ uri: https://cavirtex.com/api2/user/trades.json
223
+ body:
224
+ encoding: UTF-8
225
+ string: token=bzv6qarmw4nocmz4wdtmm5tukn9nvng1&nonce=1407053048063873&signature=44b24561c9314e0a34135df2fb41795d64d5723748fa86cc7f45f76b31c87747
226
+ headers: {}
227
+ response:
228
+ status:
229
+ code: 200
230
+ message: OK
231
+ headers:
232
+ Server:
233
+ - cloudflare-nginx
234
+ Date:
235
+ - Sun, 03 Aug 2014 08:04:14 GMT
236
+ Content-Type:
237
+ - text/html; charset=utf-8
238
+ Transfer-Encoding:
239
+ - chunked
240
+ Connection:
241
+ - keep-alive
242
+ Set-Cookie:
243
+ - __cfduid=db50882cf5c3a616bff9d5deb0672afaf1407053053643; expires=Mon, 23-Dec-2019
244
+ 23:50:00 GMT; path=/; domain=.cavirtex.com; HttpOnly
245
+ - sessionid=81e192d540510a5b0d44ae6ed03dbe89; expires=Sun, 03-Aug-2014 12:04:10
246
+ GMT; httponly; Max-Age=14400; Path=/; secure
247
+ Last-Modified:
248
+ - Sun, 03 Aug 2014 08:04:10 GMT
249
+ Expires:
250
+ - Sun, 03 Aug 2014 08:04:10 GMT
251
+ Vary:
252
+ - Cookie,Accept-Encoding
253
+ Cache-Control:
254
+ - max-age=0
255
+ Cf-Ray:
256
+ - 154100d14146052e-YYZ
257
+ body:
258
+ encoding: UTF-8
259
+ string: '{"status": "ok", "apirate": 4, "message": "", "trades": [{"rate": 632.071010000,
260
+ "for_currency_amount": 0.632000000, "trade_currency_amount": 0.001000000,
261
+ "date": 1407053027.0, "amount": 0.632000000, "price": 0.00158, "oid": 543503,
262
+ "id": 202617, "trade_currency": "BTC", "for_currency": "CAD"}]}'
263
+ http_version:
264
+ recorded_at: Sun, 03 Aug 2014 08:04:14 GMT
265
+ - request:
266
+ method: post
267
+ uri: https://cavirtex.com/api2/user/withdraw.json
268
+ body:
269
+ encoding: UTF-8
270
+ string: amount=0.01&currency=BTC&address=1DWYffTxhXgBtbswMjNViw9nNCvx3Drpvn&token=bzv6qarmw4nocmz4wdtmm5tukn9nvng1&nonce=1407053975001896&signature=7682f10e1bfd901e42f162610aeb61ae9aa3105e977f36526b879b5767a540a3
271
+ headers: {}
272
+ response:
273
+ status:
274
+ code: 200
275
+ message: OK
276
+ headers:
277
+ Server:
278
+ - cloudflare-nginx
279
+ Date:
280
+ - Sun, 03 Aug 2014 08:19:57 GMT
281
+ Content-Type:
282
+ - text/html; charset=utf-8
283
+ Transfer-Encoding:
284
+ - chunked
285
+ Connection:
286
+ - keep-alive
287
+ Set-Cookie:
288
+ - __cfduid=d01b57ddf0eafb2511009b744d612b7691407053978507; expires=Mon, 23-Dec-2019
289
+ 23:50:00 GMT; path=/; domain=.cavirtex.com; HttpOnly
290
+ - sessionid=f4b9ba0eb85734a1869569270590da3a; expires=Sun, 03-Aug-2014 12:19:54
291
+ GMT; httponly; Max-Age=14400; Path=/; secure
292
+ Last-Modified:
293
+ - Sun, 03 Aug 2014 08:19:54 GMT
294
+ Expires:
295
+ - Sun, 03 Aug 2014 08:19:54 GMT
296
+ Vary:
297
+ - Cookie,Accept-Encoding
298
+ Cache-Control:
299
+ - max-age=0
300
+ Cf-Ray:
301
+ - 15411765ac250528-YYZ
302
+ body:
303
+ encoding: UTF-8
304
+ string: '{"status": "ok", "apirate": 2, "message": "", "result": {"currency":
305
+ "BTC", "reason": "withdrawal", "fee": 0, "user": "aianus", "wallet": "1DWYffTxhXgBtbswMjNViw9nNCvx3Drpvn",
306
+ "withdrawalfee": -0.0005, "amount": -0.01, "publictransactionid": "1592b009ebeb1bdc2b53a0ffe1a2ae7a56ef4fe011f235a14fa1d7ba085b3c8a"}}'
307
+ http_version:
308
+ recorded_at: Sun, 03 Aug 2014 08:19:58 GMT
309
+ recorded_with: VCR 2.9.2