cns 2.1.4 → 2.1.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: b0deb219876c5a8fd82a5338c9d7635b11356feffcdc908514be211fb0bbc909
4
- data.tar.gz: b188c18e7a9226bded29d42d0f9142280c94e9230fe7d41ff94d4776dc56222c
3
+ metadata.gz: 300bd8b7884a5a043bbf53ac8f0988c18ab4d000ae3b25e553d9ac7bd3bfa062
4
+ data.tar.gz: b9700d5c257cda68e02a5343f3cd1189284bf5cbf535a9fe94403ea58b96aa51
5
5
  SHA512:
6
- metadata.gz: 9833256521bb67118970871725a5ca3da4f5cc371a8aa3d531421238f66510a8040dd778de1a42506b6aeacda1deb581195f449cd883776951ba3b97b2d8bffc
7
- data.tar.gz: 163a57bfbdfe4ba4a6f864db5ba97266c4e1f5088e2b72543137c20bcc4810bf1799d5bbc03e76aa929c6b8984ad75a212f7756471b1c4c968ba923cb17d8a8c
6
+ metadata.gz: df2ffc60bc381a981b74e0b26f454d7d288a39d88e525876ab0dc86e8cb3d7b6296b304c32b0d39217c5a62f492d211540f77c6f4ffb502ac6d38480f8216b2c
7
+ data.tar.gz: 67ed5480a8877d5add19e7cb1adcfa0ea9c70e05a6324eb9df7daf97016a9e94ae7092ce11329132e727ceaccc8cea78707a315be430637caf6520349c166614
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cns (2.1.4)
4
+ cns (2.1.6)
5
5
  curb
6
6
  faraday
7
7
  faraday-retry
data/lib/cns/apibc.rb CHANGED
@@ -73,11 +73,14 @@ module Cns
73
73
 
74
74
  private
75
75
 
76
- # Calculate (and cache) the block number for N days ago
76
+ # cache block number for N days ago to avoid multiple API calls
77
+ # @param [Integer] days number of days in the past to get block number for
78
+ # @return [Integer] ethereum block number corresponding to N days ago
77
79
  def start_block(days)
78
80
  return 0 if days.nil?
79
81
  return @blks[days] if @blks.key?(days)
80
82
 
83
+ # unix timestamp para obter transacoes 24x60x60 = 86400 segundos
81
84
  res = block_req(Integer(Time.now - (days * 86_400)))
82
85
  if res[:status] == '1'
83
86
  blk = Integer(res[:result], 10)
@@ -90,7 +93,8 @@ module Cns
90
93
  0
91
94
  end
92
95
 
93
- # New dedicated method for Block API calls
96
+ # @param [Integer] timestamp unix timestamp
97
+ # @return [Hash] ethereum block number corresponding to the given timestamp
94
98
  def block_req(timestamp)
95
99
  prm = {chainid: 1, module: 'block', action: 'getblocknobytime', timestamp: timestamp, closest: 'after', apikey: @esky}
96
100
  pjsn(@escn.get('/v2/api', prm))
data/lib/cns/apice.rb CHANGED
@@ -36,25 +36,34 @@ module Cns
36
36
  end
37
37
 
38
38
  # Get trades from Bitcoin.de
39
+ # @param [Integer] tsp optional unix timestamp (start date) to fetch trades from
39
40
  # @return [Array<Hash>] trades bitcoinde
40
- def trades_de
41
- pag_de_req("#{API[:de]}/trades", {state: 1}, :trades)
41
+ def trades_de(tsp = nil)
42
+ prm = {state: 1}
43
+ prm[:date_start] = Time.at(tsp).utc.iso8601 if tsp
44
+ pag_de_req("#{API[:de]}/trades", prm, :trades)
42
45
  rescue Curl::Err::CurlError
43
46
  []
44
47
  end
45
48
 
46
49
  # Get deposits from Bitcoin.de, uniformly formatted
50
+ # @param [Integer] tsp optional unix timestamp (seconds) to fetch deposits from (start date on bitcoin.de API)
47
51
  # @return [Array<Hash>] depositos uniformizados bitcoinde
48
- def deposits_de
49
- pag_de_req("#{API[:de]}/btc/deposits", {state: 2}, :deposits) { |i| i.map { |h| deposit_unif(h) } }
52
+ def deposits_de(tsp = nil)
53
+ prm = {state: 2}
54
+ prm[:date_start] = Time.at(tsp).utc.iso8601 if tsp
55
+ pag_de_req("#{API[:de]}/btc/deposits", prm, :deposits) { |i| i.map { |h| deposit_unif(h) } }
50
56
  rescue Curl::Err::CurlError
51
57
  []
52
58
  end
53
59
 
54
60
  # Get withdrawals from Bitcoin.de, uniformly formatted
61
+ # @param [Integer] tsp optional unix timestamp (seconds) to fetch withdrawals from (start date on bitcoin.de API)
55
62
  # @return [Array<Hash>] withdrawals uniformizadas bitcoinde
56
- def withdrawals_de
57
- pag_de_req("#{API[:de]}/btc/withdrawals", {state: 1}, :withdrawals) { |i| i.map { |h| withdrawal_unif(h) } }
63
+ def withdrawals_de(tsp = nil)
64
+ prm = {state: 1}
65
+ prm[:date_start] = Time.at(tsp).utc.iso8601 if tsp
66
+ pag_de_req("#{API[:de]}/btc/withdrawals", prm, :withdrawals) { |i| i.map { |h| withdrawal_unif(h) } }
58
67
  rescue Curl::Err::CurlError
59
68
  []
60
69
  end
@@ -71,19 +80,25 @@ module Cns
71
80
  end
72
81
 
73
82
  # Get trades from Kraken
74
- # @param [Integer] days optional number of days to fetch trades from (last N days)
83
+ # @param [Integer] tsp optional timestamp to fetch trades from (last N seconds)
75
84
  # @return [Hash] trades kraken
76
- def trades_us(days = nil)
77
- pag_us_req('TradesHistory', :trades, days ? {start: days} : {})
85
+ def trades_us(tsp = nil)
86
+ # last TradesHistory was 2023-06-03 (after that was discontinued by kraken)
87
+ if tsp && tsp > Integer(Time.new(2023, 6, 3))
88
+ # return empty array to avoid unnecessary API calls
89
+ []
90
+ else
91
+ pag_us_req('TradesHistory', :trades, tsp ? {start: tsp} : {})
92
+ end
78
93
  rescue Curl::Err::CurlError
79
94
  []
80
95
  end
81
96
 
82
97
  # Get ledger from Kraken
83
- # @param [Integer] days optional number of days to fetch ledger from (last N days)
98
+ # @param [Integer] tsp optional timestamp to fetch ledger from (last N seconds)
84
99
  # @return [Hash] ledger kraken
85
- def ledger_us(days = nil)
86
- pag_us_req('Ledgers', :ledger, days ? {start: days} : {})
100
+ def ledger_us(tsp = nil)
101
+ pag_us_req('Ledgers', :ledger, tsp ? {start: tsp} : {})
87
102
  rescue Curl::Err::CurlError
88
103
  []
89
104
  end
data/lib/cns/bitcoinde.rb CHANGED
@@ -8,6 +8,7 @@ module Cns
8
8
  # classe para processar transacoes trades/ledger do bitcoinde
9
9
  class Bitcoinde
10
10
  extend Memoist
11
+
11
12
  # @return [Array<Hash>] todos os dados bigquery
12
13
  # @return [Thor::CoreExt::HashWithIndifferentAccess] opcoes trabalho
13
14
  attr_reader :bqd, :ops
@@ -158,7 +159,9 @@ module Cns
158
159
 
159
160
  # @return [Hash] dados exchange bitcoinde - saldos & trades & deposits & withdrawals
160
161
  memoize def exd
161
- {sl: pdea(api.account_de), tt: pdet(api.trades_de), tl: pdel(api.deposits_de + api.withdrawals_de)}
162
+ # unix timestamp para obter transacoes 24x60x60 = 86400 segundos
163
+ tsp = ops&.[](:d)&.positive? ? Integer(Time.now - (ops[:d] * 86_400)) : nil
164
+ {sl: pdea(api.account_de), tt: pdet(api.trades_de(tsp)), tl: pdel(api.deposits_de(tsp) + api.withdrawals_de(tsp))}
162
165
  end
163
166
 
164
167
  # @return [Array<String>] indices trades bigquery
data/lib/cns/etherscan.rb CHANGED
@@ -214,12 +214,6 @@ module Cns
214
214
  ops[:t] || false
215
215
  end
216
216
 
217
- # Numero dias para buscar transacoes
218
- # @return [Integer] days in the past to get transacoes
219
- def dias
220
- ops&.[](:d)&.positive? ? ops[:d] : nil
221
- end
222
-
223
217
  # Process timestamp
224
218
  # @param [Hash] htx transacao
225
219
  # @return [Hash] transaccao filtrada
@@ -259,13 +253,14 @@ module Cns
259
253
  # @return [Hash] dados etherscan - address, saldo & transacoes
260
254
  def esd(aes)
261
255
  acc = aes[:account].downcase
262
- dys = dias
256
+ dys = ops&.[](:d)&.positive? ? ops[:d] : nil
263
257
  {
264
258
  ax: acc,
265
259
  sl: aes[:balance].to_d / (10**18),
266
260
  tx: ftik(acc, api.norml_es(acc, days: dys)),
267
261
  ix: ftik(acc, api.inter_es(acc, days: dys)),
268
- px: fppp(acc, api.block_es(acc)), # block_es (mining) does not support time filtering
262
+ # block_es (mining) does not support timestamp filtering
263
+ px: fppp(acc, api.block_es(acc)),
269
264
  wx: fwww(acc, api.withw_es(acc, days: dys)),
270
265
  kx: ftik(acc, api.token_es(acc, days: dys))
271
266
  }
data/lib/cns/kraken.rb CHANGED
@@ -48,7 +48,7 @@ module Cns
48
48
  vkt, vnt = exd[:kt].count, bqd[:nt].count
49
49
  vkl, vnl = exd[:kl].count, bqd[:nl].count
50
50
 
51
- puts("TRADES #{format('%<a>20i %<b>21i %<o>3.3s', a: vkt, b: vnt, o: vkt == vnt ? 'OK' : 'NOK')}")
51
+ puts("TRADES #{format('%<a>20i %<b>21i %<o>3.3s', a: vkt, b: vnt, o: vkt == vnt ? 'OK' : 'NOK')}") if vkt.positive?
52
52
  puts("LEDGER #{format('%<c>20i %<d>21i %<o>3.3s', c: vkl, d: vnl, o: vkl == vnl ? 'OK' : 'NOK')}")
53
53
  end
54
54
 
@@ -155,9 +155,9 @@ module Cns
155
155
 
156
156
  # @return [Hash] dados exchange kraken - saldos & transacoes trades e ledger
157
157
  memoize def exd
158
- # Numero dias para buscar transacoes
159
- dys = ops&.[](:d)&.positive? ? Integer(Time.now - (ops[:d] * 86_400)) : nil
160
- {sl: pusa(api.account_us), kt: pust(api.trades_us(dys)), kl: pusl(api.ledger_us(dys))}
158
+ # unix timestamp para obter transacoes 24x60x60 = 86400 segundos
159
+ tsp = ops&.[](:d)&.positive? ? Integer(Time.now - (ops[:d] * 86_400)) : nil
160
+ {sl: pusa(api.account_us), kt: pust(api.trades_us(tsp)), kl: pusl(api.ledger_us(tsp))}
161
161
  end
162
162
 
163
163
  # @return [Array<String>] indices trades bigquery
data/lib/cns/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Cns
4
- VERSION = '2.1.4'
4
+ VERSION = '2.1.6'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cns
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.4
4
+ version: 2.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hernâni Rodrigues Vaz