Как отозвать делегирование в управлении

2026-09-03

Как отозвать делегирование в управлении

Вы однажды делегировали свою силу голоса, а теперь хотите её вернуть. Отдельной команды «отозвать» в контракте нет, и она не нужна: делегирование — это одно поле, которое вы перезаписываете. Чего сделать нельзя, так это отозвать его задним числом.

Как отозвать делегирование в управлении: ключевые моменты кратко

Что делегирование на самом деле переместило

Держать токен управления и держать силу голоса — не одно и то же. Документация OpenZeppelin по управлению говорит об этом прямо: силу голоса несут делегаты, и держатель, который хочет участвовать, либо назначает доверенного представителя своим делегатом, либо становится делегатом сам, делегируя себе. Документация Compound описывает тот же шаг: держатели токенов делегируют право голоса себе или выбранному ими адресу.

В тот момент из вашего кошелька ничего не ушло. Compound прямо называет размер того, что действительно перемещается: число голосов, добавленных к счёту делегата, равно балансу на счёте пользователя. Ваши токены остались на месте, рядом с ними записали адрес назначения, а счёт голосов по другому адресу вырос на величину вашего баланса.

Причина такой конструкции — стоимость. OpenZeppelin отмечает, что по умолчанию баланс токенов не учитывается как сила голоса, что делает переводы дешевле, а обратная сторона в том, что от пользователей требуется делегировать себе, чтобы вообще включить отслеживание. Сила голоса — это подключаемый механизм рядом с балансом, а не свойство самого баланса.

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

Отзыв — это ещё одно делегирование, а не удаление

В документации Compound сказано, что голоса делегируются с текущего блока и далее, пока отправитель не делегирует снова или не переведёт свои токены. Прочитайте эту фразу с конца — и получите процедуру отзыва: вы делегируете снова.

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

Отсюда два следствия. Отзыв стоит транзакции и комиссии — ровно так же, как стоило исходное делегирование. И отзыв публичен: новый адрес записан в блокчейне, где его увидит любой, кто читает реестр делегатов.

Куда уходит вес после ваших действий

Отмена делегирования — это выбор адреса назначения, и разные адреса оставляют вас в разном положении.

Что вы делаете Счёт прежнего делегата Ваша собственная сила голоса
Делегируете себе Падает на величину вашего баланса Равна вашему балансу
Делегируете другому адресу Падает на величину вашего баланса По-прежнему ноль, теперь её несёт другой
Переводите токены Падает на величину переведённого баланса Уходит вместе с токенами
Не делаете ничего Не меняется Ноль

Только первая строка делает вас голосующим. Вторая — смена представителя, а не выход из системы. Третья работает, но это плохой путь к цели: ради правки одного поля вы расстаётесь с активом. Четвёртую стоит назвать отдельно: держатель, который перестал доверять делегату и ничего не сделал, не выразил несогласия, ведь его вес продолжают подавать от его имени.

Почему уже открытое предложение не сдвигается

Именно здесь отзыв кажется сломанным, хотя он не сломан. Расширение OpenZeppelin для управления хранит историю балансов, чтобы сила голоса бралась из прошлых снимков, а не из текущего баланса; документация называет это важной защитой, предотвращающей двойное голосование. Compound читает вес так же: подавать голоса могут адреса, у которых сила голоса была на момент начала предложения.

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

Практическое правило — это срок, а не кнопка. Чтобы делегат не подал ваш вес по конкретному предложению, отзыв должен быть записан до снимка этого предложения. Отзыв, отправленный на следующий день после начала спорного голосования, корректен, вовремя для всего последующего и ничего не стоит для того голосования, на которое вы реагировали.

Чего отзыв не делает

Отозвать делегирование — не та же операция, что отозвать одобрение токенов, и общий глагол прячет настоящую разницу. Одобрение — это постоянное разрешение контракту двигать ваши токены. Делегирование такого разрешения не даёт: делегат может подать ваш вес и не может тронуть ваш баланс. Снимите все одобрения в кошельке — делегирование останется на месте; отзовите делегирование — все одобрения останутся на месте.

Он не отменяет того, что делегат уже сделал. Поданные голоса остаются поданными, решённые предложения остаются решёнными, а запись о том, как использовали ваш вес, отзыв не редактирует.

Он не освобождает токены, которые держит отдельный контракт. Если ваш баланс заблокирован, застейкан или завёрнут в позицию с эскроу голосов, делегирование при этой позиции подчиняется правилам того контракта, и отзыв, отправленный в контракт токена, до него не дотягивается.

Делегирование вне блокчейна отзывается в другом месте

Не каждое голосование рассчитывается в блокчейне, и DAO, которое проводит голосования вне сети, держит реестр делегирований вне контракта токена. Документация Snapshot описывает три пути делегирования: реестр делегатов, если пространство настроило собственный контракт делегирования; собственная страница делегирования Snapshot, которую документация называет самым быстрым решением, чтобы делегировать известному адресу; и прямое взаимодействие с контрактом.

Эта множественность и есть то, что стоит проверить, прежде чем считать дело сделанным. Документация Snapshot также отмечает, что прямое делегирование в выбранное пространство имеет приоритет над делегированием на все пространства, так что один держатель может быть делегирован сразу в нескольких местах, с определённым порядком между ними.

Проверка формулируется просто. Перечислите каждый реестр, в котором ваш адрес указан как делегирующий, в сети и вне её, и очистите их по одному. Отзыв в контракте токена ничего не говорит о записи в реестре, который читает другая система.

Разобранный пример

Допустим, у вас 10 000 токенов, и вы делегировали их адресу, который несёт 250 000 силы голоса в сумме, так что ваш баланс — это 4% того, что этот делегат может подать. Предложение A открывается, и его блок снимка проходит. После этого вы делегируете себе.

С этого блока и далее верны сразу два утверждения. По предложению A ваш прежний делегат по-прежнему несёт 250 000, потому что этот подсчёт читает снимок, а не реестр в его нынешнем виде. По следующему предложению тот же делегат несёт 240 000, а вы несёте 10 000, которые можете подать сами.

Вторая строка — это ещё и место, где меняется отчётность. Ваш вес перешёл от делегата к держателю, что тянет вниз концентрацию голосов и вверх число участников, тогда как явка, измеренная от делегированного веса, улучшится только если вы затем действительно проголосуете. Забрать вес и никогда им не воспользоваться — то же самое, что оставить его делегату, который воздерживается.

Итог

Делегирование — это одно поле с одним адресом назначения, поэтому отозвать его значит записать новый адрес, а не удалить старый. Делегируйте себе — и вы становитесь голосующим; делегируйте другому — и вы сменили представителя; не делайте ничего — и ваш вес продолжат подавать без вас.

Спотыкаются на сроках. Сила голоса читается из прошлого снимка, поэтому отзыв связывает каждое предложение, снимок которого наступает после него, и ни одно из уже открытых. Проверяйте реестр делегатов до голосования, которое вам важно, а не после, и проверяйте каждый реестр, которым ваша организация действительно пользуется. Чтобы продолжать изучать основы, следите за материалами Bitbase Academy.

Похожие материалы

Другие материалы Bitbase по этой теме:

- Почему миграция токена просит одобрение в кошельке

- Миграция токенов завершена, но новые токены не пришли

- Как рассчитать запас хода казны токен-проекта

- Коэффициент NVT: сетевая стоимость к объёму транзакций

- Аирдроп-мошенничество и контрольный список безопасности перед получением

Дисклеймер: эта статья — образовательный материал Bitbase Academy, только для информационных целей. Она не является инвестиционным, торговым, налоговым или финансовым советом. Криптоактивы волатильны — оценивайте риски самостоятельно. Написано в сентябре 2026 года; сверяйтесь с актуальной официальной информацией.

Источники

[1] Документация OpenZeppelin Contracts 5.x, Governance docs.openzeppelin.com

[2] Документация OpenZeppelin Contracts 5.x, API, ERC20 (ERC20Votes) docs.openzeppelin.com

[3] Документация Compound, Governance (Compound v2) docs.compound.finance

[4] Документация Snapshot, руководства пользователя, Delegation docs.snapshot.box