示例#1
0
    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
示例#2
0
 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
示例#3
0
 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
示例#4
0
    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']
示例#5
0
 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
示例#6
0
    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")