Class: Etherscan::Api
- Inherits:
-
Object
- Object
- Etherscan::Api
- Defined in:
- lib/etherscan/api.rb
Instance Method Summary collapse
-
#account_balance(address:, tag: 'latest') ⇒ Object
Accounts.
- #account_balancemulti(addresses:, tag: 'latest') ⇒ Object
- #account_tokenbalance(contractaddress:, address:, tag: 'latest') ⇒ Object
- #account_tokennfttx(address:, contractaddress:, startblock: 0, endblock: 999_999_999, sort: 'asc', page: 1, offset: 1000) ⇒ Object
- #account_tokentx(address:, contractaddress:, startblock: 0, endblock: 999_999_999, sort: 'asc', page: 1, offset: 1000) ⇒ Object
- #account_txlist(address:, startblock: 0, endblock: 999_999_999, sort: 'asc', page: 1, offset: 1000) ⇒ Object
- #account_txlistinternal(address: nil, startblock: 0, endblock: 999_999_999, sort: 'asc', page: 1, offset: 1000) ⇒ Object
- #account_txlistinternal_by_txhash(txhash:) ⇒ Object
- #block_getblockcount(blockno:) ⇒ Object
- #block_getblocknobytime(timestamp:, closest: 'before') ⇒ Object
-
#block_getblockreward(blockno:) ⇒ Object
Blocks.
-
#contract_getabi(address:) ⇒ Object
Contracts.
- #contract_getcontractcreation(contractaddresses:) ⇒ Object
- #contract_getsourcecode(address:) ⇒ Object
-
#initialize(url, api_key = nil) ⇒ Api
constructor
A new instance of Api.
-
#logs_getLogs(from_block: 0, to_block: 'latest', address: nil, topic0: nil, topic1: nil, topic2: nil, topic3: nil, topic0_1_opr: nil, topic1_2_opr: nil, topic2_3_opr: nil, topic0_2_opr: nil, topic0_3_opr: nil, topic1_3_opr: nil) ⇒ Object
Logs.
- #method_missing(method, *args) ⇒ Object
- #request(module_name, action, params = {}) ⇒ Object
- #respond_to_missing?(*_args) ⇒ Boolean
- #stats_ethprice ⇒ Object
-
#stats_ethsupply ⇒ Object
Stats.
-
#stats_tokensupply(contractaddress:) ⇒ Object
Tokens.
-
#transaction_getstatus(txhash:) ⇒ Object
Transactions.
- #transaction_gettxreceiptstatus(txhash:) ⇒ Object
Constructor Details
#initialize(url, api_key = nil) ⇒ Api
Returns a new instance of Api.
3 4 5 6 |
# File 'lib/etherscan/api.rb', line 3 def initialize(url, api_key = nil) @url = url @api_key = api_key end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args) ⇒ Object
34 35 36 37 |
# File 'lib/etherscan/api.rb', line 34 def method_missing(method, *args) module_name, action = method.to_s.split('_') request(module_name, action, args[0] || {}) end |
Instance Method Details
#account_balance(address:, tag: 'latest') ⇒ Object
Accounts
42 43 44 |
# File 'lib/etherscan/api.rb', line 42 def account_balance(address:, tag: 'latest') request('account', 'balance', address: address, tag: tag) end |
#account_balancemulti(addresses:, tag: 'latest') ⇒ Object
46 47 48 49 50 51 52 53 54 |
# File 'lib/etherscan/api.rb', line 46 def account_balancemulti(addresses:, tag: 'latest') if addresses.is_a? Array request('account', 'balancemulti', address: addresses.join(','), tag: tag) elsif addresses.is_a? String request('account', 'balancemulti', address: addresses, tag: tag) else raise 'addresses must be an array or a string' end end |
#account_tokenbalance(contractaddress:, address:, tag: 'latest') ⇒ Object
176 177 178 |
# File 'lib/etherscan/api.rb', line 176 def account_tokenbalance(contractaddress:, address:, tag: 'latest') request('account', 'tokenbalance', contractaddress: contractaddress, address: address, tag: tag) end |
#account_tokennfttx(address:, contractaddress:, startblock: 0, endblock: 999_999_999, sort: 'asc', page: 1, offset: 1000) ⇒ Object
88 89 90 91 92 93 94 95 |
# File 'lib/etherscan/api.rb', line 88 def account_tokennfttx(address:, contractaddress:, startblock: 0, endblock: 999_999_999, sort: 'asc', page: 1, offset: 1000) params = { address: address, contractaddress: contractaddress, startblock: startblock, endblock: endblock, sort: sort, page: page, offset: offset } request('account', 'tokennfttx', params) end |
#account_tokentx(address:, contractaddress:, startblock: 0, endblock: 999_999_999, sort: 'asc', page: 1, offset: 1000) ⇒ Object
79 80 81 82 83 84 85 86 |
# File 'lib/etherscan/api.rb', line 79 def account_tokentx(address:, contractaddress:, startblock: 0, endblock: 999_999_999, sort: 'asc', page: 1, offset: 1000) params = { address: address, contractaddress: contractaddress, startblock: startblock, endblock: endblock, sort: sort, page: page, offset: offset } request('account', 'tokentx', params) end |
#account_txlist(address:, startblock: 0, endblock: 999_999_999, sort: 'asc', page: 1, offset: 1000) ⇒ Object
56 57 58 59 60 61 62 63 |
# File 'lib/etherscan/api.rb', line 56 def account_txlist(address:, startblock: 0, endblock: 999_999_999, sort: 'asc', page: 1, offset: 1000) request('account', 'txlist', address: address, startblock: startblock, endblock: endblock, sort: sort, page: page, offset: offset) end |
#account_txlistinternal(address: nil, startblock: 0, endblock: 999_999_999, sort: 'asc', page: 1, offset: 1000) ⇒ Object
65 66 67 68 69 70 71 72 |
# File 'lib/etherscan/api.rb', line 65 def account_txlistinternal(address: nil, startblock: 0, endblock: 999_999_999, sort: 'asc', page: 1, offset: 1000) params = { address: address, startblock: startblock, endblock: endblock, sort: sort, page: page, offset: offset } request('account', 'txlistinternal', params) end |
#account_txlistinternal_by_txhash(txhash:) ⇒ Object
74 75 76 77 |
# File 'lib/etherscan/api.rb', line 74 def account_txlistinternal_by_txhash(txhash:) # https://docs.etherscan.io/api-endpoints/accounts#get-internal-transactions-by-transaction-hash request('account', 'txlistinternal', txhash: txhash) end |
#block_getblockcount(blockno:) ⇒ Object
136 137 138 |
# File 'lib/etherscan/api.rb', line 136 def block_getblockcount(blockno:) request('block', 'getblockcount', blockno: blockno) end |
#block_getblocknobytime(timestamp:, closest: 'before') ⇒ Object
140 141 142 |
# File 'lib/etherscan/api.rb', line 140 def block_getblocknobytime(timestamp:, closest: 'before') request('block', 'getblocknobytime', timestamp: , closest: closest) end |
#block_getblockreward(blockno:) ⇒ Object
Blocks
132 133 134 |
# File 'lib/etherscan/api.rb', line 132 def block_getblockreward(blockno:) request('block', 'getblockreward', blockno: blockno) end |
#contract_getabi(address:) ⇒ Object
Contracts
100 101 102 |
# File 'lib/etherscan/api.rb', line 100 def contract_getabi(address:) request('contract', 'getabi', address: address) end |
#contract_getcontractcreation(contractaddresses:) ⇒ Object
108 109 110 111 112 113 114 115 116 |
# File 'lib/etherscan/api.rb', line 108 def contract_getcontractcreation(contractaddresses:) if contractaddresses.is_a? Array request('contract', 'getcontractcreation', contractaddresses: contractaddresses.join(',')) elsif contractaddresses.is_a? String request('contract', 'getcontractcreation', contractaddresses: contractaddresses) else raise 'contractaddresses must be an array or a string' end end |
#contract_getsourcecode(address:) ⇒ Object
104 105 106 |
# File 'lib/etherscan/api.rb', line 104 def contract_getsourcecode(address:) request('contract', 'getsourcecode', address: address) end |
#logs_getLogs(from_block: 0, to_block: 'latest', address: nil, topic0: nil, topic1: nil, topic2: nil, topic3: nil, topic0_1_opr: nil, topic1_2_opr: nil, topic2_3_opr: nil, topic0_2_opr: nil, topic0_3_opr: nil, topic1_3_opr: nil) ⇒ Object
Logs
fromBlock, toBlock, address topic0, topic1, topic2, topic3 (32 Bytes per topic) topic0_1_opr (and|or between topic0 & topic1), topic1_2_opr (and|or between topic1 & topic2), topic2_3_opr (and|or between topic2 & topic3), topic0_2_opr (and|or between topic0 & topic2), topic0_3_opr (and|or between topic0 & topic3), topic1_3_opr (and|or between topic1 & topic3)
155 156 157 158 159 160 161 162 163 164 165 166 167 |
# File 'lib/etherscan/api.rb', line 155 def logs_getLogs(from_block: 0, to_block: 'latest', address: nil, topic0: nil, topic1: nil, topic2: nil, topic3: nil, topic0_1_opr: nil, topic1_2_opr: nil, topic2_3_opr: nil, topic0_2_opr: nil, topic0_3_opr: nil, topic1_3_opr: nil) params = { fromBlock: from_block, toBlock: to_block, address: address, topic0: topic0, topic1: topic1, topic2: topic2, topic3: topic3, topic0_1_opr: topic0_1_opr, topic1_2_opr: topic1_2_opr, topic2_3_opr: topic2_3_opr, topic0_2_opr: topic0_2_opr, topic0_3_opr: topic0_3_opr, topic1_3_opr: topic1_3_opr } request('logs', 'getLogs', params) end |
#request(module_name, action, params = {}) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/etherscan/api.rb', line 8 def request(module_name, action, params = {}) params = params.reject { |_k, v| v.nil? } # filter out nil values params_query = params.keys.map { |key| "#{key}=#{params[key]}" }.join('&').strip params_query = if params_query.empty? '' else "&#{params_query}" end api_key_query = @api_key.nil? ? '' : "&apikey=#{@api_key}" uri = URI "#{@url}?module=#{module_name}&action=#{action}#{params_query}#{api_key_query}" Etherscan.logger.debug "Req: #{uri}" resp = Net::HTTP.get(uri) Etherscan.logger.debug "Rsp: #{resp}" resp = JSON.parse(resp) raise resp['result'] if resp['status'] == '0' resp['result'] end |
#respond_to_missing?(*_args) ⇒ Boolean
30 31 32 |
# File 'lib/etherscan/api.rb', line 30 def respond_to_missing?(*_args) true end |
#stats_ethprice ⇒ Object
187 188 189 |
# File 'lib/etherscan/api.rb', line 187 def stats_ethprice request('stats', 'ethprice') end |
#stats_ethsupply ⇒ Object
Stats
183 184 185 |
# File 'lib/etherscan/api.rb', line 183 def stats_ethsupply request('stats', 'ethsupply') end |
#stats_tokensupply(contractaddress:) ⇒ Object
Tokens
172 173 174 |
# File 'lib/etherscan/api.rb', line 172 def stats_tokensupply(contractaddress:) request('stats', 'tokensupply', contractaddress: contractaddress) end |
#transaction_getstatus(txhash:) ⇒ Object
Transactions
121 122 123 |
# File 'lib/etherscan/api.rb', line 121 def transaction_getstatus(txhash:) request('transaction', 'getstatus', txhash: txhash) end |
#transaction_gettxreceiptstatus(txhash:) ⇒ Object
125 126 127 |
# File 'lib/etherscan/api.rb', line 125 def transaction_gettxreceiptstatus(txhash:) request('transaction', 'gettxreceiptstatus', txhash: txhash) end |