def test_monitor_reward_claimed_event_handler(context: Context, log):
    metrics_state = save_metrics_state(metrics.REGISTRY)

    context = setup_state_with_closed_channel(context)

    claim_event = ReceiveMonitoringRewardClaimedEvent(
        ms_address=context.ms_state.address,
        amount=TokenAmount(1),
        reward_identifier="REWARD",
        block_number=BlockNumber(23),
    )

    monitor_reward_claim_event_handler(claim_event, context)

    assert (metrics_state.get_delta(
        "economics_reward_claims_successful_total",
        labels=metrics.Who.US.to_label_dict()) == 1.0)
    assert (metrics_state.get_delta(
        "economics_reward_claims_token_total",
        labels=metrics.Who.US.to_label_dict()) == 1.0)

    assert log.has("Successfully claimed reward")

    claim_event.ms_address = Address(bytes([3] * 20))
    monitor_reward_claim_event_handler(claim_event, context)

    assert (metrics_state.get_delta(
        "economics_reward_claims_successful_total",
        labels=metrics.Who.THEY.to_label_dict()) == 1.0)
    assert (metrics_state.get_delta(
        "economics_reward_claims_token_total",
        labels=metrics.Who.THEY.to_label_dict()) == 1.0)

    assert log.has("Another MS claimed reward")
Beispiel #2
0
def test_monitor_reward_claimed_event_handler(context: Context, log):
    context = setup_state_with_closed_channel(context)

    claim_event = ReceiveMonitoringRewardClaimedEvent(
        ms_address=context.ms_state.address,
        amount=TokenAmount(1),
        reward_identifier="REWARD",
        block_number=BlockNumber(23),
    )

    monitor_reward_claim_event_handler(claim_event, context)
    assert log.has("Successfully claimed reward")

    claim_event.ms_address = Address(bytes([3] * 20))
    monitor_reward_claim_event_handler(claim_event, context)
    assert log.has("Another MS claimed reward")
def get_monitoring_blockchain_events(
    web3: Web3,
    contract_manager: ContractManager,
    chain_state: BlockchainState,
    from_block: BlockNumber,
    to_block: BlockNumber,
) -> List[Event]:
    if chain_state.monitor_contract_address is None:
        return []

    monitoring_service_events = query_blockchain_events(
        web3=web3,
        contract_manager=contract_manager,
        contract_address=chain_state.monitor_contract_address,
        contract_name=CONTRACT_MONITORING_SERVICE,
        topics=[None],
        from_block=from_block,
        to_block=to_block,
    )

    events: List[Event] = []
    for event in monitoring_service_events:
        event_name = event["event"]
        block_number = event["blockNumber"]

        if event_name == MonitoringServiceEvent.NEW_BALANCE_PROOF_RECEIVED:
            events.append(
                ReceiveMonitoringNewBalanceProofEvent(
                    token_network_address=TokenNetworkAddress(
                        to_canonical_address(event["args"]["token_network_address"])
                    ),
                    channel_identifier=event["args"]["channel_identifier"],
                    reward_amount=event["args"]["reward_amount"],
                    nonce=event["args"]["nonce"],
                    ms_address=to_canonical_address(event["args"]["ms_address"]),
                    raiden_node_address=to_canonical_address(event["args"]["raiden_node_address"]),
                    block_number=block_number,
                )
            )
        elif event_name == MonitoringServiceEvent.REWARD_CLAIMED:
            events.append(
                ReceiveMonitoringRewardClaimedEvent(
                    ms_address=to_canonical_address(event["args"]["ms_address"]),
                    amount=event["args"]["amount"],
                    reward_identifier=encode_hex(event["args"]["reward_identifier"]),
                    block_number=block_number,
                )
            )

    return events
Beispiel #4
0
def get_monitoring_blockchain_events(
    web3: Web3,
    contract_manager: ContractManager,
    chain_state: BlockchainState,
    from_block: BlockNumber,
    to_block: BlockNumber,
) -> List[Event]:
    monitoring_service_events = query_blockchain_events(
        web3=web3,
        contract_manager=contract_manager,
        contract_address=chain_state.monitor_contract_address,
        contract_name=CONTRACT_MONITORING_SERVICE,
        topics=[None],
        from_block=from_block,
        to_block=to_block,
    )

    events: List[Event] = []
    for event in monitoring_service_events:
        event_name = event['event']
        block_number = event['blockNumber']

        if event_name == MonitoringServiceEvent.NEW_BALANCE_PROOF_RECEIVED:
            events.append(
                ReceiveMonitoringNewBalanceProofEvent(
                    token_network_address=event['args']
                    ['token_network_address'],
                    channel_identifier=event['args']['channel_identifier'],
                    reward_amount=event['args']['reward_amount'],
                    nonce=event['args']['nonce'],
                    ms_address=event['args']['ms_address'],
                    raiden_node_address=event['args']['raiden_node_address'],
                    block_number=block_number,
                ))
        elif event_name == MonitoringServiceEvent.REWARD_CLAIMED:
            events.append(
                ReceiveMonitoringRewardClaimedEvent(
                    ms_address=event['args']['ms_address'],
                    amount=event['args']['amount'],
                    reward_identifier=encode_hex(
                        event['args']['reward_identifier']),
                    block_number=block_number,
                ))

    return events