Как проверить временную блокировку в нескольких вызовах одной транзакции
После успешного возврата из вызова значение transient storage остаётся доступно до конца транзакции. Изолированные транзакции в тесте могут скрыть забытую блокировку.
Проверьте два последовательных вызова через multicall
В локальном тесте вызовите защищённую функцию контракта A дважды в одном multicall. Если первый вызов установил временную блокировку и не снял её, второй увидит занятую ячейку. В двух отдельных транзакциях временное хранилище каждый раз пусто.
multicall → A.guarded() → return
→ A.guarded() → read previous lock
Добавьте проверку очистки при успешном завершении. Откат кадра возвращает сделанные в нём записи, поэтому отдельно проверьте перехваченные ошибки, после которых родитель продолжает исполнение.
Учитывайте контекст при делегировании
При DELEGATECALL временное хранилище, как и постоянное, относится к контексту вызывающей стороны. Библиотеки одного прокси могут использовать совпадающие ключи. Выберите ключи с учётом назначения блокировок и запускайте тест на версии EVM с поддержкой TLOAD и TSTORE. eips.ethereum.org EIP-1153