Class: Eost::Carteiras
- Inherits:
-
Object
- Object
- Eost::Carteiras
- Defined in:
- lib/eost/formatar.rb,
lib/eost/carteiras.rb
Overview
classe para processar carteiras & transacoes
Instance Attribute Summary collapse
-
#abn ⇒ Array<Integer>
readonly
Lista blocknumbers transacoes no bigquery - condicionados por opcoes iniciais.
-
#api ⇒ Eosscan
readonly
API eosscan.
-
#dbq ⇒ Array<Hash>
readonly
Todos os dados bigquery.
-
#ops ⇒ Thor::CoreExt::HashWithIndifferentAccess
readonly
Opcoes trabalho.
Instance Method Summary collapse
-
#act_data(htx) ⇒ Hash
Dados da acao.
-
#base_eosscan(hwb) ⇒ Hash
Dados eosscan - address, saldo & transacoes.
-
#bigquery_eosscan(hwb, hes) ⇒ Hash
Dados juntos bigquery & eosscan.
-
#bnn ⇒ Array<Integer>
Lista blocknumbers de transacoes novas.
-
#des ⇒ Array<Hash>
Todos os dados eosscan - saldos & transacoes.
-
#djn ⇒ Array<Hash>
Todos os dados juntos bigquery & eosscan.
-
#eosscan_sl(add) ⇒ Array<BigDecimal>
Lista recursos - liquido, net, spu.
-
#eosscan_tx(add) ⇒ Array<Hash>
Lista ultimas 100 transacoes ligadas a uma carteira - sem elementos irrelevantes.
-
#formata_carteira(hjn) ⇒ String
Texto formatado duma carteira.
-
#formata_transacao(htx) ⇒ String
Texto formatado transacao.
-
#initialize(dad, pop) ⇒ Carteiras
constructor
API eosscan - processar transacoes.
-
#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.
-
#novas ⇒ Array<Hash>
Lista transacoes novas.
-
#novas_ok(hwb, hes) ⇒ Hash<Array, Boolean>
Lista blocknumbers novos & carteira ok?.
-
#novas_sort ⇒ Array<Hash>
Lista ordenada transacoes novas.
Constructor Details
Instance Attribute Details
#abn ⇒ Array<Integer> (readonly)
Returns lista blocknumbers transacoes no bigquery - condicionados por opcoes iniciais.
16 17 18 |
# File 'lib/eost/carteiras.rb', line 16 def abn @abn end |
#api ⇒ Eosscan (readonly)
Returns API eosscan.
10 11 12 |
# File 'lib/eost/carteiras.rb', line 10 def api @api end |
#dbq ⇒ Array<Hash> (readonly)
Returns todos os dados bigquery.
12 13 14 |
# File 'lib/eost/carteiras.rb', line 12 def dbq @dbq end |
#ops ⇒ Thor::CoreExt::HashWithIndifferentAccess (readonly)
Returns 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.
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.
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.
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 |
#bnn ⇒ Array<Integer>
Returns 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 |
#des ⇒ Array<Hash>
Returns 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 |
#djn ⇒ Array<Hash>
Returns 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.
91 92 93 94 95 96 97 98 |
# File 'lib/eost/carteiras.rb', line 91 def eosscan_sl(add) v = api.chain_get_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 |
#eosscan_tx(add) ⇒ Array<Hash>
Returns 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.
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.
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_dias ⇒ String
Returns 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_resumo ⇒ String
Returns 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_novas ⇒ String
Returns 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 |
#novas ⇒ Array<Hash>
Returns 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?.
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_sort ⇒ Array<Hash>
Returns 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 |