Ejemplo n.º 1
0
def test_filter_log_before_from_block(session):
    construct_log(session, block_number=0)

    params = FilterParams(from_block=1)

    results = filter_logs(session, params)
    assert not results
Ejemplo n.º 2
0
def test_filter_log_after_to_block(session):
    construct_log(session, block_number=2)

    params = FilterParams(to_block=1)

    results = filter_logs(session, params)
    assert not results
Ejemplo n.º 3
0
def test_filter_log_single_topic_out_of_position(session):
    topic = Hash32Factory()
    wrong_topic = Hash32Factory()
    construct_log(session, topics=(wrong_topic, topic))

    params = FilterParams(topics=(topic, ))

    results = filter_logs(session, params)
    check_filter_results(params, results)

    assert len(results) == 0
Ejemplo n.º 4
0
def test_filter_log_null_from_block_before_to_block(session):
    log = construct_log(session, block_number=2)
    construct_log(session, block_number=6)  # another log that doesn't match

    params = FilterParams(to_block=5)

    results = filter_logs(session, params)
    check_filter_results(params, results)

    assert len(results) == 1
    assert results[0].id == log.id
Ejemplo n.º 5
0
def test_filter_log_empty_params(session):
    log = construct_log(session)

    params = FilterParams()

    results = filter_logs(session, params)

    check_filter_results(params, results)

    assert len(results) == 1
    assert results[0].id == log.id
Ejemplo n.º 6
0
def test_filter_log_after_from_block_null_to_block(session):
    log = construct_log(session, block_number=2)
    construct_log(session, block_number=0)  # another log that doesn't match

    params = FilterParams(from_block=1)

    results = filter_logs(session, params)
    check_filter_results(params, results)

    assert len(results) == 1
    assert results[0].idx == log.idx
    assert results[0].receipt_hash == log.receipt_hash
Ejemplo n.º 7
0
def test_filter_log_single_topic(session):
    topic = Hash32Factory()
    log = construct_log(session, topics=(topic, ))
    construct_log(session)  # another log that doesn't match

    params = FilterParams(topics=(topic, ))

    results = filter_logs(session, params)
    check_filter_results(params, results)

    assert len(results) == 1
    assert results[0].id == log.id
    assert results[0].topics[0].topic == topic
Ejemplo n.º 8
0
def test_filter_log_single_address_match(session):
    address = AddressFactory()
    log = construct_log(session, address=address)

    params = FilterParams(address=address)

    results = filter_logs(session, params)

    check_filter_results(params, results)

    assert len(results) == 1
    assert results[0].id == log.id
    assert results[0].address == address
Ejemplo n.º 9
0
async def test_rpc_getLogs(session, w3, rpc_node, params):
    log = construct_log(session,
                        block_number=2,
                        address=LOG_ADDRESS,
                        topics=(LOG_TOPIC_0, LOG_TOPIC_1))
    expected_results = filter_logs(session, params)
    assert len(expected_results) == 1

    results = await trio.to_thread.run_sync(w3.eth.getLogs,
                                            _params_to_rpc_request(params))
    assert len(results) == 1

    result = results[0]
    assert is_same_address(log.address, result["address"])
Ejemplo n.º 10
0
def test_filter_log_single_topic_second_position(session):
    topic = Hash32Factory()
    log = construct_log(session, topics=(Hash32Factory(), topic))
    construct_log(session)  # another log that doesn't match

    params = FilterParams(topics=(None, topic))

    results = filter_logs(session, params)
    check_filter_results(params, results)

    assert len(results) == 1
    assert results[0].idx == log.idx
    assert results[0].receipt_hash == log.receipt_hash
    assert results[0].topics[1].topic == topic
Ejemplo n.º 11
0
def test_filter_log_multiple_topics(session):
    topic_0 = Hash32Factory()
    topic_1 = Hash32Factory()
    log = construct_log(session, topics=(topic_0, topic_1))
    construct_log(session)  # another log that doesn't match

    params = FilterParams(topics=(topic_0, topic_1))

    results = filter_logs(session, params)
    check_filter_results(params, results)

    assert len(results) == 1
    assert results[0].idx == log.idx
    assert results[0].receipt_hash == log.receipt_hash
    assert results[0].topics[0].topic == topic_0
    assert results[0].topics[1].topic == topic_1
Ejemplo n.º 12
0
def test_filter_log_multiple_addresses(session):
    address = AddressFactory()
    other = AddressFactory()

    log = construct_log(session, address=address)
    construct_log(session)  # another log that doesn't match

    params = FilterParams(address=(other, address))

    results = filter_logs(session, params)

    check_filter_results(params, results)

    assert len(results) == 1
    assert results[0].id == log.id
    assert results[0].address == address
Ejemplo n.º 13
0
def test_filter_params_with_multiple_options_for_topic(session):
    topic_a = Hash32Factory()
    topic_b = Hash32Factory()
    log_a = construct_log(session, topics=(topic_a, ))
    log_b = construct_log(session, topics=(topic_b, ))
    construct_log(session)  # another log that doesn't match

    params = FilterParams(topics=((topic_a, topic_b), ))

    results = filter_logs(session, params)
    check_filter_results(params, results)

    assert len(results) == 2
    assert results[0].id in {log_a.id, log_b.id}
    assert results[1].id in {log_a.id, log_b.id}
    assert results[0].topics[0].topic in {topic_a, topic_b}
    assert results[1].topics[0].topic in {topic_a, topic_b}
Ejemplo n.º 14
0
def test_filters_fuzzy(_Session, num_blocks, random_module):
    topic_factory = ThingGenerator(Hash32Factory)
    address_factory = ThingGenerator(AddressFactory)

    session = _Session()
    transaction = session.begin_nested()

    try:
        build_block_chain(session, topic_factory, address_factory, num_blocks)
        for _ in range(200):
            params = build_filter(topic_factory, address_factory)

            results = filter_logs(session, params)

            check_filter_results(params, results)
    finally:
        transaction.rollback()
        session.close()
Ejemplo n.º 15
0
 async def _handle_getLogs(self, request: RPCRequest,
                           raw_params: RawFilterParams) -> str:
     params = _rpc_request_to_filter_params(raw_params)
     logs = filter_logs(self.session, params)
     results = tuple(_log_to_rpc_response(log) for log in logs)
     return generate_response(request, results, None)