def pay_vendor(self, vendor, amount): transaction = chain.sendassetfrom(self.wallet_address, vendor.wallet_address, settings.MULTICHAIN_ASSET, amount) if check_call(transaction): transaction = Transaction.objects.create( sender=self, receiver=vendor, amount=amount, transaction_type=Transaction.USER_KASH_PAYMENT, transaction_hash=transaction) wallet_balance = WalletBalance.objects.create( user=self, balance=self.get_wallet_balance(), transaction=transaction) wallet_balance.save() wallet_balance1 = WalletBalance.objects.create( user=vendor, balance=vendor.get_wallet_balance(), transaction=transaction) wallet_balance1.save() return transaction else: logger.error(transaction['error']) return False
def get_wallet_balance(self): if not self.wallet_address.strip(): logging.error("User wallet address is not configured user_id:%s" % self.id) return 0 else: try: balances = chain.getaddressbalances(self.wallet_address) if check_call(balances): for asset in balances: if asset['name'] == settings.MULTICHAIN_ASSET_NKASH: if asset['qty'] > 0: return -asset['qty'] else: continue elif asset['name'] == settings.MULTICHAIN_ASSET: if asset['qty'] > 0: return asset['qty'] else: continue return 0 logger.error(balances['error']) except Exception: logger.error(Exception) return False
def issue_nkash(self, amount, sender): # Amount Should be given in Positive Only balance = self.get_wallet_balance() if balance > 0: # debt = balance - amount # if debt < 0: # debt = -debt # transaction = chain.sendassetfrom(self.wallet_address, settings.MULTICHAIN_BURN_ADDRESS, # settings.MULTICHAIN_ASSET, balance) # chain.issuemore(self.wallet_address, settings.MULTICHAIN_ASSET_NKASH, debt) # else: # transaction = chain.sendassetfrom(self.wallet_address, settings.MULTICHAIN_BURN_ADDRESS, # settings.MULTICHAIN_ASSET, # amount) return False else: transaction = chain.issuemore(self.wallet_address, settings.MULTICHAIN_ASSET_NKASH, amount) if check_call(transaction): transaction = Transaction.objects.create( sender=self, receiver=sender, amount=-amount, transaction_type=Transaction.KASH_DEPOSIT, transaction_hash=transaction) wallet_balance = WalletBalance.objects.create( user=self, balance=self.get_wallet_balance(), transaction=transaction) wallet_balance.save() return transaction else: logger.error(transaction['error']) return False
def transfer_to_user(self, user, amount, transaction_type=Transaction.WALLET_TRANSACTION): receiver_balance = user.get_wallet_balance() if receiver_balance < 0: balance = receiver_balance + amount if balance < 0: transaction = chain.sendassetfrom( self.wallet_address, settings.MULTICHAIN_BURN_ADDRESS, settings.MULTICHAIN_ASSET, amount) chain.sendassetfrom(user.wallet_address, settings.MULTICHAIN_BURN_ADDRESS, settings.MULTICHAIN_ASSET_NKASH, amount) else: chain.sendassetfrom(self.wallet_address, settings.MULTICHAIN_BURN_ADDRESS, settings.MULTICHAIN_ASSET, -receiver_balance) chain.sendassetfrom(user.wallet_address, settings.MULTICHAIN_BURN_ADDRESS, settings.MULTICHAIN_ASSET_NKASH, -receiver_balance) transaction = chain.sendassetfrom(self.wallet_address, user.wallet_address, settings.MULTICHAIN_ASSET, balance) else: transaction = chain.sendassetfrom(self.wallet_address, user.wallet_address, settings.MULTICHAIN_ASSET, amount) if check_call(transaction): transaction_object = Transaction.objects.create( sender=self, receiver=user, amount=amount, transaction_type=transaction_type, transaction_hash=transaction) wallet_balance = WalletBalance.objects.create( user=self, balance=self.get_wallet_balance(), transaction=transaction_object) wallet_balance.save() wallet_balance1 = WalletBalance.objects.create( user=user, balance=user.get_wallet_balance(), transaction=transaction_object) wallet_balance1.save() return transaction_object, "No Error" else: logger.error(transaction['error']) return False, transaction['error']
def issue_asset(self, amount, sender): amount = float(amount) try: receiver_balance = self.get_wallet_balance() if receiver_balance < 0: balance = receiver_balance + amount if balance < 0: transaction = chain.sendassetfrom( self.wallet_address, settings.MULTICHAIN_BURN_ADDRESS, settings.MULTICHAIN_ASSET_NKASH, amount) else: chain.sendassetfrom(self.wallet_address, settings.MULTICHAIN_BURN_ADDRESS, settings.MULTICHAIN_ASSET_NKASH, -receiver_balance) transaction = chain.issuemore(self.wallet_address, settings.MULTICHAIN_ASSET, balance) else: transaction = chain.issuemore(self.wallet_address, settings.MULTICHAIN_ASSET, amount) if check_call(transaction): transaction_object = Transaction.objects.create( sender=sender, receiver=self, amount=amount, transaction_type=Transaction.KASH_DEPOSIT, transaction_hash=transaction) wallet_balance = WalletBalance.objects.create( user=self, balance=self.get_wallet_balance(), transaction=transaction_object) wallet_balance.save() return True else: logger.error(transaction['error']) return False except Exception as inst: logger.error("Multichain call failing" + inst.__str__()) return False
def burn_asset(self, amount, main_cashier): try: transaction = chain.sendassetfrom(self.wallet_address, settings.MULTICHAIN_BURN_ADDRESS, settings.MULTICHAIN_ASSET, amount) transaction_object = Transaction.objects.create( sender=self, receiver=main_cashier, amount=amount, transaction_type=Transaction.VENDOR_KASH_CREDIT, transaction_hash=transaction) wallet_balance = WalletBalance.objects.create( user=self, balance=self.get_wallet_balance(), transaction=transaction_object) wallet_balance.save() if check_call(transaction): pass else: logger.error(transaction["error"]) except: logger.error("Multichain call failing")