etherscan 0.2.4 → 0.3.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7e554929b14bae7f3a3f2c5da47aa57775a4e1088dd8f108cfe84f2c857ae088
4
- data.tar.gz: 833280f97f3d0649c0f12be779b93d0da8ee347681d22f96942b7b040486fb9d
3
+ metadata.gz: '0227579db92861939267b0cac5f56646f809f4a4d1db84800f77401e68404717'
4
+ data.tar.gz: f1451aa9dc8117abe7070f80908b6cc764bcba3407968b02aaa9af36f371961d
5
5
  SHA512:
6
- metadata.gz: 7cb3a7981cf01a151b2e2ea262810f81096dc9ee3a7634b806118bbc947f628ddbab97446d474a7c1093b4f43f3b940f9958a847cd42178d85317c9ec80ffff4
7
- data.tar.gz: 755c15c09278bd308ecd07c7359bed0677eea3d333b817fa2666e41788d9ce6e88c58446abeb0d4ffc81f478eafedfa1cbcf1f07f84563aba83515ffa8d5d33d
6
+ metadata.gz: 674a4e2c6fb06d13f1a075706658014f141ca6be9ffa74cfbcfa985ce49e0a3b476086c06a3c2759f88124d38872912df7d0776a316d0e01102650d09a0f158e
7
+ data.tar.gz: 711af9556a2a5efbf870fa90168ca39f5cecafc1c918b8c45b0830a82e65bc65be389ab361c16679027695d67de8c3ea15ddd65c93bd617af7c67a3778321b53
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Etherscan
4
- VERSION = '0.2.4'
4
+ VERSION = '0.3.0'
5
5
  end
data/lib/etherscan.rb CHANGED
@@ -3,6 +3,7 @@ require 'logger'
3
3
  require 'net/http'
4
4
  require 'etherscan/api'
5
5
  require 'tronscan/api'
6
+ require 'subscan/api'
6
7
 
7
8
  require 'active_support'
8
9
  require 'active_support/core_ext/string'
@@ -52,6 +53,12 @@ module Etherscan
52
53
  'tron' => 'https://apilist.tronscanapi.com/api',
53
54
  }
54
55
 
56
+ SUBSCAN_CHAINS = {
57
+ 'pangolin' => 'https://pangolin.api.subscan.io/api',
58
+ 'crab' => 'https://crab.api.subscan.io/api',
59
+ 'darwinia' => 'https://darwinia.api.subscan.io/api',
60
+ }
61
+
55
62
  class << self
56
63
  attr_accessor :logger
57
64
 
@@ -62,10 +69,17 @@ module Etherscan
62
69
  tron_url = TRON_CHAINS[chain_short_name]
63
70
  tron_url = TRON_CHAINS[chain_short_name.underscore] if url.nil?
64
71
 
65
- raise "Chain `#{chain_short_name}` is not supported. Only Etherscan [#{CHAINS.keys}] & Tronscan [#{TRON_CHAINS.keys}] are supported." if url.nil? && tron_url.nil?
72
+ subscan_url = SUBSCAN_CHAINS[chain_short_name]
73
+ subscan_url = SUBSCAN_CHAINS[chain_short_name.underscore] if url.nil?
74
+
75
+ raise "Chain `#{chain_short_name}` is not supported. Only " \
76
+ "Etherscan [#{CHAINS.keys}] & " \
77
+ "Subscan [#{SUBSCAN_CHAINS.keys}] & " \
78
+ "Tronscan [#{TRON_CHAINS.keys}] are supported." if url.nil? && tron_url.nil? && subscan_url.nil?
66
79
 
67
80
  return Etherscan::Api.new(url, api_key) if url
68
81
  return Tronscan::Api.new(tron_url, api_key) if tron_url
82
+ return Subscan::Api.new(subscan_url, api_key) if subscan_url
69
83
  end
70
84
 
71
85
  # for example: Etherscan.eth('your_api_key')
@@ -0,0 +1,50 @@
1
+ module Subscan
2
+ class Api
3
+ def initialize(url, api_key = nil)
4
+ @url = url
5
+ @api_key = api_key
6
+ end
7
+
8
+ def request(module_name, action, params = {})
9
+ params = params.reject { |_k, v| v.nil? } # filter out nil values
10
+
11
+ url = "#{@url}/scan/#{module_name}/#{action}"
12
+ uri = URI(url)
13
+ Etherscan.logger.debug "Req: #{uri}"
14
+
15
+ http = Net::HTTP.new(uri.host, uri.port)
16
+ http.use_ssl = (uri.scheme == 'https')
17
+
18
+ request = Net::HTTP::Post.new(uri)
19
+ request['Content-Type'] = 'application/json'
20
+ request['X-API-Key'] = @api_key unless @api_key.nil?
21
+ request.body = params.to_json
22
+ Etherscan.logger.debug "Body: #{request.body}"
23
+
24
+ response = http.request(request)
25
+
26
+ raise response.body if response.code != '200'
27
+
28
+ json_response = JSON.parse(response.body)
29
+
30
+ if json_response.key?('status')
31
+ raise json_response['message'] if json_response['status'] != '1'
32
+
33
+ json_response['result'] || json_response['message']
34
+ elsif json_response.key?('code') # normal response
35
+ raise json_response['message'] if json_response['code'] != 0
36
+
37
+ json_response['data']
38
+ end
39
+ end
40
+
41
+ def respond_to_missing?(*_args)
42
+ true
43
+ end
44
+
45
+ def method_missing(method, *args)
46
+ module_name, action = method.to_s.split('_')
47
+ request(module_name, action, args[0] || {})
48
+ end
49
+ end
50
+ end
data/lib/tronscan/api.rb CHANGED
@@ -21,13 +21,11 @@ module Tronscan
21
21
  request = Net::HTTP::Get.new(uri.request_uri)
22
22
  request['TRON-PRO-API-KEY'] = @api_key unless @api_key.nil?
23
23
 
24
- resp = http.request(request).body
24
+ response = http.request(request)
25
25
  # Etherscan.logger.debug "Rsp: #{resp}"
26
- resp = JSON.parse(resp)
26
+ raise response.body if response.code != '200'
27
27
 
28
- # raise resp['result'] if resp['status'] == '0'
29
-
30
- resp
28
+ JSON.parse(response.body)
31
29
  rescue StandardError => e
32
30
  puts e.message
33
31
  puts e.backtrace.inspect
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: etherscan
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aki Wu
@@ -37,6 +37,7 @@ files:
37
37
  - lib/etherscan.rb
38
38
  - lib/etherscan/api.rb
39
39
  - lib/etherscan/version.rb
40
+ - lib/subscan/api.rb
40
41
  - lib/tronscan/api.rb
41
42
  homepage: https://github.com/wuminzhe/etherscan
42
43
  licenses: