Телеграм-бот для автоматизации обменника криптовалюты
В этой статье я буду в общих чертах рассказывать про то, в каком направлении нужно двигаться, чтобы сделать полуавтоматический обменник криптовалюты с возможностью управлять сделками с любого устройства в любой точке планеты 24/7. Вы не найдете здесь деталей реалиализации, т.к. этот материал предназначен скорее для получения базового набора знаний, необходимых для запуска такого стартапа. Результат вы можете посмотреть на exbtc.pro
Полуавтоматический обменник криптовалюты.
Как-то очень давно я у же немного писал про использование телеграм-бота для автоматизации некоторых процессов. Надо сказать, что уже не мало времени прошло, но я продолжаю использовать некоторые идеи, что были изложены в том небольшом материале.
Обмен криптовалюты сегодня — это уже не просто реальность, в какой-то мере это уже потребность. Время беспощадно и теперь цифровое золото становится очень важной частью активов миллионов людей. Обменники в интернете бывает нескольких видов, основные из которых:
Мы поговорим про полуавтоматический вариант с возможностью расширения до p2p обменника, потому как это довольно простой и удобный способ.
Необходимый набор навыков.
Говоря довольно простой, я наверное выражаюсь несовсем корректно. В наше время навыки, которыми должен обладать разработчик, оцениваются в тысячи часов времени, которое он должен потратить на свое обучение. Я сегодня буду предельно краток, так что давайте сразу перейдем к делу. Для реализации задачи нам понадобится следующий набор иснтрументов:
Linux, zsh, vim, systemd
ES6, Material Ui, React, eslint, webpack, scss
python3, asyncio, aiohttp, peewee
telegram bot api
И такие паттерны как:
MVC — шаблон архитектуры системы
Abstract Factory, Factory Method, Builder, Facade, Prototype — генерация объектов
Scheduler — многопоточный постановщик задач
Event Listner, State — события, сосстояния
Proxy — заместитель для балансировки нагрузки
В общих чертах это вроде как все, что должно пригодится, согласитесь не мало. Давайте пробежимся теперь немного более подробно, чтобы понимать как все это барахло должно быть настроено, чтобы даже работать.
Теперь я начинаю с фронта
Если вы попробуете поискать в сети с чего начинать веб разработку — с фронтенда или с бэкэнда, вы наверное не найдете ничего более дельного, чем информация о том, что все это лучше делать параллельно и каких-то особых протоколов на этот счет нет. Т.е. фронтендер делает свою работу, бэкэндер свою, они встречаются на созвонах и в чате, обсуждают все проблемы: все хорошо. Но что, если вы собираетесь делать и фронт и бэк самостоятельно (например в случае небольшого приложения как криптообменник) — какая будет точка отправления?
Начинать лучше с фронта, потому как он может работать на моковых данных и бэкэнд ему собственно нужен только абсолютно гипотетически. Фронтенд — независимое приложение, он должен работать корректно в разных браузерах, на разных устройствах. Мы будем делать Single Page Application, а значит нам потребуется протокол взаимодействия, давайте выберем json-rpc . Для транспортного протокола используем tcp, а на прикладном уровне остановимся на http.
Дальше все довольно не трудно. Ставим Node Package Manager , создаем новое реакт приложение, добавляем туда react router, настраиваем eslint для форматирования кода, node-sass для возможности использования css препроцессора, webpack для сборки проекта.
Правильная структура проекта — залог успеха. Компоненты делаем модульными — файлы стилей лежат внутри дирректории рядом с компонентом. Компоненты по мере возможностей реализуем как stateless. Я бы пожалуй еще рекоммендовал дважды задуматься перед внедерением redux в приложение — делайте это только если вы точно уверены, что вам это нужно.
При работе с фронтом важно всегда помнить об области видимости переменных, потому как современный фронтенд это сложное многопоточное, асинхронное приложение. При этом при правильной организации файлов и компонентов, react и material ui позволяют делать все достаточно быстро. Если у вас нет готового дизайна — просто выберите сайт обменника, который вам нравится и не стесняясь копируйте его, превнося свои изменения — в дальнейшем ваш обменник все равно еще претерпит кучу изменений и не стоит беспокоится о том как это смотрится на текущей стадии.
Вот так может выглядеть ваш реакт компонент, отвечающий за рендеринг главной страницы:
Бэкэнд — это сложно, но куда веселее
Бэкэнд тоже должен быть асинхронным. P2P приложения должны быть ориентированы под высокую нагрузку, а значит сразу стоит закладывать немного больше, чем может показаться нужным. Мы будем делать монолитный бэкэнд, потому как серверная часть не будет очень большой. Микросервисы это здорово, но не всегда необходимо, и в данном случае мы не будем использовать этот подход.
asyncio позволяет работать с петлей событий, что в свою очередь предоставляет возможность асинхронного программирования и управления заданиями. В нашем случае у нас будет несколько заданий, которые должны будут работать независимо и параллельно основному приложению. Это задание на обновление курсов BTC/USD и USD/RUB, и задание, которое будет отменять устаревшие заявки на обмен валюты. Курсы вылют можно получать get запросом из апи всех популярных бирж, например coinbase, kraken, bitmex. Благо aiohttp client позволяет это делать в несколько строчек:
Для того, чтобы сериализовывать данные, необходимые фронту для построения интерфейса, сервер должен использовать объектно-ориентированную модель данных, проще говоря — нужно поделить наш обменник на модели, а эти модели сложить в таблицы бд, чтобы можно было строить к ней запросы.
При создании моделей стоит особое внимание уделить инкапсуляции и наследованию — хорошей идеей будет сразу создать BaseModel, в которую поменстить, например, поля created_at, updated_at и, например, datetime_serializer, который вам точно пригодится, а остальные модели наследовать от этой модели:
Для взаимодействия с блокчейн придется получить API KEY, например на blockchain.com. Хочу сразу отметить, что тут есть своего рода «подводный камень». Как работает блокчейн апи? После того, как создается транзакция, для ее завершения необходимы подтверждения от майнеров. Каждое подтверждение — это своего рода события, информацию о котором вы будете получать на свой сервер. В этом событии есть адрес кошелька, на который поступает криптовалюта. Теперь предположим, что для покупки криптовалюты в нашем обменнике мы всем пользователям будем предоставлять одинаковый кошелек для перевода. Это было бы довольно удобно, так как все биткоины были бы сосредоточены у нас на одном адресе, одной суммой. На первый взгляд. Но в таком случае при поступлении средств от пользователя на кошелек и последующих веб хуках от блокчейн на callback_url, мы не сможем определить от какого конкретно пользователя поступил платеж. Можно конечно использовать параметр в webhook url но есть еще один интересный нюанс. Нам важно знать курс по которому была совершена та или иная транзакция.Опять же, есть вариант хранить свзяь между транзакицей и курсом, но есть и альтернативное решение. Оно состоит в том, что каждому пользователю системы должен генерироваться свой уникальный BTC кошелек. И в случае, когда этот самый пользователь хочет совершить сделку в нашем обменном пункте и продавть свои кровные BTC, мы будем скидывать ему его уникальный адрес.
Дальше может покзаться, что целесообразно со всех этих адресов собирать все деньги на master wallet, но это не так, ведь за каждый перевод вы будете платить комиссию майнерам. К слову эту комиссию нужно считать ручками. Получить информацию от сети можно в любой момент:
Таким образом получается, что баланс нашего обменника сосредоточен децентрализованно на разных кошельках всех пользователей. При каждой транзакции мы записываем курс, по которому она была осуществлена, а ее статус (так же как впрочем и статус документа по этой транзакции) мы меняем в зависимости от подтверждений blockchain. К слову сразу имеет смысл подумать над реализацией классов Billing и Processing, для создания и проводки документов.
Для продажи крипты нам необходим механизм ручного взаимодействия с этими документами: нужно искать документ с выгодным на текущий момент курсом, проверять текущий баланс кошелька из этого документа, и выполнять перевод с этого кошелька на кошелек, который указывает пользователь в своей заявке на покупку в нашем обменнике. И вот мы наконец подобрались к кульминации нашего материала: к нам снова на помощь приходит телеграм.
Telegram bot
Тут все совсем не трудно. Создаем бота у @BotFather, настраиваем, берём токен, кладем его в конфиг (делаем два конфига и два бота — один на прод, один на дев).
Из этого токена мы можем создать бота и использовать его для получения важных данных, а так же для запуска протокола rpc , не требующего дополнительной авторизации и шифрования.
Теперь мы можем слать сообщения в телеграм из нашего бэкэнда, для этого мы создадим приватный чат и добавим бота администратором туда. Далее нам потребуется создать вебхук и контроллер для его обработки (читайте об этом в предыдущем материале про мониторинг). В контроллере нам необходимо создать диспетчер запросов, который будет определять обработчик.
Запросы от тг могут быть разные, нам пока нужны будут только message и callback_query (reply клавиатура и inline клавиатура).
Далее мы будем отправлять в этот чат сообщения с кнопками, которые позволят контролировать значения в базе данных. Здесь обращу внимание на race condition, и трудно-уловимые ошибки, по этому всегда используйте atomic_db_query
Кнопки вы можете нажать после ручной модерации заявки — ну т.е. вы посмотрели, что деньги к вам на счет реально поступили, и только после этого нажали на кнопку, которая запустит механизм для завершения документооборота. Так же можно, например создать механизм subscription , который позволит информировать подписавшихся пользователей на обновления курсов, например:
Это довольно удобно, ведь телеграм всегда под рукой, особенно после разблокировки . 24/7 все, кто находятся в приватной группе, смогут получать информационные сообщения, а так же управлять состоянием документов:
Настройка production
Нужно все это барахло завернуть в докер, настроить системный даемон для запуска юнита, в идеале конечно настроить CI-CD, но это все наверное уже детали.
В базовом варианте можно деплоится через гит, использовать переменные окружения для чтения конфигов, использовать ipython для проведения миграций в бд:
Нужно уметь использовать настраивать nginx , и понимать, как работает mod_rewrite .
Кстати для добавления вашего обменника в мониторинги, вам понадобится xml выгрузки файла курсов, так что этот rewrite вам может еще пригодится.
Наверное вы захотите сделать какую-то админку — для этого отлично сгодится механизм Basic Auth и bootstrap admin template . Вам останется только пробросить в шаблоны необходимый контекст и немного поиграть с контролами:
Послевкусие
Это все сложновато, но в тоже время и не очень, если не наступать на грабли, которые, надо сказать, присутствуют. Не забывайте о JWT , SSL , CORS , и еще куче прелестей, которые по пути обязательно появятся у вас на пути. Но в целом это рабочая схема автоматизации механизмов, которые могут пригодится не только при создании обменника. Я не претендую на роль эксперта в этом деле, я лишь высказываю свои умозаключения, после довольно трудоемкого процесса прохождения через все вышесказанное. Не стоит принимать буквально — многое является весьма субъективным и не претендует на роль аксиомы. Я бы сказал бОльшая часть. Но под лежачий камень вода не течет, и лучшее решение на сегодня — это развитие и движение дальше.
Надеюсь кому-то покажется эта информация полезной. Просто захотелось немного поделиться переживаниями и опытом, полученным от процесса.
Дальнейшие развитие позиционируется как p2p платформа для совершения обмена. Буду рад любым вопросам и предложениям, и большое спасибо за потраченное время.
Exchanger CMS v.1.20.x
Защита от SQL-инъекций, CSRF и XSS атак, спама и роботов. Шифрование паролей алгоритмом CRYPT_BLOWFISH.
Производительность
Высокая скорость работы достигнута благодаря отличной оптимизации, кешированию и сервисам очередей.
Два режима работы
Полуавтоматический и ручной режим работы позволяют полностью контролировать средства на счетах платежных систем.
Поддержка любых валют
Поддержка неограниченного количества любых валют и направлений обмена с гибкой конфигурацией.
Мультиязычность
Поддержка до 10 языков, создать необходимую локализацию можно самостоятельно из панели управления.
Верификация
Процедура AML & KYC для пользователей, верификация банковских карт, ограничение доступа к направлениям обмена.
Инвестиции
Прием инвестиций от пользователей с гибкой конфигурацией инвестиционных пакетов и выплатами на любую платежную систему.
Блокировка реквизитов
Добавление платежных реквизитов в список заблокированных с последующим запретом создания заявок на обмен.
Запрос резерва
Форма запроса резерва валют и уведомления по электронной почте для пользователей о доступном резерве.
Панель управления
Удобный, простой интерфейс с адаптивным дизайном и множеством инструментов. Двухфакторная аутентификация.
Реферальная программа
Одноуровневая реферальная программа с гибкой конфигурацией системы вознаграждения и выплатами на любую платежную систему.
Система бонусов
Бонусы в виде обмена на более выгодных условиях для постоянных клиентов, с гибкой конфигурацией системы поощрения.
Мерчанты
4Bill, Advanced Cash, AliKassa, AnyMoney, Block IO, Blockcypher, Coinpayments, Epaycore, Exmo Code, Kuna, LiqPay, Obmenka UA, PayPal, Payeer, Perfect Money, Web Money, WestWallet, WhiteBIT.
SEO оптимизация
Базовые инструменты для SEO оптимизации, настройка мета тегов и заголовков страниц, создание уникального описания для каждого направления обмена.
Шаблон сайта
Настройка страниц и разделов сайта, поддержка неограниченного количества виджетов, простое редактирование данных, установка плагинов онлайн чата, удобное управление ресурсами.
Автокорректировка курса
Получение котировок от Binance, Bitfinex, Blockchain, Exmo, Forex, Kuna, Poloniex, PrivatBank, Huobi, LocalBitcoins, WhiteBIT.
Экспорт курсов
Экспорт курсов в форматах XML, JSON, TXT для включения обменника в листинг популярных мониторингов.
Быстрое начало работы
Добавление более 50 популярных валют и 5000 направлений обмена с предустановленными конфигурациями за несколько минут.
API доступ
Инструменты для разработчиков, интеграция с Telegram ботами и сторонними приложениями.
Отзывы
Раздел и виджет последних отзывов. Поддержка мультиязычности. Генератор случайных отзывов.
Новости
Раздел и виджет последних новостей. Поддержка мультиязычности и ЧПУ. Редактор Summernote.
Автоматический режим
Безопасный шлюз для автоматической работы обменника с открытым исходным кодом, позволяет производить автоматические выплаты по заявкам на обмен через любые платежные системы (индивидуально, по желанию заказчика). Написан на базе фреймворка «Lumen — PHP Micro-Framework By Laravel». Взаимодействует с сайтом обменника по средствам API панели управления и веб-хуков.
Telegram бот
Мультиязычный бот с открытым исходным кодом, включает 11 команд, позволяет производить обмены, просматривать и запрашивать резервы валют, регистрировать аккаунт, оставлять отзывы. Написан на базе фреймворка «Lumen — PHP Micro-Framework By Laravel» с использованием «Telegram SDK». Взаимодействует с сайтом обменника по средствам публичного и приватного API. Демонстрация: @ExchangerCMS_bot
В стоимость включен ряд бесплатных услуг, которые доступны при первичной установке и настройке скрипта. Мы бесплатно предоставим виртуальный сервер на срок аренды у надёжного хостинг провайдера DigitalOcean.
Помощь в покупке домена
Помощь в покупке сервера
Помощь в покупке сертификата
За дополнительную оплату в скрипт могут быть внесены любые изменения. Мы готовы разработать уникальный проект по вашим требованиям или сотрудничать на постоянной основе.
Редактирование шаблона сайта
Редактирование функций скрипта
Верстка шаблона с PSD макета
Разработка уникального проекта
Разработка Telegram бота
Оплата услуг доступна с помощью следующих платежных систем: USDT-TRC20, Bitcoin, Ether, Litecoin, Dogecoin, TRON, USDT-ERC20, USDC-ERC20, DAI-ERC20.
Первоначально нам потребуется несколько часов, что бы всё подготовить, в дальнейшем скачивание скрипта всегда будет доступно в вашем аккаунте.
Для работы скрипта необходим стандартный комплекс серверного программного обеспечения, который может состоять из стека LEMP или LAMP. Для корректной работы и лучшей производительности рекомендуется использовать VDS и отказаться от виртуального хостинга.
Скрипт не имеет привязки к домену. Вы можете запустить одновременно несколько обменников на разных серверах, но только для личного использования.
С технической точки зрения скрипт имеет всё необходимое для подключения в мониторинг. После запуска обменника вы можете постепенно подавать заявки на листинг в менее популярные мониторинги, продвигаясь со временем к более популярным.
Серверная часть написана на PHP, с использованием базы данных MySQL. Скрипт является MPA приложением, что обеспечивает отличную индексацию страниц сайта поисковыми роботами.
Исходный код скрипта обфусцирован, включая шаблон и базу данных, при этом код по-прежнему может быть просмотрен в текстовом редакторе, поскольку файлы не имеют шифрования. Использование обфускации вместо привычного шифрования утилитой ionCube не влияет на производительность приложения, а отсутствие шифрования, пускай и с трудом, но позволяет провести полный аудит кода.
Используйте API скрипта для подключения своих мерчантов и парсеров курса, отслеживания происходящих событий в обменнике, получения и управления различными данными. Ознакомьтесь с разделом для разработчиков в документации, что бы иметь представление обо всех возможностях.
iEX Exchanger — это просто удобный способ создать свой обменный пункт
Профессиональный скрипт для быстрого и удобного создания автоматизированного обменного пункта
Панель администрирования
Слайды интерфейса панели управления обменным пунктом.
Базовые возможности
Перечислены основные функции системы обменного пункта iEXExchanger
Безопасность мерчантов
Очень мощная и простая система приема средств через Платежные системы с жесткими условиями от злоумышленников.
Автоматизация
Удобная система которая обеспечивает максимальную безопасность авто-выплат
Партнерская программа
Многоуровневая система партнерской программы и Кэшбэк
Поддержка и обновления
Мы регулярно выпускаем обновления платформы, чтобы ваш сайт отвечал всем современным требования. Наши тех. поддержка всегда готовы прийти на помощь.
Быстрый старт
Простое управление. Установка с помощью одной команды. Удобная панель управления.
Направлении обменов
Мощная система работы с направлениями обменов, с большим количеством настроек
Производительность
Обеспечивает максимальную производительность с минимальной нагрузкой на сервер
Многопользовательность
Гибкая система настроек пользователей и групп, а также доступов для них
Парсинг курсов
Удобная система парсинга курсов из более чем 50 источников
Экспорт курсов
Система экспорта курсов с поддержкой форматов: XML, TXT, JSON.
Управление заявками
Страница управления заявками придется по душе вашим менеджерам – буквально в 2 клика они смогут обработать любой заказ, быстро отфильтровать.
Мультиязычность
Мультиязычность пользовательского интерфейса. По умолчанию поддержка русского и английского языков.
Конструктор курсов
Простая и удобная система работы направлениями, курсами валют.
Фильтр по IP, Email
Удобная система блокировки IP адресов и простой ограничитель регистрации e-mail адресов
Отчетность
Модуль отчетов для анализа работы сервиса.
Веб-аналитика
Модуль Веб-аналитика используется для сбора и анализа информации о посетителях веб-сайтов.
Гибкая настройка
Система настройки возможностей скрипта, позволяющая оптимизировать скрипт под свои нужды
Социальные сервисы
Авторизация пользователей на сайтах без заполнения формы регистрации — под уже существующими аккаунтами социальных сетей и внешних сервисов.
Адаптивность
Обменники на нашей платформе полностью адаптивны, благодаря чему вся цепочка — от выбора валют до оформления заявки — идеально работает со всех устройств.
Двухэтапная авторизация
В целях защиты бизнеса от злоумышленников в продукт встроена дополнительная защита.
Защита сессий
Включение защиты сессий делает похищение авторизованной сессии неэффективным.
Умный фильтр
Многофункциональные фильтры реализованы практически для всех модулей.
Прочее .
Несколько сотен других возможностей скрипта, описать которые невозможно в кратком описании .
Использует самые лучшие framework`s
Скрипт обменного пункта iEXExchanger построена на двух самых лучших и востребованных framework`s. Это Angular 10 + Laravel 8
Стоимость лицензирования
Выберите наиболее подходящую для вас лицензию на использование скрипта обменного пункта
Источник https://habr.com/ru/post/542244/
Источник https://exchanger-cms.com/
Источник https://exchanger.iexbase.com/