def make_filters(self): ret = [] for event_name in self.event_handlers.keys(): abi = CONTRACT_MANAGER.get_event_abi('TokenNetwork', event_name) assert abi is not None ret.append(make_filter(self.web3, abi)) return ret
def test_filter(generate_raiden_client, web3): """test if filter returns past events""" c1 = generate_raiden_client() c2 = generate_raiden_client() c3 = generate_raiden_client() channel_id = c1.open_channel(c2.address) bp = c2.get_balance_proof(c1.address, transferred_amount=1, nonce=1) c1.close_channel(c2.address, bp) gevent.sleep(0) abi = CONTRACT_MANAGER.get_event_abi('TokenNetwork', 'ChannelClosed') assert abi is not None f = make_filter(web3, abi, fromBlock=0) entries = f.get_new_entries() assert len([ x for x in entries if (encode_hex(x['args']['channel_identifier']) == channel_id) and ( x['address'] == c1.contract.address) ]) == 1 channel_id = c1.open_channel(c3.address) bp = c3.get_balance_proof(c1.address, transferred_amount=1, nonce=1) c1.close_channel(c3.address, bp) entries = f.get_new_entries() assert len([ x for x in entries if (encode_hex(x['args']['channel_identifier']) == channel_id) and ( x['address'] == c1.contract.address) ]) == 1 assert len(f.get_all_entries()) > 0
def test_deploy(generate_raiden_client, ethereum_tester): c1, c2 = generate_raiden_client(), generate_raiden_client() c3 = generate_raiden_client() web3 = c1.web3 # make filter for ChannelClosed event # get event ABI abi = CONTRACT_MANAGER.get_event_abi('TokenNetwork', 'ChannelClosed') event_filter = make_filter(web3, abi) # deposit some funds to the channel channel_id = c1.open_channel(c2.address) c1.deposit_to_channel(c2.address, 100) channel_id_c2 = c2.open_channel(c1.address) c2.deposit_to_channel(c1.address, 100) assert channel_id == channel_id_c2 # initialy it should be empty transfer_events = event_filter.get_new_entries() assert transfer_events == [] # now close a channel and check if we got the entry c1_balance_proof = c2.get_balance_proof(c1.address, transferred_amount=10, nonce=5) c1.close_channel(c2.address, c1_balance_proof) transfer_events = event_filter.get_new_entries() assert transfer_events != [] assert is_same_address(transfer_events[0]['args']['closing_participant'], c1.address) assert transfer_events[0]['args']['channel_identifier'] == channel_id # no new entries transfer_events = event_filter.get_new_entries() assert transfer_events == [] # open/close another channel, get new entry channel_id = c3.open_channel(c1.address) c1.open_channel(c3.address) c1_balance_proof = c1.get_balance_proof(c3.address, transferred_amount=10, nonce=3) c3.close_channel(c1.address, c1_balance_proof) transfer_events = [ event for event in event_filter.get_new_entries() if is_same_address(event['args']['closing_participant'], c3.address) ] assert transfer_events != [] assert is_same_address(transfer_events[0]['args']['closing_participant'], c3.address) assert transfer_events[0]['args']['channel_identifier'] == channel_id with pytest.raises(TransactionFailed): c1.settle_channel(c2.address) ethereum_tester.mine_blocks(num_blocks=10) with pytest.raises(TransactionFailed): c1.settle_channel(c2.address) ethereum_tester.mine_blocks(num_blocks=10) c1.settle_channel(c2.address)
def get_event_logs(web3: Web3, contract_abi: dict, event_name: str, fromBlock=0, toBlock=None): """Helper function to get all event logs in a given range""" abi = get_event_from_abi(contract_abi, event_name) tmp_filter = make_filter(web3, abi, fromBlock=0, toBlock=toBlock) entries = tmp_filter.get_all_entries() web3.eth.uninstallFilter(tmp_filter.filter_id) return entries
def test_first_event(generate_raiden_client, web3): c1, c2 = generate_raiden_client(), generate_raiden_client() channel_id = c1.open_channel(c2.address) channel_id_c2 = c2.open_channel(c1.address) assert channel_id == channel_id_c2 c2_balance_proof = c2.get_balance_proof(c1.address, transferred_amount=10, nonce=1) c1.close_channel(c2.address, c2_balance_proof) gevent.sleep(0) abi = CONTRACT_MANAGER.get_event_abi('TokenNetwork', 'ChannelClosed') event_filter = make_filter(web3, abi, fromBlock=0) transfer_events = event_filter.get_new_entries() assert len(transfer_events) > 0 assert [ x for x in transfer_events if is_same_address(x['args']['closing_participant'], c1.address) ]