Exemplo n.º 1
0
 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
Exemplo n.º 2
0
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
Exemplo n.º 3
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)
Exemplo n.º 4
0
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
Exemplo n.º 5
0
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)
    ]