Перейти к основному содержанию
Change page

Аккаунты Ethereum

Последнее обновление страницы: 23 февраля 2026 г.

Аккаунт Ethereum - это сущность с балансом эфира (ETH), которая может отправлять сообщения в сети Ethereum. Аккаунты могут управляться пользователем или развертываться как умные контракты.

Предварительные условия

Чтобы вы лучше поняли эту страницу, мы рекомендуем вам сначала прочитать наше введение в Ethereum.

Типы аккаунтов

В Ethereum есть два типа аккаунтов:

  • Внешняя учетная запись (EOA) – управляется кем-либо с помощью приватных ключей.
  • Аккаунт контракта – смарт-контракт, развернутый в сети и управляемый кодом. Узнайте об умных контрактах

Оба типа аккаунтов имеют возможность:

  • Получать, удерживать и отправлять ETH и токены
  • Взаимодействовать с развернутыми умными контрактами

Ключевые различия

Внешний

  • Создание аккаунта бесплатно
  • Можно инициировать транзакции
  • Транзакции между внешними аккаунтами могут быть только в ETH и токенах
  • Образуется криптографической парой ключей: публичный и приватный ключи для контроля действий аккаунта

Контракт

  • Создание контракта имеет свою цену, потому что вы используете сетевое хранилище
  • Может отправлять сообщения только в ответ на получение транзакции
  • Транзакции с внешнего аккаунта на аккаунт контракта могут запустить код, который может выполнить множество различных действий, таких как передача токенов или даже создание нового контракта
  • У аккаунтов контракта нет приватных ключей. Вместо этого они управляются логикой кода смарт-контракта.

Изучение аккаунта

У аккаунтов Ethereum есть четыре поля:

  • nonce — счетчик, который указывает на количество транзакций, отправленных с внешнего аккаунта, или на количество контрактов, созданных аккаунтом контракта. Только одна транзакция с заданным значением nonce может быть выполнена для каждого аккаунта, что защищает от атак повтора, в которых неоднократно транслируются и повторно выполняются подписанные транзакции.
  • balance — количество wei, принадлежащих этому адресу. Wei — это часть ETH, один ETH равен 1e+18 Wei.
  • codeHash — этот хэш ссылается на код аккаунта в виртуальной машине Ethereum (EVM). Аккаунты контракта имеют запрограммированные фрагменты кода, которые могут выполнять различные операции. Этот EVM-код запускается при вызове аккаунта. Изменить это нельзя, в отличие от других полей аккаунта. Все фрагменты кода содержатся в базе состояний под соответствующими хэшами для последующего извлечения. Это значение хэша известно как codeHash. Для внешних аккаунтов поле codeHash — это хэш пустой строки.
  • storageRoot — также известен как хэш хранилища. 256-битный хэш корневого узла дерева Меркла — Патрисии, кодирующий содержимое хранилища аккаунта (сопоставление 256-битных целочисленных значений). В дереве он закодирован как сопоставление 256-битного хэша Keccak от 256-битных целочисленных ключей с 256-битными целочисленными значениями, закодированными по RLP. Дерево кодирует хэш хранилища этого аккаунта и по умолчанию пусто.

Диаграмма, показывающая структуру аккаунта Диаграмма адаптирована из Ethereum EVM illustrated (opens in a new tab)

Внешние аккаунты и пары ключей

Учетная запись состоит из двух криптографических ключей: открытого и секретного. Они помогают доказать, что транзакция была подписана отправителем, и не допускают подделки. Приватный ключ используется для подписания транзакций, а потому он предоставляет вам возможность хранить свои средства на счете. У вас нет криптовалюты как таковой, у вас есть приватные ключи, а все средства находятся в общем реестре Ethereum.

Это не позволяет злоумышленникам передавать поддельные транзакции, так как вы всегда можете проверить отправителя транзакции.

Если Алиса хочет отправить эфир со своего счета на счет Боба, Алисе необходимо создать запрос транзакции и отправить его в сеть для верификации. Использование криптографии с публичными ключами гарантирует, что Алиса сможет доказать, что она действительно создала запрос транзакции. Без криптографических механизмов злоумышленник Ева может просто публично транслировать запрос, такой как «отправить 5 ETH с аккаунта Алисы на аккаунт Евы», и никто не сможет подтвердить, что он был получен не от Алисы.

Создание аккаунта

Когда вы хотите создать аккаунт, большинство библиотек сгенерируют вам случайный приватный ключ.

Приватный ключ состоит из 64 шестнадцатиричных символов и может быть зашифрован с помощью пароля.

Пример:

fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036415f

Публичный ключ генерируется из приватного ключа с помощью алгоритма цифровой подписи на эллиптических кривых (opens in a new tab). Для получения публичного адреса своего аккаунта возьмите последние 20 байтов хэша Keccak-256 от публичного ключа и добавьте 0x в начало.

Это означает, что внешний аккаунт (EOA) имеет 42-символьный адрес (20-байтовый сегмент, который состоит из 40 шестнадцатеричных символов и префикса 0x).

Пример:

0x5e97870f263700f46aa00d967821199b9bc5a120

В следующем примере показано, как с помощью инструмента для подписи под названием Clef (opens in a new tab) создать новый аккаунт. Clef — это инструмент для управления аккаунтами и создания подписей, который поставляется в комплекте с клиентом Ethereum, Geth (opens in a new tab). Команда clef newaccount создает новую пару ключей и сохраняет их в зашифрованном хранилище ключей.

1> clef newaccount --keystore <path>
2
3Введите пароль для создаваемого аккаунта:
4> <password>
5
6------------
7INFO [10-28|16:19:09.156] Ваш новый ключ сгенерирован address=0x5e97870f263700f46aa00d967821199b9bc5a120
8WARN [10-28|16:19:09.306] Пожалуйста, создайте резервную копию файла ключа path=/home/user/go-ethereum/data/keystore/UTC--2022-10-28T15-19-08.000825927Z--5e97870f263700f46aa00d967821199b9bc5a120
9WARN [10-28|16:19:09.306] Пожалуйста, запомните ваш пароль!
10Сгенерированный аккаунт 0x5e97870f263700f46aa00d967821199b9bc5a120
Показать все

Документация Geth (opens in a new tab)

Возможно получить новые публичные ключи из вашего приватного ключа, но невозможно получить приватный ключ из публичных ключей. Крайне важно хранить ваши приватные ключи в безопасности и, как следует из названия, ПРИВАТНЫМИ.

Для подписи сообщений и транзакций, которые выводят подпись, необходим приватный ключ. Затем другие пользователи могут проверить подлинность подписи с помощью вашего публичного ключа. В своем приложении вы можете использовать библиотеку JavaScript для отправки транзакций в сеть.

Аккаунты контрактов

Аккаунты контракта также имеют шестнадцатеричный адрес из 42 символов:

Пример:

0x06012c8cf97bead5deae237070f9587f8e7a266d

Адрес контракта, как правило, создается при размещении контракта в блокчейне Ethereum. Адрес контракта получается из адреса и числа транзакций, отправленных с этого адреса (nonce).

Ключи валидатора

Есть еще один тип ключей в Ethereum, который был представлен, когда Ethereum переключился с доказательства работы на консенсус с доказательством владения. Эти ключи называются BLS, они используются для идентификации валидаторов. Они могут быть эффективно собраны, чтобы снизить нагрузку на пропускную способность, необходимую сети для поддержания консенсуса. Без аггрегации ключей минимальная сумма ставки для вадиатора была бы гораздо больше.

Подробнее о ключах валидатора.

Примечание о кошельках

Аккаунт не является кошельком. Кошелек — это интерфейс или приложение, которое позволяет взаимодействовать с аккаунтом Ethereum, внешним аккаунтом или аккаунтом контракта.

Наглядная демонстрация

Посмотрите, как Остин описывает хэш-функции и пары ключей.

Дополнительные материалы

Знаете ресурс сообщества, который вам пригодился? Измените эту страницу и добавьте его!

Была ли эта статья полезной?