From abc634865a12f9d35eae16694ea896f8b642046e Mon Sep 17 00:00:00 2001 From: hswick Date: Mon, 24 Sep 2018 12:04:37 -0500 Subject: [PATCH] Added test for indexed events --- lib/exw3.ex | 6 +++++ test/examples/build/AddressTester.bin | 2 +- test/examples/build/ArrayTester.bin | 2 +- test/examples/build/EventTester.abi | 2 +- test/examples/build/EventTester.bin | 2 +- test/examples/build/SimpleStorage.bin | 2 +- test/examples/contracts/EventTester.sol | 9 ++++++- test/exw3_test.exs | 34 +++++++++++++++++++++++++ test/test_helper.exs | 10 +------- 9 files changed, 54 insertions(+), 15 deletions(-) diff --git a/lib/exw3.ex b/lib/exw3.ex index 0403130..a98364a 100644 --- a/lib/exw3.ex +++ b/lib/exw3.ex @@ -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 diff --git a/test/examples/build/AddressTester.bin b/test/examples/build/AddressTester.bin index 9642509..4c3507d 100644 --- a/test/examples/build/AddressTester.bin +++ b/test/examples/build/AddressTester.bin @@ -1 +1 @@ -608060405234801561001057600080fd5b5060fa8061001f6000396000f300608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c2bc2efc146044575b600080fd5b348015604f57600080fd5b506082600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505060c4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008190509190505600a165627a7a72305820c9e567e4879f2d99bc8a8c8087fb98be20fd5b09fd83be079d1e75a307d1553e0029 \ No newline at end of file +608060405234801561001057600080fd5b5060fa8061001f6000396000f300608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c2bc2efc146044575b600080fd5b348015604f57600080fd5b506082600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505060c4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008190509190505600a165627a7a723058208484bae125ac44444f4a08d58fc40768b5a1ed1fe02d050df852087c40426ec00029 \ No newline at end of file diff --git a/test/examples/build/ArrayTester.bin b/test/examples/build/ArrayTester.bin index 734caa2..803eb27 100644 --- a/test/examples/build/ArrayTester.bin +++ b/test/examples/build/ArrayTester.bin @@ -1 +1 @@ -608060405234801561001057600080fd5b50610203806100206000396000f30060806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680635cfd038d146100515780635d4e0342146100df575b600080fd5b34801561005d57600080fd5b506100a16004803603810190808060a0019060058060200260405190810160405280929190826005602002808284378201915050505050919291929050505061019a565b6040518082600560200280838360005b838110156100cc5780820151818401526020810190506100b1565b5050505090500191505060405180910390f35b3480156100eb57600080fd5b50610143600480360381019080803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192905050506101aa565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561018657808201518184015260208101905061016b565b505050509050019250505060405180910390f35b6101a26101b4565b819050919050565b6060819050919050565b60a0604051908101604052806005906020820280388339808201915050905050905600a165627a7a7230582023b50208656c35f30dc0bc5698895c57470dfbbf2cc779983e04affadaed68c40029 \ No newline at end of file +608060405234801561001057600080fd5b50610203806100206000396000f30060806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680635cfd038d146100515780635d4e0342146100df575b600080fd5b34801561005d57600080fd5b506100a16004803603810190808060a0019060058060200260405190810160405280929190826005602002808284378201915050505050919291929050505061019a565b6040518082600560200280838360005b838110156100cc5780820151818401526020810190506100b1565b5050505090500191505060405180910390f35b3480156100eb57600080fd5b50610143600480360381019080803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192905050506101aa565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561018657808201518184015260208101905061016b565b505050509050019250505060405180910390f35b6101a26101b4565b819050919050565b6060819050919050565b60a0604051908101604052806005906020820280388339808201915050905050905600a165627a7a72305820e9a75c1e663616419f7f77d68c69fd084a70e311442322069c67d3222bf1f1bc0029 \ No newline at end of file diff --git a/test/examples/build/EventTester.abi b/test/examples/build/EventTester.abi index dcdd122..efd57ac 100644 --- a/test/examples/build/EventTester.abi +++ b/test/examples/build/EventTester.abi @@ -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"}] \ No newline at end of file +[{"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"}] \ No newline at end of file diff --git a/test/examples/build/EventTester.bin b/test/examples/build/EventTester.bin index de5bdc5..30ee4dd 100644 --- a/test/examples/build/EventTester.bin +++ b/test/examples/build/EventTester.bin @@ -1 +1 @@ -608060405234801561001057600080fd5b5060e98061001f6000396000f300608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063501064b1146044575b600080fd5b348015604f57600080fd5b50607060048036038101908080356000191690602001909291905050506072565b005b7f906950f44e189193819a60a8ce35a53a0aee725af98bc984839c89d8fa2e09dd602a826040518083815260200182600019166000191681526020019250505060405180910390a1505600a165627a7a723058202528ea34f2ac2faca07098061871256bde282a122c22356840442706e875e1570029 \ No newline at end of file +608060405234801561001057600080fd5b5061016c806100206000396000f30060806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806320ea78c214610051578063501064b114610082575b600080fd5b34801561005d57600080fd5b5061008060048036038101908080356000191690602001909291905050506100b3565b005b34801561008e57600080fd5b506100b160048036038101908080356000191690602001909291905050506100f5565b005b8060001916602e7f19b371547290015adfae6dcaca963a36dc2d8e4e9e55ce823b829d747efde90f602a6040518082815260200191505060405180910390a350565b7f906950f44e189193819a60a8ce35a53a0aee725af98bc984839c89d8fa2e09dd602a826040518083815260200182600019166000191681526020019250505060405180910390a1505600a165627a7a72305820d27e753e48c6f5af0acc5f744c8d6c3626f9c09ee5d676abb371e596446cca7d0029 \ No newline at end of file diff --git a/test/examples/build/SimpleStorage.bin b/test/examples/build/SimpleStorage.bin index 8f95617..3366e7e 100644 --- a/test/examples/build/SimpleStorage.bin +++ b/test/examples/build/SimpleStorage.bin @@ -1 +1 @@ -608060405234801561001057600080fd5b5060df8061001f6000396000f3006080604052600436106049576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806360fe47b114604e5780636d4ce63c146078575b600080fd5b348015605957600080fd5b5060766004803603810190808035906020019092919050505060a0565b005b348015608357600080fd5b50608a60aa565b6040518082815260200191505060405180910390f35b8060008190555050565b600080549050905600a165627a7a72305820288c3f672c14d2f8264489202b6b9170fe3060251af31eeaffb45b1bbe97992a0029 \ No newline at end of file +608060405234801561001057600080fd5b5060df8061001f6000396000f3006080604052600436106049576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806360fe47b114604e5780636d4ce63c146078575b600080fd5b348015605957600080fd5b5060766004803603810190808035906020019092919050505060a0565b005b348015608357600080fd5b50608a60aa565b6040518082815260200191505060405180910390f35b8060008190555050565b600080549050905600a165627a7a72305820f2f37cc74bbe30fe8ae3f607794a9d1c1f383aecbdd50b87b8767480e245f8e30029 \ No newline at end of file diff --git a/test/examples/contracts/EventTester.sol b/test/examples/contracts/EventTester.sol index 8fbdcf9..b872776 100644 --- a/test/examples/contracts/EventTester.sol +++ b/test/examples/contracts/EventTester.sol @@ -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); } -} \ No newline at end of file + + function simpleIndex(bytes32 data) public { + emit SimpleIndex(46, data, 42); + } + +} diff --git a/test/exw3_test.exs b/test/exw3_test.exs index 34f61eb..0b3a631 100644 --- a/test/exw3_test.exs +++ b/test/exw3_test.exs @@ -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 diff --git a/test/test_helper.exs b/test/test_helper.exs index 4fbd00f..869559e 100644 --- a/test/test_helper.exs +++ b/test/test_helper.exs @@ -1,9 +1 @@ -defmodule Log do - def p input do - input - |> Kernel.inspect - |> IO.puts - end -end - -ExUnit.start() \ No newline at end of file +ExUnit.start()