Class: Cns::Beaconchain
- Inherits:
-
Object
- Object
- Cns::Beaconchain
- Defined in:
- lib/cns/beaconchain.rb
Overview
classe para processar historicos da beaconchain
Instance Attribute Summary collapse
-
#api ⇒ Apibc
readonly
API blockchains.
-
#bqd ⇒ Array<Hash>
readonly
Todos os dados bigquery.
-
#ops ⇒ Thor::CoreExt::HashWithIndifferentAccess
readonly
Opcoes trabalho.
Instance Method Summary collapse
-
#base_bc(abc) ⇒ Hash
Dados beaconchain - index, saldo & historico.
-
#bcd ⇒ Array<Hash>
Todos os dados beaconchain - saldos & historico.
-
#bq_bc(wbq, abc) ⇒ Hash
Dados juntos bigquery & beaconchain.
-
#dados ⇒ Array<Hash>
Todos os dados juntos bigquery & beaconchain.
-
#formata_endereco(add, max) ⇒ String
Pubkey formatada.
-
#formata_saldos(hbh) ⇒ String
Texto formatado historico beaconchain.
-
#formata_validador(hjn) ⇒ String
Texto formatado dum validador.
-
#formata_valores(hjn) ⇒ String
Texto formatado valores dum validador.
-
#idb ⇒ Array<Integer>
Lista historicos novos.
-
#initialize(dad, pop) ⇒ Beaconchain
constructor
API beaconchain - processar historico saldos.
-
#itx(intum, intdois) ⇒ Integer
Szudzik pairing two integers.
-
#lax ⇒ Array<Integer>
Lista dos meus validators.
-
#mostra_resumo ⇒ String
Texto validadores & saldos historicos.
-
#mostra_saldos ⇒ String
Texto historico saldos.
-
#nov ⇒ Array<Hash>
Lista balancos novos.
-
#ok?(hjn) ⇒ Boolean
Validador tem historicos novos(sim=NOK, nao=OK)?.
-
#sorbx ⇒ Array<Hash>
Lista ordenada historico saldos.
Constructor Details
#initialize(dad, pop) ⇒ Beaconchain
Returns API beaconchain - processar historico saldos.
21 22 23 24 25 |
# File 'lib/cns/beaconchain.rb', line 21 def initialize(dad, pop) @api = Apibc.new @bqd = dad @ops = pop end |
Instance Attribute Details
#api ⇒ Apibc (readonly)
Returns API blockchains.
10 11 12 |
# File 'lib/cns/beaconchain.rb', line 10 def api @api end |
#bqd ⇒ Array<Hash> (readonly)
Returns todos os dados bigquery.
12 13 14 |
# File 'lib/cns/beaconchain.rb', line 12 def bqd @bqd end |
#ops ⇒ Thor::CoreExt::HashWithIndifferentAccess (readonly)
Returns opcoes trabalho.
14 15 16 |
# File 'lib/cns/beaconchain.rb', line 14 def ops @ops end |
Instance Method Details
#base_bc(abc) ⇒ Hash
Returns dados beaconchain - index, saldo & historico.
78 79 80 81 82 83 84 85 |
# File 'lib/cns/beaconchain.rb', line 78 def base_bc(abc) acc = abc[:validatorindex] { ax: acc, sl: (abc[:balance].to_d / 10**9).round(10), bx: api.data_bc("/api/v1/validator/#{acc}/balancehistory") } end |
#bcd ⇒ Array<Hash>
Returns todos os dados beaconchain - saldos & historico.
38 39 40 |
# File 'lib/cns/beaconchain.rb', line 38 def bcd @bcd ||= api.data_bc("/api/v1/validator/#{lax.join(',')}").map { |obj| base_bc(obj) } end |
#bq_bc(wbq, abc) ⇒ Hash
Returns dados juntos bigquery & beaconchain.
90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/cns/beaconchain.rb', line 90 def bq_bc(wbq, abc) xbq = wbq[:id] { id: xbq, ax: wbq[:ax], bs: wbq[:sl], bb: bqd[:nb].select { |onb| onb[:iax] == xbq }, es: abc[:sl], eb: abc[:bx] } end |
#dados ⇒ Array<Hash>
Returns todos os dados juntos bigquery & beaconchain.
43 44 45 |
# File 'lib/cns/beaconchain.rb', line 43 def dados @dados ||= bqd[:wb].map { |obq| bq_bc(obq, bcd.select { |obc| obq[:id] == obc[:ax] }.first) } end |
#formata_endereco(add, max) ⇒ String
Returns pubkey formatada.
141 142 143 144 145 146 147 148 |
# File 'lib/cns/beaconchain.rb', line 141 def formata_endereco(add, max) return 'erro' if max < 7 max -= 2 ini = Integer(max / 2) inf = max % 2 "#{add[0, ini - 3]}..#{add[-inf - ini - 3..]}" end |
#formata_saldos(hbh) ⇒ String
Returns texto formatado historico beaconchain.
160 161 162 163 164 165 166 167 168 169 170 |
# File 'lib/cns/beaconchain.rb', line 160 def formata_saldos(hbh) idx = hbh[:validatorindex] epc = hbh[:epoch] format( '%<vi>5i %<vl>17.6f %<ep>6i %<id>9i', vi: idx, vl: (hbh[:balance].to_d / (10**9)).round(10), ep: epc, id: itx(epc, idx) ) end |
#formata_validador(hjn) ⇒ String
Returns texto formatado dum validador.
113 114 115 |
# File 'lib/cns/beaconchain.rb', line 113 def formata_validador(hjn) format('%<s1>-5.5s %<s2>-34.34s ', s1: hjn[:id], s2: formata_endereco(hjn[:ax], 34)) + formata_valores(hjn) end |
#formata_valores(hjn) ⇒ String
Returns texto formatado valores dum validador.
119 120 121 122 123 124 125 126 127 128 |
# File 'lib/cns/beaconchain.rb', line 119 def formata_valores(hjn) format( '%<v1>11.6f %<n1>3i %<v2>12.6f %<n2>6i %<ok>-3s', v1: hjn[:es], n1: hjn[:eb].count, v2: hjn[:bs], n2: hjn[:bb].count, ok: ok?(hjn) ? 'OK' : 'NOK' ) end |
#idb ⇒ Array<Integer>
Returns lista historicos novos.
48 49 50 51 |
# File 'lib/cns/beaconchain.rb', line 48 def idb @idb ||= bcd.map { |obc| obc[:bx].map { |obj| itx(obj[:epoch], obj[:validatorindex]) } }.flatten - (ops[:t] ? [] : bqd[:nb].map { |obq| obq[:itx] }) end |
#itx(intum, intdois) ⇒ Integer
Returns szudzik pairing two integers.
56 57 58 |
# File 'lib/cns/beaconchain.rb', line 56 def itx(intum, intdois) intum >= intdois ? intum * intum + intum + intdois : intum + intdois * intdois end |
#lax ⇒ Array<Integer>
Returns lista dos meus validators.
33 34 35 |
# File 'lib/cns/beaconchain.rb', line 33 def lax @lax ||= bqd[:wb].map { |obj| obj[:id] } end |
#mostra_resumo ⇒ String
Returns texto validadores & saldos historicos.
103 104 105 106 107 108 109 |
# File 'lib/cns/beaconchain.rb', line 103 def mostra_resumo return unless dados.count.positive? puts("\nindex address beaconchain blh bigquery blh") dados.each { |obj| puts(formata_validador(obj)) } mostra_saldos end |
#mostra_saldos ⇒ String
Returns texto historico saldos.
173 174 175 176 177 178 |
# File 'lib/cns/beaconchain.rb', line 173 def mostra_saldos return unless ops[:v] && nov.count.positive? puts("\nindex saldo epoch itx") sorbx.each { |obj| puts(formata_saldos(obj)) } end |
#nov ⇒ Array<Hash>
Returns lista balancos novos.
28 29 30 |
# File 'lib/cns/beaconchain.rb', line 28 def nov @nov ||= bcd.map { |obc| obc[:bx].select { |obj| idb.include?(itx(obj[:epoch], obj[:validatorindex])) } }.flatten end |
#ok?(hjn) ⇒ Boolean
Returns validador tem historicos novos(sim=NOK, nao=OK)?.
132 133 134 |
# File 'lib/cns/beaconchain.rb', line 132 def ok?(hjn) hjn[:bs] == hjn[:es] end |
#sorbx ⇒ Array<Hash>
Returns lista ordenada historico saldos.
181 182 183 |
# File 'lib/cns/beaconchain.rb', line 181 def sorbx nov.sort { |ant, prx| ant[:itx] <=> prx[:itx] } end |