Создание нескольких смарт-контрактов для раздельного хранения состояния и бизнес логики.
Этот подход можно назвать шаблоном разделения данных. Он говорит о том, что пользователи взаимодействуют с логическим контрактом, а данные хранятся в отдельном контракте хранилища.
Логический контракт содержит код, который выполняется, когда пользователи взаимодействуют с приложением. Он также содержит адрес контракта хранилища и взаимодействует с ним для получения и установки данных.
Контракт хранилище содержит состояние, связанное со смарт-контрактом логики, например балансы и адреса пользователей.
Важно ! В контракт хранилище должен записывать данные только определенный контракт логики и никто другой.
По умолчанию контракт хранилища должен быть неизменяемым, но в нем есть возможность поменять контракт логики на любой другой контракт.
В папке /contracts лежит три контракта. TokenLogic - это контракт в котором отсутствуют переменные состояния. Все переменные состояния вынесены в контракты BalanceStorage и TotalSupplyStorage. Эти два контракта имеют публичные методы для управления состояниями. Эти публичные методы могут быть вызваны только установленным контрактом логики.
Подробнее пример контракта логики тут. Подробнее пример контракта хранилище 1 тут. Подробнее пример контракта хранилище 2 тут.