def create(wallet, channel_name, asset_type, founder, founder_deposit, partner, partner_deposit, founder_commitment, comments=None): """ :param wallet: :param channel_name: :param asset_type: :param founder: :param founder_deposit: :param partner: :param partner_deposit: :param founder_commitment: :param comments: :return: """ # check the deposit founder_deposit = int(founder_deposit) partner_deposit = int(partner_deposit) FounderResponsesMessage.check_deposit(founder_deposit, partner_deposit) nonce = FounderResponsesMessage._FOUNDER_NONCE # start to sign content founder_address, _, _ = uri_parser(founder) partner_address, _, _ = uri_parser(partner) # Sign this data to the commitment = FounderResponsesMessage.sign_content( wallet, FounderResponsesMessage._sign_type_list, [ channel_name, nonce, founder_address, founder_deposit, partner_address, partner_deposit ]) # start add channel deposit = { founder_address: { asset_type: str(founder_deposit) }, partner_address: { asset_type: str(partner_deposit) } } hlock = { founder_address: { asset_type: '0' }, partner_address: { asset_type: '0' } } Channel.add_channel(channel=channel_name, src_addr=founder, dest_addr=partner, state=EnumChannelState.INIT.name, deposit=deposit, hlock=hlock, magic=get_magic()) APIStatistics.update_statistics(wallet.address, state=EnumChannelState.INIT.name) # add trade to database founder_trade = Channel.founder_trade( type=EnumTradeType.TRADE_TYPE_FOUNDER, role=EnumTradeRole.TRADE_ROLE_PARTNER, asset_type=asset_type, balance=partner_deposit, peer_balance=founder_deposit, commitment=commitment, peer_commitment=founder_commitment, state=EnumTradeState.confirming) Channel.add_trade(channel_name, nonce=nonce, **founder_trade) # create messages asset_type = asset_type.upper() message = FounderResponsesMessage.create_message_header( partner, founder, FounderResponsesMessage._message_name, channel_name, asset_type, nonce) message_body = {"Commitment": commitment} message.update({"MessageBody": message_body}) # Add comments in the messages if comments: message.update({"Comments": comments}) # fill message status message.update({'Status': EnumResponseStatus.RESPONSE_OK.name}) # send message to peer FounderResponsesMessage.send(message) return
def create(wallet, channel_name, asset_type, founder, founder_deposit, partner, partner_deposit=None, comments=None): """ :param wallet: :param channel_name: :param asset_type: :param founder: :param founder_deposit: :param partner: :param partner_deposit: :param comments: :return: """ founder_deposit = int(founder_deposit) if partner_deposit is None: partner_deposit = founder_deposit partner_deposit = int(partner_deposit) # check the deposit FounderMessage.check_deposit(founder_deposit, partner_deposit) # get addresses of peers nonce = FounderMessage._FOUNDER_NONCE founder_address, _, _ = uri_parser(founder) partner_address, _, _ = uri_parser(partner) # Sign this data to hash value commitment = FounderMessage.sign_content( wallet, FounderMessage._sign_type_list, [ channel_name, nonce, founder_address, founder_deposit, partner_address, partner_deposit ]) # add channel asset_type = asset_type.upper() deposit = { founder_address: { asset_type: str(founder_deposit) }, partner_address: { asset_type: str(partner_deposit) } } hlock = { founder_address: { asset_type: '0' }, partner_address: { asset_type: '0' } } Channel.add_channel(channel=channel_name, src_addr=founder, dest_addr=partner, state=EnumChannelState.INIT.name, deposit=deposit, magic=get_magic(), hlock=hlock) APIStatistics.update_statistics(wallet.address, state=EnumChannelState.INIT.name) # record the transaction founder_trade = Channel.founder_trade( type=EnumTradeType.TRADE_TYPE_FOUNDER, role=EnumTradeRole.TRADE_ROLE_FOUNDER, asset_type=asset_type, balance=founder_deposit, peer_balance=partner_deposit, commitment=commitment) Channel.add_trade(channel_name, nonce=nonce, **founder_trade) # create founder request message message = FounderMessage.create_message_header( founder, partner, FounderMessage._message_name, channel_name, asset_type, nonce) message_body = { "FounderDeposit": str(founder_deposit), "PartnerDeposit": str(partner_deposit), "Commitment": commitment, } message.update({'MessageBody': message_body}) # Add comments in the messages if comments: message.update({"Comments": comments}) FounderMessage.send(message) return