Пример #1
0
    def create(self) -> NettingChannelEndState:
        state = NettingChannelEndState(self.address or make_address(),
                                       self.balance)

        merkletree_leaves = (self.merkletree_leaves
                             or make_merkletree_leaves(self.merkletree_width)
                             or None)
        if merkletree_leaves:
            state.merkletree = MerkleTreeState(
                compute_layers(merkletree_leaves))

        return state
Пример #2
0
def _(properties, defaults=None) -> NettingChannelEndState:
    args = _properties_to_kwargs(
        properties, defaults or NettingChannelEndStateProperties.DEFAULTS)
    state = NettingChannelEndState(args["address"] or make_address(),
                                   args["balance"])

    merkletree_leaves = (args["merkletree_leaves"]
                         or make_merkletree_leaves(args["merkletree_width"])
                         or None)
    if merkletree_leaves:
        state.merkletree = MerkleTreeState(compute_layers(merkletree_leaves))

    return state
Пример #3
0
def _(properties, defaults=None) -> NettingChannelEndState:
    args = _properties_to_kwargs(
        properties, defaults or NETTING_CHANNEL_END_STATE_DEFAULTS)
    state = NettingChannelEndState(args['address'] or make_address(),
                                   args['balance'])

    merkletree_leaves = (args['merkletree_leaves']
                         or make_merkletree_leaves(args['merkletree_width'])
                         or None)
    if merkletree_leaves:
        state.merkletree = MerkleTreeState(compute_layers(merkletree_leaves))

    return state
Пример #4
0
def _(properties, defaults=None) -> NettingChannelEndState:
    args = _properties_to_kwargs(properties, defaults or NETTING_CHANNEL_END_STATE_DEFAULTS)
    state = NettingChannelEndState(args['address'] or make_address(), args['balance'])

    merkletree_leaves = (
        args['merkletree_leaves'] or
        make_merkletree_leaves(args['merkletree_width']) or
        None
    )
    if merkletree_leaves:
        state.merkletree = MerkleTreeState(compute_layers(merkletree_leaves))

    return state
Пример #5
0
def test_channelstate_get_unlock_proof():
    number_of_transfers = 100
    lock_amounts = cycle([1, 3, 5, 7, 11])
    lock_secrets = [
        make_secret(i)
        for i in range(number_of_transfers)
    ]

    block_number = 1000
    locked_amount = 0
    settle_timeout = 8
    merkletree_leaves = []
    locked_locks = {}
    unlocked_locks = {}

    for lock_amount, lock_secret in zip(lock_amounts, lock_secrets):
        block_number += 1
        locked_amount += lock_amount

        lock_expiration = block_number + settle_timeout
        lock_secrethash = sha3(lock_secret)
        lock = HashTimeLockState(
            lock_amount,
            lock_expiration,
            lock_secrethash,
        )

        merkletree_leaves.append(lock.lockhash)
        if random.randint(0, 1) == 0:
            locked_locks[lock_secrethash] = lock
        else:
            unlocked_locks[lock_secrethash] = UnlockPartialProofState(lock, lock_secret)

    end_state = NettingChannelEndState(HOP1, 300)
    end_state.secrethashes_to_lockedlocks = locked_locks
    end_state.secrethashes_to_unlockedlocks = unlocked_locks
    end_state.merkletree = MerkleTreeState(compute_layers(merkletree_leaves))

    unlock_proof = channel.get_batch_unlock(end_state)
    assert len(unlock_proof) == len(end_state.merkletree.layers[LEAVES])
    leaves_packed = b''.join(lock.encoded for lock in unlock_proof)

    recomputed_merkle_tree = MerkleTreeState(compute_layers(
        merkle_leaves_from_packed_data(leaves_packed),
    ))
    assert len(recomputed_merkle_tree.layers[LEAVES]) == len(end_state.merkletree.layers[LEAVES])

    computed_merkleroot = merkleroot(recomputed_merkle_tree)
    assert merkleroot(end_state.merkletree) == computed_merkleroot