Архітектура

NeutronX побудований на CometBFT і Cosmos SDK. CometBFT відповідає за консенсус і порядок блоків, модулі Cosmos SDK - за торгову логіку. Головна особливість: книга ордерів і оракул вбудовані в сам процес створення блоку.

Стек

ШарЩо робить
CometBFT v0.39Консенсус, порядок транзакцій, фінальність за один блок. ABCI++ дозволяє застосунку брати участь у збиранні блоку
Cosmos SDK v0.54Модулі стану: субакаунти, ордери, оракул, governance, стейкінг, IBC
СховищеСтан зберігається в дереві IAVL. Книга ордерів і позиції також тримаються в пам'яті й перебудовуються зі стану

Життєвий цикл блоку

  1. Ціни. У попередньому блоці кожен валідатор підписує vote extension з цінами зі свого сайдкара оракула.
  2. Збирання. Пропозер агрегує ціни (медіана за стейком) і зводить ордери з мемпулу. Результат він кладе першою транзакцією блоку: ціни, підписи валідаторів, угоди й докази неправильних цін.
  3. Перевірка. Кожен валідатор заново перевіряє першу транзакцію: підписи, медіану й угоди. За будь-якої розбіжності блок відхиляється.
  4. Початок виконання. Застосовуються нові ціни, потім розраховуються угоди: маржа, комісії, позиції. Тому угоди розраховані раніше, ніж виконаються транзакції, що їх створили.
  5. Транзакції користувачів. Виконуються по черзі. Ордер отримує вже розраховані виконання, залишок стає в книгу або скасовується за time-in-force.
  6. Кінець блоку. Протокольні процеси у фіксованому порядку, див. нижче.

Кінець блоку

  1. Записуються ордери транзакцій, що не пройшли після зведення: їхні виконання лишаються в силі.
  2. Спливають короткострокові ордери, ордери з good-til-block і ключі агентів.
  3. Записуються ціни для фандингу: mark за книгою, index за оракулом.
  4. Ліквідації.
  5. Розрахунок делістованих ринків, автопауза ринків із застиглою ціною і circuit breaker для пар без голосів.
  6. Route-депозити з IBC і котирування vault.
  7. Переоцінка chase-ордерів, експірація промо-ваучерів, очищення старих записів.
  8. Умовні ордери, потім TWAP і POV.
  9. Фандинг для ринків, у яких настав інтервал.
  10. Перебудова книги в пам'яті, зняття ордерів без маржі та post-only ордерів, які забрали б ліквідність, перевірка інваріантів. У разі порушення інваріанту торгівля зупиняється.

Порядок важливий. Наприклад, ліквідації виконуються раніше за умовні ордери: якщо в одному блоці спрацьовують і ліквідація, і стоп-лос, першою виконається ліквідація.

Перша транзакція блоку

Її збирає пропозер, а не користувач. У ній ціни, підписані vote extensions, докази й угоди. Підписів у неї немає, і надіслати її ззовні неможливо: вміст перевіряє кожен валідатор.

У полі authority стоїть адреса модуля governance. Це формальна вимога protobuf, а не транзакція від governance. В експлорерах її варто показувати як консенсусний батч, підтверджений валідаторами.

Детермінізм

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