Current section
Files
Jump to
Current section
Files
test/support/node.ex
defmodule EthEvent.Node do
alias EthEvent.Settings
alias EthEvent.Encode
def server(%Tesla.Env{method: :post, body: body, url: url}) do
if check_url(url) do
body
|> Jason.decode!()
|> process_payload()
else
{:error, "Bad URL"}
end
end
@doc false
def check_url(url) do
base = Settings.eth_event_node_url()
case Settings.eth_event_node_key() do
"" ->
"#{base}/" == url
key when is_binary(key) ->
"#{base}/#{key}" == url
end
end
@doc false
def process_payload(
%{"id" => id, "method" => "eth_getBalance"}
) do
balance = Encode.encode!(:quantity, 100)
result = %{"id" => id, "jsonrpc" => "2.0", "result" => balance}
%Tesla.Env{status: 200, body: Jason.encode!(result)}
end
def process_payload(
%{"id" => id, "method" => "eth_getBlockByNumber"}
) do
result = %{
"id" => id,
"jsonrpc" => "2.0",
"result" => %{
"number" => Encode.encode!(:quantity, 42),
"hash" => "0x4d256e0bc11af8091043c13b07f0e59dd7c07172d4ba14d9f75454a3d182d71c",
"extra" => [],
"timestamp" => Encode.encode!(:quantity, :os.system_time(:seconds)),
"transactions" => []
}
}
%Tesla.Env{status: 200, body: Jason.encode!(result)}
end
def process_payload(
%{
"id" => id,
"method" => "eth_getLogs",
"params" => [params]
}
) do
address = Map.get(params, "address", "0x8ca88e083ec89a8110b722ec46aace1c1d1b260e")
topics = Map.get(params, "topics", [nil, nil, nil])
result = %{
"id" => id,
"jsonrpc" => "2.0",
"result" => [%{
"address" => address,
"blockHash" => "0x4d256e0bc11af8091043c13b07f0e59dd7c07172d4ba14d9f75454a3d182d71c",
"blockNumber" => "0x27",
"data" => "0x0000000000000000000000000000000000000000000000000000000000000064",
"logIndex" => "0x0",
"topics" => build_topics(topics)
}]
}
%Tesla.Env{status: 200, body: Jason.encode!(result)}
end
def build_topics([t0, t1, t2]) do
t0 =
if is_nil(t0) do
"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"
else
t0
end
t1 =
if is_nil(t1) do
"0x0000000000000000000000008ca88e083ec89a8110b722ec46aace1c1d1b260e"
else
t1
end
t2 =
if is_nil(t2) do
"0x00000000000000000000000006560813995c81ef86cf850b365bc6817a6cb5bd"
else
t2
end
[t0, t1, t2]
end
end