|
|
|
defmodule EXW3Test do
|
|
|
|
use ExUnit.Case
|
|
|
|
doctest ExW3
|
|
|
|
|
|
|
|
setup_all do
|
|
|
|
%{
|
|
|
|
simple_storage_abi: ExW3.load_abi("test/examples/build/SimpleStorage.abi"),
|
|
|
|
array_tester_abi: ExW3.load_abi("test/examples/build/ArrayTester.abi"),
|
|
|
|
event_tester_abi: ExW3.load_abi("test/examples/build/EventTester.abi"),
|
|
|
|
accounts: ExW3.accounts
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
test "gets accounts" do
|
|
|
|
assert ExW3.accounts |> is_list
|
|
|
|
end
|
|
|
|
|
|
|
|
test "gets balance", context do
|
|
|
|
assert ExW3.balance(Enum.at context[:accounts], 0 ) |> is_integer
|
|
|
|
end
|
|
|
|
|
|
|
|
test "gets block number" do
|
|
|
|
assert ExW3.block_number |> is_integer
|
|
|
|
end
|
|
|
|
|
|
|
|
test "loads abi", context do
|
|
|
|
assert context[:simple_storage_abi] |> is_map
|
|
|
|
end
|
|
|
|
|
|
|
|
test "mines a block" do
|
|
|
|
block_number = ExW3.block_number
|
|
|
|
ExW3.mine
|
|
|
|
assert ExW3.block_number == block_number + 1
|
|
|
|
end
|
|
|
|
|
|
|
|
test "mines multiple blocks" do
|
|
|
|
block_number = ExW3.block_number
|
|
|
|
ExW3.mine 5
|
|
|
|
assert ExW3.block_number == block_number + 5
|
|
|
|
end
|
|
|
|
|
|
|
|
test "deploys simple storage and uses it", context do
|
|
|
|
contract_address = ExW3.Contract.deploy(
|
|
|
|
"test/examples/build/SimpleStorage.bin",
|
|
|
|
%{
|
|
|
|
from: Enum.at(context[:accounts], 0),
|
|
|
|
gas: 150000
|
|
|
|
}
|
|
|
|
)
|
|
|
|
|
|
|
|
storage = ExW3.Contract.at context[:simple_storage_abi], contract_address
|
|
|
|
|
|
|
|
{:ok, result} = ExW3.Contract.method(storage, "get")
|
|
|
|
|
|
|
|
assert result == 0
|
|
|
|
|
|
|
|
{:ok, tx_hash} = ExW3.Contract.method(storage, "set", [1], %{from: Enum.at(context[:accounts], 0)})
|
|
|
|
|
|
|
|
receipt = ExW3.tx_receipt tx_hash
|
|
|
|
|
|
|
|
#IO.inspect ExW3.block receipt["blockNumber"]
|
|
|
|
|
|
|
|
{:ok, result} = ExW3.Contract.method(storage, "get")
|
|
|
|
|
|
|
|
assert result == 1
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
test "deploys event tester and uses it", context do
|
|
|
|
contract_address = ExW3.Contract.deploy(
|
|
|
|
"test/examples/build/EventTester.bin",
|
|
|
|
%{
|
|
|
|
from: Enum.at(context[:accounts], 0),
|
|
|
|
gas: 300000
|
|
|
|
}
|
|
|
|
)
|
|
|
|
|
|
|
|
event_tester = ExW3.Contract.at context[:event_tester_abi], contract_address
|
|
|
|
|
|
|
|
{:ok, tx_hash} = ExW3.Contract.method(event_tester, "simple", ["hello, there!"], %{from: Enum.at(context[:accounts], 0)})
|
|
|
|
|
|
|
|
receipt = ExW3.tx_receipt tx_hash
|
|
|
|
|
|
|
|
logs = receipt["logs"]
|
|
|
|
|
|
|
|
topic = Map.get(Enum.at(logs, 0), "topics")
|
|
|
|
|
|
|
|
assert String.slice(Enum.at(topic, 0), 2..-1) == ExW3.encode_event("Simple(uint256,bytes32)")
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
test "deploys array tester and uses it", context do
|
|
|
|
contract_address = ExW3.Contract.deploy(
|
|
|
|
"test/examples/build/ArrayTester.bin",
|
|
|
|
%{
|
|
|
|
from: Enum.at(context[:accounts], 0),
|
|
|
|
gas: 300000
|
|
|
|
}
|
|
|
|
)
|
|
|
|
|
|
|
|
array_tester = ExW3.Contract.at context[:array_tester_abi], contract_address
|
|
|
|
|
|
|
|
arr = [1, 2, 3, 4, 5]
|
|
|
|
|
|
|
|
{:ok, result} = ExW3.Contract.method(array_tester, "staticUint", [arr])
|
|
|
|
|
|
|
|
assert result == arr
|
|
|
|
|
|
|
|
#0x5d4e0342
|
|
|
|
{:ok, result} = ExW3.Contract.method(array_tester, "dynamicUint", [arr])
|
|
|
|
|
|
|
|
assert result == arr
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|