Найти в Дзене
Про Крипто

Аккаунты сети Ethereum

Аккаунты в Ethereum играют одну из ключевых ролей, представляя собой сущности c ETH на счету, способные отправлять транзакции. На сегодняшний день в сети Ethereum выделяют два типа аккаунтов: Каждый из этих типов аккаунтов имеет свои особенности. Однако при этом любой аккаунт характеризуется своим состоянием, на которое влияет содержимое четырёх полей: EOA представляют собой аккаунты, оптимизированные для конечного пользования. Особенности EOA: При этом адрес EOA аккаунта формируется посредством добавления префикса "0x" к 20 последним байтам(40 символам) хеш-значения от открытого ключа данного аккаунта. В Ethereum, в отличие от Bitcoin, используется функция Keccak-256. Второй тип аккаунтов в сети Ethereum - аккаунты смарт-контрактов, являющиеся одной из основных отличительных черт данного блокчейна. Особенности аккаунтов смарт-контракта: Адрес смарт-контракта генерируется из хеш-значения от конкатенации адреса EOA аккаунта, разворачивающего смарт-контракт, и значения его nonce. Пре
Оглавление

Аккаунты в Ethereum играют одну из ключевых ролей, представляя собой сущности c ETH на счету, способные отправлять транзакции. На сегодняшний день в сети Ethereum выделяют два типа аккаунтов:

  • EOA(Externally Owned Account);
  • Аккаунт смарт-контракта.

Каждый из этих типов аккаунтов имеет свои особенности. Однако при этом любой аккаунт характеризуется своим состоянием, на которое влияет содержимое четырёх полей:

  • balance - количество средств, хранящихся на аккаунте.
  • nonce - число, определяющее количество отправленных транзакций с данного аккаунта в случае EOA аккаунта и количество созданных смарт-контрактов в случае аккаунта смарт-контракта.
  • codeHash - хеш-значение кода, содержащегося на данном аккаунте. Забегая немного вперёд, заметим, что в случае EOA аккаунта данное поле является пустым.
  • storageHash - 256-битное хэш-значение корня дерева Merkle-Patricia, который содержит данные хранилища контракта. Также как и поле codeHash, в случае EOA аккаунта, поле storageHash является пустым.

EOA аккаунт

EOA представляют собой аккаунты, оптимизированные для конечного пользования. Особенности EOA:

  • Главной особенностью EOA является наличие пары секретный ключ/открытый ключ подписи ECDSA, которая контролирует данный тип аккаунта. Чтобы осуществить транзакцию, инициированную некоторым EOA, необходимо подписать собранную транзакцию с помощью секретного ключа, ассоциированного с данным аккаунтом. Другими словами, чтобы потратить средства некоторого аккаунта, необходимо владеть секретным ключом данного аккаунта. Важно хранить секретный ключ в тайне, так как его компрометация фактически сразу приведёт к потере средств, хранящихся на данном аккаунте.
  • EOA аккаунты могут инициировать транзакции. В частности, данный тип аккаунта способен инициировать три разновидности транзакций:
    1) Обычный перевод ETH.
    2) Транзакция создания смарт-контракта(contract creation).
    3) Транзакция вызова функции смарт-контракта.
  • Как уже было отмечено, поля codeHash и storageHash EOA аккаунтов остаются пустыми.
  • Поле nonce EOA определяет количество отправленных транзакций. Каждой транзакции, отправленной с EOA аккаунта, соответствует уникальное число nonce, что играет важную роль в борьбе с атаками двойной траты.
  • Создание EOA не стоит ни единого wei(1 ETH=10^18 wei). Чтобы создать EOA аккаунт, Вы, например, используя кошелёк Metamask, можете просто нажать кнопку "Добавить новый счёт или аппаратный кошелёк".
-2

При этом адрес EOA аккаунта формируется посредством добавления префикса "0x" к 20 последним байтам(40 символам) хеш-значения от открытого ключа данного аккаунта. В Ethereum, в отличие от Bitcoin, используется функция Keccak-256.

Аккаунт cмарт-контракта

Второй тип аккаунтов в сети Ethereum - аккаунты смарт-контрактов, являющиеся одной из основных отличительных черт данного блокчейна.

Особенности аккаунтов смарт-контракта:

  • Аккаунт смарт-контракта не имеет секретного ключа и контролируется логикой кода смарт-контракта.
  • Аккаунты смарт-контрактов не могут самостоятельно инициировать транзакции. Данный тип аккаунтов может отправлять транзакции только в ответ на полученные транзакции, когда вызывается некоторая функция смарт-контракта. При этом в ответ на полученную транзакцию смарт-контракт может как просто перевести средства например, со своего счёта на какой-нибудь другой аккаунт, так и вызвать некоторую функцию другого смарт-контракта. Однако вне зависимости от длины такой цепочки вызовов, исходная транзакция инициируется EOA аккаунтом.
-3
  • Создание смарт-контракта стоит определённого количества средств, так как код смарт-контракта записывается в блокчейне. Для этого EOA аккаунт(деплоер) развёртывает смарт-контракт в сети(деплоит) с помощью транзакции создания контракта(contract creation).
Пример транзакции развёртывания контракта в тестовой сети Ethereum - Sepolia
Пример транзакции развёртывания контракта в тестовой сети Ethereum - Sepolia

Адрес смарт-контракта генерируется из хеш-значения от конкатенации адреса EOA аккаунта, разворачивающего смарт-контракт, и значения его nonce. Префикс "0x" добавляется к первым 20 байтам хеш-значения, что и формирует адрес смарт-контракта.

  • В отличие от EOA аккаунтов, поле nonce аккаунта смарт-контракта увеличивается на 1, только когда смарт-контракт создаёт другой смарт-контракт(если эта возможность заложена в коде контракта). Вызов смарт-контрактом функции другого смарт-контракта не влияет на число nonce.
  • Безопасность аккаунта смарт-контракта и средств, лежащих на нём, зависит от корректности написания кода контракта. Код любого смарт-контракта виден внешнему наблюдателю, поэтому наличие уязвимостей неминуемо приведёт к взлому. Для того чтобы посмотреть код, можно использовать эксплорер сети Ethereum, например, etherscan.

Выводы:

Мы рассмотрели особенности каждого из типов аккаунтов сети Ethereum. EOA аккаунты более автономны и могут самостоятельно инициировать транзакции. Однако транзакции, инициированные EOA аккаунтами, должны соответствовать чёткому формату: каждая транзакция должна быть подписана, nonce каждой транзакции уникален и т.д. В то же время аккаунт смарт-контракта являются абсолютно программируемыми и их транзакции не подвержены жёсткому формату, но при этом самостоятельно аккаунты смарт-контрактов не могут инициировать транзакции, что является ограничением их автономности. Таким образом, каждый из типов аккаунтов определяется в соответствии с некоторым компромиссом между программируемостью и автономностью. Снять данное ограничение призвана концепция абстракции аккаунта, которая предполагается к внедрению в сеть Ethereum в хардфорке Pectra, запланированном на первый квартал 2025 года. Однако это уже новая тема для нашего с Вами разговора, которую мы оставим для одной из следующих статей.