Исходные данные

Когда несколько модулей записывают данные в одно хранилище контракта, команда должна заранее согласовать, какие слоты принадлежат каждому. ERC-7201 описывает схему именованных пространств хранения. Модуль оформляет поля в структуру, а корень её хранилища выводит из идентификатора пространства по заданной формуле. Ethereum ERC-7201 ↗

Зачем корню нужен отдельный идентификатор

Допустим, модуль комиссий и модуль лимитов содержат по одному числовому полю. Если оба разработчика привязали свои поля к одному слоту, запись новой комиссии способна изменить лимит. Разные идентификаторы, обработанные по формуле ERC-7201, дают разные корни при обычных криптографических предположениях. Формула рассчитана на разделение пространств и обычного дерева хранения Solidity.

Что увидит инструмент проверки

Аннотация NatSpec @custom:storage-location указывает схему и имя пространства. Спецификация отдельно отмечает, что текущие компиляторы не заставляют код действительно обращаться к указанному корню. Поэтому проверка обновления включает сопоставление аннотации с вычислением слота и проверку имён пространств на повторное использование.

Важна и раскладка полей внутри структуры. Если версия контракта переставит два уже заполненных поля, новое чтение может интерпретировать старые данные иначе, хотя корень остался верным. Практическая проверка состоит в том, чтобы сравнить раскладки до и после обновления и прочитать заранее заполненное состояние тестового экземпляра. Именованное пространство уменьшает риск пересечения между модулями, а совместимость версий каждого модуля требует отдельной проверки.