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

Аккаунты Ethereum

Последнее редактирование: , Invalid DateTime

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

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

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

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

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

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

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

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

Ключевые отличия

Внешний

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

Контракт

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

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

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

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

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

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

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

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

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

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

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

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

Пример:

fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036415f

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

Вот пример создания учетной записи в консоли, используя personal_newAccount в GETH

1> personal.newAccount()
2Парольная фраза:
3Повторите парольную фразу:
4"0x5e97870f263700f46aa00d967821199b9bc5a120"
5
6> personal.newAccount("h4ck3r")
7"0x3d80b31a78c30fc628f20b2c89d7ddbf6e53cedc"
8

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

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

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

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

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

Пример:

0x06012c8cf97bead5deae237070f9587f8e7a266d

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

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

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

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

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

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

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

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