Как проверить временную блокировку в нескольких вызовах одной транзакции

После успешного возврата из вызова значение transient storage остаётся доступно до конца транзакции. Изолированные транзакции в тесте могут скрыть забытую блокировку.

Проверьте два последовательных вызова через multicall

В локальном тесте вызовите защищённую функцию контракта A дважды в одном multicall. Если первый вызов установил временную блокировку и не снял её, второй увидит занятую ячейку. В двух отдельных транзакциях временное хранилище каждый раз пусто.

multicall → A.guarded() → return
          → A.guarded() → read previous lock

Добавьте проверку очистки при успешном завершении. Откат кадра возвращает сделанные в нём записи, поэтому отдельно проверьте перехваченные ошибки, после которых родитель продолжает исполнение.

Учитывайте контекст при делегировании

При DELEGATECALL временное хранилище, как и постоянное, относится к контексту вызывающей стороны. Библиотеки одного прокси могут использовать совпадающие ключи. Выберите ключи с учётом назначения блокировок и запускайте тест на версии EVM с поддержкой TLOAD и TSTORE. eips.ethereum.org EIP-1153