Class: Bct::Greymass
- Inherits:
-
Object
- Object
- Bct::Greymass
- Defined in:
- lib/bct/greymass1.rb,
lib/bct/greymass2.rb
Overview
classe para processar carteiras & transacoes
Instance Attribute Summary collapse
-
#api ⇒ Apigm
readonly
API greymass.
-
#dbq ⇒ Array<Hash>
readonly
Todos os dados bigquery.
-
#ops ⇒ Thor::CoreExt::HashWithIndifferentAccess
readonly
Opcoes trabalho.
Instance Method Summary collapse
-
#act(htx) ⇒ Hash
Dados da acao.
-
#act_data(htx) ⇒ Hash
Dados da acao.
-
#act_data_quantity(htx) ⇒ String
Dados da quantidade.
-
#base_bc(hbq) ⇒ Hash
Dados greymass - address, saldo & transacoes.
-
#bnt ⇒ Array<Integer>
Lista indices transacoes novas.
-
#bq_bc(hbq, hbc) ⇒ Hash
Dados juntos bigquery & greymass.
-
#dados ⇒ Array<Hash>
Todos os dados juntos bigquery & greymass.
-
#dbc ⇒ Array<Hash>
Todos os dados greymass - saldos & transacoes.
-
#filtrar_tx(add, ary) ⇒ Array<Hash>
Lista transacoes ligadas a uma carteira filtrada.
-
#formata_carteira(hjn) ⇒ String
Texto formatado duma carteira.
-
#formata_transacao(htx) ⇒ String
Texto formatado transacao.
-
#greymass_sl(add) ⇒ Array<BigDecimal>
Lista recursos - liquido, net, spu.
-
#initialize(dad, pop) ⇒ Greymass
constructor
API greymass - processar transacoes.
-
#lax ⇒ Array<String>
Lista dos meus enderecos.
-
#mostra_configuracao_ajuste_dias ⇒ String
Texto configuracao ajuste dias das transacoes.
-
#mostra_resumo ⇒ String
Texto carteiras & transacoes & ajuste dias.
-
#mostra_transacoes_novas ⇒ String
Texto transacoes.
-
#novax ⇒ Array<Hash>
Lista transacoes novas.
-
#ok?(hjn) ⇒ Boolean
Carteira tem transacoes novas(sim=NOK, nao=OK)?.
-
#sorax ⇒ Array<Hash>
Lista ordenada transacoes novas.
Constructor Details
Instance Attribute Details
#api ⇒ Apigm (readonly)
Returns API greymass.
10 11 12 |
# File 'lib/bct/greymass1.rb', line 10 def api @api end |
#dbq ⇒ Array<Hash> (readonly)
Returns todos os dados bigquery.
12 13 14 |
# File 'lib/bct/greymass1.rb', line 12 def dbq @dbq end |
#ops ⇒ Thor::CoreExt::HashWithIndifferentAccess (readonly)
Returns 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.
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.
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.
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.
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 |
#bnt ⇒ Array<Integer>
Returns 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.
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 |
#dados ⇒ Array<Hash>
Returns 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 |
#dbc ⇒ Array<Hash>
Returns 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.
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.
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.
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.
80 81 82 83 84 85 86 87 |
# File 'lib/bct/greymass1.rb', line 80 def greymass_sl(add) v = api.account(account_name: add) [ v[:core_liquid_balance].to_d, v[:total_resources][:net_weight].to_d, v[:total_resources][:cpu_weight].to_d ] end |
#lax ⇒ Array<String>
Returns 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_dias ⇒ String
Returns 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_resumo ⇒ String
Returns 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_novas ⇒ String
Returns 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 |
#novax ⇒ Array<Hash>
Returns 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)?.
23 24 25 |
# File 'lib/bct/greymass2.rb', line 23 def ok?(hjn) hjn[:bs] == hjn[:es] && hjn[:bt].count == hjn[:et].count end |
#sorax ⇒ Array<Hash>
Returns 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 |