max_exchange_api 1.3.0 → 2.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/.github/workflows/ruby.yml +43 -46
- data/.gitignore +62 -62
- data/.rubocop.yml +1227 -1227
- data/CHANGELOG.md +5 -0
- data/CODE_OF_CONDUCT.md +49 -49
- data/LICENSE +21 -21
- data/README.md +993 -368
- data/Rakefile +10 -10
- data/bin/console +14 -14
- data/bin/setup +0 -0
- data/gemfiles/2.2.gemfile +11 -0
- data/gemfiles/Gemfile +10 -10
- data/lib/max_exchange_api/base_api.rb +52 -52
- data/lib/max_exchange_api/config.rb +26 -26
- data/lib/max_exchange_api/helper.rb +9 -2
- data/lib/max_exchange_api/private_api.rb +4 -218
- data/lib/max_exchange_api/private_v2/account_api.rb +15 -0
- data/lib/max_exchange_api/private_v2/deposit_api.rb +75 -0
- data/lib/max_exchange_api/private_v2/internal_transfer_api.rb +26 -0
- data/lib/max_exchange_api/private_v2/order_api.rb +55 -0
- data/lib/max_exchange_api/private_v2/reward_api.rb +40 -0
- data/lib/max_exchange_api/private_v2/trade_api.rb +28 -0
- data/lib/max_exchange_api/private_v2/user_api.rb +19 -0
- data/lib/max_exchange_api/private_v2/withdraw_api.rb +42 -0
- data/lib/max_exchange_api/private_v2_api.rb +26 -0
- data/lib/max_exchange_api/private_v3/account_api.rb +15 -0
- data/lib/max_exchange_api/private_v3/convert_api.rb +29 -0
- data/lib/max_exchange_api/private_v3/deposit_api.rb +26 -0
- data/lib/max_exchange_api/private_v3/internal_transfer_api.rb +19 -0
- data/lib/max_exchange_api/private_v3/m_wallet_api.rb +76 -0
- data/lib/max_exchange_api/private_v3/order_api.rb +82 -0
- data/lib/max_exchange_api/private_v3/reward_api.rb +19 -0
- data/lib/max_exchange_api/private_v3/sub_account_api.rb +31 -0
- data/lib/max_exchange_api/private_v3/trade_api.rb +27 -0
- data/lib/max_exchange_api/private_v3/user_api.rb +11 -0
- data/lib/max_exchange_api/private_v3/withdraw_api.rb +35 -0
- data/lib/max_exchange_api/private_v3_api.rb +32 -0
- data/lib/max_exchange_api/public_api.rb +13 -72
- data/lib/max_exchange_api/public_v2_api.rb +65 -0
- data/lib/max_exchange_api/public_v3_api.rb +69 -0
- data/lib/max_exchange_api/version.rb +3 -3
- data/lib/max_exchange_api.rb +4 -2
- data/max_exchange_api.gemspec +42 -43
- metadata +28 -21
data/Rakefile
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
require 'bundler/gem_tasks'
|
|
2
|
-
require 'rake/testtask'
|
|
3
|
-
|
|
4
|
-
Rake::TestTask.new(:test) do |t|
|
|
5
|
-
t.libs << 'test'
|
|
6
|
-
t.libs << 'lib'
|
|
7
|
-
t.test_files = FileList['test/**/*_test.rb']
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
task default: :test
|
|
1
|
+
require 'bundler/gem_tasks'
|
|
2
|
+
require 'rake/testtask'
|
|
3
|
+
|
|
4
|
+
Rake::TestTask.new(:test) do |t|
|
|
5
|
+
t.libs << 'test'
|
|
6
|
+
t.libs << 'lib'
|
|
7
|
+
t.test_files = FileList['test/**/*_test.rb']
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
task default: :test
|
data/bin/console
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
#!/usr/bin/env ruby
|
|
2
|
-
|
|
3
|
-
require 'bundler/setup'
|
|
4
|
-
require 'max_exchange_api'
|
|
5
|
-
|
|
6
|
-
# You can add fixtures and/or initialization code here to make experimenting
|
|
7
|
-
# with your gem easier. You can also use a different console, if you like.
|
|
8
|
-
|
|
9
|
-
# (If you use this, don't forget to add pry to your Gemfile!)
|
|
10
|
-
# require "pry"
|
|
11
|
-
# Pry.start
|
|
12
|
-
|
|
13
|
-
require 'irb'
|
|
14
|
-
IRB.start
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
require 'bundler/setup'
|
|
4
|
+
require 'max_exchange_api'
|
|
5
|
+
|
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
|
8
|
+
|
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
|
10
|
+
# require "pry"
|
|
11
|
+
# Pry.start
|
|
12
|
+
|
|
13
|
+
require 'irb'
|
|
14
|
+
IRB.start
|
data/bin/setup
CHANGED
|
File without changes
|
data/gemfiles/Gemfile
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
source 'https://rubygems.org'
|
|
2
|
-
|
|
3
|
-
# Specify your gem's dependencies in rails_or.gemspec
|
|
4
|
-
|
|
5
|
-
group :test do
|
|
6
|
-
gem 'simplecov', '< 0.18'
|
|
7
|
-
gem 'httparty', '< 0.19'
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
gemspec path: '../'
|
|
1
|
+
source 'https://rubygems.org'
|
|
2
|
+
|
|
3
|
+
# Specify your gem's dependencies in rails_or.gemspec
|
|
4
|
+
|
|
5
|
+
group :test do
|
|
6
|
+
gem 'simplecov', '< 0.18'
|
|
7
|
+
gem 'httparty', '< 0.19'
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
gemspec path: '../'
|
|
@@ -1,52 +1,52 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'httparty'
|
|
4
|
-
require 'max_exchange_api/helper'
|
|
5
|
-
|
|
6
|
-
module MaxExchangeApi
|
|
7
|
-
class BaseApi
|
|
8
|
-
include HTTParty
|
|
9
|
-
|
|
10
|
-
attr_reader :config
|
|
11
|
-
|
|
12
|
-
def initialize(config: nil)
|
|
13
|
-
@config = Config.new(config)
|
|
14
|
-
@config.reverse_merge!(MaxExchangeApi.default_config)
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
protected
|
|
18
|
-
|
|
19
|
-
def send_request(method, path, headers, query)
|
|
20
|
-
uuid = SecureRandom.uuid
|
|
21
|
-
print_log(:info, "[API] #{uuid} #{method.upcase} '#{path}' query = #{query}")
|
|
22
|
-
|
|
23
|
-
body_or_query = method == :get ? :query : :body
|
|
24
|
-
|
|
25
|
-
begin
|
|
26
|
-
response = self.class.send(
|
|
27
|
-
method,
|
|
28
|
-
path,
|
|
29
|
-
headers: headers.merge(
|
|
30
|
-
'Accept' => 'application/json',
|
|
31
|
-
'User-Agent' => "max_exchange_api (#{MaxExchangeApi::VERSION})",
|
|
32
|
-
),
|
|
33
|
-
timeout: @config.timeout,
|
|
34
|
-
body_or_query => query,
|
|
35
|
-
).parsed_response
|
|
36
|
-
|
|
37
|
-
print_log(:info, "[API] #{uuid} response #{response}")
|
|
38
|
-
return response
|
|
39
|
-
rescue => error
|
|
40
|
-
print_log(:error, "[API] #{uuid} raise exception #{error.message}")
|
|
41
|
-
raise error
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
private
|
|
46
|
-
|
|
47
|
-
def print_log(method, message)
|
|
48
|
-
logger = @config.logger
|
|
49
|
-
logger.send(method, message) if logger
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'httparty'
|
|
4
|
+
require 'max_exchange_api/helper'
|
|
5
|
+
|
|
6
|
+
module MaxExchangeApi
|
|
7
|
+
class BaseApi
|
|
8
|
+
include HTTParty
|
|
9
|
+
|
|
10
|
+
attr_reader :config
|
|
11
|
+
|
|
12
|
+
def initialize(config: nil)
|
|
13
|
+
@config = Config.new(config)
|
|
14
|
+
@config.reverse_merge!(MaxExchangeApi.default_config)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
protected
|
|
18
|
+
|
|
19
|
+
def send_request(method, path, headers, query)
|
|
20
|
+
uuid = SecureRandom.uuid
|
|
21
|
+
print_log(:info, "[API] #{uuid} #{method.upcase} '#{path}' query = #{query}")
|
|
22
|
+
|
|
23
|
+
body_or_query = method == :get ? :query : :body
|
|
24
|
+
|
|
25
|
+
begin
|
|
26
|
+
response = self.class.send(
|
|
27
|
+
method,
|
|
28
|
+
path,
|
|
29
|
+
headers: headers.merge(
|
|
30
|
+
'Accept' => 'application/json',
|
|
31
|
+
'User-Agent' => "max_exchange_api (#{MaxExchangeApi::VERSION})",
|
|
32
|
+
),
|
|
33
|
+
timeout: @config.timeout,
|
|
34
|
+
body_or_query => query,
|
|
35
|
+
).parsed_response
|
|
36
|
+
|
|
37
|
+
print_log(:info, "[API] #{uuid} response #{response}")
|
|
38
|
+
return response
|
|
39
|
+
rescue => error
|
|
40
|
+
print_log(:error, "[API] #{uuid} raise exception #{error.message}")
|
|
41
|
+
raise error
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
private
|
|
46
|
+
|
|
47
|
+
def print_log(method, message)
|
|
48
|
+
logger = @config.logger
|
|
49
|
+
logger.send(method, message) if logger
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module MaxExchangeApi
|
|
4
|
-
class Config
|
|
5
|
-
attr_accessor :timeout
|
|
6
|
-
attr_accessor :logger
|
|
7
|
-
|
|
8
|
-
def initialize(data = nil)
|
|
9
|
-
data ||= {}
|
|
10
|
-
@timeout = data[:timeout]
|
|
11
|
-
@logger = data[:logger]
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def reverse_merge!(other)
|
|
15
|
-
@timeout ||= other.timeout
|
|
16
|
-
@logger ||= other.logger
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
@default_config = Config.new
|
|
21
|
-
@default_config.timeout = 3
|
|
22
|
-
|
|
23
|
-
class << self
|
|
24
|
-
attr_reader :default_config
|
|
25
|
-
end
|
|
26
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module MaxExchangeApi
|
|
4
|
+
class Config
|
|
5
|
+
attr_accessor :timeout
|
|
6
|
+
attr_accessor :logger
|
|
7
|
+
|
|
8
|
+
def initialize(data = nil)
|
|
9
|
+
data ||= {}
|
|
10
|
+
@timeout = data[:timeout]
|
|
11
|
+
@logger = data[:logger]
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def reverse_merge!(other)
|
|
15
|
+
@timeout ||= other.timeout
|
|
16
|
+
@logger ||= other.logger
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
@default_config = Config.new
|
|
21
|
+
@default_config.timeout = 3
|
|
22
|
+
|
|
23
|
+
class << self
|
|
24
|
+
attr_reader :default_config
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -1,16 +1,23 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require 'base64'
|
|
4
|
+
require 'json'
|
|
5
|
+
|
|
3
6
|
module MaxExchangeApi
|
|
4
7
|
module Helper
|
|
5
8
|
class << self
|
|
6
|
-
def gen_headers(payload, access_key, secret_key)
|
|
9
|
+
def gen_headers(payload, access_key, secret_key, sub_account_sn: nil)
|
|
7
10
|
encoded_payload = encode(payload)
|
|
8
11
|
|
|
9
|
-
|
|
12
|
+
headers = {
|
|
10
13
|
'X-MAX-ACCESSKEY' => access_key,
|
|
11
14
|
'X-MAX-PAYLOAD' => encoded_payload,
|
|
12
15
|
'X-MAX-SIGNATURE' => encrypt(encoded_payload, secret_key),
|
|
13
16
|
}
|
|
17
|
+
|
|
18
|
+
headers['X-Sub-Account'] = sub_account_sn if sub_account_sn
|
|
19
|
+
|
|
20
|
+
return headers
|
|
14
21
|
end
|
|
15
22
|
|
|
16
23
|
private
|
|
@@ -4,236 +4,22 @@ require 'max_exchange_api/base_api'
|
|
|
4
4
|
|
|
5
5
|
module MaxExchangeApi
|
|
6
6
|
class PrivateApi < BaseApi
|
|
7
|
-
|
|
7
|
+
attr_accessor :current_sub_account_sn
|
|
8
8
|
|
|
9
9
|
def initialize(access_key, secret_key, config: nil)
|
|
10
10
|
super(config: config)
|
|
11
11
|
|
|
12
12
|
@access_key = access_key
|
|
13
13
|
@secret_key = secret_key
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
def my_trades_of_order(order_id, use_client_id: false)
|
|
17
|
-
id_params_key = use_client_id ? :client_oid : :id
|
|
18
|
-
send_request(:get, '/trades/my/of_order', id_params_key => order_id)
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def my_trades(market, timestamp: nil, from: nil, to: nil, order_by: 'desc', pagination: true, page: 1, limit: 50,
|
|
22
|
-
offset: 0)
|
|
23
|
-
send_request(
|
|
24
|
-
:get,
|
|
25
|
-
'/trades/my',
|
|
26
|
-
market: market,
|
|
27
|
-
timestamp: timestamp,
|
|
28
|
-
from: from,
|
|
29
|
-
to: to,
|
|
30
|
-
order_by: order_by,
|
|
31
|
-
pagination: pagination,
|
|
32
|
-
page: page,
|
|
33
|
-
limit: limit,
|
|
34
|
-
offset: offset,
|
|
35
|
-
)
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
def member_profile
|
|
39
|
-
send_request(:get, '/members/profile', {})
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
def me
|
|
43
|
-
send_request(:get, '/members/me', {})
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def vip_level
|
|
47
|
-
send_request(:get, '/members/vip_level', {})
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
def accounts
|
|
51
|
-
send_request(:get, '/members/accounts', {})
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
def account(currency)
|
|
55
|
-
send_request(:get, "/members/accounts/#{currency}", {})
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
def deposits(currency, from: nil, to: nil, state: nil, pagination: nil, page: 1, limit: 50,
|
|
59
|
-
offset: 0)
|
|
60
|
-
send_request(
|
|
61
|
-
:get,
|
|
62
|
-
'/deposits',
|
|
63
|
-
currency: currency,
|
|
64
|
-
from: from,
|
|
65
|
-
to: to,
|
|
66
|
-
state: state,
|
|
67
|
-
pagination: pagination,
|
|
68
|
-
page: page,
|
|
69
|
-
limit: limit,
|
|
70
|
-
offset: offset,
|
|
71
|
-
)
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
def deposit(transaction_id)
|
|
75
|
-
send_request(:get, '/deposit', txid: transaction_id)
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
def deposit_addresses(currency: nil, pagination: nil, page: 1, limit: 50, offset: 0)
|
|
79
|
-
send_request(
|
|
80
|
-
:get,
|
|
81
|
-
'/deposit_addresses',
|
|
82
|
-
currency: currency,
|
|
83
|
-
pagination: pagination,
|
|
84
|
-
page: page,
|
|
85
|
-
limit: limit,
|
|
86
|
-
offset: offset,
|
|
87
|
-
)
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
def create_deposit_addresses!(currency)
|
|
91
|
-
send_request(:post, '/deposit_addresses', currency: currency)
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
def withdraw_addresses(currency, pagination: nil, page: 1, limit: 50, offset: 0)
|
|
95
|
-
send_request(
|
|
96
|
-
:get,
|
|
97
|
-
'/withdraw_addresses',
|
|
98
|
-
currency: currency,
|
|
99
|
-
pagination: pagination,
|
|
100
|
-
page: page,
|
|
101
|
-
limit: limit,
|
|
102
|
-
offset: offset,
|
|
103
|
-
)
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
def withdrawal(withdraw_id)
|
|
107
|
-
send_request(:get, '/withdrawal', uuid: withdraw_id)
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
def withdrawals(currency, from: nil, to: nil, state: nil, pagination: nil, page: 1, limit: 50,
|
|
111
|
-
offset: 0)
|
|
112
|
-
send_request(
|
|
113
|
-
:get,
|
|
114
|
-
'/withdrawals',
|
|
115
|
-
currency: currency,
|
|
116
|
-
from: from,
|
|
117
|
-
to: to,
|
|
118
|
-
state: state,
|
|
119
|
-
pagination: pagination,
|
|
120
|
-
page: page,
|
|
121
|
-
limit: limit,
|
|
122
|
-
offset: offset,
|
|
123
|
-
)
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
def create_withdrawal!(currency, withdraw_address_id, amount)
|
|
127
|
-
send_request(:post, '/withdrawal', currency: currency, withdraw_address_uuid: withdraw_address_id, amount: amount)
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
def internal_transfers(currency: nil, side: 'in', from: nil, to: nil, pagination: nil, page: 1, limit: 50,
|
|
131
|
-
offset: 0)
|
|
132
|
-
send_request(
|
|
133
|
-
:get,
|
|
134
|
-
'/internal_transfers',
|
|
135
|
-
currency: currency,
|
|
136
|
-
side: side,
|
|
137
|
-
from: from,
|
|
138
|
-
to: to,
|
|
139
|
-
pagination: pagination,
|
|
140
|
-
page: page,
|
|
141
|
-
limit: limit,
|
|
142
|
-
offset: offset,
|
|
143
|
-
)
|
|
144
|
-
end
|
|
145
|
-
|
|
146
|
-
def internal_transfer(internal_transfer_id)
|
|
147
|
-
send_request(:get, '/internal_transfer', uuid: internal_transfer_id)
|
|
148
|
-
end
|
|
149
|
-
|
|
150
|
-
def rewards(reward_type: nil, currency: nil, from: nil, to: nil, pagination: nil, page: 1, limit: 50, offset: 0)
|
|
151
|
-
path = reward_type ? "/rewards/#{reward_type}" : '/rewards'
|
|
152
|
-
send_request(
|
|
153
|
-
:get,
|
|
154
|
-
path,
|
|
155
|
-
currency: currency,
|
|
156
|
-
from: from,
|
|
157
|
-
to: to,
|
|
158
|
-
pagination: pagination,
|
|
159
|
-
page: page,
|
|
160
|
-
limit: limit,
|
|
161
|
-
offset: offset,
|
|
162
|
-
)
|
|
163
|
-
end
|
|
164
|
-
|
|
165
|
-
def yields(currency: nil, from: nil, to: nil, pagination: nil, page: 1, limit: 50, offset: 0)
|
|
166
|
-
send_request(
|
|
167
|
-
:get,
|
|
168
|
-
'/yields',
|
|
169
|
-
currency: currency,
|
|
170
|
-
from: from,
|
|
171
|
-
to: to,
|
|
172
|
-
pagination: pagination,
|
|
173
|
-
page: page,
|
|
174
|
-
limit: limit,
|
|
175
|
-
offset: offset,
|
|
176
|
-
)
|
|
177
|
-
end
|
|
178
|
-
|
|
179
|
-
def max_rewards_yesterday
|
|
180
|
-
send_request(:get, '/max_rewards/yesterday', {})
|
|
181
|
-
end
|
|
182
|
-
|
|
183
|
-
def orders(market, state: nil, order_by: 'asc', group_id: nil, pagination: nil, page: 1, limit: 50, offset: 0)
|
|
184
|
-
send_request(
|
|
185
|
-
:get,
|
|
186
|
-
'/orders',
|
|
187
|
-
market: market,
|
|
188
|
-
state: state,
|
|
189
|
-
order_by: order_by,
|
|
190
|
-
group_id: group_id,
|
|
191
|
-
pagination: pagination,
|
|
192
|
-
page: page,
|
|
193
|
-
limit: limit,
|
|
194
|
-
offset: offset,
|
|
195
|
-
)
|
|
196
|
-
end
|
|
197
|
-
|
|
198
|
-
def order(order_id, use_client_id: false)
|
|
199
|
-
id_params_key = use_client_id ? :client_oid : :id
|
|
200
|
-
send_request(:get, '/order', id_params_key => order_id)
|
|
201
|
-
end
|
|
202
|
-
|
|
203
|
-
def cancel_orders!(market: nil, side: nil, group_id: nil)
|
|
204
|
-
send_request(:post, '/orders/clear', market: market, side: side, group_id: group_id)
|
|
205
|
-
end
|
|
206
|
-
|
|
207
|
-
def cancel_order!(order_id, use_client_id: false)
|
|
208
|
-
id_params_key = use_client_id ? :client_oid : :id
|
|
209
|
-
send_request(:post, '/order/delete', id_params_key => order_id)
|
|
210
|
-
end
|
|
211
|
-
|
|
212
|
-
def create_order!(market, side, volume, price: nil, client_oid: nil, stop_price: nil, ord_type: nil, group_id: nil)
|
|
213
|
-
send_request(
|
|
214
|
-
:post,
|
|
215
|
-
'/orders',
|
|
216
|
-
market: market,
|
|
217
|
-
side: side,
|
|
218
|
-
volume: volume,
|
|
219
|
-
price: price,
|
|
220
|
-
client_oid: client_oid,
|
|
221
|
-
stop_price: stop_price,
|
|
222
|
-
ord_type: ord_type,
|
|
223
|
-
group_id: group_id,
|
|
224
|
-
)
|
|
225
|
-
end
|
|
226
|
-
|
|
227
|
-
def create_orders!(market, orders, group_id: nil)
|
|
228
|
-
send_request(:post, '/orders/multi/onebyone', market: market, orders: orders, group_id: group_id)
|
|
14
|
+
@base_path = URI.parse(self.class.base_uri).path
|
|
229
15
|
end
|
|
230
16
|
|
|
231
17
|
protected
|
|
232
18
|
|
|
233
19
|
def send_request(method, path, query)
|
|
234
20
|
query = query.compact
|
|
235
|
-
query.merge!(path: "
|
|
236
|
-
return super(method, path, Helper.gen_headers(query, @access_key, @secret_key), query)
|
|
21
|
+
query.merge!(path: "#{@base_path}#{path}", nonce: (Time.now.to_f * 1000).to_i)
|
|
22
|
+
return super(method, path, Helper.gen_headers(query, @access_key, @secret_key, sub_account_sn: current_sub_account_sn), query)
|
|
237
23
|
end
|
|
238
24
|
end
|
|
239
25
|
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module MaxExchangeApi
|
|
4
|
+
module PrivateV2
|
|
5
|
+
module AccountApi
|
|
6
|
+
def accounts
|
|
7
|
+
send_request(:get, '/members/accounts', {})
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def account(currency)
|
|
11
|
+
send_request(:get, "/members/accounts/#{currency}", {})
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module MaxExchangeApi
|
|
4
|
+
module PrivateV2
|
|
5
|
+
module DepositApi
|
|
6
|
+
def deposits(currency, from: nil, to: nil, state: nil, pagination: nil, page: 1, limit: 50, offset: 0)
|
|
7
|
+
send_request(
|
|
8
|
+
:get,
|
|
9
|
+
'/deposits',
|
|
10
|
+
currency: currency,
|
|
11
|
+
from: from,
|
|
12
|
+
to: to,
|
|
13
|
+
state: state,
|
|
14
|
+
pagination: pagination,
|
|
15
|
+
page: page,
|
|
16
|
+
limit: limit,
|
|
17
|
+
offset: offset,
|
|
18
|
+
)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def deposit(transaction_id)
|
|
22
|
+
send_request(:get, '/deposit', txid: transaction_id)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def deposit_addresses(currency: nil, pagination: nil, page: 1, limit: 50, offset: 0)
|
|
26
|
+
send_request(
|
|
27
|
+
:get,
|
|
28
|
+
'/deposit_addresses',
|
|
29
|
+
currency: currency,
|
|
30
|
+
pagination: pagination,
|
|
31
|
+
page: page,
|
|
32
|
+
limit: limit,
|
|
33
|
+
offset: offset,
|
|
34
|
+
)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def create_deposit_addresses!(currency)
|
|
38
|
+
send_request(:post, '/deposit_addresses', currency: currency)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def rewards(reward_type: nil, currency: nil, from: nil, to: nil, pagination: nil, page: 1, limit: 50, offset: 0)
|
|
42
|
+
path = reward_type ? "/rewards/#{reward_type}" : '/rewards'
|
|
43
|
+
send_request(
|
|
44
|
+
:get,
|
|
45
|
+
path,
|
|
46
|
+
currency: currency,
|
|
47
|
+
from: from,
|
|
48
|
+
to: to,
|
|
49
|
+
pagination: pagination,
|
|
50
|
+
page: page,
|
|
51
|
+
limit: limit,
|
|
52
|
+
offset: offset,
|
|
53
|
+
)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def yields(currency: nil, from: nil, to: nil, pagination: nil, page: 1, limit: 50, offset: 0)
|
|
57
|
+
send_request(
|
|
58
|
+
:get,
|
|
59
|
+
'/yields',
|
|
60
|
+
currency: currency,
|
|
61
|
+
from: from,
|
|
62
|
+
to: to,
|
|
63
|
+
pagination: pagination,
|
|
64
|
+
page: page,
|
|
65
|
+
limit: limit,
|
|
66
|
+
offset: offset,
|
|
67
|
+
)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def max_rewards_yesterday
|
|
71
|
+
send_request(:get, '/max_rewards/yesterday', {})
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module MaxExchangeApi
|
|
4
|
+
module PrivateV2
|
|
5
|
+
module InternalTransferApi
|
|
6
|
+
def internal_transfers(currency: nil, side: 'in', from: nil, to: nil, pagination: nil, page: 1, limit: 50, offset: 0)
|
|
7
|
+
send_request(
|
|
8
|
+
:get,
|
|
9
|
+
'/internal_transfers',
|
|
10
|
+
currency: currency,
|
|
11
|
+
side: side,
|
|
12
|
+
from: from,
|
|
13
|
+
to: to,
|
|
14
|
+
pagination: pagination,
|
|
15
|
+
page: page,
|
|
16
|
+
limit: limit,
|
|
17
|
+
offset: offset,
|
|
18
|
+
)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def internal_transfer(internal_transfer_id)
|
|
22
|
+
send_request(:get, '/internal_transfer', uuid: internal_transfer_id)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module MaxExchangeApi
|
|
4
|
+
module PrivateV2
|
|
5
|
+
module OrderApi
|
|
6
|
+
def orders(market, state: nil, order_by: 'asc', group_id: nil, pagination: nil, page: 1, limit: 50, offset: 0)
|
|
7
|
+
send_request(
|
|
8
|
+
:get,
|
|
9
|
+
'/orders',
|
|
10
|
+
market: market,
|
|
11
|
+
state: state,
|
|
12
|
+
order_by: order_by,
|
|
13
|
+
group_id: group_id,
|
|
14
|
+
pagination: pagination,
|
|
15
|
+
page: page,
|
|
16
|
+
limit: limit,
|
|
17
|
+
offset: offset,
|
|
18
|
+
)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def order(order_id, use_client_id: false)
|
|
22
|
+
id_params_key = use_client_id ? :client_oid : :id
|
|
23
|
+
send_request(:get, '/order', id_params_key => order_id)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def cancel_orders!(market: nil, side: nil, group_id: nil)
|
|
27
|
+
send_request(:post, '/orders/clear', market: market, side: side, group_id: group_id)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def cancel_order!(order_id, use_client_id: false)
|
|
31
|
+
id_params_key = use_client_id ? :client_oid : :id
|
|
32
|
+
send_request(:post, '/order/delete', id_params_key => order_id)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def create_order!(market, side, volume, price: nil, client_oid: nil, stop_price: nil, ord_type: nil, group_id: nil)
|
|
36
|
+
send_request(
|
|
37
|
+
:post,
|
|
38
|
+
'/orders',
|
|
39
|
+
market: market,
|
|
40
|
+
side: side,
|
|
41
|
+
volume: volume,
|
|
42
|
+
price: price,
|
|
43
|
+
client_oid: client_oid,
|
|
44
|
+
stop_price: stop_price,
|
|
45
|
+
ord_type: ord_type,
|
|
46
|
+
group_id: group_id,
|
|
47
|
+
)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def create_orders!(market, orders, group_id: nil)
|
|
51
|
+
send_request(:post, '/orders/multi/onebyone', market: market, orders: orders, group_id: group_id)
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|