Class: Bct::Greymass

Inherits:
Object
  • Object
show all
Defined in:
lib/bct/greymass1.rb,
lib/bct/greymass2.rb

Overview

classe para processar carteiras & transacoes

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(dad, pop) ⇒ Greymass

Returns API greymass - 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?



22
23
24
25
26
# File 'lib/bct/greymass1.rb', line 22

def initialize(dad, pop)
  @api = Apigm.new
  @dbq = dad
  @ops = pop
end

Instance Attribute Details

#apiApigm (readonly)

Returns API greymass.

Returns:

  • (Apigm)

    API greymass



10
11
12
# File 'lib/bct/greymass1.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/bct/greymass1.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/bct/greymass1.rb', line 14

def ops
  @ops
end

Instance Method Details

#act(htx) ⇒ Hash

Returns dados da acao.

Parameters:

  • htx (Hash)

    transacao

Returns:

  • (Hash)

    dados da acao



44
45
46
# File 'lib/bct/greymass2.rb', line 44

def act(htx)
  htx[:action_trace][:act]
end

#act_data(htx) ⇒ Hash

Returns dados da acao.

Parameters:

  • htx (Hash)

    transacao

Returns:

  • (Hash)

    dados da acao



50
51
52
# File 'lib/bct/greymass2.rb', line 50

def act_data(htx)
  act(htx)[:data]
end

#act_data_quantity(htx) ⇒ String

Returns dados da quantidade.

Parameters:

  • htx (Hash)

    transacao

Returns:

  • (String)

    dados da quantidade



56
57
58
# File 'lib/bct/greymass2.rb', line 56

def act_data_quantity(htx)
  act_data(htx)[:quantity].to_s
end

#base_bc(hbq) ⇒ Hash

Returns dados greymass - address, saldo & transacoes.

Parameters:

  • hbq (Hash)

    dados bigquery wallet

Returns:

  • (Hash)

    dados greymass - address, saldo & transacoes



55
56
57
58
59
60
61
62
# File 'lib/bct/greymass1.rb', line 55

def base_bc(hbq)
  a = hbq[:ax]
  {
    ax: a,
    sl: greymass_sl(a).inject(:+),
    tx: filtrar_tx(a, api.all_tx(a))
  }
end

#bntArray<Integer>

Returns lista indices transacoes novas.

Returns:

  • (Array<Integer>)

    lista indices transacoes novas



44
45
46
# File 'lib/bct/greymass1.rb', line 44

def bnt
  @bnt ||= (dbc.map { |e| e[:tx].map { |n| n[:itx] } }.flatten - (ops[:t] ? [] : dbq[:nt].map { |t| t[:itx] }))
end

#bq_bc(hbq, hbc) ⇒ Hash

Returns dados juntos bigquery & greymass.

Parameters:

  • hbc (Hash)

    dados greymass

  • hbq (Hash)

    dados bigquery wallet

Returns:

  • (Hash)

    dados juntos bigquery & greymass



67
68
69
70
71
72
73
74
75
76
# File 'lib/bct/greymass1.rb', line 67

def bq_bc(hbq, hbc)
  {
    id: hbq[:id],
    ax: hbq[:ax],
    bs: hbq[:sl],
    bt: dbq[:nt].select { |t| t[:iax] == hbq[:ax] },
    es: hbc[:sl],
    et: hbc[:tx]
  }
end

#dadosArray<Hash>

Returns todos os dados juntos bigquery & greymass.

Returns:

  • (Array<Hash>)

    todos os dados juntos bigquery & greymass



39
40
41
# File 'lib/bct/greymass1.rb', line 39

def dados
  @dados ||= dbq[:wb].map { |b| bq_bc(b, dbc.select { |s| b[:ax] == s[:ax] }.first) }
end

#dbcArray<Hash>

Returns todos os dados greymass - saldos & transacoes.

Returns:

  • (Array<Hash>)

    todos os dados greymass - saldos & transacoes



34
35
36
# File 'lib/bct/greymass1.rb', line 34

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

#filtrar_tx(add, ary) ⇒ Array<Hash>

Returns lista transacoes ligadas a uma carteira filtrada.

Parameters:

  • add (String)

    endereco carteira EOS

  • ary (Array<Hash>)

    lista das transacoes

Returns:

  • (Array<Hash>)

    lista transacoes ligadas a uma carteira filtrada



92
93
94
95
96
97
# File 'lib/bct/greymass1.rb', line 92

def filtrar_tx(add, ary)
  # elimina transferencia from: (lax) to: (add) - esta transferencia aparece em from: (add) to: (lax)
  # adiciona chave indice itx & adiciona identificador da carteira iax
  ary.delete_if { |h| act_data(h)[:to] == add && lax.include?(act_data(h)[:from]) }
     .map { |h| h.merge(itx: h[:global_action_seq], iax: add) }
end

#formata_carteira(hjn) ⇒ String

Returns texto formatado duma carteira.

Parameters:

  • hjn (Hash)

    dados juntos bigquery & greymass

Returns:

  • (String)

    texto formatado duma carteira



9
10
11
12
13
14
15
16
17
18
19
# File 'lib/bct/greymass2.rb', line 9

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

#formata_transacao(htx) ⇒ String

Returns texto formatado transacao.

Parameters:

  • htx (Hash)

    transacao

Returns:

  • (String)

    texto formatado transacao



29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/bct/greymass2.rb', line 29

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

#greymass_sl(add) ⇒ Array<BigDecimal>

Returns lista recursos - liquido, net, spu.

Parameters:

  • add (String)

    endereco carteira EOS

  • ary (Array<Hash>)

    lista das transacoes

Returns:

  • (Array<BigDecimal>)

    lista recursos - liquido, net, spu



80
81
82
83
84
85
86
87
# File 'lib/bct/greymass1.rb', line 80

def greymass_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

#laxArray<String>

Returns lista dos meus enderecos.

Returns:

  • (Array<String>)

    lista dos meus enderecos



29
30
31
# File 'lib/bct/greymass1.rb', line 29

def lax
  @lax ||= dbq[:wb].map { |h| h[:ax] }
end

#mostra_configuracao_ajuste_diasString

Returns texto configuracao ajuste dias das transacoes.

Returns:

  • (String)

    texto configuracao ajuste dias das transacoes



79
80
81
82
83
# File 'lib/bct/greymass2.rb', line 79

def mostra_configuracao_ajuste_dias
  return unless novax.count.positive?

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

#mostra_resumoString

Returns texto carteiras & transacoes & ajuste dias.

Returns:

  • (String)

    texto carteiras & transacoes & ajuste dias



61
62
63
64
65
66
67
68
# File 'lib/bct/greymass2.rb', line 61

def mostra_resumo
  return unless dados.count.positive?

  puts("\naddress            bigquery  ntx       greymass  ntx")
  dados.each { |e| puts(formata_carteira(e)) }
  mostra_transacoes_novas
  mostra_configuracao_ajuste_dias
end

#mostra_transacoes_novasString

Returns texto transacoes.

Returns:

  • (String)

    texto transacoes



71
72
73
74
75
76
# File 'lib/bct/greymass2.rb', line 71

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

  puts("\nsequence num from         to           accao      data              valor moeda")
  sorax.each { |e| puts(formata_transacao(e)) }
end

#novaxArray<Hash>

Returns lista transacoes novas.

Returns:

  • (Array<Hash>)

    lista transacoes novas



49
50
51
# File 'lib/bct/greymass1.rb', line 49

def novax
  @novax ||= dbc.map { |e| e[:tx].select { |s| bnt.include?(s[:itx]) } }.flatten
end

#ok?(hjn) ⇒ Boolean

Returns carteira tem transacoes novas(sim=NOK, nao=OK)?.

Parameters:

  • hjn (Hash)

    dados juntos bigquery & greymass

Returns:

  • (Boolean)

    carteira tem transacoes novas(sim=NOK, nao=OK)?



23
24
25
# File 'lib/bct/greymass2.rb', line 23

def ok?(hjn)
  hjn[:bs] == hjn[:es] && hjn[:bt].count == hjn[:et].count
end

#soraxArray<Hash>

Returns lista ordenada transacoes novas.

Returns:

  • (Array<Hash>)

    lista ordenada transacoes novas



100
101
102
# File 'lib/bct/greymass1.rb', line 100

def sorax
  novax.sort { |a, b| b[:itx] <=> a[:itx] }
end