Как сделать биржу криптовалют

Как сделать биржу криптовалют

И ещё так: как биржу криптовалют делать не нужно.

Писал я тут недавно торгового робота под биржу криптовалют Kraken. Работа у меня такая, делать софт для торговли на биржах, на заказ.

Очень скоро выяснилось, что Kraken даёт данные через Апи с гигантскими задержками. От одной до трёх секунд. И если запрашивать данные чаще – то тебя по IP отрубают от биржи.

И пришло ко мне удивительное озарение: «Человек, который писал ядро той биржи, вообще не представляет, как это ядро должно быть устроено»

И начал я смотреть другие биржи криптовалют. И обнаружил что в половине случаев они также сделаны сомнительным способом через жопу, человеками далёкими от трейдинга и понимания того как дОлжно выстраивать архитектуру ядра, чтобы потом не обрубать алготрейдеров от торгов за то что они хотят видеть стакан чаще чем раз в пять секунд (ШТО?!).

В этом посте поговорим о нескольких путях организации АРХИТЕКТУРЫ биржи. Которые приведут в итоге Вас к совершенно разному результату:

1) Архитектуру света, правды и распределённых вычеслений – которую можно будет безболезненно расширять и разносить нагрузку. Это тяжёлый и праведный путь. Который, однако, вероятно не будет для Вас более денежным чем второй.

2) Архитектуру зла, не компетенции, рукоблудства и воровства – то что выбрали большинство создателей криптобирж. Создав которую вы никогда не сможете переварить нормальное кол-во трейдеров. Но не стоит отчаиваться. Такую биржу можно создать за месяц – полтора и начать привлекать инвесторов. Выйти на ICO, сорвать кучу бабла. А когда выясниться через пару лет, что у Вас ядро не рабочее – просто выйти из проекта.




План статьи:
1) Как архитектурно устроена настоящая биржа.
2) Как архитектурно устроена средняя биржа криптоВалют
3) Заключение

1.Устройство ядра нормальной биржи

И сразу с картинки начнём.




Рис. 1. Упрощённая схема ядра биржи и его окружения

Все они примерно похожи.

Ядро

Есть некая программа, написанное на С / С++, которую называют ядром биржи. У ядра есть четыре основных функции:


1) На входе проверять заявки на обеспеченность
2) Пытаться как-то свести заявки на аукционе
3) При этом генерировать ордер лог записей с аукциона
4) На выход подавать как сам ордер лог, так и другие данные, взятые непосредственно из него. Это поток обезличенных сделок. Поток снимков стаканов. И т.д.


Все четыре эти функции могут быть распараллелены как виртуально (просто многопоточное исполнение) так и физически (на разных серверах в рамках одной локальной сети).

Api

Вокруг ядра есть окружение в виде различных шлюзов для получения информации и выставления заявок. В случае ASTS и Spectra это CGate, ASTS Bridge, Twime, Fix, Fast и т.д.

Зона колокации

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

Все остальные

Все остальные вынуждены торговать либо через вёб интерфейсы или через терминалы БРОКЕРОВ. Которые дают Вам потрейдить через свои промежуточные сервера в зоне колокации. Через интернет. Соединение их медленное и печальное. Но от этого не менее стабильное и приемлемое.

Всё!

Если Ядро и Api писалось нормальными ребятами, то всё должно быть прекрасно расширяемо и работать охренительно быстро почти при любых нагрузках.



Адаптировать для криптоБиржи данную картинку впринципе очень даже можно.

Такое ядро делать от полу года до года, в зависимости от упоротости команды. В составе трёх – пяти человек. За это время реально запилить хорошее многопоточное ядро и прикрутить один протокол. Fix Fast, как универсальный очень даже пойдёт. Далее, через Fix Fast промежуточный сервер подключаем личные кабинеты пользователей на своём сайте (который лицо биржи). И торгуем без всяких ограничений. Для HFT и прочей супер-скоростной робототехники выделяем свои личные шлюзы и место в колокации за доп плату. Настоящая биржа! Ура!

Думаете кто-то на Крипто-Биржах сделал так? Хренас два!



2.Устройство ядра средней КриптоБиржи

Давайте тоже сразу с картинки начнём.


Рис. 2. Упрощённая схема ядра Крипто биржи и его окружения

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

Все теперь должны получать дату через единый HTTP интерфейс.

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

Ядро

Не смотря на то что весь функционал сохранился, программная составляющая полностью изменена.

1) Вместо C/C++ у нас здесь PHP, и бесплатная база данных, вроде MySQL.

2) Все операции внутри ядра выполняются одним потоком. Буквально. От «Проверка обеспеченности заявки» + «Аукцион» + «Генерация ордер лога» + «Обновление всех потоков данных» - всё делает один поток.

3) Как выглядит «работа» «ядра»:

a. Пришёл ордер через HTTP Api.
b. Для начала мы ожидаем чтобы все работы в «ядре» остановились.
c. Запрашиваем для данного пользователя таблицу из БД с лимитами. Если лимиты проходят идём дальше.
d. Запрашиваем таблицу из MySQL с ордерами на продажу (допустим у нас на покупку новый ордер)
e. Если текущие ордера на продажу таблице могут удовлетворить наш ордер на покупку, то начинаем каскадные изменения в базе.
f. Генерируем новые записи о том, что ордера исполнились в таблице ордеров
g. Генерим новые обезличенные сделки
h. Генерим изменение в стакане
i. И т.д. Бежим прямо этим одним потоком по таблицам MySQL и вносим в них новые записи.

4) При этом запрос данных происходит напрямую из базы данных.

Такое «ЯДРО» «БИРЖИ» способны написать 80% второкурсников любого технического Вуза нашей планеты. Мне больно это писать, но смотря на список криптобирж, видимо так они все и поступили...

API

HTTP протокол.https://professorweb.ru/my/csharp/web/level7/7_1.php

Что тут ещё сказать. Не хочу углубляться в его суть. Нормальный протокол для мало и средне нагруженных проектов просто супер. Но ОДНАКО. Если Вы подумали что главная проблема бирж криптовалют в том что там ядро детьми написано – это не так.

При использовании HTTP протокола используются один адрес сервера для запросов. А это значит, что у каждого такого АПИ есть предел по кол-ву запросов, после которого сервер перестаёт отвечать, как при ДДОС атаках. Иными словами упадёт.

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

Проблемы у данного Апи возникают только если к бирже приходит какой-то мало-мальский успех.

И не дай бог, на эту биржу придут алготрейдеры, и начнут запрашивать стаканы чаще одного раза в пару секунд – всё. Биржа лежит.


И внимание. Чтобы это происходило как можно реже, биржи начинают вводить ограничения на кол-во запросов к Апи.

Например у моего любимого кракена, это от 1 до 4 секунд между запросами. Если чаще – банят по IP адресу. https://support.kraken.com/hc/en-us/articles/206548367-What-is-the-API-call-rate-limit-

И объясняют это тем, что боятся ДДОС АТАК!!! Я тащюсь, а! Красавцы! С другой стороны не напишешь же что рукожопые и ленивые. От такой правды многим пользователям может и поплохеть.

3.Заключение

Программисту

Я знаю, что эта тема весьма актуальна уже очень длительное время.

И вероятно данная статья будет мозолить глаза всем тем стартаперам, которые захотят делать свою крипто биржу. И захотят её делать в «плохом» варианте…

Ребят, да я не против. Делайте. Только не надо потом давать весёлые интервью о том что сделали биржу за три недели и гордитесь этим(https://cryptocurrency.tech/kak-za-3-nedeli-sozdat-svoyu-birzhu-kriptovalyut-s-nulya-istoriya-birzhi-bitflip/). Делайте это как-то сука тихо чтоли. Через оффшоры. Пользуйтесь именами вымышленными. Ведь всем, включая Вас понятно, что то что Вы сделали никогда не станет биржей.


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


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

Мля. Да у меня даже есть несколько инвесторов, которые бы это спонсировали. Вот только как им потом смотреть в глаза? Как Вы это делаете?

Смелые люди. Молодцы. А аффтар просто завидует

Инвестору

Итак. Вы серьёзный дядька которому предложили инвестировать в биржу крипто валют?

Вам кажется что ещё немного и Вы сможете прикоснуться к передовым технологиям будущего?

Смело инвестируйте!

Но сначала задайте своим программистам несколько простых вопросов.

1) На каком языке будет выполнено ядро биржи? Если ответ будет не С++, и даже не C# и не Java. Если они начнут рассказывать про PHP и базу данных. - Бегите!

2) Будет ли Апи программирования для алготрейдеров. Если ответят что будет HTTP, то это тоже плохо. На этой бирже никогда не будет серьёзных оборотов. Она будет не стабильна и медленна.

Но, а вообще. Понятное дело решать Вам. Тема как ни крути хайповая и денег можно заработать и так и так. Кракен вот жив зараза. Падает несколько раз в день. Обрубает Апи. Пользователи в шоке. Но Кракен зарабатывает)


Постоянному читателю

Друзья. Я не со зла. Чес слово. Просто наболело.

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

Не пишите говно – биржи. Большой брат всё видит.



Удачных алгоритмов!


upd:

Да. да... Есть ещё средний вариант архитектуры, когда тяжёлые данные отпарвляются при помощи WebSocket. Это весьма популярное решение для многих "бирж" криптовалют. Это вроде бы уже более-менее приемлемо, с точки зрения алготрейдинга. Хотя бы стаканы можно получать не раз в пять секунд а в момент их изменения. Но я честно не знаю как к такой архитектуре относится. Определённо это ещё не биржа, но торговать уже можно) Как-то так.


15:28
531

Комментарии

Нет комментариев. Ваш будет первым!