Сегодня раньше у меня произошла неудачная транзакция — вообще не связанная с каким-то проектом, с одобрением просто… что-то не сработало, без понятной причины. Я на секунду слегка раздражился, а потом переключился и продолжил день как обычно.
А потом, из любопытства, я вернулся в задачу про Newton Protocol и та самая транзакция продолжала назойливо всплывать всё время, пока я занимался этим, по причинам, которых я не ожидал.
Потому что вот что действительно оказалось странным: я, кажется, годами относился к сообщению «транзакция прошла» как к хорошему исходу, а к «транзакция заблокирована» — как к раздражающему. Любой UX-опыт кошелька, любые дизайнерские решения только укрепляют это. Зелёная галочка — хорошо, красная ошибка — плохо. Но когда я погрузился в подход Newton к разрешениям и их области действия, начал сомневаться: не было ли у меня это наоборот чаще, чем мне хотелось бы признать. Заблокированная транзакция — это не сбой системы. Иногда это система делает ровно ту одну полезную вещь, которую ей и положено сделать.
Простая версия механизма — люди предполагают, что у кошелька задача заключается в том, чтобы выполнять то, что вы просите, плавно и каждый раз, и что любое прерывание — это трение или баг. Но со scoped permissions всё иначе: кошелёк не спрашивает «можно ли мне выполнить это», он спрашивает «попадает ли это внутрь того, на что я уже согласился разрешить». Когда не попадает, отказ — это не сбой, а слой разрешений, работающий так, как задумано. Я мысленно относил каждое заблокированное действие к категории «раздражает», а не к категории «корректно».

Но вот та часть, которая меня беспокоит, и я ещё не перестал об этом думать. Если отказ начнёт выглядеть нормальным и даже хорошим, как отличить «это заблокировали, потому что запрос вышел за допустимые рамки» от «это заблокировали, потому что рамки были установлены неправильно в первую очередь»? Оба варианта выглядят одинаково со стороны пользователя — неудачная транзакция. Я думал, что если какое-то время посидеть с этой мыслью, для меня прояснится разница. Не прояснилась. Я правда не понимаю, как пользователь должен отличить «разумный отказ» от «сломавшегося» без того, чтобы вчитываться в саму политику, а большинство людей этого не делает.
Почему это важно — думаю, сильно зависит от того, кто смотрит на заблокированную транзакцию. Для разработчика или человека, который проверяет логику разрешений, отказ — это данные: полезно, ожидаемо, иногда это вообще главная цель. А для обычного пользователя, который просто пытается делать что-то регулярно, отказ — это просто препятствие, без вариантов, независимо от причины. Такое ощущение, что пропасть между этими двумя реакциями на одно и то же событие важнее, чем сам механизм.
Небольшой момент — после того, как у меня ранее не прошла транзакция, я, по привычке, пошёл и проверил область (scope) одобрения, ожидая баг. Бага не было. Я просто установил её слишком узко ещё пару месяцев назад и забыл. Так что в моём собственном случае «самый безопасный» исход и «раздражающий» исход — буквально одно и то же событие, и только моя забывчивость определила, как мне это ощущалось.
В любом случае. Не удаётся высадиться на чистое объяснение здесь. Возможно, просто буду следить за тем, будет ли в дальнейшем сообщение об отказе реально объяснять себя, а не оставаться таким же туманным, как сейчас.
@NewtonProtocol #Newt $NEWT