VotingPowers.sol
Обзор
Контракт VotingPowers.sol реализует комплексное решение для управления голосовыми правами в системе, основанной на стейкинге и операторах. Он объединяет несколько модулей из внешних библиотек и контрактов, предоставляя функциональность для автоматического развертывания хранилищ (vaults), вычисления голосовой мощности на основе равного стейка, а также управления правами доступа через собственника (ownable).
Основная цель контракта — обеспечить централизованную точку инициализации и взаимодействия для механизмов голосования, связанных с регистрацией операторов и управлением их голосовыми правами в децентрализованной среде.
Описание класса и компонентов
Контракт VotingPowers
Наследует функциональность от четырёх базовых контрактов:
VotingPowerProvider— базовый функционал для провайдера голосовой мощности.OzOwnable— модуль управления правами владельца, основанный на OpenZeppelin.EqualStakeVPCalc— механизм расчёта голосовой мощности на основе равного стейка.OpNetVaultAutoDeploy— автоматическое развертывание хранилищ для операторов.
Конструктор
constructor(address operatorRegistry, address vaultFactory, address vaultConfigurator)
VotingPowerProvider(operatorRegistry, vaultFactory)
OpNetVaultAutoDeploy(vaultConfigurator)
{}
Параметры:
operatorRegistry— адрес реестра операторов.vaultFactory— адрес фабрики для создания новых хранилищ.vaultConfigurator— адрес конфигуратора хранилищ.
Назначение:
Вызывает конструкторы базовых контрактов
VotingPowerProviderиOpNetVaultAutoDeployс соответствующими параметрами.Инициализирует контракт с необходимыми внешними адресами, чтобы обеспечить корректное взаимодействие с другими компонентами системы.
Функция initialize
function initialize(
VotingPowerProviderInitParams memory votingPowerProviderInitParams,
OpNetVaultAutoDeployInitParams memory opNetVaultAutoDeployInitParams,
OzOwnableInitParams memory ozOwnableInitParams
) public virtual initializer {
__VotingPowerProvider_init(votingPowerProviderInitParams);
__OpNetVaultAutoDeploy_init(opNetVaultAutoDeployInitParams);
__OzOwnable_init(ozOwnableInitParams);
__EqualStakeVPCalc_init();
}
Параметры:
votingPowerProviderInitParams— структура параметров инициализации дляVotingPowerProvider.opNetVaultAutoDeployInitParams— структура параметров инициализации дляOpNetVaultAutoDeploy.ozOwnableInitParams— структура параметров инициализации дляOzOwnable.
Возвращаемое значение: отсутствует.
Описание:
Последовательная инициализация всех наследуемых модулей.
Использует
initializerмодификатор, что предотвращает повторную инициализацию, типично для upgradeable контрактов.Подготавливает контракт к полноценной работе, устанавливая внутреннее состояние каждого модуля.
Пример использования:
VotingPowers votingPowers = new VotingPowers(operatorRegistry, vaultFactory, vaultConfigurator); votingPowers.initialize(votingParams, vaultParams, ownableParams);
Внутренний метод _registerOperatorImpl
function _registerOperatorImpl(address operator) internal override(OpNetVaultAutoDeploy, VotingPowerProvider) {
super._registerOperatorImpl(operator);
}
Параметры:
operator— адрес оператора, который необходимо зарегистрировать.
Возвращаемое значение: отсутствует.
Описание:
Переопределяет внутреннюю функцию регистрации оператора, объединяя логику из двух базовых классов:
OpNetVaultAutoDeployиVotingPowerProvider.Вызов
super._registerOperatorImpl(operator)гарантирует, что оба родительских метода будут корректно вызваны.Обеспечивает согласованное добавление оператора в систему с автоматическим развертыванием хранилища и обновлением состояния голосовой мощности.
Важные детали реализации
Контракт построен с использованием расширяемой архитектуры на основе модулей (мульти-наследование).
Использует паттерн инициализации для upgradeable контрактов (
initializer), что позволяет безопасно инициализировать состояние после деплоя.Механизм подсчёта голосовой мощности реализован через
EqualStakeVPCalc, предположительно распределяющий голосовые права равномерно среди стейкеров.Интеграция с
OpNetVaultAutoDeployпозволяет автоматически создавать хранилища для операторов при их регистрации, упрощая управление активами и взаимодействия в системе.Модуль
OzOwnableобеспечивает механизм контроля доступа, позволяя владельцу выполнять административные задачи.
Взаимодействие с другими частями системы
Входные зависимости:
Контракты и модули из пакета
@symbioticfi/relay-contracts, предоставляющие базовую логику для голосования, управления правами и работы с хранилищами.
Внешние взаимодействия:
Реестр операторов (
operatorRegistry) — хранит список зарегистрированных операторов.Фабрика хранилищ (
vaultFactory) и конфигуратор (vaultConfigurator) — обеспечивают создание и настройку хранилищ для операторов.
Роль в системе:
Выступает как центральный обработчик регистрации операторов и предоставления им голосовых прав.
Инкапсулирует логику распределения голосов и управления системой стейкинга в рамках платформы.
Диаграмма структуры контракта
classDiagram
class VotingPowers {
+constructor(address operatorRegistry, address vaultFactory, address vaultConfigurator)
+initialize(VotingPowerProviderInitParams votingPowerProviderInitParams,
OpNetVaultAutoDeployInitParams opNetVaultAutoDeployInitParams,
OzOwnableInitParams ozOwnableInitParams)
-_registerOperatorImpl(address operator)
}
VotingPowers --|> VotingPowerProvider
VotingPowers --|> OzOwnable
VotingPowers --|> EqualStakeVPCalc
VotingPowers --|> OpNetVaultAutoDeploy
Итог
VotingPowers.sol — это мульти-наследуемый контракт, объединяющий в себе функциональность управления голосовой мощностью, автоматического создания хранилищ и правами владельца. Он служит ключевым элементом системы голосования, обеспечивая корректное распределение прав и автоматизацию операций с операторами и их активами. Такой подход позволяет поддерживать расширяемость и модульность системы, упрощая интеграцию с другими компонентами платформы.