class Web3::Eth::Rpc

Constants

DEFAULT_CONNECT_OPTIONS
DEFAULT_HOST
DEFAULT_PORT
JSON_RPC_VERSION

Attributes

connect_options[R]
eth[R]

Public Class Methods

new(host: DEFAULT_HOST, port: DEFAULT_PORT, connect_options: DEFAULT_CONNECT_OPTIONS) click to toggle source
# File lib/web3/eth/rpc.rb, line 22
def initialize host: DEFAULT_HOST, port: DEFAULT_PORT, connect_options: DEFAULT_CONNECT_OPTIONS

  @client_id = Random.rand 10000000

  @uri = URI((connect_options[:use_ssl] ? 'https' : 'http')+ "://#{host}:#{port}#{connect_options[:rpc_path]}")
  @connect_options = connect_options

  @eth = EthModule.new self

end

Public Instance Methods

debug() click to toggle source
# File lib/web3/eth/rpc.rb, line 41
def debug
  @debug ||= Debug::DebugModule.new(self)
end
parity() click to toggle source
# File lib/web3/eth/rpc.rb, line 37
def parity
  @parity ||= ParityModule.new(self)
end
request(method, params = nil) click to toggle source
# File lib/web3/eth/rpc.rb, line 45
def request method, params = nil


  Net::HTTP.start(@uri.host, @uri.port, @connect_options) do |http|

    request = Net::HTTP::Post.new @uri, {"Content-Type" => "application/json"}
    request.body = {:jsonrpc => JSON_RPC_VERSION, method: method, params: params, id: @client_id}.compact.to_json
    response = http.request request

    raise "Error code #{response.code} on request #{@uri.to_s} #{request.body}" unless response.kind_of? Net::HTTPOK

    body = JSON.parse(response.body, max_nesting: 1500)

    if body['result']
      body['result']
    elsif body['error']
      raise "Error #{@uri.to_s} #{body['error']} on request #{@uri.to_s} #{request.body}"
    else
      raise "No response on request #{@uri.to_s} #{request.body}"
    end

  end

end
trace() click to toggle source
# File lib/web3/eth/rpc.rb, line 33
def trace
  @trace ||= TraceModule.new(self)
end