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

Аккаунты Ethereum

Последнее редактирование: @YorkSvit(opens in a new tab), 15 августа 2023 г.

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

Прежде чем начать

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

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

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

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

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

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

Основные отличия

Внешний

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

Контракт

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

Аккаунт проверен

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

  • nonce – счетчик с указанием количества транзакций, переданных с внешней учетной записи, или количества контрактов, созданных в контрактном аккаунте. Только одна транзакция с заданным значением nonce может быть выполнена для каждого аккаунта, что защищает от атак повтора, в которых неоднократно транслируются и повторно выполняются подписанные транзакции.
  • balance — количество wei, принадлежащих этому адресу. Wei — это часть ЕТН, один ETH равен 1e+18 Wei.
  • codeHash — этот хэш ссылается на код учетной записи на виртуальной машине Ethereum (EVM). Аккаунты контракта имеют запрограммированные фрагменты кода, которые могут выполнять различные операции. Этот EVM-код запускается при вызове аккаунта. Изменить это нельзя, в отличие от других полей аккаунта. Все фрагменты кода содержатся в базе состояний под соответствующими хэшами для последующего извлечения. Это значение хэша известно как codeHash. Для внешних аккаунтов поле codeHash — это хэш пустой строки.
  • storageRoot — также известен как хэш хранилища. 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 в начало.

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

1> clef newaccount --keystore <path>
2
3Please enter a password for the new account to be created:
4> <password>
5
6------------
7INFO [10-28|16:19:09.156] Your new key was generated address=0x5e97870f263700f46aa00d967821199b9bc5a120
8WARN [10-28|16:19:09.306] Please backup your key file path=/home/user/go-ethereum/data/keystore/UTC--2022-10-28T15-19-08.000825927Z--5e97870f263700f46aa00d967821199b9bc5a120
9WARN [10-28|16:19:09.306] Please remember your password!
10Generated account 0x5e97870f263700f46aa00d967821199b9bc5a120
Показать все

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

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

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

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

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

Пример:

0x06012c8cf97bead5deae237070f9587f8e7a266d

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

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

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

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

Заметка о кошельках

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

Визуализация

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

Дополнительные ресурсы

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

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