honeymaker 0.12.4-aarch64-linux

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.
Files changed (136) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/native-gems.yml +100 -0
  3. data/.github/workflows/release.yml +36 -0
  4. data/.github/workflows/test.yml +33 -0
  5. data/LICENSE +21 -0
  6. data/README.md +219 -0
  7. data/Rakefile +78 -0
  8. data/crates/honeymaker/tests/vectors/decimal.json +146 -0
  9. data/crates/honeymaker/tests/vectors/kraken_add_order_wire.json +74 -0
  10. data/crates/honeymaker/tests/vectors/kraken_signing.json +3314 -0
  11. data/crates/honeymaker/tests/vectors/kraken_trades_pager.json +1583 -0
  12. data/lib/honeymaker/3.4/honeymaker_native.so +0 -0
  13. data/lib/honeymaker/4.0/honeymaker_native.so +0 -0
  14. data/lib/honeymaker/client.rb +139 -0
  15. data/lib/honeymaker/clients/binance.rb +687 -0
  16. data/lib/honeymaker/clients/binance_us.rb +42 -0
  17. data/lib/honeymaker/clients/bingx.rb +242 -0
  18. data/lib/honeymaker/clients/bitget.rb +318 -0
  19. data/lib/honeymaker/clients/bitrue.rb +245 -0
  20. data/lib/honeymaker/clients/bitvavo.rb +244 -0
  21. data/lib/honeymaker/clients/bybit.rb +308 -0
  22. data/lib/honeymaker/clients/coinbase.rb +326 -0
  23. data/lib/honeymaker/clients/gemini.rb +189 -0
  24. data/lib/honeymaker/clients/hyperliquid.rb +232 -0
  25. data/lib/honeymaker/clients/kraken.rb +379 -0
  26. data/lib/honeymaker/clients/kraken_futures.rb +78 -0
  27. data/lib/honeymaker/clients/kucoin.rb +310 -0
  28. data/lib/honeymaker/clients/mexc.rb +249 -0
  29. data/lib/honeymaker/exchange.rb +129 -0
  30. data/lib/honeymaker/exchanges/binance.rb +55 -0
  31. data/lib/honeymaker/exchanges/binance_us.rb +9 -0
  32. data/lib/honeymaker/exchanges/bingx.rb +56 -0
  33. data/lib/honeymaker/exchanges/bitget.rb +52 -0
  34. data/lib/honeymaker/exchanges/bitrue.rb +53 -0
  35. data/lib/honeymaker/exchanges/bitvavo.rb +65 -0
  36. data/lib/honeymaker/exchanges/bybit.rb +57 -0
  37. data/lib/honeymaker/exchanges/coinbase.rb +69 -0
  38. data/lib/honeymaker/exchanges/gemini.rb +134 -0
  39. data/lib/honeymaker/exchanges/hyperliquid.rb +67 -0
  40. data/lib/honeymaker/exchanges/kraken.rb +122 -0
  41. data/lib/honeymaker/exchanges/kucoin.rb +52 -0
  42. data/lib/honeymaker/exchanges/mexc.rb +56 -0
  43. data/lib/honeymaker/native/kraken.rb +263 -0
  44. data/lib/honeymaker/native.rb +42 -0
  45. data/lib/honeymaker/result.rb +46 -0
  46. data/lib/honeymaker/utils.rb +39 -0
  47. data/lib/honeymaker/version.rb +5 -0
  48. data/lib/honeymaker.rb +97 -0
  49. data/script/parity/kraken_client_live.rb +191 -0
  50. data/script/parity/kraken_live.rb +70 -0
  51. data/script/parity/kraken_transport.rb +604 -0
  52. data/script/parity/resolve.c +49 -0
  53. data/script/release/push_gems.sh +28 -0
  54. data/script/vectors/kraken.rb +50 -0
  55. data/script/vectors/kraken_stage2.rb +146 -0
  56. data/sig/honeymaker.rbs +4 -0
  57. data/test/fixtures/binance_book_ticker.json +7 -0
  58. data/test/fixtures/binance_exchange_info.json +30 -0
  59. data/test/fixtures/bingx_symbols.json +26 -0
  60. data/test/fixtures/bingx_ticker.json +12 -0
  61. data/test/fixtures/bitget_symbols.json +28 -0
  62. data/test/fixtures/bitget_tickers.json +14 -0
  63. data/test/fixtures/bitmart_symbols.json +26 -0
  64. data/test/fixtures/bitmart_ticker.json +12 -0
  65. data/test/fixtures/bitrue_book_ticker.json +7 -0
  66. data/test/fixtures/bitrue_exchange_info.json +34 -0
  67. data/test/fixtures/bitvavo_book_ticker.json +7 -0
  68. data/test/fixtures/bitvavo_markets.json +30 -0
  69. data/test/fixtures/bybit_instruments.json +23 -0
  70. data/test/fixtures/bybit_tickers.json +19 -0
  71. data/test/fixtures/coinbase_product.json +7 -0
  72. data/test/fixtures/coinbase_products.json +24 -0
  73. data/test/fixtures/gemini_pubticker.json +10 -0
  74. data/test/fixtures/gemini_symbol_detail.json +10 -0
  75. data/test/fixtures/gemini_symbols.json +1 -0
  76. data/test/fixtures/hyperliquid_all_mids.json +5 -0
  77. data/test/fixtures/hyperliquid_spot_meta.json +12 -0
  78. data/test/fixtures/kraken_asset_pairs.json +43 -0
  79. data/test/fixtures/kraken_ticker.json +16 -0
  80. data/test/fixtures/kucoin_orderbook_level1.json +10 -0
  81. data/test/fixtures/kucoin_symbols.json +17 -0
  82. data/test/fixtures/mexc_book_ticker.json +7 -0
  83. data/test/fixtures/mexc_exchange_info.json +64 -0
  84. data/test/honeymaker/client_test.rb +90 -0
  85. data/test/honeymaker/clients/binance_client_test.rb +151 -0
  86. data/test/honeymaker/clients/binance_us_client_test.rb +25 -0
  87. data/test/honeymaker/clients/bingx_client_test.rb +106 -0
  88. data/test/honeymaker/clients/bitget_client_test.rb +146 -0
  89. data/test/honeymaker/clients/bitrue_client_test.rb +69 -0
  90. data/test/honeymaker/clients/bitvavo_client_test.rb +156 -0
  91. data/test/honeymaker/clients/bybit_client_test.rb +137 -0
  92. data/test/honeymaker/clients/coinbase_client_test.rb +153 -0
  93. data/test/honeymaker/clients/gemini_client_test.rb +100 -0
  94. data/test/honeymaker/clients/honeymaker_client_registry_test.rb +39 -0
  95. data/test/honeymaker/clients/hyperliquid_client_test.rb +292 -0
  96. data/test/honeymaker/clients/kraken_client_test.rb +255 -0
  97. data/test/honeymaker/clients/kraken_futures_client_test.rb +54 -0
  98. data/test/honeymaker/clients/kucoin_client_test.rb +149 -0
  99. data/test/honeymaker/clients/mexc_client_test.rb +98 -0
  100. data/test/honeymaker/clients/validation_test.rb +167 -0
  101. data/test/honeymaker/error_chain_test.rb +133 -0
  102. data/test/honeymaker/exchange_test.rb +138 -0
  103. data/test/honeymaker/exchanges/binance_test.rb +83 -0
  104. data/test/honeymaker/exchanges/binance_us_test.rb +53 -0
  105. data/test/honeymaker/exchanges/bingx_test.rb +65 -0
  106. data/test/honeymaker/exchanges/bitget_test.rb +65 -0
  107. data/test/honeymaker/exchanges/bitrue_test.rb +65 -0
  108. data/test/honeymaker/exchanges/bitvavo_test.rb +65 -0
  109. data/test/honeymaker/exchanges/bybit_test.rb +55 -0
  110. data/test/honeymaker/exchanges/coinbase_test.rb +106 -0
  111. data/test/honeymaker/exchanges/gemini_catalogue_test.rb +118 -0
  112. data/test/honeymaker/exchanges/gemini_test.rb +184 -0
  113. data/test/honeymaker/exchanges/hyperliquid_test.rb +64 -0
  114. data/test/honeymaker/exchanges/kraken_test.rb +191 -0
  115. data/test/honeymaker/exchanges/kucoin_test.rb +55 -0
  116. data/test/honeymaker/exchanges/mexc_test.rb +97 -0
  117. data/test/honeymaker/honeymaker_test.rb +27 -0
  118. data/test/honeymaker/result_test.rb +42 -0
  119. data/test/honeymaker/utils_test.rb +64 -0
  120. data/test/native/backend_switch_test.rb +53 -0
  121. data/test/native/convert_test.rb +137 -0
  122. data/test/native/gem_isolation_test.rb +17 -0
  123. data/test/native/loader_test.rb +29 -0
  124. data/test/native/lockstep_test.rb +23 -0
  125. data/test/native/signing_smoke_test.rb +28 -0
  126. data/test/parity/kraken_client_parity_test.rb +398 -0
  127. data/test/parity/kraken_exchange_parity_test.rb +172 -0
  128. data/test/release/branch_hardening_test.rb +34 -0
  129. data/test/release/push_gems_test.rb +79 -0
  130. data/test/smoke.rb +24 -0
  131. data/test/support/fixture_helper.rb +13 -0
  132. data/test/support/kraken_signing_smoke.rb +21 -0
  133. data/test/support/parity_helper.rb +62 -0
  134. data/test/support/venue_double.rb +100 -0
  135. data/test/test_helper.rb +9 -0
  136. metadata +254 -0
@@ -0,0 +1,1583 @@
1
+ [
2
+ {
3
+ "name": "one page",
4
+ "strict": "same",
5
+ "order_ids": [
6
+ "O1"
7
+ ],
8
+ "start": 1700000000,
9
+ "max_pages": 20,
10
+ "pages": [
11
+ "{\"error\":[],\"result\":{\"trades\":{\"T1\":{\"ordertxid\":\"O1\",\"vol\":\"0.0006\",\"cost\":\"30\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5},\"T2\":{\"ordertxid\":\"O1\",\"vol\":\"0.0006\",\"cost\":\"30\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":2}}"
12
+ ],
13
+ "requests": [
14
+ [
15
+ 1700000000,
16
+ 0
17
+ ]
18
+ ],
19
+ "outcome": {
20
+ "ok": [
21
+ [
22
+ "O1",
23
+ {
24
+ "vol": "0.0012",
25
+ "cost": "60.0",
26
+ "fee": "0.2",
27
+ "price": "50000.0",
28
+ "side": "buy",
29
+ "order_type": "market"
30
+ }
31
+ ]
32
+ ]
33
+ }
34
+ },
35
+ {
36
+ "name": "partial fill across pages, unwanted skipped",
37
+ "strict": "same",
38
+ "order_ids": [
39
+ "O1",
40
+ "O2"
41
+ ],
42
+ "start": 1700000000,
43
+ "max_pages": 20,
44
+ "pages": [
45
+ "{\"error\":[],\"result\":{\"trades\":{\"T1\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5},\"T2\":{\"ordertxid\":\"O9\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":3}}",
46
+ "{\"error\":[],\"result\":{\"trades\":{\"T3\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5},\"T4\":{\"ordertxid\":\"O2\",\"vol\":\"2\",\"cost\":\"8\",\"fee\":\"0.1\",\"type\":\"sell\",\"ordertype\":\"limit\",\"time\":1.5}},\"count\":3}}"
47
+ ],
48
+ "requests": [
49
+ [
50
+ 1700000000,
51
+ 0
52
+ ],
53
+ [
54
+ 1700000000,
55
+ 2
56
+ ]
57
+ ],
58
+ "outcome": {
59
+ "ok": [
60
+ [
61
+ "O1",
62
+ {
63
+ "vol": "2.0",
64
+ "cost": "4.0",
65
+ "fee": "0.2",
66
+ "price": "2.0",
67
+ "side": "buy",
68
+ "order_type": "market"
69
+ }
70
+ ],
71
+ [
72
+ "O2",
73
+ {
74
+ "vol": "2.0",
75
+ "cost": "8.0",
76
+ "fee": "0.1",
77
+ "price": "4.0",
78
+ "side": "sell",
79
+ "order_type": "limit"
80
+ }
81
+ ]
82
+ ]
83
+ }
84
+ },
85
+ {
86
+ "name": "no wanted ids: no request",
87
+ "strict": "same",
88
+ "order_ids": [],
89
+ "start": null,
90
+ "max_pages": 20,
91
+ "pages": [],
92
+ "requests": [],
93
+ "outcome": {
94
+ "ok": []
95
+ }
96
+ },
97
+ {
98
+ "name": "a trade on two pages: rows reach count, distinct trades do not",
99
+ "strict": "incomplete",
100
+ "order_ids": [
101
+ "O1"
102
+ ],
103
+ "start": null,
104
+ "max_pages": 20,
105
+ "pages": [
106
+ "{\"error\":[],\"result\":{\"trades\":{\"T1\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5},\"T2\":{\"ordertxid\":\"O1\",\"vol\":\"3\",\"cost\":\"9\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":3}}",
107
+ "{\"error\":[],\"result\":{\"trades\":{\"T2\":{\"ordertxid\":\"O1\",\"vol\":\"3\",\"cost\":\"9\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":3}}"
108
+ ],
109
+ "requests": [
110
+ [
111
+ null,
112
+ 0
113
+ ],
114
+ [
115
+ null,
116
+ 2
117
+ ]
118
+ ],
119
+ "outcome": {
120
+ "ok": [
121
+ [
122
+ "O1",
123
+ {
124
+ "vol": "4.0",
125
+ "cost": "11.0",
126
+ "fee": "0.2",
127
+ "price": "2.75",
128
+ "side": "buy",
129
+ "order_type": "market"
130
+ }
131
+ ]
132
+ ]
133
+ }
134
+ },
135
+ {
136
+ "name": "overlapping pages that cover every trade",
137
+ "strict": "same",
138
+ "order_ids": [
139
+ "O1"
140
+ ],
141
+ "start": null,
142
+ "max_pages": 20,
143
+ "pages": [
144
+ "{\"error\":[],\"result\":{\"trades\":{\"T1\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5},\"T2\":{\"ordertxid\":\"O1\",\"vol\":\"3\",\"cost\":\"9\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":3}}",
145
+ "{\"error\":[],\"result\":{\"trades\":{\"T2\":{\"ordertxid\":\"O1\",\"vol\":\"3\",\"cost\":\"9\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5},\"T3\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"1\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":3}}"
146
+ ],
147
+ "requests": [
148
+ [
149
+ null,
150
+ 0
151
+ ],
152
+ [
153
+ null,
154
+ 2
155
+ ]
156
+ ],
157
+ "outcome": {
158
+ "ok": [
159
+ [
160
+ "O1",
161
+ {
162
+ "vol": "5.0",
163
+ "cost": "12.0",
164
+ "fee": "0.3",
165
+ "price": "2.4",
166
+ "side": "buy",
167
+ "order_type": "market"
168
+ }
169
+ ]
170
+ ]
171
+ }
172
+ },
173
+ {
174
+ "name": "complete exactly at the page cap",
175
+ "strict": "same",
176
+ "order_ids": [
177
+ "O1"
178
+ ],
179
+ "start": null,
180
+ "max_pages": 2,
181
+ "pages": [
182
+ "{\"error\":[],\"result\":{\"trades\":{\"T1\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":2}}",
183
+ "{\"error\":[],\"result\":{\"trades\":{\"T2\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":2}}"
184
+ ],
185
+ "requests": [
186
+ [
187
+ null,
188
+ 0
189
+ ],
190
+ [
191
+ null,
192
+ 1
193
+ ]
194
+ ],
195
+ "outcome": {
196
+ "ok": [
197
+ [
198
+ "O1",
199
+ {
200
+ "vol": "2.0",
201
+ "cost": "4.0",
202
+ "fee": "0.2",
203
+ "price": "2.0",
204
+ "side": "buy",
205
+ "order_type": "market"
206
+ }
207
+ ]
208
+ ]
209
+ }
210
+ },
211
+ {
212
+ "name": "an empty page after the last trade",
213
+ "strict": "same",
214
+ "order_ids": [
215
+ "O1"
216
+ ],
217
+ "start": null,
218
+ "max_pages": 20,
219
+ "pages": [
220
+ "{\"error\":[],\"result\":{\"trades\":{},\"count\":0}}"
221
+ ],
222
+ "requests": [
223
+ [
224
+ null,
225
+ 0
226
+ ]
227
+ ],
228
+ "outcome": {
229
+ "ok": []
230
+ }
231
+ },
232
+ {
233
+ "name": "a fill beyond the page cap",
234
+ "strict": "incomplete",
235
+ "order_ids": [
236
+ "O1"
237
+ ],
238
+ "start": null,
239
+ "max_pages": 2,
240
+ "pages": [
241
+ "{\"error\":[],\"result\":{\"trades\":{\"T1\":{\"ordertxid\":\"O9\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":3}}",
242
+ "{\"error\":[],\"result\":{\"trades\":{\"T2\":{\"ordertxid\":\"O9\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":3}}",
243
+ "{\"error\":[],\"result\":{\"trades\":{\"T3\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":3}}"
244
+ ],
245
+ "requests": [
246
+ [
247
+ null,
248
+ 0
249
+ ],
250
+ [
251
+ null,
252
+ 1
253
+ ]
254
+ ],
255
+ "outcome": {
256
+ "ok": []
257
+ }
258
+ },
259
+ {
260
+ "name": "count as a string",
261
+ "strict": "incomplete",
262
+ "order_ids": [
263
+ "O1"
264
+ ],
265
+ "start": null,
266
+ "max_pages": 20,
267
+ "pages": [
268
+ "{\"error\":[],\"result\":{\"trades\":{\"T1\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":\"2\"}}",
269
+ "{\"error\":[],\"result\":{\"trades\":{\"T2\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":\"2\"}}"
270
+ ],
271
+ "requests": [
272
+ [
273
+ null,
274
+ 0
275
+ ],
276
+ [
277
+ null,
278
+ 1
279
+ ]
280
+ ],
281
+ "outcome": {
282
+ "ok": [
283
+ [
284
+ "O1",
285
+ {
286
+ "vol": "2.0",
287
+ "cost": "4.0",
288
+ "fee": "0.2",
289
+ "price": "2.0",
290
+ "side": "buy",
291
+ "order_type": "market"
292
+ }
293
+ ]
294
+ ]
295
+ }
296
+ },
297
+ {
298
+ "name": "count 1_000 pages to max_pages",
299
+ "strict": "incomplete",
300
+ "order_ids": [
301
+ "O1"
302
+ ],
303
+ "start": null,
304
+ "max_pages": 2,
305
+ "pages": [
306
+ "{\"error\":[],\"result\":{\"trades\":{\"T1\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":\"1_000\"}}",
307
+ "{\"error\":[],\"result\":{\"trades\":{\"T2\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":\"1_000\"}}",
308
+ "{\"error\":[],\"result\":{\"trades\":{\"T3\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":\"1_000\"}}"
309
+ ],
310
+ "requests": [
311
+ [
312
+ null,
313
+ 0
314
+ ],
315
+ [
316
+ null,
317
+ 1
318
+ ]
319
+ ],
320
+ "outcome": {
321
+ "ok": [
322
+ [
323
+ "O1",
324
+ {
325
+ "vol": "2.0",
326
+ "cost": "4.0",
327
+ "fee": "0.2",
328
+ "price": "2.0",
329
+ "side": "buy",
330
+ "order_type": "market"
331
+ }
332
+ ]
333
+ ]
334
+ }
335
+ },
336
+ {
337
+ "name": "bignum string count",
338
+ "strict": "incomplete",
339
+ "order_ids": [
340
+ "O1"
341
+ ],
342
+ "start": null,
343
+ "max_pages": 3,
344
+ "pages": [
345
+ "{\"error\":[],\"result\":{\"trades\":{\"T1\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":\"99999999999999999999999\"}}",
346
+ "{\"error\":[],\"result\":{\"trades\":{\"T2\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":\"1\"}}",
347
+ "{\"error\":[],\"result\":{\"trades\":{\"T3\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":\"1\"}}"
348
+ ],
349
+ "requests": [
350
+ [
351
+ null,
352
+ 0
353
+ ],
354
+ [
355
+ null,
356
+ 1
357
+ ]
358
+ ],
359
+ "outcome": {
360
+ "ok": [
361
+ [
362
+ "O1",
363
+ {
364
+ "vol": "2.0",
365
+ "cost": "4.0",
366
+ "fee": "0.2",
367
+ "price": "2.0",
368
+ "side": "buy",
369
+ "order_type": "market"
370
+ }
371
+ ]
372
+ ]
373
+ }
374
+ },
375
+ {
376
+ "name": "bignum integer count",
377
+ "strict": "incomplete",
378
+ "order_ids": [
379
+ "O1"
380
+ ],
381
+ "start": null,
382
+ "max_pages": 3,
383
+ "pages": [
384
+ "{\"error\":[],\"result\":{\"trades\":{\"T1\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":10000000000000000000000000}}",
385
+ "{\"error\":[],\"result\":{\"trades\":{\"T2\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":10000000000000000000000000}}",
386
+ "{\"error\":[],\"result\":{\"trades\":{\"T3\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":10000000000000000000000000}}",
387
+ "{\"error\":[],\"result\":{\"trades\":{\"T4\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":10000000000000000000000000}}"
388
+ ],
389
+ "requests": [
390
+ [
391
+ null,
392
+ 0
393
+ ],
394
+ [
395
+ null,
396
+ 1
397
+ ],
398
+ [
399
+ null,
400
+ 2
401
+ ]
402
+ ],
403
+ "outcome": {
404
+ "ok": [
405
+ [
406
+ "O1",
407
+ {
408
+ "vol": "3.0",
409
+ "cost": "6.0",
410
+ "fee": "0.3",
411
+ "price": "2.0",
412
+ "side": "buy",
413
+ "order_type": "market"
414
+ }
415
+ ]
416
+ ]
417
+ }
418
+ },
419
+ {
420
+ "name": "float count",
421
+ "strict": "incomplete",
422
+ "order_ids": [
423
+ "O1"
424
+ ],
425
+ "start": null,
426
+ "max_pages": 20,
427
+ "pages": [
428
+ "{\"error\":[],\"result\":{\"trades\":{\"T1\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":2.9}}",
429
+ "{\"error\":[],\"result\":{\"trades\":{\"T2\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":2.9}}",
430
+ "{\"error\":[],\"result\":{\"trades\":{\"T3\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":2.9}}"
431
+ ],
432
+ "requests": [
433
+ [
434
+ null,
435
+ 0
436
+ ],
437
+ [
438
+ null,
439
+ 1
440
+ ]
441
+ ],
442
+ "outcome": {
443
+ "ok": [
444
+ [
445
+ "O1",
446
+ {
447
+ "vol": "2.0",
448
+ "cost": "4.0",
449
+ "fee": "0.2",
450
+ "price": "2.0",
451
+ "side": "buy",
452
+ "order_type": "market"
453
+ }
454
+ ]
455
+ ]
456
+ }
457
+ },
458
+ {
459
+ "name": "missing count",
460
+ "strict": "incomplete",
461
+ "order_ids": [
462
+ "O1"
463
+ ],
464
+ "start": null,
465
+ "max_pages": 20,
466
+ "pages": [
467
+ "{\"error\":[],\"result\":{\"trades\":{\"T1\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}}}}",
468
+ "{\"error\":[],\"result\":{\"trades\":{\"T2\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}}}}"
469
+ ],
470
+ "requests": [
471
+ [
472
+ null,
473
+ 0
474
+ ]
475
+ ],
476
+ "outcome": {
477
+ "ok": [
478
+ [
479
+ "O1",
480
+ {
481
+ "vol": "1.0",
482
+ "cost": "2.0",
483
+ "fee": "0.1",
484
+ "price": "2.0",
485
+ "side": "buy",
486
+ "order_type": "market"
487
+ }
488
+ ]
489
+ ]
490
+ }
491
+ },
492
+ {
493
+ "name": "nil count",
494
+ "strict": "incomplete",
495
+ "order_ids": [
496
+ "O1"
497
+ ],
498
+ "start": null,
499
+ "max_pages": 20,
500
+ "pages": [
501
+ "{\"error\":[],\"result\":{\"trades\":{\"T1\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":null}}",
502
+ "{\"error\":[],\"result\":{\"trades\":{\"T2\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}}}}"
503
+ ],
504
+ "requests": [
505
+ [
506
+ null,
507
+ 0
508
+ ]
509
+ ],
510
+ "outcome": {
511
+ "ok": [
512
+ [
513
+ "O1",
514
+ {
515
+ "vol": "1.0",
516
+ "cost": "2.0",
517
+ "fee": "0.1",
518
+ "price": "2.0",
519
+ "side": "buy",
520
+ "order_type": "market"
521
+ }
522
+ ]
523
+ ]
524
+ }
525
+ },
526
+ {
527
+ "name": "negative count",
528
+ "strict": "incomplete",
529
+ "order_ids": [
530
+ "O1"
531
+ ],
532
+ "start": null,
533
+ "max_pages": 20,
534
+ "pages": [
535
+ "{\"error\":[],\"result\":{\"trades\":{\"T1\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":-1}}",
536
+ "{\"error\":[],\"result\":{\"trades\":{\"T2\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}}}}"
537
+ ],
538
+ "requests": [
539
+ [
540
+ null,
541
+ 0
542
+ ]
543
+ ],
544
+ "outcome": {
545
+ "ok": [
546
+ [
547
+ "O1",
548
+ {
549
+ "vol": "1.0",
550
+ "cost": "2.0",
551
+ "fee": "0.1",
552
+ "price": "2.0",
553
+ "side": "buy",
554
+ "order_type": "market"
555
+ }
556
+ ]
557
+ ]
558
+ }
559
+ },
560
+ {
561
+ "name": "count \" 3\"",
562
+ "strict": "incomplete",
563
+ "order_ids": [
564
+ "O1"
565
+ ],
566
+ "start": null,
567
+ "max_pages": 4,
568
+ "pages": [
569
+ "{\"error\":[],\"result\":{\"trades\":{\"T1\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":\" 3\"}}",
570
+ "{\"error\":[],\"result\":{\"trades\":{\"T2\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":\" 3\"}}",
571
+ "{\"error\":[],\"result\":{\"trades\":{\"T3\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":\" 3\"}}",
572
+ "{\"error\":[],\"result\":{\"trades\":{\"T4\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":\" 3\"}}"
573
+ ],
574
+ "requests": [
575
+ [
576
+ null,
577
+ 0
578
+ ],
579
+ [
580
+ null,
581
+ 1
582
+ ],
583
+ [
584
+ null,
585
+ 2
586
+ ]
587
+ ],
588
+ "outcome": {
589
+ "ok": [
590
+ [
591
+ "O1",
592
+ {
593
+ "vol": "3.0",
594
+ "cost": "6.0",
595
+ "fee": "0.3",
596
+ "price": "2.0",
597
+ "side": "buy",
598
+ "order_type": "market"
599
+ }
600
+ ]
601
+ ]
602
+ }
603
+ },
604
+ {
605
+ "name": "count \"3abc\"",
606
+ "strict": "incomplete",
607
+ "order_ids": [
608
+ "O1"
609
+ ],
610
+ "start": null,
611
+ "max_pages": 4,
612
+ "pages": [
613
+ "{\"error\":[],\"result\":{\"trades\":{\"T1\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":\"3abc\"}}",
614
+ "{\"error\":[],\"result\":{\"trades\":{\"T2\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":\"3abc\"}}",
615
+ "{\"error\":[],\"result\":{\"trades\":{\"T3\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":\"3abc\"}}",
616
+ "{\"error\":[],\"result\":{\"trades\":{\"T4\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":\"3abc\"}}"
617
+ ],
618
+ "requests": [
619
+ [
620
+ null,
621
+ 0
622
+ ],
623
+ [
624
+ null,
625
+ 1
626
+ ],
627
+ [
628
+ null,
629
+ 2
630
+ ]
631
+ ],
632
+ "outcome": {
633
+ "ok": [
634
+ [
635
+ "O1",
636
+ {
637
+ "vol": "3.0",
638
+ "cost": "6.0",
639
+ "fee": "0.3",
640
+ "price": "2.0",
641
+ "side": "buy",
642
+ "order_type": "market"
643
+ }
644
+ ]
645
+ ]
646
+ }
647
+ },
648
+ {
649
+ "name": "count \"0x10\"",
650
+ "strict": "incomplete",
651
+ "order_ids": [
652
+ "O1"
653
+ ],
654
+ "start": null,
655
+ "max_pages": 4,
656
+ "pages": [
657
+ "{\"error\":[],\"result\":{\"trades\":{\"T1\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":\"0x10\"}}",
658
+ "{\"error\":[],\"result\":{\"trades\":{\"T2\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":\"0x10\"}}",
659
+ "{\"error\":[],\"result\":{\"trades\":{\"T3\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":\"0x10\"}}",
660
+ "{\"error\":[],\"result\":{\"trades\":{\"T4\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":\"0x10\"}}"
661
+ ],
662
+ "requests": [
663
+ [
664
+ null,
665
+ 0
666
+ ]
667
+ ],
668
+ "outcome": {
669
+ "ok": [
670
+ [
671
+ "O1",
672
+ {
673
+ "vol": "1.0",
674
+ "cost": "2.0",
675
+ "fee": "0.1",
676
+ "price": "2.0",
677
+ "side": "buy",
678
+ "order_type": "market"
679
+ }
680
+ ]
681
+ ]
682
+ }
683
+ },
684
+ {
685
+ "name": "count \"_3\"",
686
+ "strict": "incomplete",
687
+ "order_ids": [
688
+ "O1"
689
+ ],
690
+ "start": null,
691
+ "max_pages": 4,
692
+ "pages": [
693
+ "{\"error\":[],\"result\":{\"trades\":{\"T1\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":\"_3\"}}",
694
+ "{\"error\":[],\"result\":{\"trades\":{\"T2\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":\"_3\"}}",
695
+ "{\"error\":[],\"result\":{\"trades\":{\"T3\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":\"_3\"}}",
696
+ "{\"error\":[],\"result\":{\"trades\":{\"T4\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":\"_3\"}}"
697
+ ],
698
+ "requests": [
699
+ [
700
+ null,
701
+ 0
702
+ ]
703
+ ],
704
+ "outcome": {
705
+ "ok": [
706
+ [
707
+ "O1",
708
+ {
709
+ "vol": "1.0",
710
+ "cost": "2.0",
711
+ "fee": "0.1",
712
+ "price": "2.0",
713
+ "side": "buy",
714
+ "order_type": "market"
715
+ }
716
+ ]
717
+ ]
718
+ }
719
+ },
720
+ {
721
+ "name": "count \"3__0\"",
722
+ "strict": "incomplete",
723
+ "order_ids": [
724
+ "O1"
725
+ ],
726
+ "start": null,
727
+ "max_pages": 4,
728
+ "pages": [
729
+ "{\"error\":[],\"result\":{\"trades\":{\"T1\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":\"3__0\"}}",
730
+ "{\"error\":[],\"result\":{\"trades\":{\"T2\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":\"3__0\"}}",
731
+ "{\"error\":[],\"result\":{\"trades\":{\"T3\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":\"3__0\"}}",
732
+ "{\"error\":[],\"result\":{\"trades\":{\"T4\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":\"3__0\"}}"
733
+ ],
734
+ "requests": [
735
+ [
736
+ null,
737
+ 0
738
+ ],
739
+ [
740
+ null,
741
+ 1
742
+ ],
743
+ [
744
+ null,
745
+ 2
746
+ ]
747
+ ],
748
+ "outcome": {
749
+ "ok": [
750
+ [
751
+ "O1",
752
+ {
753
+ "vol": "3.0",
754
+ "cost": "6.0",
755
+ "fee": "0.3",
756
+ "price": "2.0",
757
+ "side": "buy",
758
+ "order_type": "market"
759
+ }
760
+ ]
761
+ ]
762
+ }
763
+ },
764
+ {
765
+ "name": "count \"+3\"",
766
+ "strict": "incomplete",
767
+ "order_ids": [
768
+ "O1"
769
+ ],
770
+ "start": null,
771
+ "max_pages": 4,
772
+ "pages": [
773
+ "{\"error\":[],\"result\":{\"trades\":{\"T1\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":\"+3\"}}",
774
+ "{\"error\":[],\"result\":{\"trades\":{\"T2\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":\"+3\"}}",
775
+ "{\"error\":[],\"result\":{\"trades\":{\"T3\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":\"+3\"}}",
776
+ "{\"error\":[],\"result\":{\"trades\":{\"T4\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":\"+3\"}}"
777
+ ],
778
+ "requests": [
779
+ [
780
+ null,
781
+ 0
782
+ ],
783
+ [
784
+ null,
785
+ 1
786
+ ],
787
+ [
788
+ null,
789
+ 2
790
+ ]
791
+ ],
792
+ "outcome": {
793
+ "ok": [
794
+ [
795
+ "O1",
796
+ {
797
+ "vol": "3.0",
798
+ "cost": "6.0",
799
+ "fee": "0.3",
800
+ "price": "2.0",
801
+ "side": "buy",
802
+ "order_type": "market"
803
+ }
804
+ ]
805
+ ]
806
+ }
807
+ },
808
+ {
809
+ "name": "count \"-3\"",
810
+ "strict": "incomplete",
811
+ "order_ids": [
812
+ "O1"
813
+ ],
814
+ "start": null,
815
+ "max_pages": 4,
816
+ "pages": [
817
+ "{\"error\":[],\"result\":{\"trades\":{\"T1\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":\"-3\"}}",
818
+ "{\"error\":[],\"result\":{\"trades\":{\"T2\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":\"-3\"}}",
819
+ "{\"error\":[],\"result\":{\"trades\":{\"T3\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":\"-3\"}}",
820
+ "{\"error\":[],\"result\":{\"trades\":{\"T4\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":\"-3\"}}"
821
+ ],
822
+ "requests": [
823
+ [
824
+ null,
825
+ 0
826
+ ]
827
+ ],
828
+ "outcome": {
829
+ "ok": [
830
+ [
831
+ "O1",
832
+ {
833
+ "vol": "1.0",
834
+ "cost": "2.0",
835
+ "fee": "0.1",
836
+ "price": "2.0",
837
+ "side": "buy",
838
+ "order_type": "market"
839
+ }
840
+ ]
841
+ ]
842
+ }
843
+ },
844
+ {
845
+ "name": "count \"\"",
846
+ "strict": "incomplete",
847
+ "order_ids": [
848
+ "O1"
849
+ ],
850
+ "start": null,
851
+ "max_pages": 4,
852
+ "pages": [
853
+ "{\"error\":[],\"result\":{\"trades\":{\"T1\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":\"\"}}",
854
+ "{\"error\":[],\"result\":{\"trades\":{\"T2\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":\"\"}}",
855
+ "{\"error\":[],\"result\":{\"trades\":{\"T3\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":\"\"}}",
856
+ "{\"error\":[],\"result\":{\"trades\":{\"T4\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":\"\"}}"
857
+ ],
858
+ "requests": [
859
+ [
860
+ null,
861
+ 0
862
+ ]
863
+ ],
864
+ "outcome": {
865
+ "ok": [
866
+ [
867
+ "O1",
868
+ {
869
+ "vol": "1.0",
870
+ "cost": "2.0",
871
+ "fee": "0.1",
872
+ "price": "2.0",
873
+ "side": "buy",
874
+ "order_type": "market"
875
+ }
876
+ ]
877
+ ]
878
+ }
879
+ },
880
+ {
881
+ "name": "count \"abc\"",
882
+ "strict": "incomplete",
883
+ "order_ids": [
884
+ "O1"
885
+ ],
886
+ "start": null,
887
+ "max_pages": 4,
888
+ "pages": [
889
+ "{\"error\":[],\"result\":{\"trades\":{\"T1\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":\"abc\"}}",
890
+ "{\"error\":[],\"result\":{\"trades\":{\"T2\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":\"abc\"}}",
891
+ "{\"error\":[],\"result\":{\"trades\":{\"T3\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":\"abc\"}}",
892
+ "{\"error\":[],\"result\":{\"trades\":{\"T4\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":\"abc\"}}"
893
+ ],
894
+ "requests": [
895
+ [
896
+ null,
897
+ 0
898
+ ]
899
+ ],
900
+ "outcome": {
901
+ "ok": [
902
+ [
903
+ "O1",
904
+ {
905
+ "vol": "1.0",
906
+ "cost": "2.0",
907
+ "fee": "0.1",
908
+ "price": "2.0",
909
+ "side": "buy",
910
+ "order_type": "market"
911
+ }
912
+ ]
913
+ ]
914
+ }
915
+ },
916
+ {
917
+ "name": "empty trades before count",
918
+ "strict": "incomplete",
919
+ "order_ids": [
920
+ "O1"
921
+ ],
922
+ "start": null,
923
+ "max_pages": 20,
924
+ "pages": [
925
+ "{\"error\":[],\"result\":{\"trades\":{},\"count\":5}}",
926
+ "{\"error\":[],\"result\":{\"trades\":{\"T1\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":5}}"
927
+ ],
928
+ "requests": [
929
+ [
930
+ null,
931
+ 0
932
+ ]
933
+ ],
934
+ "outcome": {
935
+ "ok": []
936
+ }
937
+ },
938
+ {
939
+ "name": "missing trades",
940
+ "strict": "incomplete",
941
+ "order_ids": [
942
+ "O1"
943
+ ],
944
+ "start": null,
945
+ "max_pages": 20,
946
+ "pages": [
947
+ "{\"error\":[],\"result\":{\"count\":3}}",
948
+ "{\"error\":[],\"result\":{\"trades\":{\"T1\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}}}}"
949
+ ],
950
+ "requests": [
951
+ [
952
+ null,
953
+ 0
954
+ ]
955
+ ],
956
+ "outcome": {
957
+ "ok": []
958
+ }
959
+ },
960
+ {
961
+ "name": "trades false",
962
+ "strict": "incomplete",
963
+ "order_ids": [
964
+ "O1"
965
+ ],
966
+ "start": null,
967
+ "max_pages": 20,
968
+ "pages": [
969
+ "{\"error\":[],\"result\":{\"trades\":false,\"count\":3}}",
970
+ "{\"error\":[],\"result\":{\"trades\":{\"T1\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}}}}"
971
+ ],
972
+ "requests": [
973
+ [
974
+ null,
975
+ 0
976
+ ]
977
+ ],
978
+ "outcome": {
979
+ "ok": []
980
+ }
981
+ },
982
+ {
983
+ "name": "trades []",
984
+ "strict": "incomplete",
985
+ "order_ids": [
986
+ "O1"
987
+ ],
988
+ "start": null,
989
+ "max_pages": 20,
990
+ "pages": [
991
+ "{\"error\":[],\"result\":{\"trades\":[],\"count\":3}}",
992
+ "{\"error\":[],\"result\":{\"trades\":{\"T1\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}}}}"
993
+ ],
994
+ "requests": [
995
+ [
996
+ null,
997
+ 0
998
+ ]
999
+ ],
1000
+ "outcome": {
1001
+ "ok": []
1002
+ }
1003
+ },
1004
+ {
1005
+ "name": "trades \"\"",
1006
+ "strict": "incomplete",
1007
+ "order_ids": [
1008
+ "O1"
1009
+ ],
1010
+ "start": null,
1011
+ "max_pages": 20,
1012
+ "pages": [
1013
+ "{\"error\":[],\"result\":{\"trades\":\"\",\"count\":3}}",
1014
+ "{\"error\":[],\"result\":{\"trades\":{\"T1\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}}}}"
1015
+ ],
1016
+ "requests": [
1017
+ [
1018
+ null,
1019
+ 0
1020
+ ]
1021
+ ],
1022
+ "outcome": {
1023
+ "ok": []
1024
+ }
1025
+ },
1026
+ {
1027
+ "name": "nil result",
1028
+ "strict": "incomplete",
1029
+ "order_ids": [
1030
+ "O1"
1031
+ ],
1032
+ "start": null,
1033
+ "max_pages": 20,
1034
+ "pages": [
1035
+ "{\"error\":[]}",
1036
+ "{\"error\":[],\"result\":{\"trades\":{\"T1\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}}}}"
1037
+ ],
1038
+ "requests": [
1039
+ [
1040
+ null,
1041
+ 0
1042
+ ]
1043
+ ],
1044
+ "outcome": {
1045
+ "ok": []
1046
+ }
1047
+ },
1048
+ {
1049
+ "name": "result as a string raises",
1050
+ "strict": "same",
1051
+ "order_ids": [
1052
+ "O1"
1053
+ ],
1054
+ "start": null,
1055
+ "max_pages": 20,
1056
+ "pages": [
1057
+ "{\"error\":[],\"result\":\"x\"}"
1058
+ ],
1059
+ "requests": [
1060
+ [
1061
+ null,
1062
+ 0
1063
+ ]
1064
+ ],
1065
+ "outcome": {
1066
+ "raise": "TypeError"
1067
+ }
1068
+ },
1069
+ {
1070
+ "name": "result as an array raises",
1071
+ "strict": "same",
1072
+ "order_ids": [
1073
+ "O1"
1074
+ ],
1075
+ "start": null,
1076
+ "max_pages": 20,
1077
+ "pages": [
1078
+ "{\"error\":[],\"result\":[1]}"
1079
+ ],
1080
+ "requests": [
1081
+ [
1082
+ null,
1083
+ 0
1084
+ ]
1085
+ ],
1086
+ "outcome": {
1087
+ "raise": "TypeError"
1088
+ }
1089
+ },
1090
+ {
1091
+ "name": "result false raises",
1092
+ "strict": "same",
1093
+ "order_ids": [
1094
+ "O1"
1095
+ ],
1096
+ "start": null,
1097
+ "max_pages": 20,
1098
+ "pages": [
1099
+ "{\"error\":[],\"result\":false}"
1100
+ ],
1101
+ "requests": [
1102
+ [
1103
+ null,
1104
+ 0
1105
+ ]
1106
+ ],
1107
+ "outcome": {
1108
+ "raise": "TypeError"
1109
+ }
1110
+ },
1111
+ {
1112
+ "name": "trades as a non-empty array",
1113
+ "strict": "incomplete",
1114
+ "order_ids": [
1115
+ "O1"
1116
+ ],
1117
+ "start": null,
1118
+ "max_pages": 20,
1119
+ "pages": [
1120
+ "{\"error\":[],\"result\":{\"trades\":[1],\"count\":1}}"
1121
+ ],
1122
+ "requests": [
1123
+ [
1124
+ null,
1125
+ 0
1126
+ ]
1127
+ ],
1128
+ "outcome": {
1129
+ "raise": "NoMethodError"
1130
+ }
1131
+ },
1132
+ {
1133
+ "name": "trades as a non-empty string",
1134
+ "strict": "incomplete",
1135
+ "order_ids": [
1136
+ "O1"
1137
+ ],
1138
+ "start": null,
1139
+ "max_pages": 20,
1140
+ "pages": [
1141
+ "{\"error\":[],\"result\":{\"trades\":\"x\",\"count\":1}}"
1142
+ ],
1143
+ "requests": [
1144
+ [
1145
+ null,
1146
+ 0
1147
+ ]
1148
+ ],
1149
+ "outcome": {
1150
+ "raise": "NoMethodError"
1151
+ }
1152
+ },
1153
+ {
1154
+ "name": "trades as a number",
1155
+ "strict": "incomplete",
1156
+ "order_ids": [
1157
+ "O1"
1158
+ ],
1159
+ "start": null,
1160
+ "max_pages": 20,
1161
+ "pages": [
1162
+ "{\"error\":[],\"result\":{\"trades\":5,\"count\":1}}"
1163
+ ],
1164
+ "requests": [
1165
+ [
1166
+ null,
1167
+ 0
1168
+ ]
1169
+ ],
1170
+ "outcome": {
1171
+ "raise": "NoMethodError"
1172
+ }
1173
+ },
1174
+ {
1175
+ "name": "trades false with count 0",
1176
+ "strict": "incomplete",
1177
+ "order_ids": [
1178
+ "O1"
1179
+ ],
1180
+ "start": null,
1181
+ "max_pages": 20,
1182
+ "pages": [
1183
+ "{\"error\":[],\"result\":{\"trades\":false,\"count\":0}}"
1184
+ ],
1185
+ "requests": [
1186
+ [
1187
+ null,
1188
+ 0
1189
+ ]
1190
+ ],
1191
+ "outcome": {
1192
+ "ok": []
1193
+ }
1194
+ },
1195
+ {
1196
+ "name": "trades [] with count 0",
1197
+ "strict": "incomplete",
1198
+ "order_ids": [
1199
+ "O1"
1200
+ ],
1201
+ "start": null,
1202
+ "max_pages": 20,
1203
+ "pages": [
1204
+ "{\"error\":[],\"result\":{\"trades\":[],\"count\":0}}"
1205
+ ],
1206
+ "requests": [
1207
+ [
1208
+ null,
1209
+ 0
1210
+ ]
1211
+ ],
1212
+ "outcome": {
1213
+ "ok": []
1214
+ }
1215
+ },
1216
+ {
1217
+ "name": "trades \"\" with count 0",
1218
+ "strict": "incomplete",
1219
+ "order_ids": [
1220
+ "O1"
1221
+ ],
1222
+ "start": null,
1223
+ "max_pages": 20,
1224
+ "pages": [
1225
+ "{\"error\":[],\"result\":{\"trades\":\"\",\"count\":0}}"
1226
+ ],
1227
+ "requests": [
1228
+ [
1229
+ null,
1230
+ 0
1231
+ ]
1232
+ ],
1233
+ "outcome": {
1234
+ "ok": []
1235
+ }
1236
+ },
1237
+ {
1238
+ "name": "trades null with count 0",
1239
+ "strict": "incomplete",
1240
+ "order_ids": [
1241
+ "O1"
1242
+ ],
1243
+ "start": null,
1244
+ "max_pages": 20,
1245
+ "pages": [
1246
+ "{\"error\":[],\"result\":{\"trades\":null,\"count\":0}}"
1247
+ ],
1248
+ "requests": [
1249
+ [
1250
+ null,
1251
+ 0
1252
+ ]
1253
+ ],
1254
+ "outcome": {
1255
+ "ok": []
1256
+ }
1257
+ },
1258
+ {
1259
+ "name": "trades missing with count 0",
1260
+ "strict": "incomplete",
1261
+ "order_ids": [
1262
+ "O1"
1263
+ ],
1264
+ "start": null,
1265
+ "max_pages": 20,
1266
+ "pages": [
1267
+ "{\"error\":[],\"result\":{\"count\":0}}"
1268
+ ],
1269
+ "requests": [
1270
+ [
1271
+ null,
1272
+ 0
1273
+ ]
1274
+ ],
1275
+ "outcome": {
1276
+ "ok": []
1277
+ }
1278
+ },
1279
+ {
1280
+ "name": "a trade that is a string",
1281
+ "strict": "error",
1282
+ "order_ids": [
1283
+ "O1"
1284
+ ],
1285
+ "start": null,
1286
+ "max_pages": 20,
1287
+ "pages": [
1288
+ "{\"error\":[],\"result\":{\"trades\":{\"T1\":\"no id here\",\"T2\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":2}}"
1289
+ ],
1290
+ "requests": [
1291
+ [
1292
+ null,
1293
+ 0
1294
+ ]
1295
+ ],
1296
+ "outcome": {
1297
+ "ok": [
1298
+ [
1299
+ "O1",
1300
+ {
1301
+ "vol": "1.0",
1302
+ "cost": "2.0",
1303
+ "fee": "0.1",
1304
+ "price": "2.0",
1305
+ "side": "buy",
1306
+ "order_type": "market"
1307
+ }
1308
+ ]
1309
+ ]
1310
+ }
1311
+ },
1312
+ {
1313
+ "name": "a record without ordertxid",
1314
+ "strict": "error",
1315
+ "order_ids": [
1316
+ "O1"
1317
+ ],
1318
+ "start": null,
1319
+ "max_pages": 20,
1320
+ "pages": [
1321
+ "{\"error\":[],\"result\":{\"trades\":{\"T1\":{\"vol\":\"1\",\"cost\":\"2\"}},\"count\":1}}"
1322
+ ],
1323
+ "requests": [
1324
+ [
1325
+ null,
1326
+ 0
1327
+ ]
1328
+ ],
1329
+ "outcome": {
1330
+ "ok": []
1331
+ }
1332
+ },
1333
+ {
1334
+ "name": "a record with a numeric ordertxid",
1335
+ "strict": "error",
1336
+ "order_ids": [
1337
+ "O1"
1338
+ ],
1339
+ "start": null,
1340
+ "max_pages": 20,
1341
+ "pages": [
1342
+ "{\"error\":[],\"result\":{\"trades\":{\"T1\":{\"ordertxid\":5,\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":1}}"
1343
+ ],
1344
+ "requests": [
1345
+ [
1346
+ null,
1347
+ 0
1348
+ ]
1349
+ ],
1350
+ "outcome": {
1351
+ "ok": []
1352
+ }
1353
+ },
1354
+ {
1355
+ "name": "a trade that is a number raises",
1356
+ "strict": "same",
1357
+ "order_ids": [
1358
+ "O1"
1359
+ ],
1360
+ "start": null,
1361
+ "max_pages": 20,
1362
+ "pages": [
1363
+ "{\"error\":[],\"result\":{\"trades\":{\"T1\":5},\"count\":1}}"
1364
+ ],
1365
+ "requests": [
1366
+ [
1367
+ null,
1368
+ 0
1369
+ ]
1370
+ ],
1371
+ "outcome": {
1372
+ "raise": "TypeError"
1373
+ }
1374
+ },
1375
+ {
1376
+ "name": "a trade that is null raises",
1377
+ "strict": "same",
1378
+ "order_ids": [
1379
+ "O1"
1380
+ ],
1381
+ "start": null,
1382
+ "max_pages": 20,
1383
+ "pages": [
1384
+ "{\"error\":[],\"result\":{\"trades\":{\"T1\":null},\"count\":1}}"
1385
+ ],
1386
+ "requests": [
1387
+ [
1388
+ null,
1389
+ 0
1390
+ ]
1391
+ ],
1392
+ "outcome": {
1393
+ "raise": "NoMethodError"
1394
+ }
1395
+ },
1396
+ {
1397
+ "name": "count true",
1398
+ "strict": "incomplete",
1399
+ "order_ids": [
1400
+ "O1"
1401
+ ],
1402
+ "start": null,
1403
+ "max_pages": 20,
1404
+ "pages": [
1405
+ "{\"error\":[],\"result\":{\"trades\":{\"T1\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":true}}"
1406
+ ],
1407
+ "requests": [
1408
+ [
1409
+ null,
1410
+ 0
1411
+ ]
1412
+ ],
1413
+ "outcome": {
1414
+ "raise": "NoMethodError"
1415
+ }
1416
+ },
1417
+ {
1418
+ "name": "count as an array",
1419
+ "strict": "incomplete",
1420
+ "order_ids": [
1421
+ "O1"
1422
+ ],
1423
+ "start": null,
1424
+ "max_pages": 20,
1425
+ "pages": [
1426
+ "{\"error\":[],\"result\":{\"trades\":{\"T1\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":[1]}}"
1427
+ ],
1428
+ "requests": [
1429
+ [
1430
+ null,
1431
+ 0
1432
+ ]
1433
+ ],
1434
+ "outcome": {
1435
+ "raise": "NoMethodError"
1436
+ }
1437
+ },
1438
+ {
1439
+ "name": "refusal on page 2",
1440
+ "strict": "same",
1441
+ "order_ids": [
1442
+ "O1"
1443
+ ],
1444
+ "start": null,
1445
+ "max_pages": 20,
1446
+ "pages": [
1447
+ "{\"error\":[],\"result\":{\"trades\":{\"T1\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":5}}",
1448
+ "{\"error\":[\"EAPI:Rate limit exceeded\"]}"
1449
+ ],
1450
+ "requests": [
1451
+ [
1452
+ null,
1453
+ 0
1454
+ ],
1455
+ [
1456
+ null,
1457
+ 1
1458
+ ]
1459
+ ],
1460
+ "outcome": {
1461
+ "venue": [
1462
+ "EAPI:Rate limit exceeded"
1463
+ ]
1464
+ }
1465
+ },
1466
+ {
1467
+ "name": "falsy errors are not a refusal",
1468
+ "strict": "same",
1469
+ "order_ids": [
1470
+ "O1"
1471
+ ],
1472
+ "start": null,
1473
+ "max_pages": 20,
1474
+ "pages": [
1475
+ "{\"error\":[null,false],\"result\":{\"trades\":{\"T1\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":1}}"
1476
+ ],
1477
+ "requests": [
1478
+ [
1479
+ null,
1480
+ 0
1481
+ ]
1482
+ ],
1483
+ "outcome": {
1484
+ "ok": [
1485
+ [
1486
+ "O1",
1487
+ {
1488
+ "vol": "1.0",
1489
+ "cost": "2.0",
1490
+ "fee": "0.1",
1491
+ "price": "2.0",
1492
+ "side": "buy",
1493
+ "order_type": "market"
1494
+ }
1495
+ ]
1496
+ ]
1497
+ }
1498
+ },
1499
+ {
1500
+ "name": "non-object page 2 is unreadable",
1501
+ "strict": "same",
1502
+ "order_ids": [
1503
+ "O1"
1504
+ ],
1505
+ "start": null,
1506
+ "max_pages": 20,
1507
+ "pages": [
1508
+ "{\"error\":[],\"result\":{\"trades\":{\"T1\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":5}}",
1509
+ "\"oops\""
1510
+ ],
1511
+ "requests": [
1512
+ [
1513
+ null,
1514
+ 0
1515
+ ],
1516
+ [
1517
+ null,
1518
+ 1
1519
+ ]
1520
+ ],
1521
+ "outcome": {
1522
+ "unreadable": true
1523
+ }
1524
+ },
1525
+ {
1526
+ "name": "pages run out: legacy sees null",
1527
+ "strict": "same",
1528
+ "order_ids": [
1529
+ "O1"
1530
+ ],
1531
+ "start": null,
1532
+ "max_pages": 20,
1533
+ "pages": [
1534
+ "{\"error\":[],\"result\":{\"trades\":{\"T1\":{\"ordertxid\":\"O1\",\"vol\":\"1\",\"cost\":\"2\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":5}}"
1535
+ ],
1536
+ "requests": [
1537
+ [
1538
+ null,
1539
+ 0
1540
+ ],
1541
+ [
1542
+ null,
1543
+ 1
1544
+ ]
1545
+ ],
1546
+ "outcome": {
1547
+ "unreadable": true
1548
+ }
1549
+ },
1550
+ {
1551
+ "name": "zero volume has no price",
1552
+ "strict": "same",
1553
+ "order_ids": [
1554
+ "O1"
1555
+ ],
1556
+ "start": null,
1557
+ "max_pages": 20,
1558
+ "pages": [
1559
+ "{\"error\":[],\"result\":{\"trades\":{\"T1\":{\"ordertxid\":\"O1\",\"vol\":\"0\",\"cost\":\"0\",\"fee\":\"0.1\",\"type\":\"buy\",\"ordertype\":\"market\",\"time\":1.5}},\"count\":1}}"
1560
+ ],
1561
+ "requests": [
1562
+ [
1563
+ null,
1564
+ 0
1565
+ ]
1566
+ ],
1567
+ "outcome": {
1568
+ "ok": [
1569
+ [
1570
+ "O1",
1571
+ {
1572
+ "vol": "0.0",
1573
+ "cost": "0.0",
1574
+ "fee": "0.1",
1575
+ "price": null,
1576
+ "side": "buy",
1577
+ "order_type": "market"
1578
+ }
1579
+ ]
1580
+ ]
1581
+ }
1582
+ }
1583
+ ]