Статьи

Используя Puppeth, менеджер Ethereum Private Network

Ранее мы писали о Geth , одном из самых популярных узлов Ethereum.

Скачать экран

Когда вы устанавливаете Geth с помощью вспомогательных инструментов, он поставляется с удобным инструментом под названием Puppeth, который вы можете использовать для поддержки и установки различных вспомогательных инструментов для управления и развертывания вашей приватной цепочки блоков. Puppeth также можно установить независимо, если у вас установлен Go, с помощью следующей команды:

go get github.com/ethereum/go-ethereum/cmd/puppeth 

Давайте посмотрим на инструмент.

Примечание. В этом руководстве вам потребуется две удаленные машины. Неважно, является ли это виртуальной машиной, такой как Homestead Improved, или реальным сервером в вашей сети, или их комбинацией. Мы пройдем процедуру установки с виртуальными машинами в этом руководстве.

Примечание: из-за ошибки в Puppeth этот подход может не работать, если ваши виртуальные машины (см. Ниже) слишком малы. Либо создайте большие виртуальные машины (больше оперативной памяти), либо дождитесь исправления, если это не вариант.

Бутстрапирование

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

Примечание. Это ограничение Puppeth, поскольку с помощью этого инструмента невозможно установить узел уплотнения на одном компьютере.

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

 mkdir my_project; cd my_project git clone https://github.com/swader/homestead_improved hi_puppeth1 git clone https://github.com/swader/homestead_improved hi_puppeth2 

Измените IP-адрес второго клона, перейдя в папку hi_puppeth2 и изменив поле IP address на 192.168.10.11 вместо 192.168.10.10 .

Затем откройте некоторые порты на виртуальных машинах, изменив последний раздел каждого клона Homestead.yaml , например:

  ports: - send: 8545 to: 8545 - send: 30301 to: 30301 - send: 30302 to: 30302 - send: 30303 to: 30303 - send: 30304 to: 30304 - send: 30305 to: 30305 - send: 30306 to: 30306 

Не забудьте также добавить эти виртуальные хосты в файл /etc/hosts вашего хоста. В противном случае виртуальные машины не будут доступны по имени домена!

 192.168.10.10 homestead.test 192.168.10.11 puppethnode.test 

Примечание. Измените IP-адреса, если адреса ваших виртуальных машин отличаются.

Наконец, беги vagrant up; vagrant ssh vagrant up; vagrant ssh для загрузки каждой машины и SSH в нее. Не забудьте запустить это из двух отдельных вкладок, чтобы вы могли держать обе машины открытыми и работающими.

Предпосылки

Теперь давайте установим необходимое программное обеспечение на каждую машину .

Puppeth запускает вспомогательные приложения и узлы Ethereum для вас в контейнерах Docker, поэтому нам нужен Docker. Также полезно установить сам Geth.

 sudo add-apt-repository -y ppa:ethereum/ethereum sudo apt-get update sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ software-properties-common \ ethereum \ docker.io \ docker-compose 

Все остальные предварительные условия будут загружены Puppeth через сам Docker, но мы должны убедиться, что текущему пользователю разрешено сначала выполнять команды Docker:

 sudo usermod -a -G docker $USER 

На хост-машине (вне виртуальных машин) мы должны создать новые учетные записи Ethereum в папке, где мы запускаем наш проект.

Если вы используете виртуальные машины, как предложено выше, это может быть в myproject если myproject является родительской папкой, содержащей hi_puppeth1 и hi_puppeth2 .

 mkdir node1 node2 geth --datadir node1 account new geth --datadir node2 account new 

Запишите адреса, сгенерированные этим процессом:

 $ mkdir node1 node2 $ geth --datadir node1 account new INFO [05-20|10:27:20] 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: {aba88be2dc16eaed464e3991eed5a1eaa5e7b11b} $ geth --datadir node2 account new INFO [05-20|10:27:35] 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: {655a6ea9950cdf9f8a8175fda639555f17277bdf} 

Нам нужны две учетные записи, поскольку в блокчейне Proof of Authority требуется как минимум два подписывающих лица (подробнее об этом позже).

Puppeth

Теперь, когда наши виртуальные машины работают и наши учетные записи инициализированы, давайте посмотрим, что предлагает Puppeth. Когда удаленные серверы / виртуальные машины все еще работают, в новой вкладке на хост-компьютере запустите Puppeth with puppeth .

Первое, что он попросит, это имя сети. Это полезно для идентификации различных цепочек блоков, если вы используете несколько на своей локальной машине. Мы будем использовать «puptest» здесь.

 Please specify a network name to administer (no spaces or hyphens, please) > puptest Sweet, you can set this via --network=puptest next time! INFO [05-20|10:32:15] Administering Ethereum network name=puptest WARN [05-20|10:32:15] No previous configurations found path=/Users/swader/.puppeth/puptest 

Теперь давайте подключимся к нашим «удаленным» серверам, чтобы Puppeth включил их в список и мог выполнять над ними операции.

Отслеживать новый удаленный сервер

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

 Please enter remote server's address: > [email protected] What's the decryption password for /Users/swader/.ssh/id_rsa? (won't be echoed) > The authenticity of host '192.168.10.10:22 (192.168.10.10:22)' can't be established. SSH key fingerprint is 38:53:d3:c2:85:cf:77:54:a5:54:26:3b:93:5b:6f:09 [MD5] Are you sure you want to continue connecting (yes/no)? yes What's the login password for vagrant at 192.168.10.10:22? (won't be echoed) > INFO [05-20|10:39:53] Starting remote server health-check server=[email protected] +-----------------------+---------------+---------+--------+-------+ | SERVER | ADDRESS | SERVICE | CONFIG | VALUE | +-----------------------+---------------+---------+--------+-------+ | [email protected] | 192.168.10.10 | | | | +-----------------------+---------------+---------+--------+-------+ 

Puppeth запросит пароль вашего SSH-ключа на случай, если SSH используется для подключения к серверу. Если нет, он запросит пароль SSH (как в примере выше). Пароль SSH по умолчанию для пользователя vagrant на рассматриваемой виртуальной vagrant .

Выходные данные в конце отражают состояние «работоспособности» удаленного сервера. Поскольку у него нет запущенных сервисов, он просто перечислит IP. Вы можете увидеть тот же результат, выбрав опцию 1: Show network stats .

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

Новое Бытие

Чтобы запустить нашу цепочку блоков, мы должны настроить новый файл genesis. Файл генезиса — это файл, из которого построен первый (генезисный) блок и на котором растет каждый последующий блок.

Выберите опцию 2, « Configure new genesis и заполните параметры следующим образом:

 Which consensus engine to use? (default = clique) 1. Ethash - proof-of-work 2. Clique - proof-of-authority > 2 How many seconds should blocks take? (default = 15) > 10 Which accounts are allowed to seal? (mandatory at least one) > 0xaba88be2dc16eaed464e3991eed5a1eaa5e7b11b > 0x655a6ea9950cdf9f8a8175fda639555f17277bdf > 0x Which accounts should be pre-funded? (advisable at least one) > 0x655a6ea9950cdf9f8a8175fda639555f17277bdf > 0xaba88be2dc16eaed464e3991eed5a1eaa5e7b11b > 0x Specify your chain/network ID if you want an explicit one (default = random) > INFO [05-20|11:25:55] Configured new genesis block 

Вы можете узнать о разнице между PoW и PoA здесь . PoW тратит много вычислительной мощности и нецелесообразно запускать на локальной машине, поэтому мы выберем PoA здесь. Мы сокращаем время блокировки до 10 секунд, чтобы наши транзакции быстрее подтверждали, и добавляем адреса, которые мы сгенерировали ранее, в качестве разрешенных уплотнителей и в качестве предварительно финансируемых. Быть охотниками на тюленей означает, что им разрешено создавать новые блоки. Поскольку в PoA нет вознаграждений за майнинг, мы также предварительно финансируем их почти бесконечным эфиром, чтобы мы могли проверять наши транзакции с этими счетами.

Файл genesis теперь создан, и для целей резервного копирования вы можете экспортировать его во внешний файл, если хотите, выбрав опцию 2 снова. Это не обязательно сейчас.

Теперь давайте развернем некоторые компоненты блокчейна!

Развертывание сетевых компонентов

Puppeth развертывает эти компоненты в отдельных док-контейнерах с помощью инструмента docker-compose . Докер как инструмент выходит за рамки этого поста, но вам не нужно быть знакомым с ним, чтобы использовать его в любом случае. Давайте начнем с первого компонента, Ethstats.

Ethstats

Установка Ethstats устанавливает и запускает локальную версию сайта ethstats.net . Выберите первый вариант.

 Which server do you want to interact with? 1. [email protected] 2. Connect another server > 1 Which port should ethstats listen on? (default = 80) > 8081 Allow sharing the port with other services (y/n)? (default = yes) > INFO [05-20|11:43:32] Deploying nginx reverse-proxy server=192.168.10.10 port=8081 Building nginx Step 1/1 : FROM jwilder/nginx-proxy ---> e143a63bea4b Successfully built e143a63bea4b Recreating puptest_nginx_1 Proxy deployed, which domain to assign? (default = 192.168.10.10) > homestead.test What should be the secret password for the API? (must not be empty) > internet2 Found orphan containers (puptest_nginx_1) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up. Building ethstats Step 1/2 : FROM puppeth/ethstats:latest 

Выбираем первый ранее добавленный сервер. Затем мы добавляем порт для развертывания этого программного обеспечения и затем называем домен, через который мы получим доступ к приложению. Наконец, мы генерируем простой «секрет» для доступа к API приложения. Затем Docker берет на себя и создает программное обеспечение для нас.

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

 INFO [05-20|11:44:23] Starting remote server health-check server=[email protected] +-----------------------+---------------+----------+-----------------------+----------------+ | SERVER | ADDRESS | SERVICE | CONFIG | VALUE | +-----------------------+---------------+----------+-----------------------+----------------+ | [email protected] | 192.168.10.10 | ethstats | Banned addresses | [] | | | | | Login secret | internet2 | | | | | Website address | homestead.test | | | | | Website listener port | 8081 | | | | | --------------------- | -------------- | | | | nginx | Shared listener port | 8081 | +-----------------------+---------------+----------+-----------------------+----------------+ 

При посещении URL homestead.test:8081 в браузере должен появиться экран, подобный следующему:

Этстаты местные

Это приложение в настоящее время бесполезно: нам нужно развернуть хотя бы один узел для этого приложения, чтобы начать что-то показывать!

Bootnode

Давайте развернем загрузочный узел.

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

Выберите вариант 2 для развертывания загрузочного узла. Опять же, разверните на том же удаленном сервере и выберите некоторые значения по умолчанию, а затем присвойте узлу имя для таблицы «Статистика состояния»:

 Which server do you want to interact with? 1. [email protected] 2. [email protected] 3. Connect another server > 1 Where should data be stored on the remote machine? > /home/vagrant/mychain Which TCP/UDP port to listen on? (default = 30303) > How many peers to allow connecting? (default = 512) > How many light peers to allow connecting? (default = 256) > What should the node be called on the stats page? > booty 

Docker создаст узел и запустит его. Расположение для хранения данных на удаленном компьютере является произвольным. Мы выбрали домашний каталог vagrant пользователя.

Если вы ethstats страницу ethstats сейчас ( homestead.test:8081 ), вы заметите, что booty находится в списке узлов!

Добыча в списке

Примечание: если это не так, и ваш загрузочный узел указан в списке проверки работоспособности как автономный, перезагрузите удаленный сервер (с виртуальной машиной, это перезагруженная vagrant reload ) и затем проверьте снова .

Sealnode

Узел печати — это узел, который может служить майнером новых блоков. Давайте развернем это следующее:

 Which server do you want to interact with? 1. [email protected] 2. [email protected] 3. Connect another server > 1 Where should data be stored on the remote machine? > /home/vagrant/mychainsealer Which TCP/UDP port to listen on? (default = 30303) > 30301 How many peers to allow connecting? (default = 50) > How many light peers to allow connecting? (default = 0) > What should the node be called on the stats page? > sealer Please paste the signer's key JSON: > {"address":"655a6ea9950cdf9f8a8175fda639555f17277bdf","crypto":{"cipher":"aes-128-ctr","ciphertext":"9278db9216e3c58380864bb53edcec245c5bc919a51733333410fe4b22818914","cipherparams":{"iv":"ca6579d08e97c25f46e127e026bafadb"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"93e5f080d76e50c0e08add15d3fdd9b143295d0ccaeec9dae89446e0478ba4a1"},"mac":"28fcdaaf6008d82a0fe22ac60de3398f12a47e471a21618b2333fe15d8d6c9c3"},"id":"20ae40fe-ebf9-4047-8203-711bf67213e9","version":3} What's the unlock password for the account? (won't be echoed) > What gas limit should empty blocks target (MGas)? (default = 4.700) > What gas price should the signer require (GWei)? (default = 18.000) > 

Все значения по умолчанию, кроме местоположения для хранения данных и имени узла. Для JSON извлеките содержимое из файла, который мы создали ранее при создании новых учетных записей Ethereum. Это будет в my_project/node1/keystore . Полное содержимое этого файла должно быть вставлено сюда, и Puppeth попросит пароль для разблокировки этого кошелька. Все остальное с тех пор снова автоматически.

Экран состояния должен показать, что узел работает, и он должен появиться на экране Ethstats под именем, которое вы ему дали.

Sealer был добавлен

Затем повторите процесс для другой машины (той, которая имеет IP-адрес 192.168.10.11 ). Дайте этому узлу другое имя и используйте другой файл хранилища ключей. Другими словами, установите другую учетную запись, которую мы создали в качестве уплотнителя в этом узле.

Ваши узлы теперь будут работать и майнить вместе. Вы должны увидеть некоторый прогресс на экране Ethstats, который вы развернули на предыдущем шаге.

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

Кошелек

Чтобы иметь возможность легко отправлять Ether и пользовательские токены, вы можете развернуть собственную версию MyEtherWallet с помощью Puppeth.

Выберите Кошелек в списке компонентов для развертывания и заполните параметры следующим образом:

 Which port should the wallet listen on? (default = 80) > 8083 Allow sharing the port with other services (y/n)? (default = yes) > no Where should data be stored on the remote machine? > /home/vagrant/wallet Which TCP/UDP port should the backing node listen on? (default = 30303) > 30304 Which port should the backing RPC API listen on? (default = 8545) > What should the wallet be called on the stats page? > wallet 

Кошелек должен быть доступен и автоматически подключен к вашей тестовой сети.

связано

Вы можете открыть кошелек, выбрав файл JSON в качестве средства его разблокировки и указав один из файлов JSON, сгенерированных нами ранее в my_project/nodeX/keystore . Затем введите пароль, и у вас будет триллионы эфира для отправки. Вы можете использовать эту локальную версию кошелька для создания учетных записей в вашей личной цепочке блоков и тщательного тестирования всего. Давай и отправь эфир!

кран

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

 Which port should the faucet listen on? (default = 80) > 8084 Allow sharing the port with other services (y/n)? (default = yes) > no How many Ethers to release per request? (default = 1) > How many minutes to enforce between requests? (default = 1440) > 1 How many funding tiers to feature (x2.5 amounts, x3 timeout)? (default = 3) > Enable reCaptcha protection against robots (y/n)? (default = no) > WARN [05-20|12:51:13] Users will be able to requests funds via automated scripts Where should data be stored on the remote machine? > /home/vagrant/faucet Which TCP/UDP port should the light client listen on? (default = 30303) > 30305 What should the node be called on the stats page? > faucet Please paste the faucet's funding account key JSON: > {"address":"655a6ea9950cdf9f8a8175fda639555f17277bdf","crypto":{"cipher":"aes-128-ctr","ciphertext":"9278db9216e3c58380864bb53edcec245c5bc919a51733333410fe4b22818914","cipherparams":{"iv":"ca6579d08e97c25f46e127e026bafadb"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"93e5f080d76e50c0e08add15d3fdd9b143295d0ccaeec9dae89446e0478ba4a1"},"mac":"28fcdaaf6008d82a0fe22ac60de3398f12a47e471a21618b2333fe15d8d6c9c3"},"id":"20ae40fe-ebf9-4047-8203-711bf67213e9","version":3} What's the unlock password for the account? (won't be echoed) > Permit non-authenticated funding requests (y/n)? (default = false) > y 

После того, как все эти службы будут добавлены, вы сможете увидеть их в списке Ethstats.

Все услуги перечислены

Приборная доска

Наконец, Puppeth предлагает «Dashboard», веб-интерфейс, который объединяет все интерфейсы, которые мы запустили до сих пор. Процесс развертывания одинаково прост: просто следуйте инструкциям и, когда вас спросят о связывании с существующими компонентами, выберите те, которые мы уже загрузили. Конечный результат должен выглядеть примерно так:

Приборная доска

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

Вывод

Теперь вы можете легко приступить к разработке интеллектуальных контрактов и развернуть их в своей тестовой цепочке блоков с помощью локальной версии MyEtherWallet, интеграции Remix в MetaMask или любой другой комбинации .

Puppeth — это универсальный магазин инструментов управления сервисами блокчейна. Это очень удобно, когда вы часто занимаетесь разработкой блокчейнов, но может быть сложно обернуть голову. Надеемся, что это руководство помогло вам понять, что оно делает и как оно делает, и поможет вам в будущих начинаниях блокчейна.

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

Любые вопросы? Пинг автора в твиттере !