- Я разделю процесс на 10 шагов :-.
- 1. Установите geth
- 2. Настройте блок Genesis
- 3. Создание локальных узлов
- 4. Создайте начальные счета
- 5. Инициализация и запуск узлов
- 6. Подключение к каждому узлу из командной строки
- 7. Соедините узлы
- 8. Отправьте немного эфира
- 9. Запуск майнера
- 10. Развертывание смарт-контракта
Я разделю процесс на 10 шагов :-.
- Установить geth
- Настроить блок Genesis
- Создать локальные узлы
- Сгенерировать начальные аккаунты
- Инициализация и запуск узлов
- Подключение к каждому узлу из командной строки
- Соедините узлы
- Отправить несколько Эфиров
- Запустить майнер
- Развернуть смарт-контракт
приступим…!
1. Установите geth
geth — это интерфейс командной строки для запуска полного узла Ethereum, реализованный на языке Go. Чтобы установить его на Mac, выполните следующие команды:
$ sudo add-apt-repository -y ppa:ethereum/ethereum
$ sudo apt-get update
$ sudo apt-get install ethereum
2. Настройте блок Genesis
Далее нам нужно создать JSON-файл, который определит, как будет создан первый блок блокчейна. Каждый узел в сети должен быть инициализирован одним и тем же блоком Genesis.
Создайте файл с именем genesis.json и сохраните его в родительской папке каталога узлов. Скопируйте содержимое ниже, но замените адреса на адреса учетных записей, созданных в 3-м шаге.
{
"nonce": "0x0000000000000042",
"timestamp": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x00",
"gasLimit": "0x8000000",
"difficulty": "0x400",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x3333333333333333333333333333333333333333",
"alloc": {
"0x15024A50E641Ad330e0096bDca8Ea06f9f972Dcd": { //acc1 add it can be diff in ur case
"balance": "1000000000000000000"
},
"0xE3F2Defe3e3DDB4694a985bA6AA052Ad888BCF3D": { //acc2 add it can be diff in ur case
"balance": "2000000000000000000"
}
},
"config": {
"chainId": 111,
"homesteadBlock": 0,
"eip155Block": 0,
"eip150Block": 0,
"eip158Block": 0
}
}
Раздел config обеспечивает немедленный доступ к определенным обновлениям протокола. В разделе alloc производится предварительное финансирование учетных записей.
3. Создание локальных узлов
Для создания частного блокчейна мы создадим несколько узлов локально на нашей машине.
Создайте 3 новых каталога. Каждая из них будет представлять один узел в блокчейне:
$ mkdir geth
$ cd geth
$ mkdir pvtchain
$ cd pvtchain
$ mkdir node01 node02 node03
4. Создайте начальные счета
Давайте создадим 2 счета Ethereum на первом узле, чтобы позже мы могли провести несколько транзакций для тестирования:
$ geth --datadir "/PATH_TO_NODE01/" account new
Вам будет предложено ввести секретный пароль. Запишите адреса созданных счетов и запомните пароль.
5. Инициализация и запуск узлов
Первым шагом является инициализация каждого узла с помощью ранее созданного файла genesis. Для этого выполните эту команду для каждого из узлов, заменив ее на правильный путь:
$ geth --datadir "/PATH_TO_NODE/" init /PATH_TO/genesis.json
Then start each node by running the following command for each of them. You will need to use different numbers both for the port and the rpcport.
$ geth --identity "node1" --http --http.port "8000" --http.corsdomain "*" --datadir "/home/ubuntu/geth/pvtchain/node1" --port "30303" --nodiscover --http.api "db,eth,net,web3,personal,miner,admin" --networkid 1234 --nat "any" --allow-insecure-unlock
$ geth --identity "node2" --http --http.port "8001" --http.corsdomain "*" --datadir "/home/ubuntu/geth/pvtchain/node2" --port "30304" --nodiscover --http.api "db,eth,net,web3,personal,miner,admin" --networkid 1234 --nat "any" --allow-insecure-unlock
$ geth --identity "node3" --http --http.port "8002" --http.corsdomain "*" --datadir "/home/ubuntu/geth/pvtchain/node3" --port "30305" --nodiscover --http.api "db,eth,net,web3,personal,miner,admin" --networkid 1234 --nat "any" --allow-insecure-unlock
💡 запомните: «/home/ubuntu/geth/pvtchain/node1 — это мой путь к директории узла.
6. Подключение к каждому узлу из командной строки
Для того чтобы взаимодействовать с узлами, необходимо открыть терминал и с помощью geth подключиться к нему. Выполните следующую команду для каждого из узлов в отдельном терминале и используйте правильный номер порта для каждого из них:
$ geth attach <http://127.0.0.1:8000>
$ geth attach <http://127.0.0.1:8001>
$ geth attach <http://127.0.0.1:8002>
7. Соедините узлы
Первый узел будет нашим узлом администратора. Выполните следующую команду в консоли, чтобы узнать некоторые характеристики этого узла:
> admin.nodeInfo
Полностью скопируйте адрес узла enode:
enode: «enode://26f7b83…ed769122f1692e@[::]:30303?discport=0»
Теперь вы можете подключить другие узлы к этому узлу, выполнив следующую команду в соответствующих терминалах:
> admin.addPeer("enode://26f7b8...92e@[::]:30303?discport=0")
Вы можете проверить, что узлы пирингуются, введя следующую команду в терминале, соответствующем узлу администратора:
> net.peerCount
2
8. Отправьте немного эфира
Далее мы выполним транзакцию. Перейдите на консоль, подключенную к первому узлу, и выполните следующую команду, чтобы убедиться, что вы видите созданные ранее учетные записи:
> eth.accounts
Затем проверьте баланс первого счета:
> eth.getBalance(eth.accounts[0])
Теперь разблокируйте первый счет, чтобы начать с него транзакцию:
> personal.unlockAccount(eth.accounts[0])
Теперь отправьте несколько Эфиров:
> eth.sendTransaction({from:eth.accounts[0], to:eth.accounts[1], value:1000})
9. Запуск майнера
Первое, что необходимо сделать, это создать учетную запись для получения вознаграждения за майнинг. Она называется учетной записью etherbase. В качестве майнера мы будем использовать узел администратора. Перейдите в консоль, подключенную к нему, и выполните следующую команду:
> miner.setEtherbase(eth.accounts[0])
Затем выполните следующую команду:
> miner.start()
Вы должны увидеть нулевое сообщение в консоли, а затем в другой консоли, где вы запустили узел, вы должны увидеть прогресс майнинга, который вы только что запустили.
Теперь вы можете проверить баланс счета и убедиться, что перевод был выполнен правильно.
10. Развертывание смарт-контракта
В этом разделе мы создадим и развернем простой смарт-контракт в нашей сети. Для этого мы будем использовать Truffle, который является фреймворком разработки для Ethereum.
Выполните следующую команду для установки библиотеки Truffle:
$ npm install -g truffle
Далее мы инициализируем новый проект Truffle, выполнив эту команду в новой папке:
$ truffle init
Вы заметите, что были созданы некоторые начальные файлы и каталоги. Нам нужно изменить файл truffle-config.js, чтобы Truffle знал, как подключиться к нашей сети. Используйте следующее содержание для этого файла, учитывая, что для номера порта нужно использовать порт, на котором запущен ваш первый узел, а для адреса from нужно заполнить адрес первой учетной записи, созданной в этом узле:
Далее откройте папку contracts и создайте новый файл под названием hello.sol. Дополните его следующим кодом, который представляет собой простой контракт, написанный на языке Solidity:
Следующим шагом будет обновление файла migrations, чтобы Truffle знал, что ему нужно скомпилировать и мигрировать контракт, который мы только что создали. Откройте файл 1_initial_migration.js, расположенный в папке migrations, и измените его содержимое следующим образом:
Теперь мы можем использовать Truffle для компиляции нашего контракта и развертывания его в нашей сети. Обратите внимание, что Truffle также скомпилирует и развернет свой контракт migrations, который используется для отслеживания развернутых версий наших контрактов и их обновления.
Перейдите в папку contracts и выполните следующую команду:
$ truffle compile
Далее нам нужно снова разблокировать учетную запись на первом узле, поскольку мы собираемся развернуть контракт, используя эту учетную запись. Перейдите в терминал, подключенный к этому узлу, и выполните следующую команду:
> personal.unlockAccount(eth.accounts[0])
Наконец, вернитесь в папку contracts и выполните эту команду для развертывания контракта:
$ truffle migrate
Теперь контракт должен быть развернут в вашей сети по новому адресу.
Контракт развернут в нашей сети
Ура!!!
Аксат Бхардвадж,
Энтузиаст блокчейна и разработчик,
Подключайтесь ко мне на LinkedIn: https://www.linkedin.com/in/axatbhardwaj