electrum.rb

 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