# frozen_string_literal: true
require "json"
require "net/http"
require "securerandom"
class Electrum
def initialize(rpc_uri:, rpc_username:, rpc_password:)
@rpc_uri = URI(rpc_uri)
@rpc_username = rpc_username
@rpc_password = rpc_password
end
def getaddresshistory(address)
rpc_call(:getaddresshistory, address: address)["result"]
end
protected
def rpc_call(method, params)
JSON.parse(post_json(
jsonrpc: "2.0",
id: SecureRandom.hex,
method: method.to_s,
params: params
).body)
end
def post_json(data)
req = Net::HTTP::Post.new(@rpc_uri, "Content-Type" => "application/json")
req.basic_auth(@rpc_username, @rpc_password)
req.body = data.to_json
Net::HTTP.start(
@rpc_uri.hostname,
@rpc_uri.port,
use_ssl: @rpc_uri.scheme == "https"
) do |http|
http.request(req)
end
end
end