Аккаунты в Aptos
В этом блоге мы попытаемся объяснить концепцию аккаунтов в Aptos.
Martian создает различные продукты для экосистемы Aptos, включая Martian Wallet, который будет доступен в качестве расширения Chrome в течение недели.
Пожалуйста, присоединяйтесь к нашему Discord здесь, чтобы быть в курсе последних событий: https://discord.gg/GaB7BpgX7h.
Смотрите на нашем сайте последние выпуски кошелька Martian Aptos Wallet: https://martianwallet.xyz/.
Аккаунт представляет собой ресурс на блокчейне Aptos, который может отправлять транзакции. Каждый аккаунт идентифицируется определенным 16-байтовым адресом аккаунта и является контейнером для модулей Move и ресурсов Move.
Это означает, что аккаунт в блокчейне Aptos является контейнером для ресурсов и обладает некоторыми функциональными возможностями, которые позволяют ему выполнять некоторые действия в блокчейне, например, отправлять ваш ресурс кому-то другому. Адрес аккаунта представляет аккаунт так же, как ваш адрес электронной почты представляет ваш электронный ящик, и позволяет другим обращаться к вам по вашему адресу.
А как насчет открытых и закрытых ключей?
Как и в любом другом блокчейне, для подписания транзакций используются закрытые ключи. Вместо открытого ключа, представляющего счет, мы используем адреса, как описано выше. Причина этого станет очевидной в разделе о ротации ключей аутентификации.
Что такое ключ аутентификации (auth)?
Блокчейн Aptos поддерживает как аккаунты с одной, так и с несколькими подписями. Аккаунт с несколькими подписями, подобно совместному счету в банках, представляет собой единый аккаунт, представляющий интересы нескольких сторон. Все транзакции, которые происходят, требуют подписей всех участвующих сторон.
Как вы представляете аккаунт с несколькими подписями? Этот тип аккаунта не использует единую пару ключей (закрытый ключ, открытый ключ), как аккаунты с одной подписью, а использует пары ключей всех аккаунтов, входящих в multi-sig. Таким образом, не существует единого открытого ключа, представляющего эту учетную запись. Нам нужен ключ, представляющий эту учетную запись так, чтобы в нем были заключены открытые ключи всех пользователей учетной записи multi-sig. Ключи аутентификации - это способ представления всех пользователей в учетной записи multi-sig. В двух словах, ключи аутентификации создаются путем хэширования конкатенации всех открытых ключей пользователей. За подробностями вы можете обратиться к официальной документации.
Ключи аутентификации существуют даже для аккаунтов с одной подписью. Они немного избыточны, поскольку в них заключен только один открытый ключ для представления аккаунта, открытый ключ может выполнять ту же работу. Это сделано для того, чтобы обеспечить согласованность всех типов аккаунтов. Можно сказать, что ключ аутентификации - это обобщенное публичное представление закрытого ключа.
Вы когда-нибудь чувствовали, что ваши пароли взломаны?
Пароли могут быть скомпрометированы по разным причинам. Также как и ваши закрытые ключи. Например, если вы поместили свой закрытый ключ в хранилище третьей стороны, и произошел взлом этой третьей стороны, есть вероятность, что ваша информация (включая закрытый ключ) была скомпрометирована.
Что вы будете делать в такой ситуации? Если мы имеем дело с именами пользователей и паролями, мы можем сменить наши пароли. Некоторые люди делают это периодически (что является хорошей практикой), чтобы обеспечить безопасность всех своих учетных записей. В случае с блокчейн все не так просто. Вы не можете просто изменить свой закрытый ключ, не изменив открытый ключ. Они поставляются в паре. Вы можете создать новый аккаунт со свежей парой открытого и закрытого ключей и перевести все свои активы на этот аккаунт. Наряду со всеми хлопотами по переводу активов, другим участникам блокчейна теперь придется изменить ваши контактные данные с помощью нового открытого ключа.
Aptos поддерживает ротацию ключей, что означает, что вы можете менять свои закрытые и открытые ключи, но разве проблема обновления контактной информации не сохранится? На помощь приходит адрес аккаунта. Ваш адрес не меняется при ротации ключа и по-прежнему будет представлять ваш аккаунт. Другие пользователи по-прежнему могут использовать ваш адрес для отправки вам средств. А как насчет ключа аутентификации, разве он также не представляет вашу учетную запись? Как мы видели, ключи аутентификации привязаны к открытым ключам, поэтому они должны меняться при смене открытых ключей. В то время как адреса не имеют такой привязки и никогда не меняются, поэтому они продолжают представлять вашу учетную запись.
Примечание: По замыслу разработчиков, при создании адрес остается таким же, как и аутентификация (на момент написания этого блога). Это не означает, что между ними существует зависимость, это только инициализация.
Ротация ключей в Aptos называется ротацией ключей аутентификации. Это связано с тем, что ключ аутентификации является публичным представлением вашего закрытого-публичного ключа, поэтому ротация ключей в Aptos обозначается как ротация ключей аутентификации.
Модуль Account.move содержит все функции, связанные с учетной записью в Aptos, включая rotate_authentication_keys(account, new_auth_keys). В двух словах, эта функция обновляет ключ аутентификации аккаунта новым ключом аутентификации.
account_resource.authentication_key = new_auth_key;
Мы можем написать простую функцию, которая вызывает этот API, используя Aptos' Typescript SDK
async function rotateAuthKey(originalAccount: Account, newAuthKey: string) { const payload: { function: string; arguments: string[]; type: string; type_arguments: any[] } = { type: "script_function_payload", function: "0x1::Account::rotate_authentication_key", type_arguments: [], arguments: [ newAuthKey, ] } const txnRequest = await this.generateTransaction(originalAccount.address(), payload); const signedTxn = await this.signTransaction(originalAccount, txnRequest); const res = await this.submitTransaction(originalAccount, signedTxn); return res["hash"].toString(); }
Шаги для выполнения ротации ключа:
- Создайте новую учетную запись: A1
- Перечислите немного TestCoins (чтобы мы могли проводить дальнейшие транзакции)
- Создайте свежий набор ключей (приватный, публичный и аутентификационный ключи): UA1 (неинициализированный аккаунт) - Храните ключи локально
- Поверните auth-ключ A1: auth-ключ UA1 станет новым auth-ключом A1.
- Доступ к учетной записи будет осуществляться с помощью нового набора ключей - адрес останется прежним
- Переведите монеты на счет, используя старый закрытый ключ A1 для подписания транзакции. Это должно завершиться неудачей.
- Переведите монеты на счет, используя новый закрытый ключ A1 для подписания транзакции. Это должно завершиться успешно.
- Переведите монеты со счета на адрес A1. Это должно сработать.
Давайте подведем итоги. Итак, у нас есть четыре ключа для каждой учетной записи.
- Ключевая пара: Живут как пара и генерируются вместе.
- Закрытый ключ: используется для подписания транзакции. Должен быть скрыт от всех.
- Открытый ключ: хорош для представления счетов с одной подписью, не очень хорош для счетов с несколькими подписями. - Ключ аутентификации: обобщает способ представления как аккаунтов с одной подписью, так и аккаунтов с несколькими подписями. Не может оставаться неизменным при ротации ключей, поскольку они привязаны к открытым ключам.
- Адрес: используется для представления учетных записей с одной и несколькими подписями. Остаются неизменными даже после ротации ключей. Независимы от всех других ключей.
Отказ от ответственности: Код или ссылки могут устареть, поскольку кодовая база Aptos быстро меняется, но основные выводы - это фундаментальные основы, на которых строятся счета Aptos