Один ответ API показывает три разных состояния
| Наблюдение | Что это означает сейчас | Что можно делать |
|---|---|---|
| Нет `activeGuardian` и `pendingGuardian` | Защитник ещё не задан | Отправить `SetGuardian` и ждать активации |
| Есть только `pendingGuardian` | Новый защитник записан, но ещё не действует | Сверять `activationEpoch`; не подписывать им защищённые транзакции |
| Есть `activeGuardian`, `guarded: false` | Защитник действует, но обычные транзакции ещё разрешены | Включить `GuardAccount` либо сменить защитника |
| Есть `activeGuardian`, `guarded: true` | Для обычного действия нужна подпись защитника | Проверить доступ к действующему защитнику до создания транзакции |
| Есть обе записи | Старый защитник действует, новый ждёт или заменяет его | Не путать адреса; сверить `activationEpoch` и свежий `blockInfo` |
- Наблюдение
- Нет `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` на свежем блоке после перехода.
Наблюдаемая история смены
- Новая запись ожидает
Адрес и `serviceUID` видны в `pendingGuardian`; прежний действующий защитник, если был, продолжает работать.
- Ожидание без права подписи
Ожидающего защитника нельзя использовать как действующего. Неудачная попытка построить с ним защищённую транзакцию не доказывает потерю средств.
- Новый защитник становится действующим
Свежий `guardian-data` должен показать новый `activeGuardian`; только после этого выбирают следующий шаг защиты.
Путь смены зависит от доступа к действующему защитнику
Если текущий guardian доступен
- 1Сверьте действующую запись
Сравните адрес защитника и `serviceUID` с доверенным приложением. Не принимайте название сервиса в интерфейсе за доказательство адреса.
- 2Создайте SetGuardian с совместной подписью
Защищённый вариант, подписанный владельцем и текущим действующим защитником, допускает немедленное изменение; проверьте новый адрес до отправки.
- 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 не управляют защитником в сети.
Источники
Мы используем прямые ссылки и фиксируем дату проверки. Полный текст чужих материалов не перепечатывается.
- MultiversX Docs — Guard Accounts MultiversX · Проверено 28 августа 2026 г. в 03:52 GMT+5
- MultiversX Docs — Built-in functions MultiversX · Проверено 28 августа 2026 г. в 03:52 GMT+5
- MultiversX REST API — Addresses MultiversX · Проверено 28 августа 2026 г. в 03:52 GMT+5
- mx-chain-go pinned at 460dda7e3619 MultiversX · Проверено 28 августа 2026 г. в 03:52 GMT+5
