Class: Eost::Carteiras

Inherits:
Object
  • Object
show all
Defined in:
lib/eost/formatar.rb,
lib/eost/carteiras.rb

Overview

classe para processar carteiras & transacoes

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(dad, pop) ⇒ Carteiras

Returns API eosscan - processar transacoes.

Parameters:

  • dad (Hash)

    todos os dados bigquery

  • pop (Thor::CoreExt::HashWithIndifferentAccess)

    opcoes trabalho

Options Hash (pop):

  • :h (Hash) — default: {}

    configuracao dias ajuste reposicionamento temporal

  • :v (Boolean) — default: false

    mostra dados transacoes?

  • :t (Boolean) — default: false

    mostra transacoes todas ou somente novas?



24
25
26
27
28
29
# File 'lib/eost/carteiras.rb', line 24

def initialize(dad, pop)
  @api = Eosscan.new
  @dbq = dad
  @ops = pop
  @abn = (ops[:t] ? [] : dbq[:nt].map { |t| t[:blocknumber] })
end

Instance Attribute Details

#abnArray<Integer> (readonly)

Returns lista blocknumbers transacoes no bigquery - condicionados por opcoes iniciais.

Returns:

  • (Array<Integer>)

    lista blocknumbers transacoes no bigquery - condicionados por opcoes iniciais



16
17
18
# File 'lib/eost/carteiras.rb', line 16

def abn
  @abn
end

#apiEosscan (readonly)

Returns API eosscan.

Returns:



10
11
12
# File 'lib/eost/carteiras.rb', line 10

def api
  @api
end

#dbqArray<Hash> (readonly)

Returns todos os dados bigquery.

Returns:

  • (Array<Hash>)

    todos os dados bigquery



12
13
14
# File 'lib/eost/carteiras.rb', line 12

def dbq
  @dbq
end

#opsThor::CoreExt::HashWithIndifferentAccess (readonly)

Returns opcoes trabalho.

Returns:

  • (Thor::CoreExt::HashWithIndifferentAccess)

    opcoes trabalho



14
15
16
# File 'lib/eost/carteiras.rb', line 14

def ops
  @ops
end

Instance Method Details

#act_data(htx) ⇒ Hash

Returns dados da acao.

Parameters:

  • htx (Hash)

    transacao

Returns:

  • (Hash)

    dados da acao



37
38
39
# File 'lib/eost/formatar.rb', line 37

def act_data(htx)
  htx['action_trace']['act']['data']
end

#base_eosscan(hwb) ⇒ Hash

Returns dados eosscan - address, saldo & transacoes.

Parameters:

  • hwb (Hash)

    wallet bigquery eos

Returns:

  • (Hash)

    dados eosscan - address, saldo & transacoes



58
59
60
61
62
63
64
# File 'lib/eost/carteiras.rb', line 58

def base_eosscan(hwb)
  {
    ax: hwb[:ax],
    sl: eosscan_sl(hwb[:ax]).inject(:+),
    tx: eosscan_tx(hwb[:ax])
  }
end

#bigquery_eosscan(hwb, hes) ⇒ Hash

Returns dados juntos bigquery & eosscan.

Parameters:

  • hes (Hash)

    dados eosscan

  • hwb (Hash)

    wallet bigquery eos

Returns:

  • (Hash)

    dados juntos bigquery & eosscan



78
79
80
81
82
83
84
85
86
87
# File 'lib/eost/carteiras.rb', line 78

def bigquery_eosscan(hwb, hes)
  {
    id: hwb[:id],
    ax: hwb[:ax],
    bs: hwb[:sl],
    bt: dbq[:nt].select { |t| t[:iax] == hwb[:ax] },
    es: hes[:sl],
    et: hes[:tx]
  }.merge(novas_ok(hwb, hes))
end

#bnnArray<Integer>

Returns lista blocknumbers de transacoes novas.

Returns:

  • (Array<Integer>)

    lista blocknumbers de transacoes novas



42
43
44
# File 'lib/eost/carteiras.rb', line 42

def bnn
  @bnn ||= (des.map { |e| e[:tx].map { |n| Integer(n['block_num']) } }.flatten - abn)
end

#desArray<Hash>

Returns todos os dados eosscan - saldos & transacoes.

Returns:

  • (Array<Hash>)

    todos os dados eosscan - saldos & transacoes



32
33
34
# File 'lib/eost/carteiras.rb', line 32

def des
  @des ||= dbq[:wb].map { |e| base_eosscan(e) }
end

#djnArray<Hash>

Returns todos os dados juntos bigquery & eosscan.

Returns:

  • (Array<Hash>)

    todos os dados juntos bigquery & eosscan



37
38
39
# File 'lib/eost/carteiras.rb', line 37

def djn
  @djn ||= dbq[:wb].map { |b| bigquery_eosscan(b, des.select { |s| b[:ax] == s[:ax] }.first) }
end

#eosscan_sl(add) ⇒ Array<BigDecimal>

Returns lista recursos - liquido, net, spu.

Parameters:

  • add (String)

    endereco carteira EOS

Returns:

  • (Array<BigDecimal>)

    lista recursos - liquido, net, spu



91
92
93
94
95
96
97
98
# File 'lib/eost/carteiras.rb', line 91

def eosscan_sl(add)
  v = api.(account_name: add)
  [
    v['core_liquid_balance'].to_d,
    v['total_resources']['net_weight'].to_d,
    v['total_resources']['cpu_weight'].to_d
  ]
end

#eosscan_tx(add) ⇒ Array<Hash>

Returns lista ultimas 100 transacoes ligadas a uma carteira - sem elementos irrelevantes.

Parameters:

  • add (String)

    endereco carteira EOS

Returns:

  • (Array<Hash>)

    lista ultimas 100 transacoes ligadas a uma carteira - sem elementos irrelevantes



102
103
104
105
106
107
# File 'lib/eost/carteiras.rb', line 102

def eosscan_tx(add)
  api.history_get_actions(account_name: add, offset: -100)['actions'].map do |e|
    e.delete('global_action_seq')
    e
  end
end

#formata_carteira(hjn) ⇒ String

Returns texto formatado duma carteira.

Parameters:

  • hjn (Hash)

    dados juntos bigquery & eosscan

Returns:

  • (String)

    texto formatado duma carteira



9
10
11
12
13
14
15
16
17
18
# File 'lib/eost/formatar.rb', line 9

def formata_carteira(hjn)
  format(
    '%<s1>-12.12s %<v1>12.4f %<v2>12.4f %<nn>3i %<ok>-3s',
    s1: hjn[:ax],
    v1: hjn[:bs],
    v2: hjn[:es],
    nn: hjn[:nn].count,
    ok: hjn[:ok] ? 'OK' : 'NOK'
  )
end

#formata_transacao(htx) ⇒ String

Returns texto formatado transacao.

Parameters:

  • htx (Hash)

    transacao

Returns:

  • (String)

    texto formatado transacao



22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/eost/formatar.rb', line 22

def formata_transacao(htx)
  format(
    '%<bn>9i %<fr>-12.12s %<to>-12.12s %<ac>-12.12s %<dt>10.10s %<vl>13.4f %<sy>-6.6s',
    bn: htx['block_num'],
    fr: act_data(htx)['from'],
    to: act_data(htx)['to'],
    ac: htx['action_trace']['act']['name'],
    dt: Date.parse(htx['block_time']),
    vl: act_data(htx)['quantity'].to_d,
    sy: act_data(htx)['quantity'][/[[:upper:]]+/]
  )
end

#mostra_configuracao_ajuste_diasString

Returns texto configuracao ajuste dias das transacoes.

Returns:

  • (String)

    texto configuracao ajuste dias das transacoes



60
61
62
63
64
# File 'lib/eost/formatar.rb', line 60

def mostra_configuracao_ajuste_dias
  return unless novas.count.positive?

  puts("\nstring ajuste dias\n-h=#{novas_sort.map { |e| "#{e['block_num']}:0" }.join(' ')}")
end

#mostra_resumoString

Returns texto carteiras & transacoes & ajuste dias.

Returns:

  • (String)

    texto carteiras & transacoes & ajuste dias



42
43
44
45
46
47
48
49
# File 'lib/eost/formatar.rb', line 42

def mostra_resumo
  return unless djn.count.positive?

  puts("\naddress      --bigquery-- --eosscans-- new")
  djn.each { |e| puts(formata_carteira(e)) }
  mostra_transacoes_novas
  mostra_configuracao_ajuste_dias
end

#mostra_transacoes_novasString

Returns texto transacoes.

Returns:

  • (String)

    texto transacoes



52
53
54
55
56
57
# File 'lib/eost/formatar.rb', line 52

def mostra_transacoes_novas
  return unless ops[:v] && novas.count.positive?

  puts("\nblock num add from     add to       accao        ---data--- ----valor----")
  novas_sort.each { |e| puts(formata_transacao(e)) }
end

#novasArray<Hash>

Returns lista transacoes novas.

Returns:

  • (Array<Hash>)

    lista transacoes novas



47
48
49
# File 'lib/eost/carteiras.rb', line 47

def novas
  @novas ||= des.map { |e| e[:tx].select { |s| bnn.include?(Integer(s['block_num'])) } }.flatten.uniq
end

#novas_ok(hwb, hes) ⇒ Hash<Array, Boolean>

Returns lista blocknumbers novos & carteira ok?.

Parameters:

  • hes (Hash)

    dados eosscan

  • hwb (Hash)

    wallet bigquery eos

Returns:

  • (Hash<Array, Boolean>)

    lista blocknumbers novos & carteira ok?



68
69
70
71
72
73
# File 'lib/eost/carteiras.rb', line 68

def novas_ok(hwb, hes)
  # quando todas as transacoes obtidas da api vao ser inseridas,
  # entao podem ficar transacoes por inserir - api consegue apenas um maximo de 100 transacoes
  n = hes[:tx].map { |v| Integer(v['block_num']) } - abn
  { nn: n, ok: hwb[:sl] == hes[:sl] && n.count < hes[:tx].count }
end

#novas_sortArray<Hash>

Returns lista ordenada transacoes novas.

Returns:

  • (Array<Hash>)

    lista ordenada transacoes novas



52
53
54
# File 'lib/eost/carteiras.rb', line 52

def novas_sort
  novas.sort { |a, b| Integer(a['block_num']) <=> Integer(b['block_num']) }
end