Биржа
Криптовалют

Криптовалютная биржа — RICHAMSTER

Биржа Richamster.com — это торговая площадка для купли и продажи криптовалюты и гривен. Торги осуществляются авторизованными пользователями. Основной доход биржи — это комиссия при купле/продаже валюты, взимаемая с каждого из участников сделки. На данный момент на бирже представлены криптовалюты: BTC, LTC, KRB, DOGE, ETH и ADA. Пользователи, участвуя в торговых операциях на бирже криптовалют, основной целью ставят получение прибыли при купле/продаже валюты.

Назначение сайта. Цели:

Перед нашей компанией была поставлена задача в ограниченные сроки разработать сайт, позволяющий пользователям пополнять и выводить средства с их личных кошельков, торговать криптовалютой на бирже в режиме реального времени, общаться друг с другом в чате, а также иметь возможность стать акционерами биржи для получения дивидендов от комиссии, взимаемой при каждой закрытой сделке купли/продажи.

В связи с тем, что на сайте постоянно должны проводиться денежные операции, в первую очередь, нам необходимо было тщательным образом продумать систему безопасности для защиты аккаунтов и балансов пользователей. При этом нам также важно было не забывать о том, что мир криптовалют и сама технология блокчейн не стоят на месте, развиваясь и совершенствуясь ежедневно, поэтому разрабатываемый нами продукт должен был быть масштабируемым и легко расширяемым.

Реализованные кейсы

Безопасность клиентская

Перед нашей компанией была поставлена задача в ограниченные сроки разработать сайт, позволяющий пользователям пополнять и выводить средства с их личных кошельков, торговать криптовалютой на бирже в режиме реального времени, общаться друг с другом в чате, а также иметь возможность стать акционерами биржи для получения дивидендов от комиссии, взимаемой при каждой закрытой сделке купли/продажи.

В связи с тем, что на сайте постоянно должны проводиться денежные операции, в первую очередь, нам необходимо было тщательным образом продумать систему безопасности для защиты аккаунтов и балансов пользователей. При этом нам также важно было не забывать о том, что мир криптовалют и сама технология блокчейн не стоят на месте, развиваясь и совершенствуясь ежедневно, поэтому разрабатываемый нами продукт должен был быть масштабируемым и легко расширяемым.

Двухфакторная аутентификация

На сайте подключен сервис Google Authenticator, в работе которого используются Time-based One-time Password Algorithm и HMAC-based One-time Password Algorithm. В личном кабинете пользователь сайта может включить/выключить данную функцию. При активации предлагается считать QR-код с помощью приложения от Google, установленное на его смартфоне. Система запоминает данного клиента и при каждой следующей авторизации запрашивает 6-значный код, отображаемый в приложении и изменяемый каждые 30 секунд. Таким образом, если у пользователя активирована данная функция, то войти в его аккаунт сможет лишь тот человек, который завладеет не только стандартным паролем, необходимым при залогинивании, но и его смартфоном/планшетом.

Доп. защита — Пин-код

Дополнительную клиентскую защиту также обеспечивает ПИН-код. Это 5-значное число, которое отправляется единожды пользователю на email при регистрации на сайте. Данной дополнительный пароль запрашивается у пользователя в случае изменения реквизитов для вывода криптовалюты, а также при участии в онлайн-голосовании по управлению биржей. Изменить данный ПИН-код может лишь администратор сайта по личному обращению клиента. Стоит отметить, что если пользователь введен ПИН-код неверно более трех раз, то вывод средств для него будет недоступен.

Отслеживание IP-адресов

Каждый раз при авторизации на сайте на email пользователя отправляется письмо, в котором сообщается, что в его аккаунт был выполнен вход. При этом данное письмо информирует юзера о стране и IP-адресе, откуда был выполнен вход. Подобная нотификация позволяет пользователю первым узнать о несанкционированном входе в его аккаунт.

Безопасность серверная

Архитектура проекта

Архитектура проекта продумана с учетом масштабируемости, так как на сайт регулярно добавляются новые криптовалюты, реализуется дополнительный функционал. Стоит отметить, что сайт размещен на нескольких серверах, что позволяет не только повысить защиту от взлома, но и распределить нагрузку.

На сайте реализована защита от CSRF- и XSS-атак, а также внедрена фильтрация входящих данных для защиты от SQL Injection.

Статусы пользователей и верификация персональных данных

Каждый пользователь биржи имеет возможность уменьшить процент комиссии, взимаемой при совершении операций купли-продажи криптовалюты, повысив свой статус. Однако для подтверждения каждого из статусов и получения больших привилегий на бирже, пользователь обязан пройти верификацию личности: в личном кабинете необходимо заполнить форму, прикрепив к ней скан-копию паспорта или другого документа, подтверждающего личность. Данную информацию в ручном режиме проверяет администратор сайта, который может как подтвердить, так и отклонить верификацию — изменения статуса проверки также отображаются в личном кабинете пользователя.

Холдирование

Холдирование вывода средств — устанавливаемое системой ограничение на вывод средств в течение определенного периода времени. По умолчанию, холд ставится на 72 часа в случае первичного вывода средств, при изменении реквизитов для вывода средств, при неверном вводе ПИН-кода. Холдирование может быть наложено вручную на любой кошелек каждого пользователя администратором сайта.

Ограничение времени жизни токена

Время жизни токена, получаемого при авторизации пользователем, ограничено. Данное ограничение минимизирует вероятность несанкционированного использования чужого аккаунта в случае, если пользователь забыл выйти из своей учетной записи на чужом девайсе.

Криптовалюта. Проблемы, с которыми мы столкнулись и решения, которые были приняты

На бирже криптовалют Richamster.com стабильно функционируют уже шесть криптовалют: Bitcoin (BTC), Litecoin (LTC), Karbo (KRB), Dogecoin, Etherium (ETH) и Cardano (ADA). Наибольшая сложность возникла при добавлении первой валюты — биткоина. Изначально мы планировали использовать API blockchain.com, однако столкнулись с ограничением — так называемым Gap limit, в рамках которого один кошелек не может иметь более 20 пустых (нулевых) адресов. В связи с этим было принято решение отказаться от использования стороннего сервиса и поднять ноду самостоятельно. Тоже самое мы сделали и для всех остальных криптовалют, таким образом избежав зависимостей и ограничений, а также дав возможность полноценно использовать сеть блокчейн.

На данный момент для каждого пользователя генерируется уникальный адрес кошельков, который свободно можно пополнить как с локального кошелька, так и с другой биржи или обменника. Вывод средств с баланса возможен только после подтверждения администратором сайта на любой адрес, введенный пользователем.

Торги

Основная цель любой биржи — это торги криптовалютой и фиатными деньгами, поэтому наиболее серьезные алгоритмы просчета выполнены именно на этой странице сайта. Здесь пользователь имеет возможность просмотреть статистику торгов, отображаемую на графике, а также купить искомую валюту по наиболее выгодной цене. А теперь немного подробнее о каждом блоке страницы:

График

Для реализации чартов мы использовали популярнейший сервис Tradingview, предоставляющий в открытом доступе библиотеку на GitHub. Для наибольшей наглядности было принято решение использовать график “Японские свечи”. Так, свечи на графиках представляют четыре переменные:

  1. Цена максимума. Находится на самой высокой точке тени свечи. Отображает, максимальный ход цены за конкретный период
  2. Цена открытия. Отметка, которая фиксирует цену на начало периода открытия свечи. Является началом «тела свечи».
  3. Цена закрытия. Отметка, которая фиксирует цену на конец периода закрытия свечи. Является окончанием «тела свечи».
  4. Цена минимума. Находится на самой низкой точке тени свечи. Отображает, минимальный ход цены за конкретный период.

На данный момент одна японская свеча показывает колебания курса за 24 часа. Если цена на начало торгов больше цены завершения, то тело свечи имеем желтый цвет, если меньше, то синий.

Под графиком японских свечей размещен график с индикаторами объема торгов (volume) — это общее количество единиц торгуемой криптовалюты, которая перешла от одного пользователя к другому на основании исполненных ордеров за определенный период времени. Ось Ох — показывает периоды времени; Оу — количество единиц базовой криптовалюты. Данный график объемов торгов мы также реализовали с использованием сервиса Tradingview. Однако эти дефолтные настройки графика пользователь с легкостью может изменить под себя. Так, Tradingview дает возможность менять временной интервал, цвета, шкалы индикаторов и многое другое, таким образом получив необходимую информацию о колебаниях курса интересующей валютной пары, оценить тренды и тенденции рынка.

Чат

Для мгновенного обмена сообщениями между пользователями мы реализовали онлайн-чат. Таким образом, посетители сайта получили возможность легко и быстро узнать друг у друга актуальную информацию. Важно отметить, что чат работает с помощью WebSockets, что позволяет писать, читать и отправлять сообщения в режиме реального времени без перезагрузки страницы.

Ордера купли, продажи

Под графиком торгов размещены блоки для выставления ордеров, а также биржевые стаканы, в которых отображаются ордера купли-продажи, ожидающие встречного предложения. Для удобства использования данного блока мы реализовали автоматический подсчет данных в полях формы. Так, пользователь может всего лишь кликнуть по уже выставленному ордеру — и в его форму покупки-продажи подставляются актуальные значения количества, цены и общей суммы, которую необходимо будет заплатить с учетом комиссии биржи.

История сделок

Для просмотра статистики закрытых ордеров был реализован блок с историей торгов, а для отслеживания собственных ордеров — блок “Мои ордера”, где пользователь может не только видеть собственные ставки и и легко отменить их в случае необходимости.

Личный кабинет

В личном кабинете пользователя отображается не только персональная информация, но и история пополнения-вывода криптовалюты и гривен, история транзакций и личных торгов. Здесь же пользователь может пополнить баланс любой валюты, а также запросить вывод средств.
По просьбе заказчика в личном кабинете нами также был реализован персональный чат, где с помощью удобного поиска можно написать сообщение любому пользователю сайта лично.

Онлайн-голосование по управлению биржей
и улучшения качества работы торговой площадки

Кроме стандартного функционала, доступного в личном кабинете любой биржи, нами также была добавлена возможность устраивать голосования за важные решения по улучшению работы биржи. Так, авторизованный пользователь имеющий хотя бы 1 кубик (акцию) биржи, может вынести предложение на голосование, а также поучаствовать в уже открытых спорах.

Аукцион

На странице аукциона пользователи могут стать реальными акционерами биржи. Здесь постоянно разыгрываются кубики (то есть акции) биржи. Владелец хотя бы 1 кубика может рассчитывать на выплату дивидендов (его доля отображается в личном кабинете), но и продать за криптовалюту имеющиеся акции. При этом выставление лотов и определение победителя происходит динамически с использованием WebSockets.

Пользователи сайта

В зависимости от количества акций биржи пользователи сайта могут иметь один из пяти статусов: трейдер, наблюдатель, советник, инвестор и директор. Чем выше статус, тем больше привилегий у пользователя. Например, у директора взимается наименьшая комиссия при закрытии сделки.

Технологии и методы, которые были использованы на проекте:

WebSockets

WebSocket — это по сути протокол передачи данных, где обмен информацией между клиентом и сервером происходит непрерывно. То есть такая связь позволяет одновременно и передавать, и получать данные. Этот протокол также называют client-server handshaking. Сокеты работают по так называемым каналам, по которым передаются данные. На Richamster реализовано шесть таких каналов:

  • аукцион
  • торги (история)
  • биржевые стаканы
  • персональный чат
  • чат администраторов (директоров/инвесторов)
  • основной чат

REST API

Взаимодействие между клиентом и сервером выполнено с помощью REST API — архитектурного стиля, то есть “договора” между фронтендом и бэкендом о том, как общаться друг с другом. Обычно на сайтах ранее мы все просчеты и операции проводили на сервере, то есть бэкенд генерировал весь html и отдавал его клиенту, в случае же с REST API, бэкенд построен таким образом, что от сервера требуются только данные, а сама отрисовка html происходит на клиенте.

Report-builder

Для отслеживания поведения пользователей, а также просмотра статистики торгов, аукционов и транзакций нашей командой была уставлена библиотека Report-builder. В админ-панели сайта достаточно выбрать интересующие переменные, и система создаст онлайн-таблицу с возможностью ее скачивания в форматах xsl или csv.

Публичное API

Командой наших разработчиков было составлено публичное API, используя которое другие сайты могут получать данные о торгах на Richamster, зарегистрироваться и авторизоваться, а также делать ставки, снимать ордера и многое другое.

Таблица данных

ПроектRichamster
Веб-сайт:www.richamster.com
Тип работы:проект “под ключ”
Технологии:Python / Django

Спасибо за ваш интерес!

Мы с вами свяжемся в ближайшее время