Как настроить частную сеть/блокчейн Go Ethereum (Geth) и развернуть на ней смарт-контракт (2021)


Я разделю процесс на 10 шагов :-.

  1. Установить geth
  2. Настроить блок Genesis
  3. Создать локальные узлы
  4. Сгенерировать начальные аккаунты
  5. Инициализация и запуск узлов
  6. Подключение к каждому узлу из командной строки
  7. Соедините узлы
  8. Отправить несколько Эфиров
  9. Запустить майнер
  10. Развернуть смарт-контракт

приступим…!

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
Enter fullscreen mode Выйти из полноэкранного режима

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
Enter fullscreen mode Выйти из полноэкранного режима

Вы заметите, что были созданы некоторые начальные файлы и каталоги. Нам нужно изменить файл 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

Оцените статью
Procodings.ru
Добавить комментарий