cns 0.1.0 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +65 -9
- data/cns.gemspec +8 -6
- data/lib/cns.rb +17 -10
- data/lib/cns/apibc.rb +280 -0
- data/lib/cns/apice1.rb +227 -0
- data/lib/cns/apice2.rb +280 -0
- data/lib/cns/bigquery1.rb +116 -0
- data/lib/cns/bigquery2.rb +78 -0
- data/lib/cns/bigquery3.rb +134 -0
- data/lib/cns/bigquery4.rb +153 -0
- data/lib/cns/bitcoinde.rb +146 -0
- data/lib/cns/etherscan1.rb +119 -0
- data/lib/cns/etherscan2.rb +112 -0
- data/lib/cns/greymass1.rb +105 -0
- data/lib/cns/greymass2.rb +86 -0
- data/lib/cns/kraken.rb +143 -0
- data/lib/cns/paymium.rb +113 -0
- data/lib/cns/therock.rb +103 -0
- data/lib/cns/version.rb +3 -1
- metadata +67 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f9a77dc1d55c2f8f3cef855ed3c4d4c112329fc826e974b5dc978cd611d2861c
|
4
|
+
data.tar.gz: 7b9d18ba3237d293d35477a3eecd9d1d6a5c73e24ac622a4e6700e99840c4075
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ca5de038a0c25c62ae35ced9a7b369d08669fa0c6314decaeb2b827464e39aa56ac962aed851dc12ab9f2e067c10778d065c1cd7ef7c4016214d60142a0db5e1
|
7
|
+
data.tar.gz: e94f7cd2908da735457bdf86da6e83e216ed0f9a78d6f49abe054ac72b641d2563cf4c27797a2cb04ee871cbe177e2b25a7a1d4524e61cb7e36c0ee1e1b50c02
|
data/Gemfile.lock
CHANGED
@@ -1,25 +1,29 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
cns (0.1.
|
4
|
+
cns (0.1.5)
|
5
5
|
curb
|
6
6
|
faraday
|
7
7
|
google-cloud-bigquery
|
8
8
|
thor
|
9
|
-
yard
|
10
9
|
|
11
10
|
GEM
|
12
11
|
remote: https://rubygems.org/
|
13
12
|
specs:
|
14
13
|
addressable (2.7.0)
|
15
14
|
public_suffix (>= 2.0.2, < 5.0)
|
15
|
+
ast (2.4.1)
|
16
|
+
backport (1.1.2)
|
17
|
+
benchmark (0.1.0)
|
16
18
|
concurrent-ruby (1.1.7)
|
17
|
-
curb (0.9.
|
19
|
+
curb (0.9.11)
|
18
20
|
declarative (0.0.20)
|
19
21
|
declarative-option (0.1.0)
|
20
|
-
|
22
|
+
e2mmap (0.1.0)
|
23
|
+
faraday (1.1.0)
|
21
24
|
multipart-post (>= 1.2, < 3)
|
22
|
-
|
25
|
+
ruby2_keywords
|
26
|
+
google-api-client (0.50.0)
|
23
27
|
addressable (~> 2.5, >= 2.5.1)
|
24
28
|
googleauth (~> 0.9)
|
25
29
|
httpclient (>= 2.8.1, < 3.0)
|
@@ -28,19 +32,19 @@ GEM
|
|
28
32
|
retriable (>= 2.0, < 4.0)
|
29
33
|
rexml
|
30
34
|
signet (~> 0.12)
|
31
|
-
google-cloud-bigquery (1.
|
35
|
+
google-cloud-bigquery (1.25.0)
|
32
36
|
concurrent-ruby (~> 1.0)
|
33
|
-
google-api-client (~> 0.
|
37
|
+
google-api-client (~> 0.47)
|
34
38
|
google-cloud-core (~> 1.2)
|
35
39
|
googleauth (~> 0.9)
|
36
40
|
mini_mime (~> 1.0)
|
37
41
|
google-cloud-core (1.5.0)
|
38
42
|
google-cloud-env (~> 1.0)
|
39
43
|
google-cloud-errors (~> 1.0)
|
40
|
-
google-cloud-env (1.
|
44
|
+
google-cloud-env (1.4.0)
|
41
45
|
faraday (>= 0.17.3, < 2.0)
|
42
46
|
google-cloud-errors (1.0.1)
|
43
|
-
googleauth (0.
|
47
|
+
googleauth (0.14.0)
|
44
48
|
faraday (>= 0.17.3, < 2.0)
|
45
49
|
jwt (>= 1.4, < 3.0)
|
46
50
|
memoist (~> 0.16)
|
@@ -48,27 +52,75 @@ GEM
|
|
48
52
|
os (>= 0.9, < 2.0)
|
49
53
|
signet (~> 0.14)
|
50
54
|
httpclient (2.8.3)
|
55
|
+
jaro_winkler (1.5.4)
|
51
56
|
jwt (2.2.2)
|
57
|
+
kwalify (0.7.2)
|
58
|
+
maruku (0.7.3)
|
52
59
|
memoist (0.16.2)
|
53
60
|
mini_mime (1.0.2)
|
61
|
+
mini_portile2 (2.4.0)
|
54
62
|
multi_json (1.15.0)
|
55
63
|
multipart-post (2.1.1)
|
64
|
+
nokogiri (1.10.10)
|
65
|
+
mini_portile2 (~> 2.4.0)
|
56
66
|
os (1.1.1)
|
67
|
+
parallel (1.20.1)
|
68
|
+
parser (2.7.2.0)
|
69
|
+
ast (~> 2.4.1)
|
70
|
+
psych (3.2.0)
|
57
71
|
public_suffix (4.0.6)
|
72
|
+
rainbow (3.0.0)
|
58
73
|
rake (12.3.3)
|
74
|
+
reek (6.0.2)
|
75
|
+
kwalify (~> 0.7.0)
|
76
|
+
parser (>= 2.5.0.0, < 2.8, != 2.5.1.1)
|
77
|
+
psych (~> 3.1)
|
78
|
+
rainbow (>= 2.0, < 4.0)
|
79
|
+
regexp_parser (2.0.0)
|
59
80
|
representable (3.0.4)
|
60
81
|
declarative (< 0.1.0)
|
61
82
|
declarative-option (< 0.2.0)
|
62
83
|
uber (< 0.2.0)
|
63
84
|
retriable (3.1.2)
|
85
|
+
reverse_markdown (2.0.0)
|
86
|
+
nokogiri
|
64
87
|
rexml (3.2.4)
|
88
|
+
rubocop (0.93.1)
|
89
|
+
parallel (~> 1.10)
|
90
|
+
parser (>= 2.7.1.5)
|
91
|
+
rainbow (>= 2.2.2, < 4.0)
|
92
|
+
regexp_parser (>= 1.8)
|
93
|
+
rexml
|
94
|
+
rubocop-ast (>= 0.6.0)
|
95
|
+
ruby-progressbar (~> 1.7)
|
96
|
+
unicode-display_width (>= 1.4.0, < 2.0)
|
97
|
+
rubocop-ast (1.2.0)
|
98
|
+
parser (>= 2.7.1.5)
|
99
|
+
ruby-progressbar (1.10.1)
|
100
|
+
ruby2_keywords (0.0.2)
|
65
101
|
signet (0.14.0)
|
66
102
|
addressable (~> 2.3)
|
67
103
|
faraday (>= 0.17.3, < 2.0)
|
68
104
|
jwt (>= 1.5, < 3.0)
|
69
105
|
multi_json (~> 1.10)
|
106
|
+
solargraph (0.39.17)
|
107
|
+
backport (~> 1.1)
|
108
|
+
benchmark
|
109
|
+
bundler (>= 1.17.2)
|
110
|
+
e2mmap
|
111
|
+
jaro_winkler (~> 1.5)
|
112
|
+
maruku (~> 0.7, >= 0.7.3)
|
113
|
+
nokogiri (~> 1.9, >= 1.9.1)
|
114
|
+
parser (~> 2.3)
|
115
|
+
reverse_markdown (>= 1.0.5, < 3)
|
116
|
+
rubocop (~> 0.52)
|
117
|
+
thor (~> 1.0)
|
118
|
+
tilt (~> 2.0)
|
119
|
+
yard (~> 0.9, >= 0.9.24)
|
70
120
|
thor (1.0.1)
|
121
|
+
tilt (2.0.10)
|
71
122
|
uber (0.1.0)
|
123
|
+
unicode-display_width (1.7.0)
|
72
124
|
yard (0.9.25)
|
73
125
|
|
74
126
|
PLATFORMS
|
@@ -78,6 +130,10 @@ DEPENDENCIES
|
|
78
130
|
bundler
|
79
131
|
cns!
|
80
132
|
rake (~> 12.0)
|
133
|
+
reek
|
134
|
+
rubocop
|
135
|
+
solargraph
|
136
|
+
yard
|
81
137
|
|
82
138
|
BUNDLED WITH
|
83
139
|
2.1.4
|
data/cns.gemspec
CHANGED
@@ -7,15 +7,14 @@ Gem::Specification.new do |spec|
|
|
7
7
|
spec.version = Cns::VERSION
|
8
8
|
spec.authors = ['Hernâni Rodrigues Vaz']
|
9
9
|
spec.email = ['hernanirvaz@gmail.com']
|
10
|
-
|
11
|
-
spec.summary = 'Arquiva transactions etherscan/greymass/bitcoinde/kraken/paymium/therock no bigquery.'
|
12
|
-
spec.description = "#{spec.summary} Pode ajustar dias para reposicionamento temporal."
|
13
10
|
spec.homepage = 'https://github.com/hernanirvaz/cns'
|
14
11
|
spec.license = 'MIT'
|
15
|
-
spec.
|
12
|
+
spec.summary = 'Arquiva transactions etherscan/greymass/bitcoinde/kraken/paymium/therock no bigquery.'
|
13
|
+
spec.description = "#{spec.summary} Pode ajustar dias para reposicionamento temporal."
|
16
14
|
|
15
|
+
spec.required_ruby_version = Gem::Requirement.new('~> 2.7')
|
17
16
|
spec.metadata['homepage_uri'] = spec.homepage
|
18
|
-
spec.metadata['yard.run']
|
17
|
+
spec.metadata['yard.run'] = 'yard'
|
19
18
|
|
20
19
|
# Specify which files should be added to the gem when it is released.
|
21
20
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
@@ -29,10 +28,13 @@ Gem::Specification.new do |spec|
|
|
29
28
|
|
30
29
|
spec.add_development_dependency('bundler')
|
31
30
|
spec.add_development_dependency('rake')
|
31
|
+
spec.add_development_dependency('reek')
|
32
|
+
spec.add_development_dependency('rubocop')
|
33
|
+
spec.add_development_dependency('solargraph')
|
34
|
+
spec.add_development_dependency('yard')
|
32
35
|
|
33
36
|
spec.add_dependency('curb')
|
34
37
|
spec.add_dependency('faraday')
|
35
38
|
spec.add_dependency('google-cloud-bigquery')
|
36
39
|
spec.add_dependency('thor')
|
37
|
-
spec.add_dependency('yard')
|
38
40
|
end
|
data/lib/cns.rb
CHANGED
@@ -1,24 +1,31 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require('thor')
|
4
|
+
require('cns/apibc')
|
5
|
+
require('cns/apice1')
|
6
|
+
require('cns/apice2')
|
7
|
+
require('cns/bigquery1')
|
8
|
+
require('cns/bigquery2')
|
9
|
+
require('cns/bigquery3')
|
10
|
+
require('cns/bigquery4')
|
11
|
+
require('cns/etherscan1')
|
12
|
+
require('cns/etherscan2')
|
13
|
+
require('cns/greymass1')
|
14
|
+
require('cns/greymass2')
|
15
|
+
require('cns/bitcoinde')
|
16
|
+
require('cns/kraken')
|
17
|
+
require('cns/paymium')
|
18
|
+
require('cns/therock')
|
4
19
|
require('cns/version')
|
5
20
|
|
6
21
|
module Cns
|
7
|
-
# classe para erros desta gem
|
8
|
-
class Erro < StandardError
|
9
|
-
# @return [StandardError] personalizacao dos erros
|
10
|
-
def initialize(msg)
|
11
|
-
super(msg)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
22
|
# classe para carregar/mostrar dados transacoes eth & eos no bigquery
|
16
23
|
class CLI < Thor
|
17
24
|
desc 'work', 'carrega transacoes novas no bigquery'
|
18
25
|
option :h, type: :hash, default: {}, desc: 'configuracao ajuste reposicionamento temporal'
|
19
26
|
# carrega transacoes novas no bigquery
|
20
27
|
def work
|
21
|
-
|
28
|
+
Bigquery.new(options).processa_tudo
|
22
29
|
end
|
23
30
|
|
24
31
|
desc 'show', 'mostra resumo transacoes'
|
@@ -26,7 +33,7 @@ module Cns
|
|
26
33
|
option :t, type: :boolean, default: false, desc: 'mostra transacoes todas ou somente novas'
|
27
34
|
# mostra resumo transacoes
|
28
35
|
def show
|
29
|
-
|
36
|
+
Bigquery.new(options).mostra_tudo
|
30
37
|
end
|
31
38
|
|
32
39
|
default_task :show
|
data/lib/cns/apibc.rb
ADDED
@@ -0,0 +1,280 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require('faraday')
|
4
|
+
require('json')
|
5
|
+
|
6
|
+
# @author Hernani Rodrigues Vaz
|
7
|
+
module Cns
|
8
|
+
# classe para acesso dados blockchains
|
9
|
+
class Apibc
|
10
|
+
# @example account_es
|
11
|
+
# {
|
12
|
+
# status: '1',
|
13
|
+
# message: 'OK',
|
14
|
+
# result: [
|
15
|
+
# { account: '0x...', balance: '4000000000000000000' },
|
16
|
+
# { account: '0x...', balance: '87000000000000000000' }
|
17
|
+
# ]
|
18
|
+
# }
|
19
|
+
# @param [String] ads lista enderecos ETH (max 20)
|
20
|
+
# @param [Hash] par parametros base do pedido HTTP
|
21
|
+
# @return [Array<Hash>] lista enderecos e seus saldos
|
22
|
+
def account_es(ads, par = { module: 'account', action: 'balancemulti', tag: 'latest' })
|
23
|
+
JSON.parse(
|
24
|
+
(conn_es.get('api') do |o|
|
25
|
+
o.headers = { content_type: 'application/json', accept: 'application/json', user_agent: 'etherscan;ruby' }
|
26
|
+
o.params = par.merge(address: ads.join(','), apikey: ENV['ETHERSCAN_API_KEY'])
|
27
|
+
end).body,
|
28
|
+
symbolize_names: true
|
29
|
+
)[:result]
|
30
|
+
rescue StandardError
|
31
|
+
[]
|
32
|
+
end
|
33
|
+
|
34
|
+
# @example account_gm
|
35
|
+
# {
|
36
|
+
# account_name: '...',
|
37
|
+
# head_block_num: 141_391_122,
|
38
|
+
# head_block_time: '2020-09-11T16:05:51.000',
|
39
|
+
# privileged: false,
|
40
|
+
# last_code_update: '1970-01-01T00:00:00.000',
|
41
|
+
# created: '2018-06-09T13:14:37.000',
|
42
|
+
#
|
43
|
+
# core_liquid_balance: '1232.0228 EOS',
|
44
|
+
# total_resources: { owner: '...', net_weight: '1000.1142 EOS', cpu_weight: '1000.1144 EOS', ram_bytes: 8148 },
|
45
|
+
#
|
46
|
+
# ram_quota: 9548,
|
47
|
+
# net_weight: 10_001_142,
|
48
|
+
# cpu_weight: 10_001_144,
|
49
|
+
# net_limit: { used: 0, available: 1_066_648_346, max: 1_066_648_346 },
|
50
|
+
# cpu_limit: { used: 338, available: 88_498, max: 88_836 },
|
51
|
+
# ram_usage: 3574,
|
52
|
+
# permissions: [
|
53
|
+
# {
|
54
|
+
# perm_name: 'active',
|
55
|
+
# parent: 'owner',
|
56
|
+
# required_auth: {
|
57
|
+
# threshold: 1, keys: [{ key: 'EOS...', weight: 1 }], accounts: [], waits: []
|
58
|
+
# }
|
59
|
+
# },
|
60
|
+
# {
|
61
|
+
# perm_name: 'owner',
|
62
|
+
# parent: '',
|
63
|
+
# required_auth: {
|
64
|
+
# threshold: 1, keys: [{ key: 'EOS...', weight: 1 }], accounts: [], waits: []
|
65
|
+
# }
|
66
|
+
# }
|
67
|
+
# ],
|
68
|
+
# self_delegated_bandwidth: { from: '...', to: '...', net_weight: '1000.1142 EOS', cpu_weight: '1000.1144 EOS' },
|
69
|
+
# refund_request: nil,
|
70
|
+
# voter_info: {
|
71
|
+
# owner: '...',
|
72
|
+
# proxy: '...',
|
73
|
+
# producers: [],
|
74
|
+
# staked: 20_002_286,
|
75
|
+
# last_vote_weight: '17172913021904.12109375000000000',
|
76
|
+
# proxied_vote_weight: '0.00000000000000000',
|
77
|
+
# is_proxy: 0,
|
78
|
+
# flags1: 0,
|
79
|
+
# reserved2: 0,
|
80
|
+
# reserved3: '0.0000 EOS'
|
81
|
+
# },
|
82
|
+
# rex_info: nil
|
83
|
+
# }
|
84
|
+
# @param [String] add endereco EOS
|
85
|
+
# @param [String] uri Uniform Resource Identifier do pedido HTTP
|
86
|
+
# @return [Hash] endereco e seus saldo/recursos
|
87
|
+
def account_gm(add, uri = '/v1/chain/get_account')
|
88
|
+
JSON.parse(
|
89
|
+
conn_gm.post(
|
90
|
+
uri, { account_name: add }.to_json, content_type: 'application/json'
|
91
|
+
).body,
|
92
|
+
symbolize_names: true
|
93
|
+
)
|
94
|
+
rescue StandardError
|
95
|
+
{ core_liquid_balance: 0, total_resources: { net_weight: 0, cpu_weight: 0 } }
|
96
|
+
end
|
97
|
+
|
98
|
+
# @example norml_es
|
99
|
+
# {
|
100
|
+
# status: '1',
|
101
|
+
# message: 'OK',
|
102
|
+
# result: [
|
103
|
+
# {
|
104
|
+
# blockNumber: '4984535',
|
105
|
+
# timeStamp: '1517094794',
|
106
|
+
# hash: '0x...',
|
107
|
+
# nonce: '10',
|
108
|
+
# blockHash: '0x...',
|
109
|
+
# transactionIndex: '17',
|
110
|
+
# from: '0x...',
|
111
|
+
# to: '0x...',
|
112
|
+
# value: '52627271000000000000',
|
113
|
+
# gas: '21000',
|
114
|
+
# gasPrice: '19000000000',
|
115
|
+
# isError: '0',
|
116
|
+
# txreceipt_status: '1',
|
117
|
+
# input: '0x',
|
118
|
+
# contractAddress: '',
|
119
|
+
# gasUsed: '21000',
|
120
|
+
# cumulativeGasUsed: '566293',
|
121
|
+
# confirmations: '5848660'
|
122
|
+
# },
|
123
|
+
# {}
|
124
|
+
# ]
|
125
|
+
# }
|
126
|
+
# @param [String] add endereco ETH
|
127
|
+
# @param [Integer] pag pagina transacoes
|
128
|
+
# @param [Array<Hash>] ary acumulador transacoes
|
129
|
+
# @param par (see account_es)
|
130
|
+
# @return [Array<Hash>] lista completa transacoes etherscan
|
131
|
+
def norml_es(add, pag = 0, ary = [], par = { module: 'account', action: 'txlist', offset: 10_000 })
|
132
|
+
r = JSON.parse(
|
133
|
+
(conn_es.get('api') do |o|
|
134
|
+
o.headers = { content_type: 'application/json', accept: 'application/json', user_agent: 'etherscan;ruby' }
|
135
|
+
o.params = par.merge(address: add, page: pag + 1, apikey: ENV['ETHERSCAN_API_KEY'])
|
136
|
+
end).body,
|
137
|
+
symbolize_names: true
|
138
|
+
)[:result]
|
139
|
+
r.count < 10_000 ? ary + r : norml_es(add, pag + 1, ary + r)
|
140
|
+
rescue StandardError
|
141
|
+
ary
|
142
|
+
end
|
143
|
+
|
144
|
+
# @example token_es
|
145
|
+
# {
|
146
|
+
# status: '1',
|
147
|
+
# message: 'OK',
|
148
|
+
# result: [
|
149
|
+
# {
|
150
|
+
# blockNumber: '3967652',
|
151
|
+
# timeStamp: '1499081515',
|
152
|
+
# hash: '0x registo duplicado com todos os dados iguais',
|
153
|
+
# nonce: '3',
|
154
|
+
# blockHash: '0x00a49e999036dc13dc6c4244bb1d51d3146fe7f00bfb500a7624d82e299c7328',
|
155
|
+
# from: '0xd0a6e6c54dbc68db5db3a091b171a77407ff7ccf',
|
156
|
+
# contractAddress: '0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0',
|
157
|
+
# to: '0x...',
|
158
|
+
# value: '0',
|
159
|
+
# tokenName: 'EOS',
|
160
|
+
# tokenSymbol: 'EOS',
|
161
|
+
# tokenDecimal: '18',
|
162
|
+
# transactionIndex: '83',
|
163
|
+
# gas: '173399',
|
164
|
+
# gasPrice: '21000000000',
|
165
|
+
# gasUsed: '173398',
|
166
|
+
# input: 'deprecated',
|
167
|
+
# cumulativeGasUsed: '7484878',
|
168
|
+
# confirmations: '3442641'
|
169
|
+
# },
|
170
|
+
# {}
|
171
|
+
# ]
|
172
|
+
# }
|
173
|
+
# @param (see norml_es)
|
174
|
+
# @return [Array<Hash>] lista completa token transfer events etherscan
|
175
|
+
def token_es(add, pag = 0, ary = [], par = { module: 'account', action: 'tokentx', offset: 10_000 })
|
176
|
+
# registos duplicados aparecem em token events (ver exemplo acima)
|
177
|
+
# -quando ha erros na blockchain (acho)
|
178
|
+
# -quando ha token events identicos no mesmo block (acho)
|
179
|
+
r = JSON.parse(
|
180
|
+
(conn_es.get('api') do |o|
|
181
|
+
o.headers = { content_type: 'application/json', accept: 'application/json', user_agent: 'etherscan;ruby' }
|
182
|
+
o.params = par.merge(address: add, page: pag + 1, apikey: ENV['ETHERSCAN_API_KEY'])
|
183
|
+
end).body,
|
184
|
+
symbolize_names: true
|
185
|
+
)[:result]
|
186
|
+
r.count < 10_000 ? ary + r : token_es(add, pag + 1, ary + r)
|
187
|
+
rescue StandardError
|
188
|
+
ary
|
189
|
+
end
|
190
|
+
|
191
|
+
# @example ledger_gm
|
192
|
+
# {
|
193
|
+
# actions: [
|
194
|
+
# {
|
195
|
+
# account_action_seq: 964,
|
196
|
+
# action_trace: {
|
197
|
+
# account_ram_deltas: [],
|
198
|
+
# act: {
|
199
|
+
# account: 'voicebestapp',
|
200
|
+
# authorization: [
|
201
|
+
# { actor: 'thetruevoice', permission: 'active' },
|
202
|
+
# { actor: 'voicebestapp', permission: 'active' }
|
203
|
+
# ],
|
204
|
+
# data: { from: 'voicebestapp', memo: '...', quantity: '1.0001 MESSAGE', to: '...' },
|
205
|
+
# hex_data: '...',
|
206
|
+
# name: 'transfer'
|
207
|
+
# },
|
208
|
+
# action_ordinal: 10,
|
209
|
+
# block_num: 141_345_345,
|
210
|
+
# block_time: '2020-09-11T09:44:04.500',
|
211
|
+
# closest_unnotified_ancestor_action_ordinal: 5,
|
212
|
+
# context_free: false,
|
213
|
+
# creator_action_ordinal: 5,
|
214
|
+
# elapsed: 6,
|
215
|
+
# producer_block_id: '...',
|
216
|
+
# receipt: {
|
217
|
+
# abi_sequence: 1,
|
218
|
+
# act_digest: '...',
|
219
|
+
# auth_sequence: [['thetruevoice', 6_778_215], ['voicebestapp', 435_346]],
|
220
|
+
# code_sequence: 1,
|
221
|
+
# global_sequence: 233_283_589_258,
|
222
|
+
# receiver: '...',
|
223
|
+
# recv_sequence: 927
|
224
|
+
# },
|
225
|
+
# receiver: '...',
|
226
|
+
# trx_id: '...'
|
227
|
+
# },
|
228
|
+
# block_num: 141_345_345,
|
229
|
+
# block_time: '2020-09-11T09:44:04.500',
|
230
|
+
# global_action_seq: 233_283_589_258,
|
231
|
+
# irreversible: true
|
232
|
+
# },
|
233
|
+
# {}
|
234
|
+
# ],
|
235
|
+
# head_block_num: 141_721_698,
|
236
|
+
# last_irreversible_block: 141_721_371
|
237
|
+
# }
|
238
|
+
# @param add (see account_gm)
|
239
|
+
# @param [Integer] pos posicao transacoes
|
240
|
+
# @param [Array<Hash>] ary acumulador transacoes
|
241
|
+
# @param uri (see account_gm)
|
242
|
+
# @return [Array<Hash>] lista completa transacoes greymass
|
243
|
+
def ledger_gm(add, pos = 0, ary = [], uri = '/v1/history/get_actions')
|
244
|
+
r = JSON.parse(
|
245
|
+
conn_gm.post(
|
246
|
+
uri, { account_name: add, pos: pos, offset: 100 }.to_json, content_type: 'application/json'
|
247
|
+
).body,
|
248
|
+
symbolize_names: true
|
249
|
+
)[:actions]
|
250
|
+
r.count < 100 ? ary + r : ledger_gm(add, pos + r.count, ary + r)
|
251
|
+
rescue StandardError
|
252
|
+
ary
|
253
|
+
end
|
254
|
+
|
255
|
+
private
|
256
|
+
|
257
|
+
# @return [<Symbol>] adapter for the connection - default :net_http
|
258
|
+
def adapter
|
259
|
+
@adapter ||= Faraday.default_adapter
|
260
|
+
end
|
261
|
+
|
262
|
+
# @return [<Faraday::Connection>] connection object for etherscan
|
263
|
+
def conn_es
|
264
|
+
@conn_es ||=
|
265
|
+
Faraday.new(url: 'https://api.etherscan.io/') do |c|
|
266
|
+
c.request(:url_encoded)
|
267
|
+
c.adapter(adapter)
|
268
|
+
end
|
269
|
+
end
|
270
|
+
|
271
|
+
# @return [<Faraday::Connection>] connection object for greymass
|
272
|
+
def conn_gm
|
273
|
+
@conn_gm ||=
|
274
|
+
Faraday.new(url: 'https://eos.greymass.com') do |c|
|
275
|
+
c.request(:url_encoded)
|
276
|
+
c.adapter(adapter)
|
277
|
+
end
|
278
|
+
end
|
279
|
+
end
|
280
|
+
end
|