예제 #1
0
def telegram_bot_sendtext(bot_message, bot_chatID=-1001217489815):
    try:
        if bot_chatID is None or telegram_id is None or telegram_id == '':
            return None
        bot_token = telegram_id
        send_text = 'https://api.telegram.org/bot' + bot_token + '/sendMessage?chat_id=' + str(
            int(bot_chatID)) + '&parse_mode=Markdown&text=' + bot_message
        response = requests.get(send_text)
        return response.json()
    except Exception as ex:
        logger.exception(ex, exc_info=True)
예제 #2
0
    def swap_exact_token_for_token(self,
                                   in_token_amount,
                                   path,
                                   min_out_token_amount,
                                   deadline=None,
                                   gas=320000,
                                   gas_price=None,
                                   fee_support=True,
                                   version=2,
                                   fee=3000):
        ''' отправить транзакцию на обмен конкретного количества эфиров на токен'''
        # устанавливаем дедлайн
        try:
            if deadline is None:
                deadline = self.get_default_deadline()

            # создаем транзакцию
            if version == 2:
                tx = self._create_exact_token_for_token_tx(
                    in_token_amount,
                    min_out_token_amount,
                    path,
                    deadline=deadline,
                    fee_support=fee_support)
            else:
                tx = self._create_exact_token_for_token_tx_v3(
                    in_token_amount,
                    min_out_token_amount,
                    path,
                    deadline=deadline,
                    fee=fee)

            # добавляем всякую хуйню типа нонсе,газ и проч
            b_tx = self.build_tx(tx, gas=gas, gas_price=gas_price)

            # подписали транзакцию ключом
            signed_tx = self.sign_row_tx(b_tx)
            # исполнили
            return self.send_signed_raw_tx(signed_tx)
        except Exception as ex:
            logger.exception(ex)
            raise ex
예제 #3
0
        async def hello():
            uri = f"wss://followswaps.com/ws/{addr}/"
            conn_msg = {
                "action": "logon",
                'subscriber': addr,
                'donors': donors,
                'net_name': 'main'
            }
            _, signed_msg = sign_message(str(conn_msg), key)
            async with websockets.connect(uri) as ws:

                await ws.send(json.dumps({
                    'msg': conn_msg,
                    "hash": signed_msg
                }))
                err = False
                while 1:
                    if ws.closed == False:
                        if err == True:
                            sync_to_async(w.send_msg_to_subscriber_tlg)(
                                ' socket was reconnected')
                            err = False
                        try:
                            msg = await ws.recv()
                            logger.info(msg)

                            if msg == 'Low balance':
                                w.active = False
                                w.send_msg_to_subscriber_tlg(
                                    ' stopped, low balance')
                                w.refresh_balances()
                                w.save()
                                return
                            if msg.startswith('Failed'):
                                w.active = False
                                w.send_msg_to_subscriber_tlg(
                                    f' stopped, {msg}')
                                w.save()
                                return
                            if msg == 'success':
                                pass
                                asyncio.ensure_future(limits())
                            else:
                                try:
                                    await sync_to_async(w.parse_client_msg
                                                        )(msg)
                                except:
                                    logger.exception(f'wrong message: {msg}')

                        except Exception as ex:
                            logger.exception(ex, exc_info=True)

                            if err == False:
                                w.send_msg_to_subscriber_tlg(
                                    'error with socket connection, we are trying to reconnect'
                                )
                                err = True
                            else:
                                logger.info('trying to reconnect to socket')
                                try:
                                    ws = await websockets.connect(uri)
                                    await ws.send(
                                        json.dumps({
                                            'msg': conn_msg,
                                            "hash": signed_msg
                                        }))

                                    msg = await ws.recv()
                                    logger.info(msg)

                                    if msg == 'Low balance':
                                        w.active = False
                                        w.send_msg_to_subscriber_tlg(
                                            ' stopped, low balance')
                                        w.refresh_balances()
                                        w.save()
                                        return
                                    if msg.startswith('Failed'):
                                        w.active = False
                                        w.send_msg_to_subscriber_tlg(
                                            f' stopped, {msg}')
                                        w.save()
                                        return
                                    if msg == 'success':
                                        pass
                                        asyncio.ensure_future(limits())
                                    else:
                                        try:
                                            await sync_to_async(
                                                w.parse_client_msg)(msg)
                                        except:
                                            logger.exception(
                                                f'wrong message: {msg}')

                                except:
                                    pass
                                time.sleep(15)
                    else:
                        if err == False:
                            w.send_msg_to_subscriber_tlg(
                                'error with socket connection, we are trying to reconnect'
                            )
                            err = True
                        else:
                            logger.info('trying to reconnect to socket')
                            try:
                                ws = await websockets.connect(uri)
                                print('123', ws.closed)
                                await ws.send(
                                    json.dumps({
                                        'msg': conn_msg,
                                        "hash": signed_msg
                                    }))

                                msg = await ws.recv()
                                logger.info(msg)

                                if msg == 'Low balance':
                                    w.active = False
                                    await sync_to_async(
                                        w.send_msg_to_subscriber_tlg
                                    )(' stopped, low balance')
                                    await sync_to_async(w.refresh_balances)()
                                    await sync_to_async(w.save)()
                                    return
                                if msg.startswith('Failed'):
                                    w.active = False
                                    await sync_to_async(
                                        w.send_msg_to_subscriber_tlg
                                    )(f' stopped, {msg}')
                                    await sync_to_async(w.save)()
                                    return
                                if msg == 'success':
                                    pass
                                    asyncio.ensure_future(limits())
                                else:
                                    try:
                                        await sync_to_async(w.parse_client_msg
                                                            )(msg)
                                    except:
                                        logger.exception(
                                            f'wrong message: {msg}')

                            except Exception as ex:
                                logger.exception(ex, exc_info=True)
                                pass
                            time.sleep(15)
예제 #4
0
def update_asset(request):
    data = JSONParser().parse(request)
    try:
        addr = web3.main.to_checksum_address(data['addr'])
    except:
        return JsonResponse(
            {
                'non_field_errors':
                ['invalid address for wallet, update wallet information']
            },
            status=400)

    key_hash = data['key_hash']

    try:
        token_addr = web3.main.to_checksum_address(data['token']['addr'])
    except:
        return JsonResponse({'addr': ['invalid address']}, status=400)
    data['token']['addr'] = token_addr
    if Wallet.objects.filter(addr=addr).exists() == False:
        return JsonResponse(
            {
                'non_field_errors':
                ['invalid address for wallet, update wallet information']
            },
            status=400)
    if Wallet.objects.filter(key_hash=key_hash).exists() == False:
        return JsonResponse(
            {
                'non_field_errors':
                ['invalid key for wallet, update wallet information']
            },
            status=400)
    else:
        wallet = Wallet.objects.get(addr=addr, key_hash=key_hash)
        if token_addr in ('0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',
                          '0xc778417E063141139Fce010982780140Aa0cD5Ab'):
            return JsonResponse({'addr': ['cant trade weth']}, status=400)
        if data['token']['id'] != -2:
            skip_token = DonorAsset.objects.get(pk=data['token']['id'])
            changed = False
            try:
                if skip_token.asset.decimals is None:
                    skip_token.asset.decimals = wallet.follower.get_erc_contract_by_addr(
                        data['token']['addr']).functions.decimals().call()
                    changed = True
                if skip_token.asset.name is None or skip_token.asset.name == '':
                    skip_token.asset.name = wallet.follower.get_erc_contract_by_addr(
                        data['token']['addr']).functions.name().call()
                    changed = True
                if changed:
                    skip_token.asset.save()
            except:
                return JsonResponse(
                    {'addr': ['invalid address or wrong token']}, status=400)
            skip_ser = DonorAssetSerializer(data=data['token'],
                                            instance=skip_token)
            if skip_ser.is_valid():
                skip_ser.save()
            else:
                return JsonResponse(skip_ser.errors,
                                    status=status.HTTP_400_BAD_REQUEST)
        else:

            data['token']['wallet'] = wallet.id
            asset, created = Asset.objects.get_or_create(
                wallet_id=wallet.id, addr=data['token']['addr'])
            try:

                changed = False
                if asset.decimals is None:
                    asset.decimals = wallet.follower.get_erc_contract_by_addr(
                        data['token']['addr']).functions.decimals().call()
                    changed = True
                if asset.name is None or asset.name == '':
                    asset.name = wallet.follower.get_erc_contract_by_addr(
                        data['token']['addr']).functions.name().call()
                    changed = True
                asset.price_for_token = wallet.follower.get_out_qnty_by_path(
                    10**asset.decimals, [
                        asset.addr,
                        wallet.follower.weth_addr,
                    ])

                if changed:
                    asset.save()
                wallet.refresh_token_balance(asset.id)
            except Exception as ex:
                logger.exception(ex, exc_info=True)
                if created:
                    asset.delete()
                return JsonResponse(
                    {'addr': ['invalid address or wrong token']}, status=400)
            data['token']['asset'] = asset.id
            new_skip_token = DonorAssetSerializer(data=data['token'])

            if new_skip_token.is_valid():
                new_skip_token.save()
            # wallet.assets.add(new_skip_token.instance)
            # wallet.save()
        serializer = WalletSerializer(instance=wallet)
        return JsonResponse(serializer.data, status=200)