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
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
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
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
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