Solidity: роли, токены и управление
30 уроков. Общий пример — учебная библиотека и курс 17. Изучайте страницы по порядку: результат предыдущей становится исходным условием следующей.
Профиль основного примера: Solidity 0.8.30, EVM Cancun, Foundry 1.3.1. Дополнительные примеры OpenZeppelin привязаны к Contracts 5.4.0; зависимости не установлены. Это закреплённый учебный профиль, а не обозначение последних версий.
Исходный CourseCatalog сохраняет неизменяемого издателя: publish заменяет отпечаток и активирует запись, deactivate оставляет отпечаток. Версии, роли, токены, платежи и прокси обозначены как отдельные модели. Их листинги нельзя незаметно подставлять вместо базового контракта.
Уроки
- Ownable в Solidity: первоначальный владелец контракта — Отдельный реестр имеет передаваемого владельца и явный первоначальный адрес.
- Ownable2Step в Solidity: двухэтапная передача владельца — PendingOwner принимает право отдельным действием, прежде прежний owner сохраняется.
- AccessControl в Solidity: роли редакции — Publisher, revoker и admin имеют разные права в отдельном EditorialCatalog.
- AccessControl в Solidity: администраторы ролей — Граф role-admin показывает прямые и назначаемые полномочия.
- Solidity: отзыв роли и самостоятельный отказ — Revoke выполняет администратор роли, renounce — её собственный участник.
- Solidity: задержанная передача главного администратора — DefaultAdminRules вводит специальный переход главной роли с ожиданием и принятием.
- Pausable в Solidity: пауза и восстановление публикаций — Pausable останавливает выбранные методы и не отменяет уже опубликованные данные.
- Мультиподпись в Solidity: полномочия издателя — Реестр доверяет адресу комитета, а согласование происходит внутри него.
- Timelock в Solidity: очередь административных решений — Schedule и execute относятся к одним параметрам после заданной задержки.
- ERC-20 в Solidity: токен и базовые единицы — Decimals задаёт отображение целого баланса, а не дробную арифметику.
- ERC-20: передача учебных кредитов — Transfer меняет балансы выбранного токена и не передаёт редакционную роль.
- ERC-20 allowance: расходование от имени владельца — Approve назначает лимит spender, transferFrom использует отдельный маршрут.
- SafeERC20 в Solidity: работа с чужим токеном — Обёртка нормализует результат вызова, количество проверяется отдельным договором.
- ERC-20 permit: разрешение по подписи владельца — Подпись ERC-2612 назначает лимит, nonce и deadline ограничивают её подачу.
- ERC-20: выпуск, сжигание и предел предложения — Mint и burn имеют отдельные права, а lifetime-cap не восстанавливается от сжигания.
- ERC-721 в Solidity: индивидуальный абонемент — Коллекция выдаёт уникальный номер абонемента без влияния на редакционные роли.
- ERC-721: передача токена и полномочия оператора — Передача номера отличена от разрешения коллекционного оператора.
- ERC-721: метаданные и содержание абонемента — URI закреплён отдельно от владения и проверяется по объявленному договору.
- Доступ на сайт по токену: проверка права пользователя — Сессия сайта проверяет адрес и право отдельно от публичности файлов.
- ERC-1155 в Solidity: несколько видов ресурсов — Один экземпляр учитывает количество для каждого вида ресурса.
- ERC-1155: пакетная передача и связь массивов — Набор выдаётся атомарно с явной границей размера и правилом повторных идентификаторов.
- Receiver hooks в Solidity: приём токенов и полномочия — Приём ресурса отделён от авторизации дальнейшего распоряжения.
- Solidity: делегирование и сила голоса — Голосующий токен различает владение единицами и делегированное участие.
- Solidity: история голосов и снимки состояния — Исторический вес читается по согласованной шкале времени и не заменяется текущим балансом.
- OpenZeppelin Governor: предложение и подсчёт голосов — Отдельный Governor задаёт задержку, срок, порог и правило результата.
- Solidity Governor: голосование, очередь и исполнение — Маршрут через Timelock отделяет успех голосования от изменения целевого реестра.
- Миграция Solidity-контракта: новый экземпляр и состояние — Миграция описывает данные, полномочия и историю без обещания автоматического переноса.
- Прокси-контракты в Solidity: delegatecall и storage — Прокси отделяет исполняемый код от состояния и требует собственной модели доверия.
- Initializer в Solidity: настройка upgradeable-контракта — Инициализация прокси отделена от заблокированной реализации.
- Обновление Solidity-контракта: storage и права релиза — Изменение версии добавляет поля без незаметной перестановки старого состояния.
Материалы опубликованы. Учебные примеры, тесты, сети, установка, сборка, коммит и деплой при написании не выполнялись. Общий маршрут Web3.