4
0
Fork 0

Added test for indexed events

indexed
hswick 7 years ago
parent 26faa02a81
commit abc634865a
  1. 6
      lib/exw3.ex
  2. 2
      test/examples/build/AddressTester.bin
  3. 2
      test/examples/build/ArrayTester.bin
  4. 2
      test/examples/build/EventTester.abi
  5. 2
      test/examples/build/EventTester.bin
  6. 2
      test/examples/build/SimpleStorage.bin
  7. 9
      test/examples/contracts/EventTester.sol
  8. 34
      test/exw3_test.exs
  9. 10
      test/test_helper.exs

@ -429,15 +429,20 @@ defmodule ExW3 do
end
listen(callback)
end
defp decode_topics(topics) do
end
defp loop(state) do
receive do
{:filter, filter_id, event_signature, event_fields, pid} ->
IO.inspect(event_signature)
loop(Map.put(state, filter_id, %{pid: pid, signature: event_signature, names: event_fields}))
{:event, filter_id, logs} ->
filter_attributes = Map.get(state, filter_id)
unless logs == [] do
Enum.each(logs, fn log ->
IO.inspect log
data = Map.get(log, "data")
new_data = Enum.zip(filter_attributes[:names], ExW3.decode_event(data, filter_attributes[:signature])) |> Enum.into(%{})
new_log = Map.put(log, "data", new_data)
@ -447,6 +452,7 @@ defmodule ExW3 do
loop(state)
end
end
end
defmodule Contract do

@ -1 +1 @@
608060405234801561001057600080fd5b5060fa8061001f6000396000f300608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c2bc2efc146044575b600080fd5b348015604f57600080fd5b506082600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505060c4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008190509190505600a165627a7a72305820c9e567e4879f2d99bc8a8c8087fb98be20fd5b09fd83be079d1e75a307d1553e0029
608060405234801561001057600080fd5b5060fa8061001f6000396000f300608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c2bc2efc146044575b600080fd5b348015604f57600080fd5b506082600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505060c4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008190509190505600a165627a7a723058208484bae125ac44444f4a08d58fc40768b5a1ed1fe02d050df852087c40426ec00029

@ -1 +1 @@
608060405234801561001057600080fd5b50610203806100206000396000f30060806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680635cfd038d146100515780635d4e0342146100df575b600080fd5b34801561005d57600080fd5b506100a16004803603810190808060a0019060058060200260405190810160405280929190826005602002808284378201915050505050919291929050505061019a565b6040518082600560200280838360005b838110156100cc5780820151818401526020810190506100b1565b5050505090500191505060405180910390f35b3480156100eb57600080fd5b50610143600480360381019080803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192905050506101aa565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561018657808201518184015260208101905061016b565b505050509050019250505060405180910390f35b6101a26101b4565b819050919050565b6060819050919050565b60a0604051908101604052806005906020820280388339808201915050905050905600a165627a7a7230582023b50208656c35f30dc0bc5698895c57470dfbbf2cc779983e04affadaed68c40029
608060405234801561001057600080fd5b50610203806100206000396000f30060806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680635cfd038d146100515780635d4e0342146100df575b600080fd5b34801561005d57600080fd5b506100a16004803603810190808060a0019060058060200260405190810160405280929190826005602002808284378201915050505050919291929050505061019a565b6040518082600560200280838360005b838110156100cc5780820151818401526020810190506100b1565b5050505090500191505060405180910390f35b3480156100eb57600080fd5b50610143600480360381019080803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192905050506101aa565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561018657808201518184015260208101905061016b565b505050509050019250505060405180910390f35b6101a26101b4565b819050919050565b6060819050919050565b60a0604051908101604052806005906020820280388339808201915050905050905600a165627a7a72305820e9a75c1e663616419f7f77d68c69fd084a70e311442322069c67d3222bf1f1bc0029

@ -1 +1 @@
[{"constant":false,"inputs":[{"name":"data","type":"bytes32"}],"name":"simple","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"num","type":"uint256"},{"indexed":false,"name":"data","type":"bytes32"}],"name":"Simple","type":"event"}]
[{"constant":false,"inputs":[{"name":"data","type":"bytes32"}],"name":"simpleIndex","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"data","type":"bytes32"}],"name":"simple","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"num","type":"uint256"},{"indexed":false,"name":"data","type":"bytes32"}],"name":"Simple","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"num","type":"uint256"},{"indexed":true,"name":"data","type":"bytes32"},{"indexed":false,"name":"otherNum","type":"uint256"}],"name":"SimpleIndex","type":"event"}]

@ -1 +1 @@
608060405234801561001057600080fd5b5060e98061001f6000396000f300608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063501064b1146044575b600080fd5b348015604f57600080fd5b50607060048036038101908080356000191690602001909291905050506072565b005b7f906950f44e189193819a60a8ce35a53a0aee725af98bc984839c89d8fa2e09dd602a826040518083815260200182600019166000191681526020019250505060405180910390a1505600a165627a7a723058202528ea34f2ac2faca07098061871256bde282a122c22356840442706e875e1570029
608060405234801561001057600080fd5b5061016c806100206000396000f30060806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806320ea78c214610051578063501064b114610082575b600080fd5b34801561005d57600080fd5b5061008060048036038101908080356000191690602001909291905050506100b3565b005b34801561008e57600080fd5b506100b160048036038101908080356000191690602001909291905050506100f5565b005b8060001916602e7f19b371547290015adfae6dcaca963a36dc2d8e4e9e55ce823b829d747efde90f602a6040518082815260200191505060405180910390a350565b7f906950f44e189193819a60a8ce35a53a0aee725af98bc984839c89d8fa2e09dd602a826040518083815260200182600019166000191681526020019250505060405180910390a1505600a165627a7a72305820d27e753e48c6f5af0acc5f744c8d6c3626f9c09ee5d676abb371e596446cca7d0029

@ -1 +1 @@
608060405234801561001057600080fd5b5060df8061001f6000396000f3006080604052600436106049576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806360fe47b114604e5780636d4ce63c146078575b600080fd5b348015605957600080fd5b5060766004803603810190808035906020019092919050505060a0565b005b348015608357600080fd5b50608a60aa565b6040518082815260200191505060405180910390f35b8060008190555050565b600080549050905600a165627a7a72305820288c3f672c14d2f8264489202b6b9170fe3060251af31eeaffb45b1bbe97992a0029
608060405234801561001057600080fd5b5060df8061001f6000396000f3006080604052600436106049576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806360fe47b114604e5780636d4ce63c146078575b600080fd5b348015605957600080fd5b5060766004803603810190808035906020019092919050505060a0565b005b348015608357600080fd5b50608a60aa565b6040518082815260200191505060405180910390f35b8060008190555050565b600080549050905600a165627a7a72305820f2f37cc74bbe30fe8ae3f607794a9d1c1f383aecbdd50b87b8767480e245f8e30029

@ -4,7 +4,14 @@ contract EventTester {
event Simple(uint256 num, bytes32 data);
event SimpleIndex(uint256 indexed num, bytes32 indexed data, uint256 otherNum);
function simple(bytes32 data) public {
emit Simple(42, data);
}
}
function simpleIndex(bytes32 data) public {
emit SimpleIndex(46, data, 42);
}
}

@ -173,6 +173,8 @@ defmodule EXW3Test do
ExW3.EventListener.start_link()
# Test non indexed events
filter_id = ExW3.Contract.filter(:EventTester, "Simple", self())
{:ok, _tx_hash} =
@ -200,6 +202,38 @@ defmodule EXW3Test do
assert ExW3.bytes_to_string(Map.get(log_data, "data")) == "Hello, World!"
ExW3.uninstall_filter(filter_id)
# Test indexed events
{:ok, agent2} = Agent.start_link(fn -> [] end)
indexed_filter_id = ExW3.Contract.filter(:EventTester, "SimpleIndex", self())
{:ok, _tx_hash} =
ExW3.Contract.send(
:EventTester,
:simpleIndex,
["Hello, World!"],
%{from: Enum.at(context[:accounts], 0), gas: 30_000}
)
receive do
{:event, {_filter_id, data}} ->
Agent.update(agent2, fn list -> [data | list] end)
after 3_000 ->
raise "Never received event"
end
state = Agent.get(agent, fn list -> list end)
event_log = Enum.at(state, 0)
assert event_log |> is_map
log_data = Map.get(event_log, "data")
assert log_data |> is_map
assert Map.get(log_data, "num") == 46
assert ExW3.bytes_to_string(Map.get(log_data, "data")) == "Hello, World!"
assert Map.get(log_data, "otherNum") == 42
ExW3.uninstall_filter(indexed_filter_id)
end
test "starts a Contract GenServer for Complex contract", context do

@ -1,9 +1 @@
defmodule Log do
def p input do
input
|> Kernel.inspect
|> IO.puts
end
end
ExUnit.start()
ExUnit.start()

Loading…
Cancel
Save