Адрес аккаунта, ключ и обратная запись отвечают на разные вопросы

При создании обычного аккаунта адрес выводится из первого публичного ключа и схемы подписи. Затем он становится постоянным адресом аккаунта, где лежат его ресурсы. Ротация меняет `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
Нет

Что сохранить до следующей подписи

Пять записей для проверки

  1. Адрес аккаунта, сеть, версия реестра и старый `authentication_key` до ротации.
  2. Хеш и успешный результат транзакции, точное имя вызываемой функции и её аргументы без секретных ключей.
  3. Событие `KeyRotationToPublicKey` либо `KeyRotation` с прежним и новым ключом, если выбранный путь его выпускает.
  4. Новый `authentication_key` из того же адреса на более поздней версии реестра.
  5. Ответ `originating_address(new_auth_key)` только для пути, который обязан обновить таблицу.

Ротация завершена, когда неизменный адрес хранит ожидаемый новый ключ, а транзакция имеет `success: true`. Для пути с доказательствами добавьте совпадающую обратную запись. После этого кошелёк должен строить следующую транзакцию от старого адреса, но подписывать её новым ключом. Проверять старый ключ реальной отправкой не нужно.

Если новый ключ в состоянии есть, а кошелёк показывает новый адрес, ошибка возникла при локальном восстановлении или в индексе. Сначала проверьте прежний адрес по публичным данным. Затем обновите или заново добавьте этот аккаунт в кошельке по инструкции разработчика. Хранение seed-фразы и резервных копий — отдельный слой, который ротация автоматически не чинит.

Ищите ошибку в той записи, которая не совпала

Старый ключ в ресурсе означает, что ротация не применилась. Проверьте результат и поле ошибки `vm_status`, затем обновите `sequence_number` перед пересборкой. Новый ключ при пустом OriginatingAddress может быть штатным результатом упрощённого пути. Не повторяйте ротацию только ради индекса: следующий вызов потребует уже новый ключ и может окончательно запутать кошелёк.

Поставьте операцию на паузу, если

  • не сохранены старый ключ, адрес, сеть и версия реестра;
  • кошелёк не показывает точное имя функции и новый публичный ключ;
  • новый ключ предлагают вставить как новый адрес аккаунта;
  • пустой `OriginatingAddress` без проверки пути называют потерей аккаунта;
  • отключённый `set_originating_address` выдают за рабочее исправление;
  • сервис просит старый или новый закрытый ключ, seed-фразу либо удалённый доступ.

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

Источники

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

  1. Aptos account framework at commit a4e59c86d8f3 Aptos Labs · Проверено 25 августа 2026 г. в 09:22 GMT+5
  2. Aptos mainnet ABI — 0x1::account Aptos Labs · Проверено 25 августа 2026 г. в 09:22 GMT+5
  3. Aptos fullnode mainnet ledger info Aptos Labs · Проверено 25 августа 2026 г. в 09:22 GMT+5
Материал носит информационный характер и не является индивидуальной рекомендацией. Криптоактивы связаны с риском волатильности, технических сбоев, хищения и полной потери средств.