You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
192 lines
6.1 KiB
192 lines
6.1 KiB
defmodule Explorer.TestHelper do
|
|
@moduledoc false
|
|
|
|
import Mox
|
|
|
|
alias ABI.TypeEncoder
|
|
|
|
def mock_logic_storage_pointer_request(
|
|
mox,
|
|
error?,
|
|
resp \\ "0x0000000000000000000000000000000000000000000000000000000000000000"
|
|
) do
|
|
response = if error?, do: {:error, "error"}, else: {:ok, resp}
|
|
|
|
expect(mox, :json_rpc, fn %{
|
|
id: 0,
|
|
method: "eth_getStorageAt",
|
|
params: [
|
|
_,
|
|
"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc",
|
|
"latest"
|
|
]
|
|
},
|
|
_options ->
|
|
response
|
|
end)
|
|
end
|
|
|
|
def mock_beacon_storage_pointer_request(
|
|
mox,
|
|
error?,
|
|
resp \\ "0x0000000000000000000000000000000000000000000000000000000000000000"
|
|
) do
|
|
response = if error?, do: {:error, "error"}, else: {:ok, resp}
|
|
|
|
expect(mox, :json_rpc, fn %{
|
|
id: 0,
|
|
method: "eth_getStorageAt",
|
|
params: [
|
|
_,
|
|
"0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50",
|
|
"latest"
|
|
]
|
|
},
|
|
_options ->
|
|
response
|
|
end)
|
|
end
|
|
|
|
def mock_oz_storage_pointer_request(
|
|
mox,
|
|
error?,
|
|
resp \\ "0x0000000000000000000000000000000000000000000000000000000000000000"
|
|
) do
|
|
response = if error?, do: {:error, "error"}, else: {:ok, resp}
|
|
|
|
expect(mox, :json_rpc, fn %{
|
|
id: 0,
|
|
method: "eth_getStorageAt",
|
|
params: [
|
|
_,
|
|
"0x7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c3",
|
|
"latest"
|
|
]
|
|
},
|
|
_options ->
|
|
response
|
|
end)
|
|
end
|
|
|
|
def mock_eip_1822_storage_pointer_request(
|
|
mox,
|
|
error?,
|
|
resp \\ "0x0000000000000000000000000000000000000000000000000000000000000000"
|
|
) do
|
|
response = if error?, do: {:error, "error"}, else: {:ok, resp}
|
|
|
|
expect(mox, :json_rpc, fn %{
|
|
id: 0,
|
|
method: "eth_getStorageAt",
|
|
params: [
|
|
_,
|
|
"0xc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf7",
|
|
"latest"
|
|
]
|
|
},
|
|
_options ->
|
|
response
|
|
end)
|
|
end
|
|
|
|
def mock_eip_2535_storage_pointer_request(
|
|
mox,
|
|
error?,
|
|
resp \\ "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"
|
|
) do
|
|
response =
|
|
if error?,
|
|
do: {:error, "error"},
|
|
else:
|
|
{:ok,
|
|
[
|
|
%{
|
|
id: 0,
|
|
jsonrpc: "2.0",
|
|
result: resp
|
|
}
|
|
]}
|
|
|
|
expect(mox, :json_rpc, fn [
|
|
%{
|
|
id: 0,
|
|
jsonrpc: "2.0",
|
|
method: "eth_call",
|
|
params: [
|
|
%{
|
|
data: "0x52ef6b2c",
|
|
to: _
|
|
},
|
|
"latest"
|
|
]
|
|
}
|
|
],
|
|
_options ->
|
|
response
|
|
end)
|
|
end
|
|
|
|
def get_eip1967_implementation_non_zero_address(address_hash_string) do
|
|
EthereumJSONRPC.Mox
|
|
|> mock_logic_storage_pointer_request(false)
|
|
|> mock_beacon_storage_pointer_request(false)
|
|
|> mock_oz_storage_pointer_request(false, "0x000000000000000000000000" <> address_hash_string)
|
|
end
|
|
|
|
def get_eip1967_implementation_zero_addresses do
|
|
EthereumJSONRPC.Mox
|
|
|> mock_logic_storage_pointer_request(false)
|
|
|> mock_beacon_storage_pointer_request(false)
|
|
|> mock_oz_storage_pointer_request(false)
|
|
|> mock_eip_1822_storage_pointer_request(false)
|
|
|> mock_eip_2535_storage_pointer_request(false)
|
|
end
|
|
|
|
def get_eip1967_implementation_error_response do
|
|
EthereumJSONRPC.Mox
|
|
|> mock_logic_storage_pointer_request(true)
|
|
|> mock_beacon_storage_pointer_request(true)
|
|
|> mock_oz_storage_pointer_request(true)
|
|
|> mock_eip_1822_storage_pointer_request(true)
|
|
|> mock_eip_2535_storage_pointer_request(true)
|
|
end
|
|
|
|
def fetch_token_uri_mock(url, token_contract_address_hash_string) do
|
|
encoded_url =
|
|
"0x" <>
|
|
([url]
|
|
|> TypeEncoder.encode(%ABI.FunctionSelector{
|
|
function: nil,
|
|
types: [
|
|
:string
|
|
]
|
|
})
|
|
|> Base.encode16(case: :lower))
|
|
|
|
EthereumJSONRPC.Mox
|
|
|> expect(:json_rpc, fn [
|
|
%{
|
|
id: 0,
|
|
jsonrpc: "2.0",
|
|
method: "eth_call",
|
|
params: [
|
|
%{
|
|
data: "0xc87b56dd0000000000000000000000000000000000000000000000000000000000000001",
|
|
to: ^token_contract_address_hash_string
|
|
},
|
|
"latest"
|
|
]
|
|
}
|
|
],
|
|
_options ->
|
|
{:ok,
|
|
[
|
|
%{
|
|
id: 0,
|
|
jsonrpc: "2.0",
|
|
result: encoded_url
|
|
}
|
|
]}
|
|
end)
|
|
end
|
|
end
|
|
|