peatio-bitgo 2.6.0 → 2.6.5
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/Gemfile.lock +36 -36
- data/lib/peatio/bitgo/client.rb +1 -1
- data/lib/peatio/bitgo/hooks.rb +2 -2
- data/lib/peatio/bitgo/version.rb +1 -1
- data/lib/peatio/bitgo/wallet.rb +63 -24
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: af28c5fe41488709946c6b6605b89cc57685edc7dcdf27031eb452b81dbf3bb1
|
|
4
|
+
data.tar.gz: 566d20452432523045c9e16eedf0b02db1e724ac52dcbe8cace1348bc067c38b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f2fafca0f648009a3fa035e311a90e180cee285e2b88fd7c71c8ac0916b105369bcea5f43d61fb7ec4510550828cc9f5d1c9534c70ced3549723b8e049abc95f
|
|
7
|
+
data.tar.gz: bb06a8d50dae6bb682669d416fd8a5469654e531dd8f91e5f841a3a669ca67c399056bb846676ec62279ab9870d64758c585b5d22b30cd6a8399749b2ea8d111
|
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
peatio-bitgo (2.6.
|
|
4
|
+
peatio-bitgo (2.6.5)
|
|
5
5
|
activesupport (~> 5.2.3)
|
|
6
6
|
better-faraday (~> 1.0.5)
|
|
7
7
|
faraday (~> 0.17)
|
|
@@ -12,35 +12,35 @@ PATH
|
|
|
12
12
|
GEM
|
|
13
13
|
remote: https://rubygems.org/
|
|
14
14
|
specs:
|
|
15
|
-
activemodel (5.2.4.
|
|
16
|
-
activesupport (= 5.2.4.
|
|
17
|
-
activesupport (5.2.4.
|
|
15
|
+
activemodel (5.2.4.5)
|
|
16
|
+
activesupport (= 5.2.4.5)
|
|
17
|
+
activesupport (5.2.4.5)
|
|
18
18
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
19
19
|
i18n (>= 0.7, < 2)
|
|
20
20
|
minitest (~> 5.1)
|
|
21
21
|
tzinfo (~> 1.1)
|
|
22
22
|
addressable (2.7.0)
|
|
23
23
|
public_suffix (>= 2.0.2, < 5.0)
|
|
24
|
-
amq-protocol (2.3.
|
|
24
|
+
amq-protocol (2.3.2)
|
|
25
25
|
amqp (1.8.0)
|
|
26
26
|
amq-protocol (>= 2.2.0)
|
|
27
27
|
eventmachine
|
|
28
28
|
better-faraday (1.0.8)
|
|
29
29
|
activesupport (>= 4.0, < 6.0)
|
|
30
30
|
faraday (~> 0.12)
|
|
31
|
-
bunny (2.
|
|
31
|
+
bunny (2.17.0)
|
|
32
32
|
amq-protocol (~> 2.3, >= 2.3.1)
|
|
33
|
-
byebug (11.1.
|
|
34
|
-
clamp (1.3.
|
|
35
|
-
coderay (1.1.
|
|
36
|
-
concurrent-ruby (1.1.
|
|
37
|
-
connection_pool (2.2.
|
|
33
|
+
byebug (11.1.3)
|
|
34
|
+
clamp (1.3.2)
|
|
35
|
+
coderay (1.1.3)
|
|
36
|
+
concurrent-ruby (1.1.8)
|
|
37
|
+
connection_pool (2.2.3)
|
|
38
38
|
cookiejar (0.3.3)
|
|
39
39
|
crack (0.4.3)
|
|
40
40
|
safe_yaml (~> 1.0.0)
|
|
41
41
|
daemons (1.3.1)
|
|
42
|
-
diff-lcs (1.
|
|
43
|
-
em-http-request (1.1.
|
|
42
|
+
diff-lcs (1.4.4)
|
|
43
|
+
em-http-request (1.1.7)
|
|
44
44
|
addressable (>= 2.3.4)
|
|
45
45
|
cookiejar (!= 0.3.1)
|
|
46
46
|
em-socksify (>= 0.3)
|
|
@@ -50,40 +50,40 @@ GEM
|
|
|
50
50
|
eventmachine (>= 1.0.0.beta.4)
|
|
51
51
|
em-synchrony (1.0.6)
|
|
52
52
|
eventmachine (>= 1.0.0.beta.1)
|
|
53
|
-
em-websocket (0.5.
|
|
53
|
+
em-websocket (0.5.2)
|
|
54
54
|
eventmachine (>= 0.12.9)
|
|
55
55
|
http_parser.rb (~> 0.6.0)
|
|
56
56
|
eventmachine (1.2.7)
|
|
57
|
-
faraday (0.17.
|
|
57
|
+
faraday (0.17.4)
|
|
58
58
|
multipart-post (>= 1.2, < 3)
|
|
59
59
|
faraday_middleware (0.13.1)
|
|
60
60
|
faraday (>= 0.7.4, < 1.0)
|
|
61
|
-
faye (1.
|
|
61
|
+
faye (1.4.0)
|
|
62
62
|
cookiejar (>= 0.3.0)
|
|
63
|
-
em-http-request (>=
|
|
63
|
+
em-http-request (>= 1.1.6)
|
|
64
64
|
eventmachine (>= 0.12.0)
|
|
65
|
-
faye-websocket (>= 0.
|
|
65
|
+
faye-websocket (>= 0.11.0)
|
|
66
66
|
multi_json (>= 1.0.0)
|
|
67
67
|
rack (>= 1.0.0)
|
|
68
68
|
websocket-driver (>= 0.5.1)
|
|
69
|
-
faye-websocket (0.
|
|
69
|
+
faye-websocket (0.11.0)
|
|
70
70
|
eventmachine (>= 0.12.0)
|
|
71
71
|
websocket-driver (>= 0.5.1)
|
|
72
72
|
hashdiff (1.0.1)
|
|
73
73
|
http_parser.rb (0.6.0)
|
|
74
|
-
i18n (1.8.
|
|
74
|
+
i18n (1.8.9)
|
|
75
75
|
concurrent-ruby (~> 1.0)
|
|
76
|
-
jwt (2.2.
|
|
76
|
+
jwt (2.2.2)
|
|
77
77
|
memoist (0.16.2)
|
|
78
78
|
method_source (1.0.0)
|
|
79
|
-
minitest (5.14.
|
|
79
|
+
minitest (5.14.4)
|
|
80
80
|
mocha (1.11.2)
|
|
81
|
-
multi_json (1.
|
|
81
|
+
multi_json (1.15.0)
|
|
82
82
|
multipart-post (2.1.1)
|
|
83
83
|
mysql2 (0.5.3)
|
|
84
84
|
net-http-persistent (3.0.1)
|
|
85
85
|
connection_pool (~> 2.2)
|
|
86
|
-
peatio (2.
|
|
86
|
+
peatio (2.6.3)
|
|
87
87
|
activemodel (> 5.2, <= 6.0.0)
|
|
88
88
|
amqp
|
|
89
89
|
bunny
|
|
@@ -97,44 +97,44 @@ GEM
|
|
|
97
97
|
mysql2
|
|
98
98
|
prometheus-client
|
|
99
99
|
thin
|
|
100
|
-
prometheus-client (2.
|
|
101
|
-
pry (0.13.
|
|
100
|
+
prometheus-client (2.1.0)
|
|
101
|
+
pry (0.13.1)
|
|
102
102
|
coderay (~> 1.1)
|
|
103
103
|
method_source (~> 1.0)
|
|
104
104
|
pry-byebug (3.9.0)
|
|
105
105
|
byebug (~> 11.0)
|
|
106
106
|
pry (~> 0.13.0)
|
|
107
|
-
public_suffix (4.0.
|
|
108
|
-
rack (2.2.
|
|
107
|
+
public_suffix (4.0.5)
|
|
108
|
+
rack (2.2.3)
|
|
109
109
|
rake (13.0.1)
|
|
110
110
|
rspec (3.9.0)
|
|
111
111
|
rspec-core (~> 3.9.0)
|
|
112
112
|
rspec-expectations (~> 3.9.0)
|
|
113
113
|
rspec-mocks (~> 3.9.0)
|
|
114
|
-
rspec-core (3.9.
|
|
115
|
-
rspec-support (~> 3.9.
|
|
116
|
-
rspec-expectations (3.9.
|
|
114
|
+
rspec-core (3.9.2)
|
|
115
|
+
rspec-support (~> 3.9.3)
|
|
116
|
+
rspec-expectations (3.9.2)
|
|
117
117
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
118
118
|
rspec-support (~> 3.9.0)
|
|
119
119
|
rspec-mocks (3.9.1)
|
|
120
120
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
121
121
|
rspec-support (~> 3.9.0)
|
|
122
|
-
rspec-support (3.9.
|
|
122
|
+
rspec-support (3.9.3)
|
|
123
123
|
safe_yaml (1.0.5)
|
|
124
|
-
thin (1.
|
|
124
|
+
thin (1.8.0)
|
|
125
125
|
daemons (~> 1.0, >= 1.0.9)
|
|
126
126
|
eventmachine (~> 1.0, >= 1.0.4)
|
|
127
127
|
rack (>= 1, < 3)
|
|
128
128
|
thread_safe (0.3.6)
|
|
129
|
-
tzinfo (1.2.
|
|
129
|
+
tzinfo (1.2.9)
|
|
130
130
|
thread_safe (~> 0.1)
|
|
131
131
|
webmock (3.8.3)
|
|
132
132
|
addressable (>= 2.3.6)
|
|
133
133
|
crack (>= 0.3.2)
|
|
134
134
|
hashdiff (>= 0.4.0, < 2.0.0)
|
|
135
|
-
websocket-driver (0.7.
|
|
135
|
+
websocket-driver (0.7.3)
|
|
136
136
|
websocket-extensions (>= 0.1.0)
|
|
137
|
-
websocket-extensions (0.1.
|
|
137
|
+
websocket-extensions (0.1.5)
|
|
138
138
|
|
|
139
139
|
PLATFORMS
|
|
140
140
|
ruby
|
data/lib/peatio/bitgo/client.rb
CHANGED
data/lib/peatio/bitgo/hooks.rb
CHANGED
|
@@ -9,7 +9,7 @@ module Peatio
|
|
|
9
9
|
unless Gem::Requirement.new(BLOCKCHAIN_VERSION_REQUIREMENT)
|
|
10
10
|
.satisfied_by?(Gem::Version.new(Peatio::Blockchain::VERSION))
|
|
11
11
|
[
|
|
12
|
-
"Bitgo blockchain version
|
|
12
|
+
"Bitgo blockchain version requirement was not satisfied by Peatio::Blockchain.",
|
|
13
13
|
"Bitgo blockchain requires #{BLOCKCHAIN_VERSION_REQUIREMENT}.",
|
|
14
14
|
"Peatio::Blockchain version is #{Peatio::Blockchain::VERSION}"
|
|
15
15
|
].join('\n').tap { |s| Kernel.abort s }
|
|
@@ -18,7 +18,7 @@ module Peatio
|
|
|
18
18
|
unless Gem::Requirement.new(WALLET_VERSION_REQUIREMENT)
|
|
19
19
|
.satisfied_by?(Gem::Version.new(Peatio::Wallet::VERSION))
|
|
20
20
|
[
|
|
21
|
-
"Bitgo wallet version
|
|
21
|
+
"Bitgo wallet version requirement was not satisfied by Peatio::Wallet.",
|
|
22
22
|
"Bitgo wallet requires #{WALLET_VERSION_REQUIREMENT}.",
|
|
23
23
|
"Peatio::Wallet version is #{Peatio::Wallet::VERSION}"
|
|
24
24
|
].join('\n').tap { |s| Kernel.abort s }
|
data/lib/peatio/bitgo/version.rb
CHANGED
data/lib/peatio/bitgo/wallet.rb
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
module Peatio
|
|
2
2
|
module Bitgo
|
|
3
3
|
class Wallet < Peatio::Wallet::Abstract
|
|
4
|
+
TIME_DIFFERENCE_IN_MINUTES = 10
|
|
5
|
+
XLM_MEMO_TYPES = { 'memoId': 'id', 'memoText': 'text', 'memoHash': 'hash', 'memoReturn': 'return' }
|
|
4
6
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
+
DEFAULT_FEATURES = { skip_deposit_collection: false }.freeze
|
|
8
|
+
|
|
9
|
+
def initialize(custom_features = {})
|
|
10
|
+
@features = DEFAULT_FEATURES.merge(custom_features).slice(*SUPPORTED_FEATURES)
|
|
11
|
+
@settings = {}
|
|
7
12
|
end
|
|
8
13
|
|
|
9
14
|
def configure(settings = {})
|
|
@@ -24,10 +29,14 @@ module Peatio
|
|
|
24
29
|
def create_address!(options = {})
|
|
25
30
|
currency = erc20_currency_id
|
|
26
31
|
options.deep_symbolize_keys!
|
|
27
|
-
|
|
32
|
+
|
|
33
|
+
if options.dig(:pa_details, :address_id).present? &&
|
|
34
|
+
options.dig(:pa_details, :updated_at).present? &&
|
|
35
|
+
time_difference_in_minutes(options.dig(:pa_details, :updated_at)) >= TIME_DIFFERENCE_IN_MINUTES
|
|
36
|
+
|
|
28
37
|
response = client.rest_api(:get, "#{currency}/wallet/#{wallet_id}/address/#{options.dig(:pa_details, :address_id)}")
|
|
29
38
|
{ address: response['address'], secret: bitgo_wallet_passphrase }
|
|
30
|
-
|
|
39
|
+
elsif options.dig(:pa_details, :address_id).blank?
|
|
31
40
|
response = client.rest_api(:post, "#{currency}/wallet/#{wallet_id}/address")
|
|
32
41
|
{ address: response['address'], secret: bitgo_wallet_passphrase, details: { address_id: response['id'] }}
|
|
33
42
|
end
|
|
@@ -52,7 +61,7 @@ module Peatio
|
|
|
52
61
|
end
|
|
53
62
|
|
|
54
63
|
txid = client.rest_api(:post, "#{currency_id}/wallet/#{wallet_id}/sendcoins", {
|
|
55
|
-
address: transaction.to_address.to_s,
|
|
64
|
+
address: normalize_address(transaction.to_address.to_s),
|
|
56
65
|
amount: amount.to_s,
|
|
57
66
|
walletPassphrase: bitgo_wallet_passphrase,
|
|
58
67
|
memo: xlm_memo(transaction.to_address.to_s)
|
|
@@ -111,14 +120,15 @@ module Peatio
|
|
|
111
120
|
end
|
|
112
121
|
|
|
113
122
|
def trigger_webhook_event(event)
|
|
114
|
-
|
|
115
|
-
return unless
|
|
123
|
+
currency = @wallet.fetch(:testnet).present? ? 't' + @currency.fetch(:id) : @currency.fetch(:id)
|
|
124
|
+
return unless currency == event['coin'] && @wallet.fetch(:wallet_id) == event['wallet']
|
|
116
125
|
|
|
117
126
|
if event['type'] == 'transfer'
|
|
118
127
|
transactions = fetch_transfer!(event['transfer'])
|
|
119
128
|
return { transfers: transactions }
|
|
120
|
-
elsif event['address_confirmation'
|
|
121
|
-
|
|
129
|
+
elsif event['type'] == 'address_confirmation'
|
|
130
|
+
address_id = fetch_address_id(event['address'])
|
|
131
|
+
return { address_id: address_id, currency_id: currency_id }
|
|
122
132
|
end
|
|
123
133
|
end
|
|
124
134
|
|
|
@@ -127,8 +137,15 @@ module Peatio
|
|
|
127
137
|
address_confirmation_webhook(url)
|
|
128
138
|
end
|
|
129
139
|
|
|
140
|
+
def fetch_address_id(address)
|
|
141
|
+
currency = erc20_currency_id
|
|
142
|
+
client.rest_api(:get, "#{currency}/wallet/#{wallet_id}/address/#{address}")
|
|
143
|
+
.fetch('id')
|
|
144
|
+
rescue Bitgo::Client::Error => e
|
|
145
|
+
raise Peatio::Wallet::ClientError, e
|
|
146
|
+
end
|
|
147
|
+
|
|
130
148
|
def fetch_transfer!(id)
|
|
131
|
-
# TODO: Add Rspecs for this one
|
|
132
149
|
response = client.rest_api(:get, "#{currency_id}/wallet/#{wallet_id}/transfer/#{id}")
|
|
133
150
|
parse_entries(response['entries']).map do |entry|
|
|
134
151
|
to_address = if response.dig('coinSpecific', 'memo').present?
|
|
@@ -140,14 +157,18 @@ module Peatio
|
|
|
140
157
|
end
|
|
141
158
|
state = define_transaction_state(response['state'])
|
|
142
159
|
|
|
160
|
+
if response['outputs'].present?
|
|
161
|
+
output = response['outputs'].find { |out| out['address'] == to_address }
|
|
162
|
+
txout = output['index'] if output.present?
|
|
163
|
+
end
|
|
164
|
+
|
|
143
165
|
transaction = Peatio::Transaction.new(
|
|
144
166
|
currency_id: @currency.fetch(:id),
|
|
145
167
|
amount: convert_from_base_unit(entry['valueString']),
|
|
146
168
|
hash: normalize_txid(response['txid']),
|
|
147
169
|
to_address: to_address,
|
|
148
170
|
block_number: response['height'],
|
|
149
|
-
|
|
150
|
-
txout: 0,
|
|
171
|
+
txout: txout.to_i,
|
|
151
172
|
status: state
|
|
152
173
|
)
|
|
153
174
|
|
|
@@ -169,7 +190,7 @@ module Peatio
|
|
|
169
190
|
|
|
170
191
|
def address_confirmation_webhook(url)
|
|
171
192
|
client.rest_api(:post, "#{currency_id}/wallet/#{wallet_id}/webhooks", {
|
|
172
|
-
type: '
|
|
193
|
+
type: 'address_confirmation',
|
|
173
194
|
allToken: true,
|
|
174
195
|
url: url,
|
|
175
196
|
label: "webhook for #{url}",
|
|
@@ -207,19 +228,25 @@ module Peatio
|
|
|
207
228
|
end
|
|
208
229
|
|
|
209
230
|
def xlm_memo(address)
|
|
210
|
-
if @currency.fetch(:id) == 'xlm'
|
|
211
|
-
{
|
|
212
|
-
type: "id",
|
|
213
|
-
value: "#{memo_id_from(address)}"
|
|
214
|
-
}
|
|
215
|
-
end
|
|
231
|
+
build_xlm_memo(address) if @currency.fetch(:id) == 'xlm'
|
|
216
232
|
end
|
|
217
233
|
|
|
218
|
-
def
|
|
219
|
-
|
|
220
|
-
|
|
234
|
+
def build_xlm_memo(address)
|
|
235
|
+
case address.split('?').last.split('=').first
|
|
236
|
+
when 'memoId'
|
|
237
|
+
memo_value_from(address, 'memoId')
|
|
238
|
+
when 'memoText'
|
|
239
|
+
memo_value_from(address, 'memoText')
|
|
240
|
+
when 'memoHash'
|
|
241
|
+
memo_value_from(address, 'memoHash')
|
|
242
|
+
when 'memoReturn'
|
|
243
|
+
memo_value_from(address, 'memoReturn')
|
|
244
|
+
end
|
|
245
|
+
end
|
|
221
246
|
|
|
222
|
-
|
|
247
|
+
def memo_value_from(address, type)
|
|
248
|
+
memo_value = address.partition(type + '=').last
|
|
249
|
+
return { type: XLM_MEMO_TYPES[type.to_sym], value: memo_value } if memo_value.present?
|
|
223
250
|
end
|
|
224
251
|
|
|
225
252
|
def currency_id
|
|
@@ -234,6 +261,14 @@ module Peatio
|
|
|
234
261
|
@wallet.fetch(:wallet_id)
|
|
235
262
|
end
|
|
236
263
|
|
|
264
|
+
def normalize_address(address)
|
|
265
|
+
if @currency.fetch(:id) == 'xlm'
|
|
266
|
+
address.split('?').first
|
|
267
|
+
else
|
|
268
|
+
address
|
|
269
|
+
end
|
|
270
|
+
end
|
|
271
|
+
|
|
237
272
|
def normalize_txid(txid)
|
|
238
273
|
txid.downcase
|
|
239
274
|
end
|
|
@@ -252,9 +287,13 @@ module Peatio
|
|
|
252
287
|
x.to_i
|
|
253
288
|
end
|
|
254
289
|
|
|
290
|
+
def time_difference_in_minutes(updated_at)
|
|
291
|
+
(Time.now - updated_at)/60
|
|
292
|
+
end
|
|
293
|
+
|
|
255
294
|
def define_transaction_state(state)
|
|
256
295
|
case state
|
|
257
|
-
when '
|
|
296
|
+
when 'unconfirmed'
|
|
258
297
|
'pending'
|
|
259
298
|
when 'confirmed'
|
|
260
299
|
'success'
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: peatio-bitgo
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.6.
|
|
4
|
+
version: 2.6.5
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Nadia Ch., Maksym N.
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2021-03-16 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activesupport
|