Esempio n. 1
0
def convert_all_wallet_coins_to(symbol, api, wallet, private_key, balances):
    """
    Конвертируем все монеты в кошельке в монету symbol
    :param symbol: COINNAME (str)
    :param api:
    :param wallet:
    :param private_key:
    :param balances:
    :return:
    """
    if not only_symbol(balances, symbol):

        if symbol in balances.keys():
            del (balances[symbol])

        i = len(balances)
        for coin in balances:

            if coin != symbol:
                nonce = api.get_nonce(wallet)
                tx = MinterSellAllCoinTx(coin_to_sell=coin,
                                         coin_to_buy=symbol,
                                         min_value_to_buy=0,
                                         nonce=nonce,
                                         gas_coin=coin)
                tx.sign(private_key=private_key)
                r = api.send_transaction(tx.signed_tx)
                print(
                    f'\n{coin} успешно сконвертирован в {symbol}.\n\nSend TX response:\n{r}'
                )

                i -= 1
                if i > 0:
                    print('Waiting for nonce')
                    wait_for_nonce(api, wallet, nonce)
Esempio n. 2
0
 def setUp(self):
     self.FROM = 'Mx31e61a05adbd13c6b625262704bc305bf7725026'
     self.PRIVATE_KEY = '07bc17abdcee8b971bb8723e36fe9d2523306d5ab2d683631693238e0f9df142'
     self.SIGNED_TX = 'f87a0102018a4d4e540000000000000003a0df8a4d4e54000000000000008a54455354000000000000880de0b6b3a7640000808001b845f8431ca0b10794a196b6ad2f94e6162613ca9538429dd49ca493594ba9d99f80d2499765a03c1d78e9e04f57336691e8812a16faccb00bf92ac817ab61cd9bf001e9380d47'
     self.TX = MinterSellAllCoinTx(
         **{
             'nonce': 1,
             'chain_id': MinterTx.TESTNET_CHAIN_ID,
             'gas_coin': 'MNT',
             'coin_to_sell': 'MNT',
             'coin_to_buy': 'TEST',
             'min_value_to_buy': 1
         })
Esempio n. 3
0
class TestMinterSellAllCoinTx(unittest.TestCase):
    def setUp(self):
        self.FROM = 'Mx31e61a05adbd13c6b625262704bc305bf7725026'
        self.PRIVATE_KEY = '07bc17abdcee8b971bb8723e36fe9d2523306d5ab2d683631693238e0f9df142'
        self.SIGNED_TX = 'f87a0102018a4d4e540000000000000003a0df8a4d4e54000000000000008a54455354000000000000880de0b6b3a7640000808001b845f8431ca0b10794a196b6ad2f94e6162613ca9538429dd49ca493594ba9d99f80d2499765a03c1d78e9e04f57336691e8812a16faccb00bf92ac817ab61cd9bf001e9380d47'
        self.TX = MinterSellAllCoinTx(
            **{
                'nonce': 1,
                'chain_id': MinterTx.TESTNET_CHAIN_ID,
                'gas_coin': 'MNT',
                'coin_to_sell': 'MNT',
                'coin_to_buy': 'TEST',
                'min_value_to_buy': 1
            })

    def test_valid_tx(self):
        """
        Is tx instance of needed TX class.
        """

        self.assertIsInstance(self.TX, MinterSellAllCoinTx)

    def test_sign_tx(self):
        """
        Sign transaction and check signed transaction
        """
        self.TX.sign(self.PRIVATE_KEY)

        self.assertEqual(self.TX.signed_tx, self.SIGNED_TX)

    def test_sign_with_signature(self):
        self.TX.signature_type = MinterTx.SIGNATURE_SINGLE_TYPE
        signature = self.TX.generate_signature(self.PRIVATE_KEY)
        self.TX.sign(signature=signature)

        self.assertEqual(self.TX.signed_tx, self.SIGNED_TX)

    def test_from_raw(self):
        tx = MinterTx.from_raw(raw_tx=self.SIGNED_TX)

        self.assertEqual(tx.from_mx, self.FROM)
        self.assertEqual(tx.coin_to_sell, self.TX.coin_to_sell)
        self.assertEqual(tx.coin_to_buy, self.TX.coin_to_buy)
        self.assertEqual(tx.min_value_to_buy, self.TX.min_value_to_buy)
Esempio n. 4
0
    def convert_all_coins_to(self, symbol, gas_coin=None):
        """
        Конвертирует все монеты на кошельке в symbol
        """
        symbol = symbol.upper()
        balances = self.get_balance()
        if gas_coin is None:
            gas_coin = symbol

        if self._only_symbol(balances, symbol):
            return

        for coin in balances:
            if coin == symbol:
                continue

            nonce = self.API.get_nonce(self.address)
            tx = MinterSellAllCoinTx(coin_to_sell=coin,
                                     coin_to_buy=symbol,
                                     min_value_to_buy=0,
                                     nonce=nonce,
                                     gas_coin=gas_coin)
            tx.sign(private_key=self.private_key)
            r = self.API.send_transaction(tx.signed_tx)

            try:
                if r['result']['code'] == 0:
                    print(f'{coin} сконвертирован в {symbol}')
                    self._wait_for_nonce(
                        nonce
                    )  # Ждем nonce, чтобы предотвратить отправку нескольких транзакций в блоке
            except Exception:
                print(
                    f'Не удалось сконвертировать {coin} в {symbol}\nServer response: {r}'
                )

            return r