Ejemplo n.º 1
0
def make_from_route_from_counter(counter):
    from_channel = factories.make_channel(
        partner_balance=next(counter),
        partner_address=factories.HOP1,
        token_address=factories.make_address(),
        channel_identifier=next(counter),
    )
    from_route = factories.route_from_channel(from_channel)

    expiration = factories.UNIT_REVEAL_TIMEOUT + 1

    from_transfer = factories.make_signed_transfer_for(
        from_channel,
        factories.LockedTransferSignedStateProperties(
            transfer=factories.LockedTransferProperties(
                balance_proof=factories.BalanceProofProperties(
                    transferred_amount=0,
                    token_network_identifier=from_channel.
                    token_network_identifier,
                ),
                amount=1,
                expiration=expiration,
                secret=sha3(factories.make_secret(next(counter))),
                initiator=factories.make_address(),
                target=factories.make_address(),
                payment_identifier=next(counter),
            ),
            sender=factories.HOP1,
            pkey=factories.HOP1_KEY,
        ),
    )
    return from_route, from_transfer
Ejemplo n.º 2
0
def test_balance_proof_invalid_attributes():
    invalid_nonces = [-10, 0, UINT64_MAX + 1]
    invalid_transferred_amounts = [-1, UINT256_MAX + 1]
    invalid_locksroots = [urandom(31), urandom(33)]
    invalid_signatures = [urandom(64), urandom(66)]

    properties_unsigned = factories.BalanceProofProperties()
    properties_signed = factories.BalanceProofSignedStateProperties(
        signature=urandom(64))

    for properties in (properties_unsigned, properties_signed):
        for nonce in invalid_nonces:
            with pytest.raises(ValueError):
                factories.create(factories.replace(properties, nonce=nonce))

        for amount in invalid_transferred_amounts:
            with pytest.raises(ValueError):
                factories.create(
                    factories.replace(properties, transferred_amount=amount))

        for locksroot in invalid_locksroots:
            with pytest.raises(ValueError):
                factories.create(
                    factories.replace(properties, locksroot=locksroot))

    for signature in invalid_signatures:
        with pytest.raises(ValueError):
            factories.create(
                factories.replace(properties_signed, signature=signature))
Ejemplo n.º 3
0
 def update(self, amount, lock):
     self._pending_locks = channel.compute_locks_with(self._pending_locks, lock)
     if self.properties:
         self.properties = factories.replace(
             self.properties,
             locked_amount=self.properties.locked_amount + amount,
             locksroot=compute_locksroot(self._pending_locks),
             nonce=self.properties.nonce + 1,
         )
     else:
         self.properties = factories.BalanceProofProperties(
             transferred_amount=0,
             locked_amount=amount,
             nonce=1,
             locksroot=compute_locksroot(self._pending_locks),
             canonical_identifier=self._canonical_identifier,
         )
Ejemplo n.º 4
0
 def update(self, amount, lockhash):
     self._merkletree = channel.compute_merkletree_with(
         self._merkletree, lockhash)
     if self.properties:
         self.properties = factories.replace(
             self.properties,
             locked_amount=self.properties.locked_amount + amount,
             locksroot=merkleroot(self._merkletree),
             nonce=self.properties.nonce + 1,
         )
     else:
         self.properties = factories.BalanceProofProperties(
             transferred_amount=0,
             locked_amount=amount,
             nonce=1,
             locksroot=merkleroot(self._merkletree),
             canonical_identifier=self._canonical_identifier,
         )
Ejemplo n.º 5
0
def test_mediator_task_view():
    """Same as above for mediator tasks."""
    secret1 = factories.make_secret(1)
    locked_amount1 = 11
    payee_transfer = factories.create(
        factories.LockedTransferProperties(secret=secret1))
    payer_transfer = factories.create(
        factories.LockedTransferSignedStateProperties(
            transfer=factories.LockedTransferProperties(
                secret=secret1,
                payment_identifier=1,
                balance_proof=factories.BalanceProofProperties(
                    locked_amount=locked_amount1, ),
            ), ))
    secrethash1 = payee_transfer.lock.secrethash
    initiator = payee_transfer.initiator
    initiator_channel = factories.create(
        factories.NettingChannelStateProperties(
            partner_state=factories.NettingChannelEndStateProperties(
                address=initiator, balance=100), ))
    routes = [factories.route_from_channel(initiator_channel)]
    transfer_state1 = MediatorTransferState(secrethash=secrethash1,
                                            routes=routes)
    transfer_state1.transfers_pair.append(
        MediationPairState(
            payer_transfer=payer_transfer,
            payee_transfer=payee_transfer,
            payee_address=payee_transfer.target,
        ))
    task1 = MediatorTask(
        token_network_identifier=factories.UNIT_TOKEN_NETWORK_ADDRESS,
        mediator_state=transfer_state1,
    )

    secret2 = factories.make_secret(2)
    locked_amount2 = 13
    transfer2 = factories.create(
        factories.LockedTransferSignedStateProperties(
            transfer=factories.LockedTransferProperties(
                secret=secret2,
                payment_identifier=2,
                balance_proof=factories.BalanceProofProperties(
                    locked_amount=locked_amount2, ),
            ), ))
    secrethash2 = transfer2.lock.secrethash
    transfer_state2 = MediatorTransferState(secrethash=secrethash2,
                                            routes=routes)
    transfer_state2.waiting_transfer = WaitingTransferState(transfer=transfer2)
    task2 = MediatorTask(
        token_network_identifier=factories.UNIT_TOKEN_NETWORK_ADDRESS,
        mediator_state=transfer_state2,
    )

    payment_mapping = {secrethash1: task1, secrethash2: task2}
    view = transfer_tasks_view(payment_mapping)

    assert len(view) == 2
    if view[0].get('payment_identifier') == '1':
        pending_transfer, waiting_transfer = view
    else:
        waiting_transfer, pending_transfer = view

    assert pending_transfer.get('role') == waiting_transfer.get(
        'role') == 'mediator'
    assert pending_transfer.get('payment_identifier') == '1'
    assert waiting_transfer.get('payment_identifier') == '2'
    assert pending_transfer.get('locked_amount') == str(locked_amount1)
    assert waiting_transfer.get('locked_amount') == str(locked_amount2)