Два дня назад в нашем сообществе ходил один кейс — аж мурашки по коже. Пользователь вроде бы подписал всего один перевод на 500 U, но из блокчейна ушло почему-то 50 000 U. В итоге только когда удалось собрать цепочку целиком, выяснилось: передняя часть (тот фронтенд, с которым он взаимодействовал) была кем-то подправлена. На экране показывало 500 U, а в отправляемых данных на подпись — 50 000 U. Приватный ключ — он держал у себя; подпись — он подтверждал своими руками. Но он вообще не знал, что именно он подписывает.

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

У традиционных кошельков есть слепая зона, которую никак не обойти. Приватный ключ и подпись — это математическая задача; намерение транзакции — задача семантическая. Математика может гарантировать, что подпись настоящая, но не может гарантировать, что та вещь, которую ты держишь в голове, — и та вещь, которая в итоге уходит в блокчейн, — это одно и то же. Решение Newton: переводит намерение в структурированные данные, чтобы стратегический движок мог проверить его независимо. То, что получают операторы, — не строка шестнадцатеричных «каракулей», а понятное в одну секунду описание: «кто и сколько должен получить». Сначала они определяют, соответствует ли этот читаемый текст правилам, а уже потом подтверждают его собственными BLS‑подписями. #Newt

Но это тоже тянет за собой новый парадокс. А если само намерение генерируется на том фронтенде, который уже был захвачен? Пользователь думает, что вводит 500 U, а фронтенд тайно меняет это на 50 000 U и только потом отправляет намерение наружу. Тогда оператор получает намерение на 50 000 U, которое выглядит «корректным». Они это проверяют — всё соответствует. Подписывают — и исполняют. $NEWT

Защита от подмены стратегии через стейкинг токенов может уберечь стратегический движок от искажений и заставить операторов не лениться. Но она не способна закрыть трещину между тем, «что было в твоей голове», и тем, «что было на экране».

Возможно, это и есть самая глубинная слепая зона на уровне авторизации. DYOR.