class Web3::Hpb::Rpc

Constants

DEFAULT_CONNECT_OPTIONS
DEFAULT_HOST
DEFAULT_PORT
JSON_RPC_VERSION

Attributes

hpb[R]
trace[R]

Public Class Methods

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

  @client_id = Random.rand(1000_000)

  @uri = URI((connect_options[:use_ssl] ? 'https' : 'http') + "://#{host}:#{port}#{connect_options[:rpc_path]}")
  @connect_options = connect_options
  @hpb = HpbModule.new(self)
  @trace = TraceModule.new(self)
end

Public Instance Methods

request(method, params = nil) click to toggle source
# File lib/web3/hpb/rpc.rb, line 31
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)

    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