def test_cooperative( channel_manager: ChannelManager, confirmed_open_channel: Channel, receiver_address: str, web3: Web3, token_contract: Contract, wait_for_blocks, sender_address: str ): blockchain = channel_manager.blockchain channel_id = (confirmed_open_channel.sender, confirmed_open_channel.block) sig1 = encode_hex(confirmed_open_channel.create_transfer(5)) channel_manager.register_payment(sender_address, confirmed_open_channel.block, 5, sig1) receiver_sig = channel_manager.sign_close(sender_address, confirmed_open_channel.block, 5) channel_rec = channel_manager.channels[channel_id] assert channel_rec.is_closed is True block_before = web3.eth.blockNumber confirmed_open_channel.close_cooperatively(receiver_sig) wait_for_blocks(blockchain.n_confirmations) gevent.sleep(blockchain.poll_interval) logs = get_logs(token_contract, 'Transfer', from_block=block_before - 1) assert len([l for l in logs if is_same_address(l['args']['_to'], receiver_address) and l['args']['_value'] == 5]) == 1 assert len([l for l in logs if is_same_address(l['args']['_to'], sender_address) and l['args']['_value'] == 5]) == 1 wait_for_blocks(blockchain.n_confirmations) gevent.sleep(blockchain.poll_interval) assert channel_id not in channel_manager.channels
def test_balances( channel_manager: ChannelManager, confirmed_open_channel: Channel, wait_for_blocks, sender_address: str, use_tester: bool ): blockchain = channel_manager.blockchain initial_liquid_balance = channel_manager.get_liquid_balance() initial_locked_balance = channel_manager.get_locked_balance() if use_tester: assert initial_liquid_balance == 0 assert initial_locked_balance == 0 sig = encode_hex(confirmed_open_channel.create_transfer(5)) channel_manager.register_payment(sender_address, confirmed_open_channel.block, 5, sig) assert channel_manager.get_liquid_balance() == initial_liquid_balance assert channel_manager.get_locked_balance() == 5 receiver_sig = channel_manager.sign_close(sender_address, confirmed_open_channel.block, 5) confirmed_open_channel.close_cooperatively(receiver_sig) wait_for_blocks(blockchain.n_confirmations) gevent.sleep(blockchain.poll_interval) assert channel_manager.get_liquid_balance() == initial_liquid_balance + 5 assert channel_manager.get_locked_balance() == initial_locked_balance
def test_cooperative( channel_manager: ChannelManager, confirmed_open_channel: Channel, receiver_address: str, web3: Web3, token_contract: Contract, wait_for_blocks, sender_address: str ): blockchain = channel_manager.blockchain channel_id = (confirmed_open_channel.sender, confirmed_open_channel.block) sig1 = encode_hex(confirmed_open_channel.create_transfer(5)) channel_manager.register_payment(sender_address, confirmed_open_channel.block, 5, sig1) receiver_sig = channel_manager.sign_close(sender_address, confirmed_open_channel.block, 5) channel_rec = channel_manager.channels[channel_id] assert channel_rec.is_closed is True block_before = web3.eth.blockNumber confirmed_open_channel.close_cooperatively(receiver_sig) wait_for_blocks(blockchain.n_confirmations) gevent.sleep(blockchain.poll_interval) logs = get_logs(token_contract, 'Transfer', from_block=block_before - 1) assert len([l for l in logs if is_same_address(l['args']['_to'], receiver_address) and l['args']['_value'] == 5]) == 1 assert len([l for l in logs if is_same_address(l['args']['_to'], sender_address) and l['args']['_value'] == 5]) == 1 wait_for_blocks(blockchain.n_confirmations) gevent.sleep(blockchain.poll_interval) assert channel_id not in channel_manager.channels
def test_balances( channel_manager: ChannelManager, confirmed_open_channel: Channel, wait_for_blocks, sender_address: str, use_tester: bool ): blockchain = channel_manager.blockchain initial_liquid_balance = channel_manager.get_liquid_balance() initial_locked_balance = channel_manager.get_locked_balance() if use_tester: assert initial_liquid_balance == 0 assert initial_locked_balance == 0 sig = encode_hex(confirmed_open_channel.create_transfer(5)) channel_manager.register_payment(sender_address, confirmed_open_channel.block, 5, sig) assert channel_manager.get_liquid_balance() == initial_liquid_balance assert channel_manager.get_locked_balance() == 5 receiver_sig = channel_manager.sign_close(sender_address, confirmed_open_channel.block, 5) confirmed_open_channel.close_cooperatively(receiver_sig) wait_for_blocks(blockchain.n_confirmations) gevent.sleep(blockchain.poll_interval) assert channel_manager.get_liquid_balance() == initial_liquid_balance + 5 assert channel_manager.get_locked_balance() == initial_locked_balance
def close_channel(self, endpoint_url: str, channel: Channel): log.debug( 'Requesting closing signature from server for balance {} on channel {}/{}/{}.' .format(channel.balance, channel.sender, channel.sender, channel.block)) url = '{}/api/1/channels/{}/{}'.format(endpoint_url, channel.sender, channel.block) response = requests.delete(url, data={'balance': channel.balance}) if response.status_code == requests.codes.OK: closing_sig = response.json()['close_signature'] channel.close_cooperatively(decode_hex(closing_sig)) else: self.on_cooperative_close_denied(endpoint_url, channel, response)
def close_channel(self, channel: Channel): log.info( 'Requesting closing signature from server for balance {} on channel {}/{}/{}.' .format(channel.balance, channel.sender, channel.sender, channel.block) ) url = self.make_url('api/1/channels/{}/{}'.format(channel.sender, channel.block)) response = requests.delete(url, data={'balance': channel.balance}) if response.status_code == requests.codes.OK: closing_sig = json.loads(response.content.decode())['close_signature'] channel.close_cooperatively(decode_hex(closing_sig)) else: body = response.content.decode() if response.content else None log.error('No closing signature received: {}'.format(body))
def close_channel_cooperatively( channel: Channel, privkey_receiver: str, contract_address: str, balance: int=None ): if balance is not None: channel.balance = balance closing_sig = sign_close(privkey_receiver, channel.balance_sig) assert channel.close_cooperatively(closing_sig)
def close_channel_cooperatively(channel: Channel, privkey_receiver: str, balance: int = None): if balance is not None: channel.update_balance(balance) closing_sig = sign_close(privkey_receiver, channel.balance_sig) assert channel.close_cooperatively(closing_sig)
def close_channel_cooperatively(channel: Channel, privkey_receiver: str, contract_address: str, balance: int = None): if balance is not None: channel.update_balance(balance) closing_sig = sign_close(privkey_receiver, channel.sender, channel.block, channel.balance, contract_address) assert channel.close_cooperatively(closing_sig)
def close_channel_cooperatively( channel: Channel, privkey_receiver: str, contract_address: str, balance: int=None ): if balance is not None: channel.update_balance(balance) closing_sig = sign_close( privkey_receiver, channel.sender, channel.block, channel.balance, contract_address ) assert channel.close_cooperatively(closing_sig)