Packages
signet
1.3.6
1.6.1
1.6.0
1.5.0
1.4.2
1.4.1
1.4.0
1.3.12
1.3.11
1.3.10
1.3.9
1.3.8
1.3.7
1.3.6
1.3.5
1.3.4
1.3.3
1.3.2
1.3.1
1.3.0
1.2.9
1.2.8
1.2.7
1.2.6
1.2.5
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.1.2
1.1.1
1.1.0
1.0.0-echo8
1.0.0-echo7
1.0.0-echo6
1.0.0-echo5
1.0.0-echo4
1.0.0-echo3
1.0.0-echo2
1.0.0-echo1
1.0.0-delta8
1.0.0-delta7
1.0.0-delta6
1.0.0-delta5
1.0.0-delta4
1.0.0-delta3
1.0.0-delta2
1.0.0-delta1
1.0.0-charlie9
1.0.0-charlie8
1.0.0-charlie7
1.0.0-charlie6
1.0.0-charlie5
1.0.0-charlie4
1.0.0-charlie3
1.0.0-charlie2
1.0.0-charlie1
1.0.0-beta9
1.0.0-beta8
1.0.0-beta7
1.0.0-beta6
1.0.0-beta5
1.0.0-beta4
1.0.0-beta3
1.0.0-beta2
1.0.0-beta1
1.0.0-alpha9
1.0.0-alpha8
1.0.0-alpha7
1.0.0-alpha6
1.0.0-alpha5
1.0.0-alpha4
1.0.0-alpha3
1.0.0-alpha2
1.0.0-alpha10
1.0.0-alpha1
0.2.0-alpha6
0.2.0-alpha5
0.2.0-alpha4
0.2.0-alpha1
0.1.10
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
0.1.0-rc7
0.1.0-rc6
0.1.0-rc5
0.1.0-rc4
0.1.0-rc3
0.1.0-rc2
0.1.0-rc1
0.1.0-rc0
Lightweight Ethereum and Solana RPC client for Elixir
Current section
Files
Jump to
Current section
Files
test/support/signet/sleuth_handler.ex
defmodule Signet.Test.SleuthHandler do
@moduledoc ~S"""
Module to handle sending back sleuth responses to our unit tests.
Note: this could clearly be abstracted to be a little nicer, but it's
perfectly adequate the way it is now, I reckon.
"""
use Signet.Hex
@block_number_query Signet.Contract.BlockNumber.bytecode()
defp handle_call(@block_number_query, calldata) do
case Signet.Contract.BlockNumber.decode_call(calldata) do
{:ok, "query", _} ->
encode_sleuth(Signet.Contract.BlockNumber.query_selector(), {2})
{:ok, "queryTwo", _} ->
encode_sleuth(Signet.Contract.BlockNumber.query_two_selector(), {2, 3})
{:ok, "queryThree", _} ->
encode_sleuth(Signet.Contract.BlockNumber.query_three_selector(), {2})
{:ok, "queryFour", _} ->
encode_sleuth(
Signet.Contract.BlockNumber.query_four_selector(),
{~h[0x010203], ~h[0x0000000000000000000000000000000000000001]}
)
{:ok, "queryCool", _} ->
encode_sleuth(
Signet.Contract.BlockNumber.query_cool_selector(),
{{"hi", [1, 2, 3], {"meow"}}}
)
_ ->
raise "Unknown Sleuth query call"
end
end
defp handle_call(query, _calldata) do
raise "Unknown sleuth query: #{to_hex(query)}"
end
def eth_call(%{"data" => data_hex}, _block) do
data = from_hex!(data_hex)
cond do
String.contains?(data, ~h[0xDEADBEEFDEADBEEFDEADBEEFDEADBEEF00000000]) ->
"0x"
String.contains?(data, ~h[0xDEADBEEFDEADBEEFDEADBEEFDEADBEEF00000001]) ->
{:error,
%{
"code" => 3,
"message" => "execution reverted"
}}
true ->
[query, calldata] = Signet.Contract.Sleuth.decode_query_call(data)
Base.encode16(handle_call(query, calldata))
end
end
defp encode_sleuth(query_selector, values) do
return_selector = %ABI.FunctionSelector{
types: [%{type: {:tuple, query_selector.returns}}]
}
query_resp = ABI.TypeEncoder.encode([values], return_selector)
ABI.encode("(bytes)", [{query_resp}])
end
end