Читать книгу Создание смарт-контрактов Solidity для блокчейна Ethereum. Практическое руководство - Александр Вячеславович Фролов - Страница 26

Урок 4. Учетные записи и перевод средств между аккаунтами
Просмотр и добавление аккаунтов

Оглавление

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

Заметим, что помимо аккаунтов пользователей, в сети Ethereum предусмотрены аккаунты смарт-контрактов, загруженных в блокчейн, но об этом мы будем говорить позже.

В процессе инициализации приватной узла сети Ethereum на втором уроке мы добавляли первую учетную запись (аккаунт) явным образом, задавая для нее пароль:


$ geth –datadir node1 account new


На третьем уроке мы запускали тестовую приватную сеть, задавая geth параметр –dev. При этом на узле уже была создана одна учетная запись, к тому же с большим положительным балансом.

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

Просмотр списка аккаунтов

Откройте две консоли и подключитесь в каждой из них пользователем book. Далее в первой консоли запустите узел следующей командой:


$ sh start_node.sh


Во второй консоли подключитесь к запущенному узлу:


$ sh attach_node.sh


Скрипты start_node.sh и attach_node.sh мы подготовили ранее на втором уроке нашего курса.

Теперь, чтобы посмотреть список аккаунтов, достаточно выдать такую команду в консоли второй Web3:


> web3.eth.accounts

["0x4f744742ac711fd111c7a983176db1d48d29f413"]


Если аккаунтов несколько, они будут показаны через запятую как элементы массива:


> web3.eth.accounts

["0x4f744742ac711fd111c7a983176db1d48d29f413", "0xf212d0180b331a88bd3cafbd77bbd0d56398ae00"]


Каждый аккаунт обладает своим идентификатором, или адресом, представляющим собой длинное шестнадцатеричное число. Именно эти адреса и показывает команда web3.eth.accounts.

Добавление аккаунта

Вы можете добавить аккаунты в консоли Geth или в консоли ОС, запустив там Geth с соответствующим параметром.

Давайте добавим новый аккаунт, указав для него пароль test (никогда не используйте такие простые пароли в рабочих проектах):


> web3.personal.newAccount("test")

"0x346cc69a63f9b84c45f17e337574c0150ab6bc03"


Здесь мы обратились к объекту web3.personal. Чтобы такие обращения были возможны, при запуске узла сети мы указали название этого объекта наряду с другими объектами в параметре rpcapi (см. урок 2). При использовании параметра –dev параметр rpcapi задавать явным образом не требуется.

Если раньше массив аккаунтов содержал два элемента, то теперь в нем будет на один элемент больше:


> web3.eth.accounts

["0x4f744742ac711fd111c7a983176db1d48d29f413", "0xf212d0180b331a88bd3cafbd77bbd0d56398ae00", "0x346cc69a63f9b84c45f17e337574c0150ab6bc03"]


Для каждого аккаунта на узле создается ключ. Другой неотъемлемый параметр аккаунта – это его пароль. Пароль при создании аккаунта никуда не записывается, поэтому его невозможно восстановить.

Теперь для добавления аккаунта воспользуемся командой geth account с параметром new. Откройте новое консольное окно пользователем book и введите там следующую команду:


$ geth –datadir node1 account new


Будет добавлен новый аккаунт, а его идентификатор (адрес), будет показан в фигурных скобках:


INFO [02-17|23:01:28.855] Maximum peer count                       ETH=25 LES=0 total=25

Your new account is locked with a password. Please give a password. Do not forget this password.

Passphrase:

Repeat passphrase:

Address: {ae7bb3649a5c597d44f812b4a636f3cc21ee98e1}


При добавлении аккаунта у вас будет запрошен пароль.

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

Теперь если вы вернетесь в консольное окно Geth и посмотрите там список аккаунтов, то увидите, что теперь на вашем узле определено целых четыре аккаунта:


> web3.eth.accounts

["0x4f744742ac711fd111c7a983176db1d48d29f413", "0xf212d0180b331a88bd3cafbd77bbd0d56398ae00", "0x346cc69a63f9b84c45f17e337574c0150ab6bc03", "0xae7bb3649a5c597d44f812b4a636f3cc21ee98e1"]

Параметры команды geth account

Запуская команду geth account с параметрами в консоли ОС, вы можете полностью управлять аккаунтами. Это самый безопасный способ, так как в процессе управления пользователями вы не обращаетесь ни к каким фреймворкам, а работаете с Geth напрямую.

Команде geth account можно передавать параметры, перечисленные в табл. 4.1.


Табл. 4.1. Параметры команды geth account


Хорошее описание управления аккаунтами с примерами можно найти здесь: https://github.com/ethereum/go-ethereum/wiki/Managing-your-accounts.

Пароли аккаунтов

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

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

Приватный ключ хранится на сервере узла и может быть похищен, например, с использованием какой-нибудь уязвимости в ОС или в ПО, установленном на сервере. Но чтобы использовать похищенный ключ, злоумышленнику потребуется еще и пароль. Мы не рекомендуем хранить пароль в компьютере (на сервере, ноутбуке и любом другом), так как он может быть похищен вместе с ключом.

Также учтите, что вредоносные программы могут перехватить управление клавиатурой, а также получить доступ к буферу обмена данных Clipboard. В этом случае они смогут похитить пароль в процессе его ввода с клавиатурой. Используйте антивирусные программы для защиты от вирусов и вредоносных программ различных типов.

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

Создание смарт-контрактов Solidity для блокчейна Ethereum. Практическое руководство

Подняться наверх