Адрес аккаунта, ключ и обратная запись отвечают на разные вопросы
При создании обычного аккаунта адрес выводится из первого публичного ключа и схемы подписи. Затем он становится постоянным адресом аккаунта, где лежат его ресурсы. Ротация меняет `authentication_key`, но не переносит баланс, модули и данные. Поэтому новый публичный ключ не должен подменять адрес отправителя в следующей транзакции.
Получите аккаунт на фиксированной версии реестра и сохраните адрес, `authentication_key` и `sequence_number`. Функция чтения (view) `0x1::account::get_authentication_key` возвращает тот же ключ без изменения состояния. Номер последовательности нужен для доказательства ротации и следующей транзакции. Как работают последовательные номера, разобрано в отдельном гайде.
| Запись | На какой вопрос отвечает | Чего не доказывает |
|---|---|---|
| адрес аккаунта | Где лежат ресурсы и от чьего имени идёт транзакция | Какой ключ авторизует транзакцию сейчас |
| `authentication_key` | Какой ключ или схема подписи сейчас подтверждает право отправлять транзакции | Как адрес был получен при создании |
| `OriginatingAddress` | Какой исходный адрес сопоставлен проверенному новому ключу | Что любой способ ротации обновил индекс |
| `KeyRotationToPublicKey` | Какой публичный ключ и ключ авторизации заявил конкретный вызов | Что транзакция была успешна без её результата |
- Запись
- адрес аккаунта
- На какой вопрос отвечает
- Где лежат ресурсы и от чьего имени идёт транзакция
- Чего не доказывает
- Какой ключ авторизует транзакцию сейчас
- Запись
- `authentication_key`
- На какой вопрос отвечает
- Какой ключ или схема подписи сейчас подтверждает право отправлять транзакции
- Чего не доказывает
- Как адрес был получен при создании
- Запись
- `OriginatingAddress`
- На какой вопрос отвечает
- Какой исходный адрес сопоставлен проверенному новому ключу
- Чего не доказывает
- Что любой способ ротации обновил индекс
- Запись
- `KeyRotationToPublicKey`
- На какой вопрос отвечает
- Какой публичный ключ и ключ авторизации заявил конкретный вызов
- Чего не доказывает
- Что транзакция была успешна без её результата
Сначала выясните, какой путь вызвал кошелёк
Основной `rotate_authentication_key` строит структуру `RotationProofChallenge`. Её подписывают текущий и новый ключи. Вызов проверяет обе подписи, обновляет поле аккаунта, записывает новый ключ в `OriginatingAddress` и выпускает событие. Номер последовательности внутри структуры защищает доказательства от повторного применения.
Функция `rotate_authentication_key_with_rotation_capability` использует делегированное право `RotationCapability`. Она также требует доказательство владения новым ключом и обновляет обратную запись. Этот путь отличается тем, кто вправе начать операцию. Перед подписью полезно разобрать отображаемый вызов и адрес получателя права.
`rotate_authentication_key_call` принимает готовые 32 байта и не доказывает владение соответствующим секретом. Поэтому он меняет ключ, но не `OriginatingAddress`. `rotate_authentication_key_from_public_key` выводит ключ из публичного ключа и выпускает событие с неподтверждённой битовой маской; обратный индекс он тоже не обновляет.
В исходнике остаётся `set_originating_address`, но текущая реализация сразу завершает вызов ошибкой `ESET_ORIGINATING_ADDRESS_DISABLED`. Комментарий о последующем исправлении индекса не является работающей процедурой. Это намеренная защита от подмены обратного сопоставления в моделях абстракции аккаунта.
| Путь | Что проверяет | Меняет ключ | Обновляет OriginatingAddress |
|---|---|---|---|
| `rotate_authentication_key` | Текущий и новый ключи подписали структуру проверки | Да | Да |
| `rotate_authentication_key_with_rotation_capability` | Есть делегированное право и доказательство нового ключа | Да | Да |
| `rotate_authentication_key_call` | Только авторизацию текущей транзакции | Да | Нет |
| `rotate_authentication_key_from_public_key` | Корректный формат публичного ключа | Да | Нет |
| `set_originating_address` | Ничего: вызов отключён | Нет | Нет |
- Путь
- `rotate_authentication_key`
- Что проверяет
- Текущий и новый ключи подписали структуру проверки
- Меняет ключ
- Да
- Обновляет OriginatingAddress
- Да
- Путь
- `rotate_authentication_key_with_rotation_capability`
- Что проверяет
- Есть делегированное право и доказательство нового ключа
- Меняет ключ
- Да
- Обновляет OriginatingAddress
- Да
- Путь
- `rotate_authentication_key_call`
- Что проверяет
- Только авторизацию текущей транзакции
- Меняет ключ
- Да
- Обновляет OriginatingAddress
- Нет
- Путь
- `rotate_authentication_key_from_public_key`
- Что проверяет
- Корректный формат публичного ключа
- Меняет ключ
- Да
- Обновляет OriginatingAddress
- Нет
- Путь
- `set_originating_address`
- Что проверяет
- Ничего: вызов отключён
- Меняет ключ
- Нет
- Обновляет OriginatingAddress
- Нет
Что сохранить до следующей подписи
Пять записей для проверки
- Адрес аккаунта, сеть, версия реестра и старый `authentication_key` до ротации.
- Хеш и успешный результат транзакции, точное имя вызываемой функции и её аргументы без секретных ключей.
- Событие `KeyRotationToPublicKey` либо `KeyRotation` с прежним и новым ключом, если выбранный путь его выпускает.
- Новый `authentication_key` из того же адреса на более поздней версии реестра.
- Ответ `originating_address(new_auth_key)` только для пути, который обязан обновить таблицу.
Ротация завершена, когда неизменный адрес хранит ожидаемый новый ключ, а транзакция имеет `success: true`. Для пути с доказательствами добавьте совпадающую обратную запись. После этого кошелёк должен строить следующую транзакцию от старого адреса, но подписывать её новым ключом. Проверять старый ключ реальной отправкой не нужно.
Если новый ключ в состоянии есть, а кошелёк показывает новый адрес, ошибка возникла при локальном восстановлении или в индексе. Сначала проверьте прежний адрес по публичным данным. Затем обновите или заново добавьте этот аккаунт в кошельке по инструкции разработчика. Хранение seed-фразы и резервных копий — отдельный слой, который ротация автоматически не чинит.
Ищите ошибку в той записи, которая не совпала
Старый ключ в ресурсе означает, что ротация не применилась. Проверьте результат и поле ошибки `vm_status`, затем обновите `sequence_number` перед пересборкой. Новый ключ при пустом OriginatingAddress может быть штатным результатом упрощённого пути. Не повторяйте ротацию только ради индекса: следующий вызов потребует уже новый ключ и может окончательно запутать кошелёк.
Поставьте операцию на паузу, если
- не сохранены старый ключ, адрес, сеть и версия реестра;
- кошелёк не показывает точное имя функции и новый публичный ключ;
- новый ключ предлагают вставить как новый адрес аккаунта;
- пустой `OriginatingAddress` без проверки пути называют потерей аккаунта;
- отключённый `set_originating_address` выдают за рабочее исправление;
- сервис просит старый или новый закрытый ключ, seed-фразу либо удалённый доступ.
Публичный и приватный ключ выполняют разные роли. Перед любой ручной ротацией полезно ещё раз сверить эту границу: в статье и заявке поддержки достаточно адреса, хеша и публичных ключей.
Источники
Мы используем прямые ссылки и фиксируем дату проверки. Полный текст чужих материалов не перепечатывается.
- Aptos account framework at commit a4e59c86d8f3 Aptos Labs · Проверено 25 августа 2026 г. в 09:22 GMT+5
- Aptos mainnet ABI — 0x1::account Aptos Labs · Проверено 25 августа 2026 г. в 09:22 GMT+5
- Aptos fullnode mainnet ledger info Aptos Labs · Проверено 25 августа 2026 г. в 09:22 GMT+5
