На секунду я подумал, что выбрал неправильную запись.
Запустил это снова.
Ничего не изменилось.
Поэтому я проверил аттестатора.
Совпадает.
Затем я проверил схему.
Другой адрес.
Это не казалось правильным.
Я снова попытался со стороны аттестатора.
Все еще ничего.
Даже не выглядело, как будто это пыталось.
Я переключил это.
Вызвано со стороны схемы.
На этот раз это прошло.
Вот где это изменилось.
Аттестатор мог это выдать.
Но не мог отменить это.
Регистрант мог.
Я запустил еще одно.
Другие учетные данные.
То же поведение.
Выдано в одном месте.
Контролировалось в другом.
Я остался на этом дольше, чем планировал.
Потому что ничего не проваливалось.
Все просто... игнорировало неправильного вызывающего.
Я продолжаю возвращаться к этому как к разделенной власти.
Сущность, создающая учетные данные...
не является той, которая может его отключить.
Снаружи это выглядит как контроль эмитента.
Внутри контроль находится совершенно в другом месте.
Две власти.
Только одна видима, когда создаются учетные данные.
$SIGN имеет значение только если та же сущность, которая выдает учетные данные, также является той, которая может отозвать их при реальном использовании...
не просто той, которая определила схему, под которой они существуют.
Я перезагрузил ту же аттестацию, и данные изменились.
Та же `dataLocation`.
Разное содержание.
Я проверил это снова.
Тот же указатель.
Все еще другое.
Так что я извлек временную метку.
`attestTimestamp`
Старше, чем то, что я сейчас видел.
Я подумал, что что-то перепутал.
Так что я попробовал другой.
Разная аттестация.
Та же схема.
То же место.
Новые данные.
Вот тогда это перестало казаться ошибкой.
Аттестация подтверждена.
Чисто.
Ничего не провалилось.
Ничего не помечено.
Но то, к чему это свелось, не совпадало с тем, что было, когда это было выдано.
Я продолжал.
Больше аттестаций с использованием оффчейн `dataLocation`.
То же поведение.
Ссылка остается фиксированной.
Содержание за ней смещается.
И система рассматривает это как одно и то же.
Я продолжаю возвращаться к этому.
Смещение указателя.
Система закрепляет местоположение…
а не состояние данных на `attestTimestamp`.
Так что это все еще подтверждается.
Просто не против того, что на самом деле видел эмитент.
Вот в чем дело.
Удостоверение проходит…
но оно больше не доказывает то, против чего было выдано.
$SIGN имеет значение здесь только в том случае, если система, которая подтверждает против `dataLocation`, вместо состояния на `attestTimestamp`, все еще достаточна, когда эти два начинают расходиться в масштабе.
Потому что как только они расходятся…
ничего не ломается.
Ничего не проваливается.
Ничего не обновляется.
Это все еще подтверждается.
Так что настоящий вопрос становится таким.
Когда указатель остается стабильным, но данные изменяются…
Я пытался отозвать аттестацию ранее, и это не сработало.
Без ошибок.
Просто нет пути.
Я проверил это снова.
Все еще действительно.
Поэтому я поднялся на один уровень выше.
Схема.
`revocable = false`
Я запустил другую под той же схемой.
Разная аттестация.
Тот же результат.
Два удостоверения.
Ни одно из них не могло быть отозвано.
Вот тогда все изменилось.
Это не было неудачным отзывом.
Не было ничего для выполнения.
Удостоверение не было заблокировано после выдачи.
Оно было выдано таким образом.
Я продолжал.
Больше аттестаций.
Та же схема.
То же поведение.
Каждое из них могло быть выдано.
Ни одно из них не могло быть возвращено.
И ничего в аттестации не говорит вам об этом.
Вы видите это только тогда, когда пытаетесь отозвать...
и ничего не происходит.
Я продолжаю возвращаться к этому.
Блокировка отзыва.
Не задержка.
Не ограничение.
Просто отсутствие.
Возможность выдачи существует.
Возможности исправить нет.
И это решение не принимается, когда создается удостоверение.
Оно уже было принято до того, как оно вообще существует.
$SIGN имеет значение здесь только в том случае, если система, где `revocable = false` полностью исключает отзыв на уровне схемы, все еще достаточна, когда условия вокруг этих удостоверений начинают меняться.
Потому что, как только вы достигнете этой границы...
ничто не ломается.
Ничто не дает сбой.
Ничто не обновляется.
Оно просто остается.
Таким образом, настоящий вопрос становится таким.
Если отзыв никогда не существовал в первую очередь...
Я проверил подтверждение валидатора сразу после того, как партия доказательств была очищена ранее, и что-то в том, что она содержала, остановило меня.
Это вернуло чистый валидный результат.
Нет флагов.
Но в нем не было ничего, что говорило бы мне о том, что на самом деле было проверено.
Я снова прокрутил это, ожидая, что контекст появится где-то.
Ссылка. Что угодно.
Больше ничего не нашлось.
Подтверждение осталось.
Смысл - нет.
Мне пришлось проверить это дважды.
Я ожидал, что проверка скажет мне что-то о базовом состоянии.
Она не сказала.
Вот тогда это перестало казаться отсутствующими данными.
И начало казаться структурным.
Валидатор не подтверждает, что произошло.
Он подтверждает, что что-то валидное произошло.
Не понимая этого никогда.
Я продолжаю возвращаться к этому как к пробелу в понимании.
Где проверка остается целой.
Но понимание никогда не приходит.
Два совершенно разных базовых состояния могут пройти одно и то же подтверждение.
И ничего в выводе не отделяет их. Это справедливо, пока объем невысок.
С этим становится сложнее рассуждать, когда доказательства начинают накапливаться.
$NIGHT имеет значение только здесь, если этот слой проверки все еще может отделить то, что остается валидным, от того, что остается значимым, когда подтверждения начинают накапливаться.
Потому что система, которая может проверять все, не понимая ничего, не ломается сразу.
Она сжимает различия в тот же результат. Так что настоящим испытанием становится это.
Когда подтверждения начинают перекрываться под нагрузкой, в чем именно сеть уверена?
`attestTimestamp` соответствует `revokeTimestamp`.
Нет разрыва.
Это не должно было случиться.
Я поймал это, проверяя временные метки.
Я проверил еще одну.
Та же схема.
Другой эмитент.
Тот же результат.
Сначала казалось, что это связано с временем.
Как будто отзыв произошел сразу после выдачи.
Но этого не произошло.
Не было "после".
SIGN регистрирует оба события независимо.
Они просто совпали в один и тот же момент.
Что означает, что эта учетная запись никогда не имела действительного состояния.
Ни на мгновение.
Даже не на блок.
Что означает, что никогда не было состояния, которое могла бы прочитать какая-либо система.
Вот где это изменилось.
Это не была отозванная учетная запись.
Это была такая, которая полностью пропустила действительность.
Мгновенная недействительность.
Учетная запись, которая существует в структуре, но никогда не существовала во времени.
Я следил за тем, как система с этим обращается.
Она разрешается.
Схема загружается.
Эмитент проверяется.
Все проходит на поверхности.
За исключением того, что никогда не было момента, когда ее действительно можно было бы использовать.
Это проявляется только тогда, когда вы читаете временные метки напрямую.
Вот где $SIGN начинает иметь значение.
$SIGN имеет значение только если протокол может различать аттестацию, где `attestTimestamp == revokeTimestamp`, и ту, которая стала недействительной позже.
Потому что прямо сейчас оба разрешаются одинаково, хотя только один из них когда-либо был действительным.
Так что вопрос становится таким.
Если выдача может производить что-то, что никогда не было действительным даже на секунду, что именно означает "выдано" внутри системы?
Этим утром я просматривал компактный контракт, когда что-то не сработало так, как я ожидал.
Результат должен был следовать.
Но этого не произошло.
Нет сбоя. Нет вывода.
Просто… ничего.
Я запустил это снова.
Те же входные данные. Те же условия.
По-прежнему заблокировано.
В тот момент я подумал, что подключил что-то неправильно.
Поэтому я вернулся назад.
Строка за строкой.
Что-то казалось странным.
Путь не терпел неудачу.
Он просто никогда не прошел.
Вот тогда это и осенило.
Он не сломался.
Он исчез.
Только часть логики на самом деле выжила.
Остальное не могло быть выражено как ограничения, поэтому оно вообще не попало в цепь.
Не отклонено.
Просто… не поддающееся выражению.
Это другой тип границы.
Не время выполнения. Не валидация.
Раньше обоих.
Я продолжаю возвращаться к этому как к предварительному ограничению.
Потому что то, что компилируется, не является вашей полной логикой.
Это только та часть, которая может существовать как ограничения внутри цепи.
Все остальное просто никогда не появляется.
Что делает отладку странной.
Вы не преследуете ошибки.
Вы пытаетесь заметить, чего не хватает.
И вы видите это только если уже подозреваете это.
$NIGHT имеет значение только если разработчики могут на самом деле определить, какие части их логики выживают после компиляции ограничений, когда реальные приложения начинают сталкиваться с крайними случаями.
Потому что это не проявится, когда все чисто.
Это проявляется, когда что-то должно работать… и просто этого нет.
Так что настоящий вопрос становится таким.
Если компактный фильтр логики перед тем, как он когда-либо станет частью цепи, как вы можете обнаружить, что вашему контракту никогда не разрешено было делать?