class Eost::Carteiras
classe para processar carteiras & transacoes
(see Carteiras
)
Attributes
@return [Array<Integer>] lista blocknumbers transacoes no bigquery - condicionados por opcoes iniciais
@return [Eosscan] API eosscan
@return [Array<Hash>] todos os dados bigquery
@return [Thor::CoreExt::HashWithIndifferentAccess] opcoes trabalho
Public Class Methods
@param [Hash] dad todos os dados bigquery @param [Thor::CoreExt::HashWithIndifferentAccess] pop opcoes trabalho @option pop [Hash] :h ({}) configuracao dias ajuste reposicionamento temporal @option pop [Boolean] :v (false) mostra dados transacoes? @option pop [Boolean] :t (false) mostra transacoes todas ou somente novas? @return [Carteiras] API eosscan - processar transacoes
# 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
Public Instance Methods
@param (see formata_transacao
) @return [Hash] dados da acao
# File lib/eost/formatar.rb, line 37 def act_data(htx) htx['action_trace']['act']['data'] end
@param [Hash] hwb wallet bigquery eos @return [Hash] dados eosscan - address, saldo & transacoes
# 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
@param hwb (see base_eosscan
) @param [Hash] hes dados eosscan @return [Hash] dados juntos bigquery & eosscan
# 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
@return [Array<Integer>] lista blocknumbers de transacoes novas
# File lib/eost/carteiras.rb, line 42 def bnn @bnn ||= (des.map { |e| e[:tx].map { |n| Integer(n['block_num']) } }.flatten - abn) end
@return [Array<Hash>] todos os dados eosscan - saldos & transacoes
# File lib/eost/carteiras.rb, line 32 def des @des ||= dbq[:wb].map { |e| base_eosscan(e) } end
@return [Array<Hash>] todos os dados juntos bigquery & eosscan
# 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
@param [String] add endereco carteira EOS @return [Array<BigDecimal>] lista recursos - liquido, net, spu
# 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
@param (see eosscan_sl
) @return [Array<Hash>] lista ultimas 100 transacoes ligadas a uma carteira - sem elementos irrelevantes
# 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
@param [Hash] hjn dados juntos bigquery & eosscan @return [String] texto formatado duma carteira
# 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
@param [Hash] htx transacao @return [String] texto formatado transacao
# 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
@return [String] texto configuracao ajuste dias das transacoes
# 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
@return [String] texto carteiras & transacoes & ajuste dias
# 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
@return [String] texto transacoes
# 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
@return [Array<Hash>] lista transacoes novas
# 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
@param (see bigquery_eosscan
) @return [Hash<Array, Boolean>] lista blocknumbers novos & carteira ok?
# 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
@return [Array<Hash>] lista ordenada transacoes novas
# File lib/eost/carteiras.rb, line 52 def novas_sort novas.sort { |a, b| Integer(a['block_num']) <=> Integer(b['block_num']) } end