1# frozen_string_literal: true
2
3require "json"
4require "net/http"
5require "securerandom"
6
7class Electrum
8 def initialize(rpc_uri:, rpc_username:, rpc_password:)
9 @rpc_uri = URI(rpc_uri)
10 @rpc_username = rpc_username
11 @rpc_password = rpc_password
12 end
13
14 def getaddresshistory(address)
15 rpc_call(:getaddresshistory, address: address)["result"]
16 end
17
18protected
19
20 def rpc_call(method, params)
21 JSON.parse(post_json(
22 jsonrpc: "2.0",
23 id: SecureRandom.hex,
24 method: method.to_s,
25 params: params
26 ).body)
27 end
28
29 def post_json(data)
30 req = Net::HTTP::Post.new(@rpc_uri, "Content-Type" => "application/json")
31 req.basic_auth(@rpc_username, @rpc_password)
32 req.body = data.to_json
33 Net::HTTP.start(
34 @rpc_uri.hostname,
35 @rpc_uri.port,
36 use_ssl: @rpc_uri.scheme == "https"
37 ) do |http|
38 http.request(req)
39 end
40 end
41end