Форум
Монеты: 9023 Биржи: 781
Рыночная капитализация: $976 681 591 325,87
Объём за 24 ч: $103 981 216 979,40
ETH Газ: 35 Gwei
Быстро
36 Gwei (~ 30 сек.)
Стандарт
35 Gwei (~ 3 мин. 0 сек.)
Медленно
35 Gwei (~ 3 мин. 0 сек.)

Если специалист разрабатывает смарт-контракты Solidity для сети Ethereum, то часто сталкивается с такими инструментами, как Remix, Truffle или Hardhat. Все они формируют встроенную сеть, которая необходима для решения технических задач. Но прежде, чем разместить умный контракт в основной сети Ethereum, стоит проверить его работу в тестовой системе, например в Rinkeby.

Сервисы типа Infura и Alchemy будут полезны для настройки смарт-контрактов. Однако использование стороннего софта нарушает концепцию децентрализации. Те же Infura и Alchemy требуют обязательной регистрации.

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

Разработка своего узла Ethereum

Из данной статьи вы узнаете, как разработать свой узел в блокчейне эфира на базе Go Ethereum в ОС Ubuntu и Microsoft Windows для основной сети (Mainnet) и базовой сети Rinkeby. Этот софт доступен в качестве утилиты Geth. Она позволяет формировать технические узлы Ethereum с несколькими режимами синхронизации.

Режимы синхронизации узлов сети

Распространены несколько видов узлов сети Эфируим которые отличаются механизмом синхронизации и значением syncmode (указывается при подключении софта Geth):

  • Полный узел.
  • Легковесный узел.
  • Архивный узел.

Полный узел (—syncmode snap, применяет по умолчанию) загружает весь перечень блоков. Также отображаются все квитанции о транзакциях и актуальные изменения в экосистеме. Когда в блокчейн-сети появляются новые транзакции, полный узел идентифицирует их соответствие спецификации Ethereum. Если финансовые запросы и блоки не проходят проверку, то они будут отвергнуты системой.

Добавляя транзакции в систему, полный узел поддерживает ее оптимальное состояние.

Легковесный узел (—syncmode light) загружает только заголовки блоков, но не проводит транзакции и не отображает состояния сети. Взаимодействие с децентрализованной сетью происходит при запросе информации с удаленных узлов.

Синхронизация легковесного узла производится всего за несколько часов. Однако есть некоторые ограничения и недостатки. Например, на легковесном узле нельзя майнить. Транзакции будут проверяться не на вашем, а на стороннем узле.

Архивный узел (—syncmode full) подразумевает нагрузку на всю блокчейн-цепочку. При этом выполняются все транзакции из доступных блоков. На диске отображаются все состояния сети, и информацию о них можно получить для каждого отдельно блока.

Для архивного узла понадобятся диски SSD с объемом свыше 6 Tбайт, а на синхронизацию узла может уйти более суток. Стоит учесть, что с расширением экосистемы Ethereum требования к хранилищам и период синхронизации возрастают.

Подготовка узла в экосистеме Rinkeby

Понадобится сервер, оборудованный SSD-хранилищами (минимум 200 Гбайт), четырехъядерным процессором и ОЗУ объемом от 16 Гбайт. На данный сервер потребуется инсталлировать операционную систему Ubuntu 20.04 или актуальный дистрибутив (обязательно 64-разрядный). В конце статьи будет описана схема по установке обеспечения для системы Microsoft Windows.

По завершении инсталляции ОС Ubuntu следует открыть два окна в консоли.

В первом окне скопируйте файл rinkeby.json в свой домашний реестр:

$ cd
$ wget https://www.rinkeby.io/rinkeby.json

Потом проинициализируйте узел Rinkeby:

$ geth —datadir=$HOME/.rinkeby init rinkeby.json

Процедура формирования полного узла Rinkeby зачастую проводится за несколько часов (в зависимости от характеристик компьютера).

Формирование полного узла

Команды запуска компонентов Rinkeby для узлов с разными компонентами синхронизации описана на официальном сайте. Чтобы создать полный узел Rinkeby, активируйте команду в первом окне:

$ geth —networkid=4 —datadir=$HOME/.rinkeby —syncmode=fast
—cache=4096 —http —http.addr «0.0.0.0» —http.api «admin,debug,miner,txpool,personal,eth,net,web3» —allow-insecure-unlock —ethstats=’mydomain:Respect my authoritah!@stats.rinkeby.io’ —bootnodes=enode://a24ac7c5484ef4ed0c5eb2d36620ba4e4aa13b8c84684e1b4aab0cebea2ae45cb4d375b77eab56516d34bfbd3c1a833fc51296ff084b770b94fb9028c4d25ccf@52.169.42.101:30303

Замените параметр mydomain на необходимое доменное название или иной уникальный идентификатор. Переменная networkid задает идентификатор сети Rinkeby, равный четырем. Изначально данное значение равно нулю и соответствует базовой сети Ethereum.

Максимальный объем кеша, установленный параметром —cache, зависит от количества оперативной памяти на компьютере. Здесь необходимо задать значение, которое составит половину от доступного ОЗУ. Чем больше кеш, тем быстрее завершится синхронизация узла.

Параметр —datadir устанавливает путь к каталогу, где хранятся шифровальные ключи и данные об узле. Этот каталог рекомендуется размещать на диске SSD.

Параметр —http подтверждает доступ к узлу при использовании протокола HTTP.  За счет переменной —http.addr указывается, что экосистема функционирует на всех доступных интерфейсах, а не на одном localhost.

Опция —http.api формирует список API, доступный в рамках системы HTTP-RPC.

Стоит обязательно рассмотреть параметр —allow-insecure-unlock. Он используется для Truffle, который не доступен провайдеру IPC. Его не рекомендуется применять на узлах основной сети, поскольку снизится уровень безопасности.

Адрес URL под отчет ethstats задается функцией —ethstats.

В разделе —bootnodes нужно установить адрес URL для доступа к системе Rinkeby.

Промокод со скидкой в 15% на авторский курс «Создание смарт-контрактов Solidity для Ethereum» — CRYPTOSOL

Создание легковесного узла

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

$ geth —networkid=4 —datadir=$HOME/.rinkeby —syncmode=light —cache=1024 —http —http.addr «0.0.0.0» —http.api «admin,debug,txpool,personal,eth,net,web3» —allow-insecure-unlock —ethstats=’mydomain:Respect my authoritah!@stats.rinkeby.io’ —bootnodes=enode://a24ac7c5484ef4ed0c5eb2d36620ba4e4aa13b8c84684e1b4aab0cebea2ae45cb4d375b77eab56516d34bfbd3c1a833fc51296ff084b770b94fb9028c4d25ccf@52.169.42.101:30303

Здесь в рамках параметра —syncmode устанавливается значение light. Также нужно уменьшить размер —cache до 1024.

Контроль за этапом синхронизации

Стоит активировать второе окно в командной строке и подтвердить опцию:

$ geth —networkid=4 —datadir=~/.rinkeby attach ipc://home/developer/.rinkeby/geth.ipc

Для отслеживания процесса синхронизации иногда нужно во второй консоли активировать опцию eth.syncing. Появится детальная информация о ходе синхронизации:

> eth.syncing
{
currentBlock: 41643,
healedBytecodeBytes: 0,
healedBytecodes: 0,
healedTrienodeBytes: 0,
healedTrienodes: 0,
healingBytecode: 0,
healingTrienodes: 0,
highestBlock: 10166856,
startingBlock: 0,
syncedAccountBytes: 5866947,
syncedAccounts: 21163,
syncedBytecodeBytes: 66662056,
syncedBytecodes: 10478,
syncedStorage: 1174308,
syncedStorageBytes: 259967479
}

Если процесс не завершился, то функция определения номера самого последнего обработанного блока отобразит нулевое значение:

> eth.blockNumber
0

Чтобы продолжить работу, нужно завершить этап синхронизации. Параметр eth.syncing вернет значение false, а команда eth.blockNumber восстановит номер самого последнего обработанного блока:

> eth.syncing
false
> eth.blockNumber
10170720

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

Когда этап синхронизации завершится, добавьте аккаунты, используя опцию personal.newAccount:

> personal.newAccount()
Passphrase:
Repeat passphrase:
«0xaf3cc1db3ef0dce4c1355e87ce11bb1c68fb0ed4»

Тут потребуется ввести пароль от профиля. К данной информации нужно относиться осторожно, чтобы избежать кражи.

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

При формировании аккаунта появится его адрес, например: «0xaf3cc1db3ef0dce4c1355e87ce11bb1c68fb0ed4».

Если пользователь забыл адреса, то понадобится команда eth.accounts:

> eth.accounts
[«0xaf3cc1db3ef0dce4c1355e87ce11bb1c68fb0ed4»]

Также можно активировать несколько аккаунтов за счет опции personal.newAccount.

Приватные ключи доступа от профилей располагают в реестре по адресу ~/.rinkeby/keystore. Рекомендуется сделать его бекап.

Пополнение аккаунта Rinkeby монетами ETH

Актуальный баланс счета отображается при активации опции web3.fromWei:

> web3.fromWei(eth.getBalance(«0x2b4218cc6d8fd1691395dc5223e201a56bbec512»))
0

Активируйте функцию eth.getBalance по адресу своего аккаунта. Узнать его можно так:

> eth.accounts[0]
«0x2b4218cc6d8fd1691395dc5223e201a56bbec512»

Внесение средств в демонстрационной сети Rinkeby не потребует финансовых затрат. Создайте аккаунты в Twitter или Facebook* (если их нет). Перейдите на официальный сайт Rinkeby.

Напишите в посте в соцсети адрес криптосчета, например 0x2b4218cc6d8fd1691395dc5223e201a56bbec512. Потом скопируйте его в раздел Social network URL containing your Ethereum address. Далее в перечне функций выберите Give me Ether и один из предложенных параметров: «принять 3 Ethers раз в 8 часов», «7.5 Ethers ежедневно» или «18.75 Ethers» раз в трое суток. Рекомендуется использовать преимущественно первый вариант.

Дождитесь, когда средства будут перечислены на указанный аккаунт. Стоит учесть, что ими можно пользоваться исключительно в тестовой экосистеме Rinkeby. Если ее сайт не функционирует, можно получить необходимые средства на Chainlink.

Подключите кошелек MetaMask, установленный в браузере, укажите сеть Rinkeby и необходимый аккаунт. Далее введите адрес профиля и нажмите на Send Request. В ближайшее время на аккаунте появится 0.1 эфира. Если этого не хватает, то данную операцию надо повторить.

Убедиться в пополнении счета можно командой:

> web3.fromWei( eth.getBalance(«0xaf3cc1db3ef0dce4c1355e87ce11bb1c68fb0ed4») )
0.1

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

Оценка данных тестовой сети Rinkeby

На сайте Rinkeby представлено много полезной информации о смарт-контрактах и транзакциях. Пользователь сможет узнать, как внести средства на свой тестовый аккаунт и найдет подробную инструкцию по активации узла с помощью софта geth.

Сайт Rinkeby: Ethereum Testnet

Активация узла основной сети в операционных системах Ubuntu и Windows

Чтобы активировать свой узел базовой сети ETH в ОС Ubuntu, следует ввести функцию:

$ geth —datadir=$HOME/.rinkeby —syncmode=light —cache=4096 —http —http.addr «0.0.0.0» —http.api «personal,eth,net,web3»

Изначально узел синхронизируется с основной системой эфира. Остальные параметры указывались выше в статье.

Для запуска своего узла на базе Windows активируйте установщик Geth, скачанный с Go Ethereum, нажав на кнопку Get 1.10.21 for Windows (версии ПО могут отличаться).

Далее нужно запустить скачанный софт с именем типа geth-windows-amd64-1.10.21-67109427.exe в консольном окне Windows и следовать рекомендациям, которые отобразятся на экране.

Чтобы активировать узел, необходимо воспользоваться опцией:

«C:\Program Files\Geth\geth.exe» —datadir=c:\ethereum_data —syncmode=light —cache=4096 —http —http.addr «0.0.0.0» —http.api=»personal,eth,net,web3″

Здесь в параметре —datadir задается путь к папке с файлами. Также потребуется установить доступ к подключенному к ПК диску SSD с достаточным объемом памяти.

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

«C:\Program Files\Geth\geth.exe» attach \\.\pipe\geth.ipc

Теперь появится возможность использования команд eth.syncing, eth.blockNumber. При активации базовой сети для внесения средств на счет необходимы уже реальные деньги, а не тестовые активы.

На сайте Etherscan отображается актуальное состояние основной сети Ethereum (рис. 2).

Информация по основной сети Ethereum

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

* — Деятельность корпорации Meta Platforms Inc. и принадлежащих ей социальных сетей Facebook и Instagram запрещена на территории Российской Федерации.
Александр Фролов Автор курса про смарт-контракты Solidity
Комментариев пока нет
Поделитесь своими знаниями с другими пользователями!
Открыть свой блог
Получайте главные новости из мира криптовалюты прямо на почту