defmodule Forge.Rpc do @moduledoc """ RPC lib to send tx. Using localhost:26657 for simplicity. """ @rpc_host "localhost:26657" require Logger @doc """ Send out the signed transaction with tendermint http RPC interface: localhost:26657/broadcast_tx_commit?tx= """ @spec send(Forge.TransactionMessage.t()) :: map() | nil def send(tx) do url = "http://#{@rpc_host}/broadcast_tx_commit?tx=\"#{Base.url_encode64(tx, padding: false)}\"" get_url(url) end def get_tx(hash) do url = "http://#{@rpc_host}/tx?hash=0x#{hash}" get_url(url) end def query_tx(key, value) do url = "http://#{@rpc_host}/tx_search?query=\"#{key}='#{value}'\"" get_url(url) end # private function defp get_url(url) do case HTTPoison.get(url) do {:ok, %HTTPoison.Response{body: body}} -> Jason.decode!(body) {:error, error} -> Logger.error("Failed to call tendermint RPC. Error: #{inspect(error)}") nil end end end