def test_retry_atomic(self): main_account = Account.get_main_account() txn0 = Transaction.objects.create( from_account=main_account, to_account=self.user_account, amount=0.21, currency=Transaction.ALGO, action=Transaction.OPT_IN, status=Transaction.REJECTED, atomic=True, ) txn1 = Transaction.objects.create(from_account=self.user_account, to_account=self.user_account, amount=0, currency=Transaction.USDC, action=Transaction.OPT_IN, atomic=True, atomic_prev=txn0) txn2 = Transaction.objects.create(from_account=main_account, to_account=self.user_account, amount=0.1, currency=Transaction.USDC, action=Transaction.FUELING, atomic=True, atomic_prev=txn1) txids = txn0.retry() for txid in txids: self.assertTrue(utils.wait_for_confirmation(txid)) self.assertEqual(Transaction.objects.count(), 6)
def test_confirmed(self): main_account = Account.get_main_account() tx = Transaction.transfer(main_account, self.user_account, 0.1, Transaction.ALGO, Transaction.OPT_IN) self.assertTrue(utils.wait_for_confirmation(tx.txid)) verify_transactions() tx.refresh_from_db() self.assertEqual(tx.status, Transaction.CONFIRMED)
def test_opt_in_chain(self): main_account = Account.get_main_account() txids = Transaction.opt_in(self.user_account, main_account, [ Transaction.prepare_transfer(main_account, self.user_account, 0.0001, Transaction.USDC, Transaction.FUELING), ]) for txid in txids: self.assertTrue(utils.wait_for_confirmation(txid))
def test_rejected_pool_error(self): main_account = Account.get_main_account() with patch('algorand.utils.transaction_info') as mock_transaction_info: mock_transaction_info.return_value = {'pool-error': 'error'} tx = Transaction.transfer(main_account, self.user_account, 0.1, Transaction.ALGO, Transaction.OPT_IN) self.assertTrue(utils.wait_for_confirmation(tx.txid)) verify_transactions() tx.refresh_from_db() self.assertEqual(tx.status, Transaction.REJECTED) self.assertEqual(Transaction.objects.count(), 2)
def handle(self, *args, **options): investor = CustomUser.objects.get(id=options['investor_id']) main_account = Account.get_main_account() investor_account = investor.account Transaction.transfer(main_account, investor_account, 1000, action=Transaction.FUELING) Transaction.transfer(main_account, investor_account, 1000000, currency=Transaction.USDC, action=Transaction.FUELING)
def test_retry_single(self): main_account = Account.get_main_account() txn = Transaction.objects.create(from_account=main_account, to_account=self.user_account, amount=0.1, currency=Transaction.ALGO, action=Transaction.FUELING, retries=3) with self.assertRaises(Exception): txn.retry() txn.retries = 0 txn.save() with self.assertRaises(Exception): txn.retry() txn.status = Transaction.REJECTED txid = txn.retry() self.assertTrue(utils.wait_for_confirmation(txid))
def transfer_back_funds(): accounts = Account.objects.filter(user__isnull=True, smart_contract__isnull=True, type=Account.NORMAL_ACCOUNT)[:10] try: main = Account.get_main_account() except Exception as e: logger.error("Error: %s", e) return for account in accounts: try: Transaction.transfer(account, main, 0, Transaction.USDC, Transaction.CLOSE, main) Transaction.transfer(account, main, 0, Transaction.ALGO, Transaction.CLOSE, main) account.delete() logger.warning("Account %s closed.", account.address) except Exception as e: logger.error("Error: %s", e)
def test_rejected_atomic(self): main_account = Account.get_main_account() with patch('algorand.utils.transaction_info') as mock_transaction_info: mock_transaction_info.return_value = { 'pool-error': '', 'txn': { 'txn': { 'lv': utils.status()['last-round'] - 1000 } } } tx0 = Transaction.prepare_transfer(main_account, self.user_account, 0.21, Transaction.ALGO, Transaction.OPT_IN) tx1 = Transaction.prepare_transfer(self.user_account, self.user_account, 0, Transaction.USDC, Transaction.OPT_IN) tx2 = Transaction.prepare_transfer(main_account, self.user_account, 0.1, Transaction.USDC, Transaction.OPT_IN) txids = Transaction.atomic_transfer([tx0, tx1, tx2]) for txid in txids: self.assertTrue(utils.wait_for_confirmation(txid)) verify_transactions() self.assertEqual( Transaction.objects.filter( status=Transaction.REJECTED).count(), 3) self.assertEqual(Transaction.objects.count(), 6) one_without_prev = False for txn in Transaction.objects.filter(retries=1): if not one_without_prev and txn.atomic_prev is None: one_without_prev = True continue self.assertFalse(txn.atomic_prev is None)
def test_transfer(self): main_account = Account.get_main_account() txid = Transaction.transfer(main_account, self.user_account, 0.1, Transaction.ALGO, Transaction.OPT_IN) self.assertTrue(utils.wait_for_confirmation(txid.txid))
def test_opt_in(self): main_account = Account.get_main_account() txids = Transaction.opt_in(self.user_account, main_account) for txid in txids: self.assertTrue(utils.wait_for_confirmation(txid))