cns 0.1.1 → 0.1.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e3b7d92c5d0783aab6b1400ba4bd7e397e4f7391cfbf83d1d7faf5a8c52349aa
4
- data.tar.gz: 43aa372a6d6f6d148f17c33065e8f0550647a2b0b78f213b00363c7ea2f74828
3
+ metadata.gz: ef054c95506b8f32415f3c3f47b2272886ac824f10666c91a4bd0f3b118b3ffb
4
+ data.tar.gz: c18711c2d3ffcdf131218d3509f954f163046fa5b498e39b47e15332b3fb53a1
5
5
  SHA512:
6
- metadata.gz: 22fb5e905b0469a4022c278d643bcf06b11afab7a011329775ab3cffee92bccfeb9392c676c993569ddd7404e090ab8d2a469c1aabfff4c833b873053f3f7435
7
- data.tar.gz: 0d7531ba08be4fe655a578475f4752d80330e41930b5d5d7732463838539357ae2936e6d11bcbe9bbd112508190404b523bceed6d4f1475853eb9f3b1b29c9e2
6
+ metadata.gz: ef30f7f2617710c765d6dd8d4a21e673a55da5aa59ee4bb1ac15343c70a9ee5cfa7b9e26ccc01019c53cbd69d571fd07981e3bba35fbc53a04d308ccd61d118c
7
+ data.tar.gz: df9e5fbe45744df8bb75dc5b8145fe8f875a6085877d8709e9cc7d2cf5a907ec797a9cad8f3c557b7599bfc079873822e7c4aa390334e8696dd3b21aa57c0db5
@@ -0,0 +1,64 @@
1
+ ---
2
+ detectors:
3
+ TooManyStatements:
4
+ exclude:
5
+ - initialize
6
+ max_statements: 10
7
+ RepeatedConditional:
8
+ exclude:
9
+ - "Cns::Apice"
10
+ FeatureEnvy:
11
+ exclude:
12
+ - "Cns::Apice#deposit_unif"
13
+ - "Cns::Apice#withdrawal_unif"
14
+ - "Cns::Bigquery#etht_1val"
15
+ - "Cns::Bigquery#etht_2val"
16
+ - "Cns::Bigquery#etht_3val"
17
+ - "Cns::Bigquery#ethk_1val"
18
+ - "Cns::Bigquery#ethk_2val"
19
+ - "Cns::Bigquery#ethk_3val"
20
+ - "Cns::Bigquery#eost_1val"
21
+ - "Cns::Bigquery#eost_2val"
22
+ - "Cns::Bigquery#det_1val"
23
+ - "Cns::Bigquery#det_2val"
24
+ - "Cns::Bigquery#mtl_1val"
25
+ - "Cns::Bigquery#ust_1val"
26
+ - "Cns::Bigquery#frl_val"
27
+ - "Cns::Bigquery#usl_val"
28
+ - "Cns::Bitcoinde#formata_ledger"
29
+ - "Cns::Bitcoinde#formata_trades"
30
+ - "Cns::Etherscan#bq_bc"
31
+ - "Cns::Etherscan#formata_valores"
32
+ - "Cns::Etherscan#formata_endereco"
33
+ - "Cns::Etherscan#formata_transacao_norml"
34
+ - "Cns::Etherscan#formata_transacao_token"
35
+ - "Cns::Greymass#bq_bc"
36
+ - "Cns::Greymass#greymass_sl"
37
+ - "Cns::Greymass#formata_carteira"
38
+ - "Cns::Greymass#formata_ledger"
39
+ - "Cns::Greymass#filtrar_tx"
40
+ - "Cns::Kraken#formata_ledger"
41
+ - "Cns::Kraken#formata_trades"
42
+ - "Cns::Paymium#formata_ledger"
43
+ - "Cns::Paymium#formata_uuid"
44
+ - "Cns::TheRock#formata_ledger"
45
+ - "Cns::TheRock#formata_saldos"
46
+ UtilityFunction:
47
+ exclude:
48
+ - "Cns::Apice#hus"
49
+ - "Cns::Bigquery#del_val"
50
+ - "Cns::Etherscan#ok?"
51
+ - "Cns::Greymass#ok?"
52
+ NestedIterators:
53
+ exclude:
54
+ - "Cns::Etherscan#idk"
55
+ - "Cns::Etherscan#idt"
56
+ - "Cns::Etherscan#novtx"
57
+ - "Cns::Etherscan#novkx"
58
+ - "Cns::Etherscan#dados"
59
+ - "Cns::Etherscan#filtrar_tx"
60
+ - "Cns::Greymass#novax"
61
+ - "Cns::Greymass#idt"
62
+ - "Cns::Greymass#dados"
63
+ - "Cns::Paymium#kyl"
64
+ - "Cns::Paymium#ledger"
@@ -1,12 +1,13 @@
1
+ ---
1
2
  AllCops:
2
3
  TargetRubyVersion: 2.7
3
4
  EnabledByDefault: true
4
5
 
5
6
  Style/Copyright:
6
- Enabled: false
7
+ Enabled: false
7
8
 
8
9
  Lint/ConstantResolution:
9
- Enabled: false
10
+ Enabled: false
10
11
 
11
12
  Style/ConstantVisibility:
12
- Enabled: false
13
+ Enabled: false
@@ -1,25 +1,29 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cns (0.1.1)
4
+ cns (0.1.6)
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.10)
19
+ curb (0.9.11)
18
20
  declarative (0.0.20)
19
21
  declarative-option (0.1.0)
20
- faraday (1.0.1)
22
+ e2mmap (0.1.0)
23
+ faraday (1.1.0)
21
24
  multipart-post (>= 1.2, < 3)
22
- google-api-client (0.44.2)
25
+ ruby2_keywords
26
+ google-api-client (0.52.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.22.0)
35
+ google-cloud-bigquery (1.25.0)
32
36
  concurrent-ruby (~> 1.0)
33
- google-api-client (~> 0.33)
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.3.3)
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.13.1)
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,80 @@ 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
+ kramdown (2.3.0)
58
+ rexml
59
+ kramdown-parser-gfm (1.1.0)
60
+ kramdown (~> 2.0)
61
+ kwalify (0.7.2)
52
62
  memoist (0.16.2)
53
63
  mini_mime (1.0.2)
64
+ mini_portile2 (2.4.0)
54
65
  multi_json (1.15.0)
55
66
  multipart-post (2.1.1)
67
+ nokogiri (1.10.10)
68
+ mini_portile2 (~> 2.4.0)
56
69
  os (1.1.1)
70
+ parallel (1.20.1)
71
+ parser (2.7.2.0)
72
+ ast (~> 2.4.1)
73
+ psych (3.2.1)
57
74
  public_suffix (4.0.6)
75
+ rainbow (3.0.0)
58
76
  rake (12.3.3)
77
+ reek (6.0.2)
78
+ kwalify (~> 0.7.0)
79
+ parser (>= 2.5.0.0, < 2.8, != 2.5.1.1)
80
+ psych (~> 3.1)
81
+ rainbow (>= 2.0, < 4.0)
82
+ regexp_parser (2.0.1)
59
83
  representable (3.0.4)
60
84
  declarative (< 0.1.0)
61
85
  declarative-option (< 0.2.0)
62
86
  uber (< 0.2.0)
63
87
  retriable (3.1.2)
88
+ reverse_markdown (2.0.0)
89
+ nokogiri
64
90
  rexml (3.2.4)
91
+ rubocop (1.6.1)
92
+ parallel (~> 1.10)
93
+ parser (>= 2.7.1.5)
94
+ rainbow (>= 2.2.2, < 4.0)
95
+ regexp_parser (>= 1.8, < 3.0)
96
+ rexml
97
+ rubocop-ast (>= 1.2.0, < 2.0)
98
+ ruby-progressbar (~> 1.7)
99
+ unicode-display_width (>= 1.4.0, < 2.0)
100
+ rubocop-ast (1.3.0)
101
+ parser (>= 2.7.1.5)
102
+ rubocop-rake (0.5.1)
103
+ rubocop
104
+ ruby-progressbar (1.10.1)
105
+ ruby2_keywords (0.0.2)
65
106
  signet (0.14.0)
66
107
  addressable (~> 2.3)
67
108
  faraday (>= 0.17.3, < 2.0)
68
109
  jwt (>= 1.5, < 3.0)
69
110
  multi_json (~> 1.10)
111
+ solargraph (0.40.0)
112
+ backport (~> 1.1)
113
+ benchmark
114
+ bundler (>= 1.17.2)
115
+ e2mmap
116
+ jaro_winkler (~> 1.5)
117
+ kramdown (~> 2.3)
118
+ kramdown-parser-gfm (~> 1.1)
119
+ parser (~> 2.3)
120
+ reverse_markdown (>= 1.0.5, < 3)
121
+ rubocop (>= 0.52)
122
+ thor (~> 1.0)
123
+ tilt (~> 2.0)
124
+ yard (~> 0.9, >= 0.9.24)
70
125
  thor (1.0.1)
126
+ tilt (2.0.10)
71
127
  uber (0.1.0)
128
+ unicode-display_width (1.7.0)
72
129
  yard (0.9.25)
73
130
 
74
131
  PLATFORMS
@@ -78,6 +135,11 @@ DEPENDENCIES
78
135
  bundler
79
136
  cns!
80
137
  rake (~> 12.0)
138
+ reek
139
+ rubocop
140
+ rubocop-rake
141
+ solargraph
142
+ yard
81
143
 
82
144
  BUNDLED WITH
83
145
  2.1.4
@@ -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.required_ruby_version = Gem::Requirement.new('>= 2.3.0')
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'] = 'yard'
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,14 @@ 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('rubocop-rake')
34
+ spec.add_development_dependency('solargraph')
35
+ spec.add_development_dependency('yard')
32
36
 
33
37
  spec.add_dependency('curb')
34
38
  spec.add_dependency('faraday')
35
39
  spec.add_dependency('google-cloud-bigquery')
36
40
  spec.add_dependency('thor')
37
- spec.add_dependency('yard')
38
41
  end
data/lib/cns.rb CHANGED
@@ -1,35 +1,24 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require('thor')
4
- require('cns/apide')
5
- require('cns/apies')
6
- require('cns/apifr')
7
- require('cns/apigm')
8
- require('cns/apimt')
9
- require('cns/apius')
4
+ require('cns/apibc')
5
+ require('cns/apice1')
6
+ require('cns/apice2')
10
7
  require('cns/bigquery1')
11
8
  require('cns/bigquery2')
12
9
  require('cns/bigquery3')
13
10
  require('cns/bigquery4')
14
- require('cns/bitcoinde')
15
11
  require('cns/etherscan1')
16
12
  require('cns/etherscan2')
17
13
  require('cns/greymass1')
18
14
  require('cns/greymass2')
15
+ require('cns/bitcoinde')
19
16
  require('cns/kraken')
20
17
  require('cns/paymium')
21
18
  require('cns/therock')
22
19
  require('cns/version')
23
20
 
24
21
  module Cns
25
- # classe para erros desta gem
26
- class Erro < StandardError
27
- # @return [StandardError] personalizacao dos erros
28
- def initialize(msg)
29
- super(msg)
30
- end
31
- end
32
-
33
22
  # classe para carregar/mostrar dados transacoes eth & eos no bigquery
34
23
  class CLI < Thor
35
24
  desc 'work', 'carrega transacoes novas no bigquery'
@@ -0,0 +1,266 @@
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
+ # @return [Array<Hash>] lista enderecos e seus saldos
21
+ def account_es(ads)
22
+ JSON.parse(
23
+ conn_es.get('api', action: 'balancemulti', tag: 'latest', address: ads.join(',')).body,
24
+ symbolize_names: true
25
+ )[:result]
26
+ rescue StandardError
27
+ []
28
+ end
29
+
30
+ # @example account_gm
31
+ # {
32
+ # account_name: '...',
33
+ # head_block_num: 141_391_122,
34
+ # head_block_time: '2020-09-11T16:05:51.000',
35
+ # privileged: false,
36
+ # last_code_update: '1970-01-01T00:00:00.000',
37
+ # created: '2018-06-09T13:14:37.000',
38
+ #
39
+ # core_liquid_balance: '1232.0228 EOS',
40
+ # total_resources: { owner: '...', net_weight: '1000.1142 EOS', cpu_weight: '1000.1144 EOS', ram_bytes: 8148 },
41
+ #
42
+ # ram_quota: 9548,
43
+ # net_weight: 10_001_142,
44
+ # cpu_weight: 10_001_144,
45
+ # net_limit: { used: 0, available: 1_066_648_346, max: 1_066_648_346 },
46
+ # cpu_limit: { used: 338, available: 88_498, max: 88_836 },
47
+ # ram_usage: 3574,
48
+ # permissions: [
49
+ # {
50
+ # perm_name: 'active',
51
+ # parent: 'owner',
52
+ # required_auth: {
53
+ # threshold: 1, keys: [{ key: 'EOS...', weight: 1 }], accounts: [], waits: []
54
+ # }
55
+ # },
56
+ # {
57
+ # perm_name: 'owner',
58
+ # parent: '',
59
+ # required_auth: {
60
+ # threshold: 1, keys: [{ key: 'EOS...', weight: 1 }], accounts: [], waits: []
61
+ # }
62
+ # }
63
+ # ],
64
+ # self_delegated_bandwidth: { from: '...', to: '...', net_weight: '1000.1142 EOS', cpu_weight: '1000.1144 EOS' },
65
+ # refund_request: nil,
66
+ # voter_info: {
67
+ # owner: '...',
68
+ # proxy: '...',
69
+ # producers: [],
70
+ # staked: 20_002_286,
71
+ # last_vote_weight: '17172913021904.12109375000000000',
72
+ # proxied_vote_weight: '0.00000000000000000',
73
+ # is_proxy: 0,
74
+ # flags1: 0,
75
+ # reserved2: 0,
76
+ # reserved3: '0.0000 EOS'
77
+ # },
78
+ # rex_info: nil
79
+ # }
80
+ # @param [String] add endereco EOS
81
+ # @return [Hash] endereco e seus saldo/recursos
82
+ def account_gm(add)
83
+ JSON.parse(conn_gm.post('/v1/chain/get_account', { account_name: add }.to_json).body, symbolize_names: true)
84
+ rescue StandardError
85
+ { core_liquid_balance: 0, total_resources: { net_weight: 0, cpu_weight: 0 } }
86
+ end
87
+
88
+ # @example norml_es
89
+ # {
90
+ # status: '1',
91
+ # message: 'OK',
92
+ # result: [
93
+ # {
94
+ # blockNumber: '4984535',
95
+ # timeStamp: '1517094794',
96
+ # hash: '0x...',
97
+ # nonce: '10',
98
+ # blockHash: '0x...',
99
+ # transactionIndex: '17',
100
+ # from: '0x...',
101
+ # to: '0x...',
102
+ # value: '52627271000000000000',
103
+ # gas: '21000',
104
+ # gasPrice: '19000000000',
105
+ # isError: '0',
106
+ # txreceipt_status: '1',
107
+ # input: '0x',
108
+ # contractAddress: '',
109
+ # gasUsed: '21000',
110
+ # cumulativeGasUsed: '566293',
111
+ # confirmations: '5848660'
112
+ # },
113
+ # {}
114
+ # ]
115
+ # }
116
+ # @param [String] add endereco ETH
117
+ # @param [Integer] pag pagina transacoes
118
+ # @param [Array<Hash>] aes acumulador transacoes
119
+ # @return [Array<Hash>] lista completa transacoes etherscan
120
+ def norml_es(add, pag = 0, aes = [])
121
+ res = JSON.parse(
122
+ conn_es.get('api', action: 'txlist', offset: 10_000, address: add, page: pag += 1).body,
123
+ symbolize_names: true
124
+ )[:result]
125
+ aes += res
126
+ res.count < 10_000 ? aes : norml_es(add, pag, aes)
127
+ rescue StandardError
128
+ aes
129
+ end
130
+
131
+ # @example token_es
132
+ # {
133
+ # status: '1',
134
+ # message: 'OK',
135
+ # result: [
136
+ # {
137
+ # blockNumber: '3967652',
138
+ # timeStamp: '1499081515',
139
+ # hash: '0x registo duplicado com todos os dados iguais',
140
+ # nonce: '3',
141
+ # blockHash: '0x00a49e999036dc13dc6c4244bb1d51d3146fe7f00bfb500a7624d82e299c7328',
142
+ # from: '0xd0a6e6c54dbc68db5db3a091b171a77407ff7ccf',
143
+ # contractAddress: '0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0',
144
+ # to: '0x...',
145
+ # value: '0',
146
+ # tokenName: 'EOS',
147
+ # tokenSymbol: 'EOS',
148
+ # tokenDecimal: '18',
149
+ # transactionIndex: '83',
150
+ # gas: '173399',
151
+ # gasPrice: '21000000000',
152
+ # gasUsed: '173398',
153
+ # input: 'deprecated',
154
+ # cumulativeGasUsed: '7484878',
155
+ # confirmations: '3442641'
156
+ # },
157
+ # {}
158
+ # ]
159
+ # }
160
+ # @param (see norml_es)
161
+ # @return [Array<Hash>] lista completa token transfer events etherscan
162
+ def token_es(add, pag = 0, aes = [])
163
+ # registos duplicados aparecem em token events (ver exemplo acima)
164
+ # -quando ha erros na blockchain (acho)
165
+ # -quando ha token events identicos no mesmo block (acho)
166
+ res = JSON.parse(
167
+ conn_es.get('api', action: 'tokentx', offset: 10_000, address: add, page: pag += 1).body,
168
+ symbolize_names: true
169
+ )[:result]
170
+ aes += res
171
+ res.count < 10_000 ? aes : token_es(add, pag, aes)
172
+ rescue StandardError
173
+ aes
174
+ end
175
+
176
+ # @example ledger_gm
177
+ # {
178
+ # actions: [
179
+ # {
180
+ # account_action_seq: 964,
181
+ # action_trace: {
182
+ # account_ram_deltas: [],
183
+ # act: {
184
+ # account: 'voicebestapp',
185
+ # authorization: [
186
+ # { actor: 'thetruevoice', permission: 'active' },
187
+ # { actor: 'voicebestapp', permission: 'active' }
188
+ # ],
189
+ # data: { from: 'voicebestapp', memo: '...', quantity: '1.0001 MESSAGE', to: '...' },
190
+ # hex_data: '...',
191
+ # name: 'transfer'
192
+ # },
193
+ # action_ordinal: 10,
194
+ # block_num: 141_345_345,
195
+ # block_time: '2020-09-11T09:44:04.500',
196
+ # closest_unnotified_ancestor_action_ordinal: 5,
197
+ # context_free: false,
198
+ # creator_action_ordinal: 5,
199
+ # elapsed: 6,
200
+ # producer_block_id: '...',
201
+ # receipt: {
202
+ # abi_sequence: 1,
203
+ # act_digest: '...',
204
+ # auth_sequence: [['thetruevoice', 6_778_215], ['voicebestapp', 435_346]],
205
+ # code_sequence: 1,
206
+ # global_sequence: 233_283_589_258,
207
+ # receiver: '...',
208
+ # recv_sequence: 927
209
+ # },
210
+ # receiver: '...',
211
+ # trx_id: '...'
212
+ # },
213
+ # block_num: 141_345_345,
214
+ # block_time: '2020-09-11T09:44:04.500',
215
+ # global_action_seq: 233_283_589_258,
216
+ # irreversible: true
217
+ # },
218
+ # {}
219
+ # ],
220
+ # head_block_num: 141_721_698,
221
+ # last_irreversible_block: 141_721_371
222
+ # }
223
+ # @param add (see account_gm)
224
+ # @param [Array<Hash>] agm acumulador transacoes
225
+ # @return [Array<Hash>] lista completa transacoes greymass
226
+ def ledger_gm(add, agm = [])
227
+ res = JSON.parse(
228
+ conn_gm.post('/v1/history/get_actions', { account_name: add, pos: agm.count, offset: 100 }.to_json).body,
229
+ symbolize_names: true
230
+ )[:actions]
231
+ agm += res
232
+ res.count < 100 ? agm : ledger_gm(add, agm)
233
+ rescue StandardError
234
+ agm
235
+ end
236
+
237
+ private
238
+
239
+ # @return [<Symbol>] adapter for the connection - default :net_http
240
+ def adapter
241
+ @adapter ||= Faraday.default_adapter
242
+ end
243
+
244
+ # @return [<Faraday::Connection>] connection object for etherscan
245
+ def conn_es
246
+ @conn_es ||=
247
+ Faraday.new(
248
+ url: 'https://api.etherscan.io/',
249
+ params: { module: 'account', apikey: ENV['ETHERSCAN_API_KEY'] },
250
+ headers: { content_type: 'application/json', accept: 'application/json', user_agent: 'etherscan;ruby' }
251
+ ) do |con|
252
+ con.request(:url_encoded)
253
+ con.adapter(adapter)
254
+ end
255
+ end
256
+
257
+ # @return [<Faraday::Connection>] connection object for greymass
258
+ def conn_gm
259
+ @conn_gm ||=
260
+ Faraday.new(url: 'https://eos.greymass.com', headers: { content_type: 'application/json' }) do |con|
261
+ con.request(:url_encoded)
262
+ con.adapter(adapter)
263
+ end
264
+ end
265
+ end
266
+ end