ConfigureManaStaking.s.sol
Обзор файла
Файл ConfigureManaStaking.s.sol представляет собой скрипт на языке Solidity, предназначенный для настройки токена MANA с целью его использования в системе стекинга валидаторов Symbiotic. Скрипт упрощает конфигурацию параметров стекинга, управление ролями и создание тестовых ставок для валидаторов, а также генерирует документацию, описывающую параметры и требования к стекингу.
Основная задача файла — подготовить токен MANA к взаимодействию с инфраструктурой стекинга Symbiotic, обеспечивая корректную настройку параметров и создание базовых тестовых данных.
Подробное описание
Контракт ConfigureManaStaking
Контракт наследует Script из forge-std, что позволяет запускать его как скрипт для автоматизации процессов развертывания и настройки.
Структура данных
struct StakingConfig {
uint256 minStake;
uint256 maxStake;
uint256 slashingPercentage;
uint256 unavailabilitySlashing;
uint256 unstakingDelay;
uint256 rewardRate;
}
minStake — минимальное количество MANA для стекинга (в wei, 10^18 = 1 MANA).
maxStake — максимальное количество MANA для стекинга.
slashingPercentage — штраф за злонамеренное поведение (в процентах).
unavailabilitySlashing — штраф за недоступность валидатора.
unstakingDelay — задержка перед разблокировкой средств после отзыва ставки (в секундах).
rewardRate — годовая ставка вознаграждения (в процентах).
Основные функции
run() external
Главная функция скрипта, выполняющая поэтапную конфигурацию:
Загрузка адреса токена MANA.
Вывод текущего состояния токена.
Получение параметров стекинга.
Запуск режима записи транзакций (
vm.startBroadcast()).Конфигурация параметров стекинга.
Настройка ролей для стекинга.
Создание тестовых ставок для валидаторов.
Остановка режима записи транзакций (
vm.stopBroadcast()).Генерация документации по стекингу.
Использование
forge script ConfigureManaStaking.s.sol --broadcast
getManaTokenAddress() internal view returns (address)
Возвращает адрес контракта MANA токена. Логика выбора адреса:
Сначала пытается считать из файла развертывания
./deployments/local.json.Если файл отсутствует, пытается считать из
./deployments/sepolia.json.Если оба файла отсутствуют, берет адрес из переменной окружения
MANA_TOKEN_ADDRESS.
getStakingConfig() internal pure returns (StakingConfig memory)
Возвращает жестко заданную конфигурацию параметров стекинга.
Пример возвращаемых значений:
minStake = 10 000 MANA
maxStake = 1 000 000 MANA
slashingPercentage = 10%
unavailabilitySlashing = 1%
unstakingDelay = 7 дней
rewardRate = 5%
configureStakingParameters(ManaToken manaToken, StakingConfig memory config) internal
Выводит текущие параметры стекинга в консоль. Реальная настройка параметров в контракте управления стекингом (например, StakingManager) пока не реализована — здесь только логирование.
setupStakingRoles(ManaToken manaToken) internal
Подготавливает токен для интеграции с менеджером стекинга (роль STAKING_MANAGER_ROLE). На данном этапе выполняется только логирование о готовности.
createTestValidatorStakes(ManaToken manaToken, StakingConfig memory config) internal
Создает три тестовых валидатора с начальными ставками, равными 5-кратному минимальному стекингу. Для каждого валидатора:
Ментятся (создаются) токены MANA на адрес валидатора.
Выводится информация о ставке в консоль.
Пример адресов валидаторов жестко зашит в коде.
generateStakingDocumentation(StakingConfig memory config) internal
Генерирует и сохраняет два файла документации:
./docs/mana-staking-guide.md— руководство по стекингу токена MANA с описанием параметров, условий штрафов, требований к валидаторам и экономике вознаграждений../validators/validator-config-template.env— шаблон конфигурационного файла для валидатора с предустановленными параметрами и плейсхолдерами.
Важные детали реализации
Используется библиотека
forge-stdдля удобного скриптинга и консольного вывода.Адрес токена MANA может быть получен либо из файлов локального или тестового развертывания, либо из переменных окружения.
В текущей реализации нет прямого вызова методов управления стекингом (например, установки параметров в
StakingManager) — скрипт документирует и подготавливает данные для дальнейшей интеграции.Для тестирования создаются фейковые ставки валидаторов через вызов
mintтокена MANA.Документация генерируется в удобочитаемом формате Markdown и в виде шаблона
.envфайла.
Взаимодействие с другими частями системы
ManaToken.sol — контракт токена MANA, с которым взаимодействует этот скрипт для получения информации и создания тестовых токенов.
Symbiotic Staking Infrastructure — хотя в коде явно не упоминаются контракты управления стекингом, скрипт подготавливает токен и параметры для использования в этой системе.
Файлы развертывания (deployments) — используются для определения текущего адреса токена MANA.
Внешние инструменты и окружение — скрипт использует переменные окружения и файловую систему для загрузки данных и сохранения документации.
Пример использования
// Запуск настройки и создания тестовых ставок
ConfigureManaStaking configure = new ConfigureManaStaking();
configure.run();
Диаграмма структуры контракта
classDiagram
class ConfigureManaStaking {
+run()
-getManaTokenAddress() address
-getStakingConfig() StakingConfig
-configureStakingParameters(ManaToken, StakingConfig)
-setupStakingRoles(ManaToken)
-createTestValidatorStakes(ManaToken, StakingConfig)
-generateStakingDocumentation(StakingConfig)
}
class StakingConfig {
+uint256 minStake
+uint256 maxStake
+uint256 slashingPercentage
+uint256 unavailabilitySlashing
+uint256 unstakingDelay
+uint256 rewardRate
}
ConfigureManaStaking --> StakingConfig
ConfigureManaStaking ..> ManaToken : interacts with
Итог
Файл ConfigureManaStaking.s.sol — это автоматизированный скрипт для подготовки токена MANA к работе в экосистеме стекинга Symbiotic. Он облегчает настройку параметров, управление правами и создание тестовых данных, а также обеспечивает генерацию полезной документации для разработчиков и операторов валидаторов. В дальнейшем этот скрипт может быть расширен для полноценного взаимодействия с контрактами стекинга и автоматизации полного цикла развертывания.
Если необходимы дополнительные пояснения или примеры по интеграции — готов предоставить.