Один ответ API показывает три разных состояния

Как читать guardian-data
НаблюдениеЧто это означает сейчасЧто можно делать
Нет `activeGuardian` и `pendingGuardian`Защитник ещё не заданОтправить `SetGuardian` и ждать активации
Есть только `pendingGuardian`Новый защитник записан, но ещё не действуетСверять `activationEpoch`; не подписывать им защищённые транзакции
Есть `activeGuardian`, `guarded: false`Защитник действует, но обычные транзакции ещё разрешеныВключить `GuardAccount` либо сменить защитника
Есть `activeGuardian`, `guarded: true`Для обычного действия нужна подпись защитникаПроверить доступ к действующему защитнику до создания транзакции
Есть обе записиСтарый защитник действует, новый ждёт или заменяет егоНе путать адреса; сверить `activationEpoch` и свежий `blockInfo`
Как читать guardian-data
Наблюдение
Нет `activeGuardian` и `pendingGuardian`
Что это означает сейчас
Защитник ещё не задан
Что можно делать
Отправить `SetGuardian` и ждать активации
Наблюдение
Есть только `pendingGuardian`
Что это означает сейчас
Новый защитник записан, но ещё не действует
Что можно делать
Сверять `activationEpoch`; не подписывать им защищённые транзакции
Наблюдение
Есть `activeGuardian`, `guarded: false`
Что это означает сейчас
Защитник действует, но обычные транзакции ещё разрешены
Что можно делать
Включить `GuardAccount` либо сменить защитника
Наблюдение
Есть `activeGuardian`, `guarded: true`
Что это означает сейчас
Для обычного действия нужна подпись защитника
Что можно делать
Проверить доступ к действующему защитнику до создания транзакции
Наблюдение
Есть обе записи
Что это означает сейчас
Старый защитник действует, новый ждёт или заменяет его
Что можно делать
Не путать адреса; сверить `activationEpoch` и свежий `blockInfo`

Запросите `GET https://gateway.multiversx.com/address/<bech32Address>/guardian-data` для нужного адреса и сети. Сохраните `activeGuardian`, `pendingGuardian`, `guarded` и `blockInfo`. У каждой записи защитника есть адрес, `serviceUID` и `activationEpoch`; `blockInfo` привязывает снимок к конкретному состоянию сети. Не публикуйте подписи, резервные фразы и приватные данные сервиса вместе с ответом.

`activeGuardian` не делает аккаунт защищённым автоматически. Пока `guarded` равен `false`, сеть принимает обычный формат транзакции. При `guarded: true` подписи владельца недостаточно для большинства действий: нужны поля `guardian`, `guardianSignature`, версия транзакции не ниже 2 и параметр guardian-option. Перед подписью полезно отдельно разобрать, какие байты подтверждает кошелёк.

SetGuardian создаёт ожидающую запись, а не мгновенную замену

Обычный вызов `SetGuardian` записывает нового защитника в `pendingGuardian`. Текущая документация задаёт ожидание в 20 эпох. Единица здесь — эпоха сети, не календарный день: не переводите её в фиксированную дату по старому посту. Рассчитайте ориентир по `activationEpoch`, затем перечитайте `guardian-data` на свежем блоке после перехода.

Наблюдаемая история смены

  1. Новая запись ожидает

    Адрес и `serviceUID` видны в `pendingGuardian`; прежний действующий защитник, если был, продолжает работать.

  2. Ожидание без права подписи

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

  3. Новый защитник становится действующим

    Свежий `guardian-data` должен показать новый `activeGuardian`; только после этого выбирают следующий шаг защиты.

Путь смены зависит от доступа к действующему защитнику

Если текущий guardian доступен

  1. 1
    Сверьте действующую запись

    Сравните адрес защитника и `serviceUID` с доверенным приложением. Не принимайте название сервиса в интерфейсе за доказательство адреса.

  2. 2
    Создайте SetGuardian с совместной подписью

    Защищённый вариант, подписанный владельцем и текущим действующим защитником, допускает немедленное изменение; проверьте новый адрес до отправки.

  3. 3
    Перечитайте состояние

    После финализации запросите `guardian-data` заново: ожидайте новый `activeGuardian` и отсутствие старой ожидающей записи, а не только статус интерфейса.

Если доступ к действующему защитнику утрачен, `SetGuardian` остаётся исключением: его можно отправить обычной транзакцией даже с защищённого аккаунта. Новый адрес появится в `pendingGuardian` и станет действующим после 20 эпох. Это документированный путь смены, но не мгновенное восстановление. Если недоступен и ключ владельца, защитник его не заменяет; модель публичного и приватного ключа разобрана отдельно.

`UnGuardAccount` — защищённая транзакция: для неё нужен доступ к действующему защитнику. При утрате доступа сначала задают нового защитника обычным `SetGuardian`, ждут активации и лишь затем подписывают `UnGuardAccount` двумя сторонами. Не переносите сюда механику модулей Safe: guard и fallback handler в EVM — другая система с другими точками отказа.

Проверка результата требует нового снимка, а не зелёной кнопки

Контроль после каждого встроенного вызова
ВызовОжидаемый факт в сетиЕсли факт не появился
Обычный `SetGuardian`Новый адрес виден в `pendingGuardian` с `activationEpoch`Проверить статус транзакции, сеть, аргументы и свежесть `blockInfo`
Защищённый `SetGuardian`Новый адрес уже действующий, ожидающая запись очищенаСверить обе подписи, версию, `options` и квитанцию
`GuardAccount``guarded` стал `true` при наличии действующего защитникаНе отправлять транзакцию повторно; проверить результат встроенного вызова
`UnGuardAccount``guarded` стал `false`; действующая запись может сохранятьсяПроверить защищённый формат и подпись текущего защитника
Контроль после каждого встроенного вызова
Вызов
Обычный `SetGuardian`
Ожидаемый факт в сети
Новый адрес виден в `pendingGuardian` с `activationEpoch`
Если факт не появился
Проверить статус транзакции, сеть, аргументы и свежесть `blockInfo`
Вызов
Защищённый `SetGuardian`
Ожидаемый факт в сети
Новый адрес уже действующий, ожидающая запись очищена
Если факт не появился
Сверить обе подписи, версию, `options` и квитанцию
Вызов
`GuardAccount`
Ожидаемый факт в сети
`guarded` стал `true` при наличии действующего защитника
Если факт не появился
Не отправлять транзакцию повторно; проверить результат встроенного вызова
Вызов
`UnGuardAccount`
Ожидаемый факт в сети
`guarded` стал `false`; действующая запись может сохраняться
Если факт не появился
Проверить защищённый формат и подпись текущего защитника

Считайте переход завершённым, когда транзакция финализирована, а `guardian-data` на более позднем блоке показывает ожидаемые поля. Повторите этот запрос через официальный шлюз и сохраните `blockInfo`; подпись для чтения не нужна. Потеря телефона с приложением-аутентификатором — соседняя, но не идентичная задача: резервные коды 2FA не управляют защитником в сети.

Источники

Мы используем прямые ссылки и фиксируем дату проверки. Полный текст чужих материалов не перепечатывается.

  1. MultiversX Docs — Guard Accounts MultiversX · Проверено 28 августа 2026 г. в 03:52 GMT+5
  2. MultiversX Docs — Built-in functions MultiversX · Проверено 28 августа 2026 г. в 03:52 GMT+5
  3. MultiversX REST API — Addresses MultiversX · Проверено 28 августа 2026 г. в 03:52 GMT+5
  4. mx-chain-go pinned at 460dda7e3619 MultiversX · Проверено 28 августа 2026 г. в 03:52 GMT+5
Материал носит информационный характер и не является индивидуальной рекомендацией. Криптоактивы связаны с риском волатильности, технических сбоев, хищения и полной потери средств.