cns 0.3.5 → 0.3.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '07580f6979525f8cc820f784769c92c439a5609cd167af622ff03325bd889f5a'
4
- data.tar.gz: f6038962e0dae1af567bccbcc50cc9eb82fa43f0520d431bad6020fec6d02028
3
+ metadata.gz: 50e17e193099669aed9ed6e7b5b555cd6a8ed33a664d4390ca96f3c0dd633da5
4
+ data.tar.gz: 47ef9c5fde7e329a39d3c2efbc37a004bafe215bfdaafdab2ea0502e3930f4ec
5
5
  SHA512:
6
- metadata.gz: ae31f87a851c5e930a4bb516dbee3c69ede3dccd9772cbb96d9ad63d6ac1ce4428a61839cb3275fc9f59db2f31777cfad7ced54bfc669d50a807ce02a2072ddd
7
- data.tar.gz: dcb4d565c017bb425895f4ba32ad8e8644f6cbbb61a187ea3622bfcc4ed709e7a6f5cc24b96de9a442cd817e6093b7f4cc4518d1c98b9858bd96acddeb62e9f4
6
+ metadata.gz: 6dae786aa9f694ee2bcd67ff33fe929bc2a45b71829c015e2ba210551a609c332123bd0c7d8761dabcb73eceaa817b8216123b89560380927243abe6d16d4361
7
+ data.tar.gz: 2a7a177ffb73054a36972c2616b99a69222ab838f2e9f1ddae48497abd2238becc7be13b636d124c28b43a7f5fbcbbd108e9a08c6fff546f5af71ee476068978
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cns (0.3.5)
4
+ cns (0.3.6)
5
5
  curb
6
6
  faraday
7
7
  google-cloud-bigquery
@@ -7,8 +7,109 @@ require('json')
7
7
 
8
8
  # @author Hernani Rodrigues Vaz
9
9
  module Cns
10
+ DC = %w[LTC NMC PPC DOGE XRP Linden USD CAD GBP ZEC BCH EURN NOKU FDZ GUSD SEED USDC].freeze
11
+
10
12
  # classe para acesso dados centralized exchanges
11
13
  class Apice
14
+ # @example account_de
15
+ # {
16
+ # data: {
17
+ # balances: {
18
+ # btc: { total_amount: '0.00000000000000000000', available_amount: '0', reserved_amount: '0' },
19
+ # bch: { total_amount: '0.00000000000000000000', available_amount: '0', reserved_amount: '0' },
20
+ # btg: { total_amount: '0.00000000000000000000', available_amount: '0', reserved_amount: '0' },
21
+ # eth: { total_amount: '0.00000000000000000000', available_amount: '0', reserved_amount: '0' },
22
+ # bsv: { total_amount: '0.00000000000000000000', available_amount: '0', reserved_amount: '0' },
23
+ # ltc: { total_amount: '0.00000000000000000000', available_amount: '0', reserved_amount: '0' }
24
+ # },
25
+ # encrypted_information: { uid: '0y...', bic_short: '0y...', bic_full: '0y...' }
26
+ # },
27
+ # errors: [],
28
+ # credits: 23
29
+ # }
30
+ # @param [String] uri Uniform Resource Identifier do pedido HTTP
31
+ # @return [Hash] saldos no bitcoinde
32
+ def account_de(uri = 'https://api.bitcoin.de/v4/account')
33
+ JSON.parse(
34
+ Curl.get(uri) { |obj| obj.headers = hde(uri) }.body,
35
+ symbolize_names: true
36
+ )[:data][:balances]
37
+ rescue StandardError
38
+ {}
39
+ end
40
+
41
+ # @example account_fr
42
+ # {
43
+ # name: '...',
44
+ # email: '...',
45
+ # locale: 'en',
46
+ # channel_id: '...',
47
+ # meta_state: 'approved',
48
+ # balance_eur: '0.0',
49
+ # locked_eur: '0.0',
50
+ # balance_btc: '0.0',
51
+ # locked_btc: '0.0',
52
+ # balance_lbtc: '0.0',
53
+ # locked_lbtc: '0.0'
54
+ # }
55
+ # @param (see account_de)
56
+ # @return [Hash] saldos no paymium
57
+ def account_fr(uri = 'https://paymium.com/api/v1/user')
58
+ JSON.parse(
59
+ Curl.get(uri) { |obj| obj.headers = hfr(uri) }.body,
60
+ symbolize_names: true
61
+ )
62
+ rescue StandardError
63
+ {}
64
+ end
65
+
66
+ # @example account_mt
67
+ # {
68
+ # balances: [
69
+ # { currency: 'BTC', balance: 0.0, trading_balance: 0.0 },
70
+ # { currency: 'ETH', balance: 0.0, trading_balance: 0.0 },
71
+ # { currency: 'EUR', balance: 0.0, trading_balance: 0.0 },
72
+ # { currency: 'DAI', balance: 0.0, trading_balance: 0.0 },
73
+ # ]
74
+ # }
75
+ # @param (see account_de)
76
+ # @return [Array<Hash>] lista saldos no therock
77
+ def account_mt(uri = 'https://api.therocktrading.com/v1/balances')
78
+ JSON.parse(
79
+ Curl.get(uri) { |obj| obj.headers = hmt(uri) }.body,
80
+ symbolize_names: true
81
+ )[:balances]
82
+ .delete_if { |del| DC.include?(del[:currency]) }
83
+ .sort { |oba, obb| oba[:currency] <=> obb[:currency] }
84
+ rescue StandardError
85
+ []
86
+ end
87
+
88
+ # @example account_us
89
+ # {
90
+ # error: [],
91
+ # result: {
92
+ # ZEUR: '0.0038',
93
+ # XXBT: '0.0000000000',
94
+ # XETH: '1.0000000000',
95
+ # XETC: '0.0000000000',
96
+ # EOS: '0.0000001700',
97
+ # BCH: '0.0000000000'
98
+ # }
99
+ # }
100
+ # @param [String] urb Uniform Resource Base do pedido HTTP
101
+ # @param uri (see account_de)
102
+ # @param non (see hde)
103
+ # @return [Hash] saldos no kraken
104
+ def account_us(urb = 'https://api.kraken.com/0/private', uri = 'Balance', non = nnc)
105
+ JSON.parse(
106
+ Curl.post("#{urb}/#{uri}", nonce: non) { |obj| obj.headers = hus(uri, nonce: non) }.body,
107
+ symbolize_names: true
108
+ )[:result]
109
+ rescue StandardError
110
+ {}
111
+ end
112
+
12
113
  # @example trades_de
13
114
  # {
14
115
  # trades: [{
@@ -319,5 +420,69 @@ module Cns
319
420
  rescue StandardError
320
421
  has
321
422
  end
423
+
424
+ private
425
+
426
+ # @return [Integer] continually-increasing unsigned integer nonce from the current Unix Time
427
+ def nnc
428
+ Integer(Float(Time.now) * 1e6)
429
+ end
430
+
431
+ # @param [String] qde query a incluir no pedido HTTP
432
+ # @param [Integer] non continually-increasing unsigned integer
433
+ # @return [Hash] headers necessarios para pedido HTTP da exchange bitcoinde
434
+ def hde(qde, non = nnc)
435
+ key = ENV['BITCOINDE_API_KEY']
436
+ {
437
+ 'X-API-KEY': key,
438
+ 'X-API-NONCE': non,
439
+ 'X-API-SIGNATURE': OpenSSL::HMAC.hexdigest(
440
+ 'sha256',
441
+ ENV['BITCOINDE_API_SECRET'],
442
+ ['GET', qde, key, non, Digest::MD5.hexdigest('')].join('#')
443
+ )
444
+ }
445
+ end
446
+
447
+ # @param [String] qfr query a incluir no pedido HTTP
448
+ # @param non (see hde)
449
+ # @return [Hash] headers necessarios para pedido HTTP da exchange paymium
450
+ def hfr(qfr, non = nnc)
451
+ {
452
+ content_type: 'application/json',
453
+ 'Api-Key': ENV['PAYMIUM_API_KEY'],
454
+ 'Api-Nonce': non,
455
+ 'Api-Signature': OpenSSL::HMAC.hexdigest('sha256', ENV['PAYMIUM_API_SECRET'], [non, qfr].join)
456
+ }
457
+ end
458
+
459
+ # @param [String] qmt query a incluir no pedido HTTP
460
+ # @param non (see hde)
461
+ # @return [Hash] headers necessarios para pedido HTTP da exchange therock
462
+ def hmt(qmt, non = nnc)
463
+ {
464
+ content_type: 'application/json',
465
+ 'X-TRT-KEY': ENV['THEROCK_API_KEY'],
466
+ 'X-TRT-NONCE': non,
467
+ 'X-TRT-SIGN': OpenSSL::HMAC.hexdigest('sha512', ENV['THEROCK_API_SECRET'], [non, qmt].join)
468
+ }
469
+ end
470
+
471
+ # @param [String] qus query a incluir no pedido HTTP
472
+ # @param [Hash] ops opcoes trabalho
473
+ # @option ops [Hash] :nonce continually-increasing unsigned integer
474
+ # @return [Hash] headers necessarios para pedido HTTP da exchange kraken
475
+ def hus(qus, ops)
476
+ {
477
+ 'api-key': ENV['KRAKEN_API_KEY'],
478
+ 'api-sign': Base64.strict_encode64(
479
+ OpenSSL::HMAC.digest(
480
+ 'sha512',
481
+ Base64.decode64(ENV['KRAKEN_API_SECRET']),
482
+ ['/0/private/', qus, Digest::SHA256.digest("#{ops[:nonce]}#{URI.encode_www_form(ops)}")].join
483
+ )
484
+ )
485
+ }
486
+ end
322
487
  end
323
488
  end
@@ -4,7 +4,7 @@ require('bigdecimal/util')
4
4
 
5
5
  # @author Hernani Rodrigues Vaz
6
6
  module Cns
7
- # (see Beaconchain)
7
+ # classe para processar historicos da beaconchain
8
8
  class Beaconchain
9
9
  # @return [Apibc] API blockchains
10
10
  attr_reader :api
@@ -98,5 +98,88 @@ module Cns
98
98
  eb: abc[:bx]
99
99
  }
100
100
  end
101
+
102
+ # @return [String] texto validadores & saldos historicos
103
+ def mostra_resumo
104
+ return unless dados.count.positive?
105
+
106
+ puts("\nindex address beaconchain blh bigquery blh")
107
+ dados.each { |obj| puts(formata_validador(obj)) }
108
+ mostra_saldos
109
+ end
110
+
111
+ # @param [Hash] hjn dados juntos bigquery & beaconchain
112
+ # @return [String] texto formatado dum validador
113
+ def formata_validador(hjn)
114
+ format('%<s1>-5.5s %<s2>-34.34s ', s1: hjn[:id], s2: formata_endereco(hjn[:ax], 34)) + formata_valores(hjn)
115
+ end
116
+
117
+ # @param (see formata_validador)
118
+ # @return [String] texto formatado valores dum validador
119
+ def formata_valores(hjn)
120
+ format(
121
+ '%<v1>11.6f %<n1>3i %<v2>12.6f %<n2>6i %<ok>-3s',
122
+ v1: hjn[:es],
123
+ n1: hjn[:eb].count,
124
+ v2: hjn[:bs],
125
+ n2: hjn[:bb].count,
126
+ ok: ok?(hjn) ? 'OK' : 'NOK'
127
+ )
128
+ end
129
+
130
+ # @param (see formata_validador)
131
+ # @return [Boolean] validador tem historicos novos(sim=NOK, nao=OK)?
132
+ def ok?(hjn)
133
+ hjn[:bs] == hjn[:es]
134
+ end
135
+
136
+ # @example pubkey inicio..fim
137
+ # 0x10f3a0cf0b534c..c033cf32e8a03586
138
+ # @param [String] add chave publica validador
139
+ # @param [Integer] max chars a mostrar
140
+ # @return [String] pubkey formatada
141
+ def formata_endereco(add, max)
142
+ return 'erro' if max < 7
143
+
144
+ max -= 2
145
+ ini = Integer(max / 2)
146
+ inf = max % 2
147
+ "#{add[0, ini - 3]}..#{add[-inf - ini - 3..]}"
148
+ end
149
+
150
+ # @example
151
+ # {
152
+ # balance: 32_489_497_108,
153
+ # effectivebalance: 32_000_000_000,
154
+ # epoch: 8296,
155
+ # validatorindex: 11_766,
156
+ # week: 5
157
+ # }
158
+ # @param [Hash] hbh historico beaconchain
159
+ # @return [String] texto formatado historico beaconchain
160
+ def formata_saldos(hbh)
161
+ idx = hbh[:validatorindex]
162
+ epc = hbh[:epoch]
163
+ format(
164
+ '%<vi>5i %<vl>17.6f %<ep>6i %<id>9i',
165
+ vi: idx,
166
+ vl: (hbh[:balance].to_d / (10**9)).round(10),
167
+ ep: epc,
168
+ id: itx(epc, idx)
169
+ )
170
+ end
171
+
172
+ # @return [String] texto historico saldos
173
+ def mostra_saldos
174
+ return unless ops[:v] && nov.count.positive?
175
+
176
+ puts("\nindex saldo epoch itx")
177
+ sorbx.each { |obj| puts(formata_saldos(obj)) }
178
+ end
179
+
180
+ # @return [Array<Hash>] lista ordenada historico saldos
181
+ def sorbx
182
+ nov.sort { |ant, prx| ant[:itx] <=> prx[:itx] }
183
+ end
101
184
  end
102
185
  end