Раньше, читая про конфиденциальность контрактов, я всё время не отрывал взгляд от области хранения. Там лежат зашифрованные поля — и от этого становится спокойнее. Сегодня, когда я ковырял условия подписки RUES, два ограничителя прижали меня к месту. Контракт @Dusk может спрятать состояние, но подписка не делается “вслепую”: сначала он распознаёт contract_id, потом — event_name. Видимость уже здесь разветвляется.

Я разложил D-03 и D-37 по двум колонкам. Слева — шифрование в хранилище, справа — слой событий. Я обвёл в примере подписки JSON header и raw event bytes: события контракта $DUSK будут отправляться подписчикам по заданным условиям. Когда raw event bytes читаются в точности как есть, я будто получил сообщение об ошибке — мол, не накрывай выводы из слоя хранения логическим слоем. Поля подписки — не декорация: они решают, кто сможет собрать какие фрагменты поведения.

Если по-простому: запереть шкаф с файлами — не значит запереть также журнал приёма на входе. Состояние похоже на материалы в шкафу, а события — на наклеенные на дверях квитанции для выдачи. Индексатор может и не добраться до зашифрованных полей, но он наверняка довольно быстро разложит по полочкам время, вызовы и названия. Когда сводишь две колонки вместе, я наконец-то медленно докопался до сути: приватность — это не одна кнопка, а результат, который отдельно считается для каждой видимой “прослойки”.

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

Поэтому теперь я не просто спрашиваю, шифруется ли хранилище: я ещё уточняю, как именно отправляются события, кто может подписаться и не происходит ли де-сенситизация полей. Я лучше потрачу лишнюю минуту на чтение полей, чем соглашусь, что “по умолчанию видимо” автоматически означает “по умолчанию приватно”. Шифрование в хранилище, конечно, полезно, но само по себе не гарантирует, что логи будут автоматически скрыты. В чек-листе контрактов конфиденциальности слой событий должен занимать отдельную строку. Чем усерднее индексатор, тем меньше права эта строка оставаться пустой. #dusk