cns 0.1.1 → 0.1.2
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 +3 -3
- data/lib/cns.rb +11 -15
- data/lib/cns/apibc.rb +280 -0
- data/lib/cns/apice1.rb +227 -0
- data/lib/cns/apice2.rb +280 -0
- data/lib/cns/bigquery1.rb +23 -21
- data/lib/cns/bigquery2.rb +8 -6
- data/lib/cns/bigquery3.rb +33 -21
- data/lib/cns/bigquery4.rb +44 -42
- data/lib/cns/bitcoinde.rb +57 -46
- data/lib/cns/etherscan1.rb +40 -39
- data/lib/cns/etherscan2.rb +25 -23
- data/lib/cns/greymass1.rb +31 -30
- data/lib/cns/greymass2.rb +36 -35
- data/lib/cns/kraken.rb +51 -40
- data/lib/cns/paymium.rb +39 -32
- data/lib/cns/therock.rb +35 -27
- data/lib/cns/version.rb +1 -1
- metadata +5 -8
- data/lib/cns/apide.rb +0 -240
- data/lib/cns/apies.rb +0 -161
- data/lib/cns/apifr.rb +0 -139
- data/lib/cns/apigm.rb +0 -181
- data/lib/cns/apimt.rb +0 -138
- data/lib/cns/apius.rb +0 -167
data/lib/cns/paymium.rb
CHANGED
@@ -4,12 +4,12 @@ require('bigdecimal/util')
|
|
4
4
|
|
5
5
|
# @author Hernani Rodrigues Vaz
|
6
6
|
module Cns
|
7
|
-
# classe para processar
|
7
|
+
# classe para processar transacoes ledger do paymium
|
8
8
|
class Paymium
|
9
9
|
# @return [Apius] API paymium
|
10
10
|
attr_reader :api
|
11
11
|
# @return [Array<Hash>] todos os dados bigquery
|
12
|
-
attr_reader :
|
12
|
+
attr_reader :bqd
|
13
13
|
# @return [Thor::CoreExt::HashWithIndifferentAccess] opcoes trabalho
|
14
14
|
attr_reader :ops
|
15
15
|
|
@@ -20,36 +20,48 @@ module Cns
|
|
20
20
|
# @option pop [Boolean] :t (false) mostra transacoes todas ou somente novas?
|
21
21
|
# @return [Paymium] API paymium - obter saldos & transacoes ledger
|
22
22
|
def initialize(dad, pop)
|
23
|
-
|
24
|
-
@
|
25
|
-
@dbq = dad
|
23
|
+
@api = Apice.new
|
24
|
+
@bqd = dad
|
26
25
|
@ops = pop
|
27
26
|
end
|
28
27
|
|
28
|
+
# @return [Array<Hash>] lista ledger paymium novos
|
29
|
+
def ledger
|
30
|
+
@ledger ||= exd[:kl].map { |h| h[:account_operations].select { |o| kyl.include?(o[:uuid]) } }.flatten
|
31
|
+
end
|
32
|
+
|
33
|
+
# @return [String] texto saldos & transacoes & ajuste dias
|
34
|
+
def mostra_resumo
|
35
|
+
puts("\nPAYMIUM\ntipo paymium bigquery")
|
36
|
+
puts(formata_saldos(:btc))
|
37
|
+
puts(formata_saldos(:eur))
|
38
|
+
mostra_totais
|
39
|
+
|
40
|
+
mostra_ledger
|
41
|
+
return unless ledger.count.positive?
|
42
|
+
|
43
|
+
puts("\nstring ajuste dias da ledger\n-h=#{kyl.map { |e| "#{e}:0" }.join(' ')}")
|
44
|
+
end
|
45
|
+
|
29
46
|
# @return [Hash] dados exchange paymium - saldos & transacoes ledger
|
30
47
|
def exd
|
31
48
|
@exd ||= {
|
32
|
-
sl: api.
|
33
|
-
kl: api.
|
49
|
+
sl: api.account_fr,
|
50
|
+
kl: api.ledger_fr
|
34
51
|
}
|
35
52
|
end
|
36
53
|
|
37
|
-
# @return [Array<String>] lista txid
|
54
|
+
# @return [Array<String>] lista txid dos ledger novos
|
38
55
|
def kyl
|
39
56
|
@kyl ||= exd[:kl].map { |h| h[:account_operations].map { |o| o[:uuid] } }.flatten -
|
40
|
-
(ops[:t] ? [] :
|
57
|
+
(ops[:t] ? [] : bqd[:nl].map { |e| e[:txid] })
|
41
58
|
end
|
42
59
|
|
43
|
-
# @
|
44
|
-
def ledger
|
45
|
-
@ledger ||= exd[:kl].map { |h| h[:account_operations].select { |o| kyl.include?(o[:uuid]) } }.flatten
|
46
|
-
end
|
47
|
-
|
48
|
-
# @example (see Apifr#account)
|
60
|
+
# @example (see Apice#account_fr)
|
49
61
|
# @param [Symbol] bqm symbol paymium da moeda
|
50
|
-
# @return [String] texto formatado saldos
|
62
|
+
# @return [String] texto formatado saldos
|
51
63
|
def formata_saldos(bqm)
|
52
|
-
b =
|
64
|
+
b = bqd[:sl][bqm].to_d
|
53
65
|
t = exd[:sl]["balance_#{bqm}".to_sym].to_d
|
54
66
|
format(
|
55
67
|
'%<mo>-5.5s %<kr>21.9f %<bq>21.9f %<ok>3.3s',
|
@@ -60,9 +72,9 @@ module Cns
|
|
60
72
|
)
|
61
73
|
end
|
62
74
|
|
63
|
-
# @example (see
|
75
|
+
# @example (see Apice#ledger_fr)
|
64
76
|
# @param (see Bigquery#frl_val)
|
65
|
-
# @return [String] texto formatado
|
77
|
+
# @return [String] texto formatado ledger
|
66
78
|
def formata_ledger(hlx)
|
67
79
|
format(
|
68
80
|
'%<ky>-18.18s %<dt>19.19s %<ty>-17.17s %<mo>-4.4s %<vl>18.7f',
|
@@ -74,32 +86,27 @@ module Cns
|
|
74
86
|
)
|
75
87
|
end
|
76
88
|
|
77
|
-
# @
|
78
|
-
# @param [String] uid identificacor da ledger apifr
|
89
|
+
# @param [String] uid identificacor da ledger
|
79
90
|
# @param [Integer] max chars a mostrar
|
80
|
-
# @return [String] texto formatado identificacor da ledger
|
91
|
+
# @return [String] texto formatado identificacor da ledger
|
81
92
|
def formata_uuid(uid, max)
|
82
93
|
i = Integer(max / 2)
|
83
94
|
max < 7 ? 'erro' : "#{uid[0, i]}#{uid[-i..]}"
|
84
95
|
end
|
85
96
|
|
86
|
-
# @return [String] texto
|
87
|
-
def
|
88
|
-
|
89
|
-
|
90
|
-
puts(formata_saldos(:eur))
|
91
|
-
|
92
|
-
mostra_ledger
|
93
|
-
return unless ledger.count.positive?
|
97
|
+
# @return [String] texto totais numero de transacoes
|
98
|
+
def mostra_totais
|
99
|
+
c = exd[:kl].map { |h| h[:account_operations].count }.flatten.inject(:+)
|
100
|
+
d = bqd[:nl].count
|
94
101
|
|
95
|
-
puts("
|
102
|
+
puts("LEDGER #{format('%<c>20i %<d>21i %<o>3.3s', c: c, d: d, o: c == d ? 'OK' : 'NOK')}")
|
96
103
|
end
|
97
104
|
|
98
105
|
# @return [String] texto transacoes ledger
|
99
106
|
def mostra_ledger
|
100
107
|
return unless ops[:v] && ledger.count.positive?
|
101
108
|
|
102
|
-
puts("\nledger data hora tipo moeda
|
109
|
+
puts("\nledger data hora tipo moeda quantidade")
|
103
110
|
ledger.sort { |a, b| b[:created_at_int] <=> a[:created_at_int] }.each { |o| puts(formata_ledger(o)) }
|
104
111
|
end
|
105
112
|
end
|
data/lib/cns/therock.rb
CHANGED
@@ -4,12 +4,12 @@ require('bigdecimal/util')
|
|
4
4
|
|
5
5
|
# @author Hernani Rodrigues Vaz
|
6
6
|
module Cns
|
7
|
-
# classe para processar
|
7
|
+
# classe para processar transacoes ledger do therock
|
8
8
|
class TheRock
|
9
9
|
# @return [Apius] API therock
|
10
10
|
attr_reader :api
|
11
11
|
# @return [Array<Hash>] todos os dados bigquery
|
12
|
-
attr_reader :
|
12
|
+
attr_reader :bqd
|
13
13
|
# @return [Thor::CoreExt::HashWithIndifferentAccess] opcoes trabalho
|
14
14
|
attr_reader :ops
|
15
15
|
|
@@ -20,35 +20,46 @@ module Cns
|
|
20
20
|
# @option pop [Boolean] :t (false) mostra transacoes todas ou somente novas?
|
21
21
|
# @return [TheRock] API therock - obter saldos & transacoes ledger
|
22
22
|
def initialize(dad, pop)
|
23
|
-
|
24
|
-
@
|
25
|
-
@dbq = dad
|
23
|
+
@api = Apice.new
|
24
|
+
@bqd = dad
|
26
25
|
@ops = pop
|
27
26
|
end
|
28
27
|
|
28
|
+
# @return [Array<Hash>] lista ledger therock novos
|
29
|
+
def ledger
|
30
|
+
@ledger ||= exd[:kl].select { |o| kyl.include?(o[:id]) }
|
31
|
+
end
|
32
|
+
|
33
|
+
# @return [String] texto saldos & transacoes & ajuste dias
|
34
|
+
def mostra_resumo
|
35
|
+
puts("\nTHEROCK\ntipo therock bigquery")
|
36
|
+
exd[:sl].each { |h| puts(formata_saldos(h)) }
|
37
|
+
mostra_totais
|
38
|
+
|
39
|
+
mostra_ledger
|
40
|
+
return unless ledger.count.positive?
|
41
|
+
|
42
|
+
puts("\nstring ajuste dias da ledger\n-h=#{kyl.map { |e| "#{e}:0" }.join(' ')}")
|
43
|
+
end
|
44
|
+
|
29
45
|
# @return [Hash] dados exchange therock - saldos & transacoes ledger
|
30
46
|
def exd
|
31
47
|
@exd ||= {
|
32
|
-
sl: api.
|
33
|
-
kl: api.
|
48
|
+
sl: api.account_mt,
|
49
|
+
kl: api.ledger_mt
|
34
50
|
}
|
35
51
|
end
|
36
52
|
|
37
|
-
# @return [Array<String>] lista txid
|
53
|
+
# @return [Array<String>] lista txid dos ledger novos
|
38
54
|
def kyl
|
39
|
-
@kyl ||= exd[:kl].map { |h| h[:id] } - (ops[:t] ? [] :
|
40
|
-
end
|
41
|
-
|
42
|
-
# @return [Hash] transacoes ledger
|
43
|
-
def ledger
|
44
|
-
@ledger ||= exd[:kl].select { |o| kyl.include?(o[:id]) }
|
55
|
+
@kyl ||= exd[:kl].map { |h| h[:id] } - (ops[:t] ? [] : bqd[:nl].map { |e| e[:txid] })
|
45
56
|
end
|
46
57
|
|
47
|
-
# @example (see
|
58
|
+
# @example (see Apice#account_mt)
|
48
59
|
# @param [Hash] hsl saldo therock da moeda
|
49
|
-
# @return [String] texto formatado saldos
|
60
|
+
# @return [String] texto formatado saldos
|
50
61
|
def formata_saldos(hsl)
|
51
|
-
b =
|
62
|
+
b = bqd[:sl][hsl[:currency].downcase.to_sym].to_d
|
52
63
|
k = hsl[:balance].to_d
|
53
64
|
format(
|
54
65
|
'%<mo>-5.5s %<kr>21.9f %<bq>21.9f %<ok>3.3s',
|
@@ -59,9 +70,9 @@ module Cns
|
|
59
70
|
)
|
60
71
|
end
|
61
72
|
|
62
|
-
# @example (see
|
73
|
+
# @example (see Apice#ledger_mt)
|
63
74
|
# @param (see Bigquery#mtl_val1)
|
64
|
-
# @return [String] texto formatado
|
75
|
+
# @return [String] texto formatado ledger
|
65
76
|
def formata_ledger(hlx)
|
66
77
|
format(
|
67
78
|
'%<ky>6i %<dt>19.19s %<ty>-27.27s %<mo>-4.4s %<vl>20.7f',
|
@@ -73,15 +84,12 @@ module Cns
|
|
73
84
|
)
|
74
85
|
end
|
75
86
|
|
76
|
-
# @return [String] texto
|
77
|
-
def
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
mostra_ledger
|
82
|
-
return unless ledger.count.positive?
|
87
|
+
# @return [String] texto totais numero de transacoes
|
88
|
+
def mostra_totais
|
89
|
+
c = exd[:kl].count
|
90
|
+
d = bqd[:nl].count
|
83
91
|
|
84
|
-
puts("
|
92
|
+
puts("LEDGER #{format('%<c>20i %<d>21i %<o>3.3s', c: c, d: d, o: c == d ? 'OK' : 'NOK')}")
|
85
93
|
end
|
86
94
|
|
87
95
|
# @return [String] texto transacoes ledger
|
data/lib/cns/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cns
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hernâni Rodrigues Vaz
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-09-
|
11
|
+
date: 2020-09-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -131,12 +131,9 @@ files:
|
|
131
131
|
- cns.gemspec
|
132
132
|
- exe/cns
|
133
133
|
- lib/cns.rb
|
134
|
-
- lib/cns/
|
135
|
-
- lib/cns/
|
136
|
-
- lib/cns/
|
137
|
-
- lib/cns/apigm.rb
|
138
|
-
- lib/cns/apimt.rb
|
139
|
-
- lib/cns/apius.rb
|
134
|
+
- lib/cns/apibc.rb
|
135
|
+
- lib/cns/apice1.rb
|
136
|
+
- lib/cns/apice2.rb
|
140
137
|
- lib/cns/bigquery1.rb
|
141
138
|
- lib/cns/bigquery2.rb
|
142
139
|
- lib/cns/bigquery3.rb
|
data/lib/cns/apide.rb
DELETED
@@ -1,240 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require('openssl')
|
4
|
-
require('base64')
|
5
|
-
require('curb')
|
6
|
-
require('json')
|
7
|
-
|
8
|
-
# @author Hernani Rodrigues Vaz
|
9
|
-
module Cns
|
10
|
-
# classe para processar dados no bitcoinde
|
11
|
-
class Apide
|
12
|
-
# @return [String] API key
|
13
|
-
attr_reader :aky
|
14
|
-
# @return [String] API secret
|
15
|
-
attr_reader :asc
|
16
|
-
# @return [String] API url base
|
17
|
-
attr_reader :urb
|
18
|
-
|
19
|
-
# @param [String] pky API key
|
20
|
-
# @param [String] psc API secret
|
21
|
-
# @param [Hash] ops parametrizacao base da API
|
22
|
-
# @return [Apide] API bitcoinde base
|
23
|
-
def initialize(
|
24
|
-
pky: ENV['BITCOINDE_API_KEY'],
|
25
|
-
psc: ENV['BITCOINDE_API_SECRET'],
|
26
|
-
ops: { www: 'https://api.bitcoin.de', ver: 4 }
|
27
|
-
)
|
28
|
-
@aky = pky
|
29
|
-
@asc = psc
|
30
|
-
@urb = "#{ops[:www]}/v#{ops[:ver]}"
|
31
|
-
end
|
32
|
-
|
33
|
-
# @example
|
34
|
-
# {
|
35
|
-
# data: {
|
36
|
-
# balances: {
|
37
|
-
# btc: { total_amount: '0.00000000000000000000', available_amount: '0', reserved_amount: '0' },
|
38
|
-
# bch: { total_amount: '0.00000000000000000000', available_amount: '0', reserved_amount: '0' },
|
39
|
-
# btg: { total_amount: '0.00000000000000000000', available_amount: '0', reserved_amount: '0' },
|
40
|
-
# eth: { total_amount: '0.00000000000000000000', available_amount: '0', reserved_amount: '0' },
|
41
|
-
# bsv: { total_amount: '0.00000000000000000000', available_amount: '0', reserved_amount: '0' },
|
42
|
-
# ltc: { total_amount: '0.00000000000000000000', available_amount: '0', reserved_amount: '0' }
|
43
|
-
# },
|
44
|
-
# encrypted_information: { uid: '0y...', bic_short: '0y...', bic_full: '0y...' }
|
45
|
-
# },
|
46
|
-
# errors: [],
|
47
|
-
# credits: 23
|
48
|
-
# }
|
49
|
-
# @return [Hash] saldos no bitcoinde
|
50
|
-
def account
|
51
|
-
api_get('account')[:data][:balances]
|
52
|
-
end
|
53
|
-
|
54
|
-
# @example
|
55
|
-
# {
|
56
|
-
# trades: [{
|
57
|
-
# trade_id: 'XUWWD3',
|
58
|
-
# trading_pair: 'btceur',
|
59
|
-
# is_external_wallet_trade: false,
|
60
|
-
# type: 'sell',
|
61
|
-
# amount_currency_to_trade: '0.1',
|
62
|
-
# price: 430,
|
63
|
-
# volume_currency_to_pay: 43,
|
64
|
-
# volume_currency_to_pay_after_fee: 42.79,
|
65
|
-
# amount_currency_to_trade_after_fee: 0.099,
|
66
|
-
# fee_currency_to_pay: 0.22,
|
67
|
-
# fee_currency_to_trade: '0.00100000',
|
68
|
-
# created_at: '2014-03-22T08:14:48+01:00',
|
69
|
-
# successfully_finished_at: '2014-03-25T14:03:22+01:00',
|
70
|
-
# state: 1,
|
71
|
-
# is_trade_marked_as_paid: true,
|
72
|
-
# trade_marked_as_paid_at: '2014-03-22T08:20:01+01:00',
|
73
|
-
# payment_method: 1,
|
74
|
-
# my_rating_for_trading_partner: 'positive',
|
75
|
-
# trading_partner_information: {
|
76
|
-
# username: 'emax2000',
|
77
|
-
# is_kyc_full: false,
|
78
|
-
# trust_level: 'bronze',
|
79
|
-
# amount_trades: 4,
|
80
|
-
# rating: 100,
|
81
|
-
# bank_name: 'CASSA DI RISPARMIO DI CIVITAVECCHIA SPA',
|
82
|
-
# bic: 'CRFIIT2CXXX',
|
83
|
-
# seat_of_bank: 'IT'
|
84
|
-
# }
|
85
|
-
# }, {}],
|
86
|
-
# page: { current: 1, last: 2 },
|
87
|
-
# errors: [],
|
88
|
-
# credits: 22
|
89
|
-
# }
|
90
|
-
# @param [Integer] pag pagina dos dados a obter
|
91
|
-
# @param [Array] ary lista acumuladora dos dados a obter
|
92
|
-
# @return [Array<Hash>] lista trades no bitcoinde
|
93
|
-
def trades(pag = 0, ary = [])
|
94
|
-
r = api_get('trades', state: 1, page: pag + 1)
|
95
|
-
ary += r[:trades]
|
96
|
-
r[:page][:current] < r[:page][:last] ? trades(pag + 1, ary) : ary
|
97
|
-
rescue StandardError
|
98
|
-
ary
|
99
|
-
end
|
100
|
-
|
101
|
-
# @example
|
102
|
-
# {
|
103
|
-
# deposits: [{}, {}],
|
104
|
-
# page: { current: 1, last: 1 },
|
105
|
-
# errors: [],
|
106
|
-
# credits: 23
|
107
|
-
# }
|
108
|
-
# @param (see trades)
|
109
|
-
# @return [Array<Hash>] lista depositos no bitcoinde
|
110
|
-
def deposits(pag = 0, ary = [])
|
111
|
-
r = api_get('btc/deposits', state: 2, page: pag + 1)
|
112
|
-
ary += r[:deposits].map { |h| deposit_hash(h) }
|
113
|
-
r[:page][:current] < r[:page][:last] ? deposits(pag + 1, ary) : ary
|
114
|
-
rescue StandardError
|
115
|
-
ary
|
116
|
-
end
|
117
|
-
|
118
|
-
# @example
|
119
|
-
# {
|
120
|
-
# withdrawals: [{}, {}],
|
121
|
-
# page: { current: 1, last: 2 },
|
122
|
-
# errors: [],
|
123
|
-
# credits: 23
|
124
|
-
# }
|
125
|
-
# @param (see trades)
|
126
|
-
# @return [Array<Hash>] lista withdrawals no bitcoinde
|
127
|
-
def withdrawals(pag = 0, ary = [])
|
128
|
-
r = api_get('btc/withdrawals', state: 1, page: pag + 1)
|
129
|
-
ary += r[:withdrawals].map { |h| withdrawal_hash(h) }
|
130
|
-
r[:page][:current] < r[:page][:last] ? withdrawals(pag + 1, ary) : ary
|
131
|
-
rescue StandardError
|
132
|
-
ary
|
133
|
-
end
|
134
|
-
|
135
|
-
# @example
|
136
|
-
# {
|
137
|
-
# withdrawal_id: '136605',
|
138
|
-
# address: '1K9YMDDrmMV25EoYNqi7KUEK57Kn3TCNUJ',
|
139
|
-
# amount: '0.120087',
|
140
|
-
# network_fee: '0',
|
141
|
-
# comment: '',
|
142
|
-
# created_at: '2014-02-05T13:01:09+01:00',
|
143
|
-
# txid: '6264fe528116fcb87c812a306ca8409eecfec8fa941546c86f98984b882c8042',
|
144
|
-
# transferred_at: '2014-02-05T13:05:17+01:00',
|
145
|
-
# state: 1
|
146
|
-
# }
|
147
|
-
# @param [Hash] hwi dados duma withdrawal
|
148
|
-
# @return [Hash] withdrawal unifirmizada
|
149
|
-
def withdrawal_hash(hwi)
|
150
|
-
{
|
151
|
-
id: hwi[:address],
|
152
|
-
tp: 'out',
|
153
|
-
qtxt: 'btc',
|
154
|
-
fee: hwi[:network_fee],
|
155
|
-
time: Time.parse(hwi[:transferred_at]),
|
156
|
-
qt: hwi[:amount],
|
157
|
-
lgid: Integer(hwi[:withdrawal_id])
|
158
|
-
}
|
159
|
-
end
|
160
|
-
|
161
|
-
# @example
|
162
|
-
# {
|
163
|
-
# deposit_id: '177245',
|
164
|
-
# txid: '84f9e85bc5709cd471e3d58a7d0f42d2c4a7bbd888cabf844e200efbf0a7fda2',
|
165
|
-
# address: '1KK6HhG3quojFS4CY1mPcbyrjQ8BMDQxmT',
|
166
|
-
# amount: '0.13283',
|
167
|
-
# confirmations: 6,
|
168
|
-
# state: 2,
|
169
|
-
# created_at: '2014-01-31T22:01:30+01:00'
|
170
|
-
# }
|
171
|
-
# @param [Hash] hde dados dum deposit
|
172
|
-
# @return [Hash] deposit uniformizado
|
173
|
-
def deposit_hash(hde)
|
174
|
-
{
|
175
|
-
id: hde[:address],
|
176
|
-
tp: 'deposit',
|
177
|
-
qtxt: 'btc',
|
178
|
-
fee: '0',
|
179
|
-
time: Time.parse(hde[:created_at]),
|
180
|
-
qt: hde[:amount],
|
181
|
-
lgid: Integer(hde[:deposit_id])
|
182
|
-
}
|
183
|
-
end
|
184
|
-
|
185
|
-
private
|
186
|
-
|
187
|
-
# HTTP GET request for public bitcoinde API queries.
|
188
|
-
def api_get(uri, **ops)
|
189
|
-
t = url("#{urb}/#{uri}", ops)
|
190
|
-
resposta(Curl.get(t) { |r| r.headers = hdrs('GET', t, nonce, {}) })
|
191
|
-
end
|
192
|
-
|
193
|
-
# HTTP POST request for private bitcoinde API queries involving user credentials.
|
194
|
-
def api_post(uri, **ops)
|
195
|
-
# pedidos POST HTTP nao levam parametros no URL - somente no header e ordenados
|
196
|
-
resposta(Curl.post("#{urb}/#{uri}") { |r| r.headers = hdrs('POST', "#{urb}/#{uri}", nonce, ops.sort) })
|
197
|
-
end
|
198
|
-
|
199
|
-
# @return [String] URL do pedido formatado com todos os parametros
|
200
|
-
def url(uri, ops)
|
201
|
-
ops.empty? ? uri : "#{uri}?#{URI.encode_www_form(ops)}"
|
202
|
-
end
|
203
|
-
|
204
|
-
# @return [Hash] headers necessarios para pedido HTTP
|
205
|
-
def hdrs(typ, qry, non, ops)
|
206
|
-
{
|
207
|
-
'X-API-KEY': aky,
|
208
|
-
'X-API-NONCE': non,
|
209
|
-
'X-API-SIGNATURE': auth(typ, qry, non, URI.encode_www_form(ops))
|
210
|
-
}
|
211
|
-
end
|
212
|
-
|
213
|
-
# @return [String] assinarura codificada dos pedidos HTTP
|
214
|
-
def auth(typ, qry, non, par)
|
215
|
-
raise(ArgumentError, 'API Key is not set') unless aky
|
216
|
-
raise(ArgumentError, 'API Secret is not set') unless asc
|
217
|
-
|
218
|
-
OpenSSL::HMAC.hexdigest('sha256', asc, [typ, qry, aky, non, Digest::MD5.hexdigest(par)].join('#'))
|
219
|
-
end
|
220
|
-
|
221
|
-
# @return [Integer] continually-increasing unsigned integer nonce from the current Unix Time
|
222
|
-
def nonce
|
223
|
-
Integer(Float(Time.now) * 1e6)
|
224
|
-
end
|
225
|
-
|
226
|
-
# @return [Hash] resposta do pedido HTTP
|
227
|
-
def resposta(http)
|
228
|
-
http.response_code == 200 ? JSON.parse(http.body, symbolize_names: true) : http.status
|
229
|
-
rescue JSON::ParserError,
|
230
|
-
EOFError,
|
231
|
-
Errno::ECONNRESET,
|
232
|
-
Errno::EINVAL,
|
233
|
-
Net::HTTPBadResponse,
|
234
|
-
Net::HTTPHeaderSyntaxError,
|
235
|
-
Net::ProtocolError,
|
236
|
-
Timeout::Error => e
|
237
|
-
"Erro da API bitcoinde #{e.inspect}"
|
238
|
-
end
|
239
|
-
end
|
240
|
-
end
|