Я всё чаще замечаю, как легко одобрение политики воспринимают как доказательство того, что транзакция успешно завершится. Чем больше я читаю документацию по протоколу, тем сильнее думаю, что это два совершенно разных вопроса. Один спрашивает: «Разрешено ли это действие?». Другой спрашивает: «Может ли это действие фактически быть завершено?».

Это различие важно далеко за пределами одного протокола. В системах смарт‑контрактов выполнение может завершиться неудачей по многим причинам: целевой контракт может сделать revert, необходимых средств может не хватить или после авторизации могут появиться неожиданные условия. Если рассматривать одобрение и выполнение как одно и то же событие, можно скрыть, где именно произошла реальная проблема.

При более внимательном рассмотрении описанного в документации Newton Protocol потока с «raw‑intent» одним моментом особенно выделилось следующее. Если целевой контракт делает revert, сбой отображается отдельно — либо путём «пробрасывания» исходной причины revert, либо возвратом ошибки выполнения. В других примерах пользовательская ошибка ExecutionFailed() помечает, что политика прошла, но сама транзакция при этом не была выполнена.

Меня заинтересовало не наличие дополнительного сценария ошибки. Меня заинтересовала чёткая граница. Действительное подтверждение (attestation) доказывает, что операторы одобрили намерение в соответствии с политикой, а не то, что целевой контракт гарантированно выполнится успешно. Даже в документации Newton отмечается, что проблемы с выполнением нужно отлаживать отдельно, что ещё раз подчёркивает: авторизация и выполнение решают разные задачи.

Я всё ещё думаю о том, будут ли приложения ясно показывать пользователям это различие. Делает ли разделение одобрения политики и выполнения децентрализованные системы проще для понимания, или же одобренные, но неудачные транзакции создадут новую путаницу?

@NewtonProtocol

$NEWT


$TLM

$SYN

#NEWT