@NewtonProtocol #Newts

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

Итак, давайте сделаю это здесь с двухфазным консенсусом Ньютона. Сначала проблема. Затем решение.

О проблеме, о которой недостаточно говорят

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

Что в реальности означает «актуальные данные»? Список санкций обновляется. Адрес кошелька помечается. Ценовая котировка тикает. Эти обновления не доходят до каждого оператора строго в одно и то же время. Один оператор может получить обновлённый список санкций на две секунды раньше другого. Кто-то может использовать ценовой поток, чуть отстающий из‑за задержки маршрутизации где-то в сети.

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

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

Почему финансовые данные делают это сложнее

Почему в контексте Newton меня особенно дискомфортит эта проблема — потому что важно, что именно считается «актуальными данными». Мы не говорим о данных, где несогласованность в две секунды безвредна. Мы говорим о списках санкций, ценовых котировках и порогах риска.

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

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

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

Что на самом деле делает двухфазный консенсус

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

Newton разделяет процесс оценки на два отдельных шага вместо того, чтобы запускать его целиком сразу. Первый называется фазой Prepare. Второй — фазой Evaluate.

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

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

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

Где в эту схему вписывается NATS

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

В дизайне Newton NATS — это канал, через который проходит фаза Prepare. Операторы используют его, чтобы установить общий снимок данных ещё до начала оценки. Координация достаточно быстрая, чтобы не добавлять существенную задержку процессу, но при этом она устроена так, что согласование можно проверить, а не просто принять на веру.

Что мне нравится в этом выборе, так же как мне нравится, что Newton использует Rego для языка политик. Это проверенная инфраструктура с подтверждённой репутацией в продуктивных системах. Никого не просят доверять пользовательскому коммуникационному слою, который никогда не подвергался стресс-тестированию в масштабе. NATS — да.

Как это выглядит снаружи

Со стороны, если вы просто наблюдаете, как транзакцию оценивают, двухфазная конструкция невидима. Транзакция поступает. Возвращается результат. Пропуск или блокировка.

Вы не видите главное: ещё до выполнения проверок политики вся сеть согласовала данные, по которым эти проверки будут выполняться. Списки санкций, ценовые котировки, параметры риска — всё это зафиксировано в одном снимке для каждого участвующего оператора. Возвращаемый результат — не «взгляд» одного оператора, основанный на том, что у него было локально. Это результат консенсуса на основе входных данных, которые сеть проверила вместе.

Почему именно эта часть делает соответствие реальным

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

Проверка на соответствие, которая может давать разные результаты в зависимости от того, какой оператор её выполнил, — это на самом деле не проверка на соответствие. Это нечто ближе к догадке с добавленными шагами. Если выходные данные зависят от того, у какого узла в момент времени были самые актуальные данные, то этот результат не означает ничего согласованного. Нельзя опираться на регуляторное обязательство, если основа для него столь несогласованна.

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

Простая версия

Два оператора не должны иметь возможность разойтись во мнении о транзакции только потому, что у одного был более новый список санкций, чем у другого. Newton решает это так: операторы договариваются о точных данных, которые будут использовать, прежде чем запустится любая оценка. Фаза Prepare фиксирует данные. Фаза Evaluate запускает проверки. А NATS обрабатывает координацию между ними.

Результатом становится проверка на соответствие, согласованная по всей сети, а не просто согласованная с тем, кто первым успел получить последнее обновление. В системе, где конечный результат — это on-chain доказательство того, что транзакция была корректно проверена, такая согласованность не является приятной опцией. Это и есть всё.

#SKHynixSaysFundsEyeUpTo$7BInADRs #AsianPCBStockSlideOnNvidiaAIServerDelay #AsianPCBStockSlideOnNvidiaAIServerDelay #Newt $NEWT

$BEL $SYN