Всего за 349 руб. Купить полную версию
go install -v ./cmd/geth
go install -v ./cmd/swarm
Если при компиляции появились ошибки, попробуйте установить Go другой версии. Перед этим удалите все каталоги, созданные в процессе предыдущей установки.
Если же все хорошо, то осталось только проверить версию установленной Geth и Swarm:
$ geth version
Geth
Version: 1.9.0-unstable
Architecture: amd64
Protocol Versions: [63 62]
Network Id: 1
Go Version: go1.12.1
Operating System: linux
GOPATH=/home/book/go
GOROOT=/usr/local/go
$ swarm version
Swarm
Version: 0.3.12-unstable
Go Version: go1.12.1
OS: linux
Как видите, были установлены нестабильные версии Geth и Swarm. С помощью whereis вы можете определить, в какой каталог была выполнена установка:
$ whereis geth
geth: /home/book/go/bin/geth
Чтобы установить стабильную версию, загрузите ее бинарный код с сайта https://geth.ethereum.org/downloads/. Затем извлеките из архива программу geth и скопируйте в отдельный каталог.
Актуальную инструкцию по установке Geth и Swarm можно найти по адресу https://media.readthedocs.org/pdf/swarm-guide/latest/swarm-guide.pdf.
Создаем приватный блокчейн
Готовим файл genesis.json
Листинг 2.1. Файл genesis.json
{
"config": {
"chainId": 1999,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"difficulty": "10",
"gasLimit": "5100000",
"alloc": {}
}
Этот файл описывает первичный блок (genesis block) цепочки блоков самый первый блок блокчейна. Так как мы создаем наш приватный блокчейн, то и о первом блоке мы должны позаботиться сами.
Хорошее описание первичного блока сети Ethereum можно найти, например, здесь: https://arvanaghi.com/blog/explaining-the-genesis-block-in-ethereum/.
Блок config файла genesis.json содержит переменные конфигурации сети Ethereum.
Поле chainId содержит идентификатор блокчейна. Он используется для защиты от репликации, т.е. от неавторизованных действий пользователей, пытающихся действовать от имени настоящего отправителя данных.
Если речь идет о главной сети Ethereum, то ее идентификатор равен 1. Идентификатор тестовой сети Rinkeby равен 4. При создании нашей приватной сети мы можем указать любое значение, отличное от известных. Мы выбрали значение 1999.
Значение 0 в поле homesteadBlock указывает на то, что мы будем использовать релиз сети Ethereum под названием Homestead. Homestead представляет собой второй релиз сети Ethereum (первый релиз назывался Frontier). Нулевое значение этого параметра используется и в основной сети Ethereum.
Немного о параметрах с префиксом EIP. При реализации Homestead был обновлен протокол, причем без обратной совместимости с предыдущим релизом Ethereum. Соответствующие изменения отражены в документах «Предложения по улучшению Ethereum» (Ethereum Improvement Proposals, EIPs), опубликованных на сайте https://eips.ethereum.org/.
Реализация изменений может потребовать выполнения так называемой процедуры хардфорка (hard-forking), или обновления ПО узлов. В результате этой процедуры может меняться структура блока, появляется возможность использовать ранее недоступные блоки и вносить различные изменения в протокол.
Так как мы не будем делать хардфорк, то установим значения соответствующих параметров eip155Block и eip158Block равными нулю.
Параметр difficulty важен для нас в практическом смысле. Этот параметр имеет прямое влияние на время генерации новых блоков блокчейна. Для нашего «учебного» блокчейна мы установим очень маленькое значение этого параметра, равное 10, чтобы скорость добавления новых блоков была приемлемой даже на виртуальных серверах небольшой производительности.
С помощью параметра gasLimit мы задаем в рамках блокчейна предел
расхода так называемого газа (Gas). Газ Ethereum представляет собой расходный ресурс, который тратится на выполнение таких операций, как отправка транзакций, публикация и выполнение контрактов и т.п. Далее мы расскажем об этом подробнее. В нашей приватной тестовой сети мы устанавливаем достаточно большое значение, чтобы не возникали ограничения при запуске тестовых программ.
Параметр alloc позволяет при инициализации блокчейна создать кошельки и заранее наполнить их тестовым эфиром. В первых примерах мы не будем использовать эту возможность.
Создаем каталог для работы
$ mkdir node1
В этом каталоге будут располагаться данные блокчейна.
Создаем аккаунт
$ geth datadir node1 account new
При создании аккаунта будет запрошен пароль, который нужно сохранить в безопасном месте:
INFO [02-13|08:42:28.798] 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: { 4f744742ac711fd111c7a983176db1d48d29f413 }
Команда account new выведет на консоль в фигурных скобках так называемый адрес узла. В нашем случае это адрес 4f744742ac711fd111c7a983176db1d48d29f413. Мы будем указывать его в различных командах.
Параметр datadir команды geth указывает путь к рабочему каталогу. Мы используем каталог /home/book/node1.
Запускаем инициализацию узла
$ geth datadir node1 init genesis.json