Добро пожаловать в первую статью нашей новой серии go-ethereum!

В следующие 10 минут вы:

  • Изучите первый глоссарий блокчейнов без каких-либо необходимых предварительных знаний об экосистеме
  • Настройте полностью синхронизированный узел тестирования («клиент / сервер») за менее 10 минут
  • Создайте учетную запись и получите транзакцию на сумму 8ETH от фонда Ethereum БЕСПЛАТНО.

Наш девиз - практика, а не теория, поэтому давайте сразу приступим к установке полностью синхронизированного узла тестирования Ethereum, подключенного к тестовой сети Rinkeby!

Гет

Geth - это интерфейс командной строки (CLI), скомпилированный двоичный файл, программа и клиент для запуска полного узла Ethereum, реализованного в Go.

Мы будем использовать Geth, чтобы:

  • запустить полностью синхронизированный узел Ethereum для подключения к тестовой сети под названием Rinkeby
  • создать новую учетную запись, чтобы иметь возможность отправлять и получать транзакции
  • для чтения состояния EVM, например проверка баланса любого счета (хотите знать, сколько у вашей девушки, парня, жены, соседа? Милая прозрачность!)

Установка Geth

Мы можем установить его прямо из репозиториев:

Mac

brew tap ethereum/ethereum
brew install ethereum

Linux

sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum

Windows

Good luck :)

Проверьте установку:

which geth
> /usr/local/bin/geth
geth version
> Geth
> Version: 1.8.20-stable

Убедитесь, что вы используете ту же версию, чтобы иметь возможность выполнить полную синхронизацию сети Rinkeby, как описано в следующих шагах, поскольку Rinkeby выполнил хардфорк constantinople, поддерживаемый Geth 1.8.20. Этот подробный пост в блоге объясняет более подробную информацию, если вы заинтригованы!

Запуск узла блокчейна

Что ж, дьявол кроется в деталях ... но начать работу на самом деле просто. Престижность разработчикам Ethereum.

Давайте настроим новый полностью синхронизированный узел Rinkeby (тестовая сеть Ethereum с использованием протокола Clique PoA) .

Реализация Rinkeby PoA намного быстрее, но значительно менее безопасна. Он более централизован по сравнению с консенсусом основной сети PoW, который отлично подходит для тестовой сети. Ринкеби удается утверждать новый блок с кучей транзакций каждые 15 секунд.

Хорошо, хорошо, хорошо ... Что на самом деле означают эти слова?

  • Rinkeby: название тестовой сети Proof of Authority.
  • Узел: в основном традиционный сервер, на котором выполняется клиент / сервер Ethereum.
  • Консенсус: алгоритм, определяющий, как транзакции будут проверяться, добавляться и сохраняться в базе данных на каждом узле.
  • Блок: набор транзакций в сложном массиве, отправляемых по сети между всеми узлами сети каждые 15 секунд.
  • Транзакция: не думайте о банковской транзакции. Транзакция блокчейна - это изменение состояния. Переименовать владельца смарт-контракта с Алисы на Боба? Изменить баланс вашего аккаунта с 1ETH на 5ETH? Установка значения переменной «foo» на «foo_value_123» в вашем смарт-контракте? Это сделка.

Вы можете прочитать больше о предложении Rinkeby PoA здесь: https://github.com/ethereum/EIPs/issues/225

geth --rinkeby --datadir=~/.gophersland_ethereum_r1 --port=30304 --cache=2048 --rpc --rpcport=8546 --rpcapi=eth,web3,net,personal --syncmode=fast

Приведенная выше команда:

  • инициализировать новый каталог, в котором все данные будут храниться в ~/.gophersland_ethereum_r1. Каталог по умолчанию: ~/.ethereum
  • начать загрузку истории Ethereum, необходимой для того, чтобы стать новым полностью действующим синхронизированным узлом сети
  • связь будет происходить через порт 30304
  • cache, своего рода буфер, будет установлен на 2 ГБ для ускорения процесса синхронизации
  • будет запущен дополнительный RPC API, чтобы мы могли общаться с нашим узлом через консоли, красивый графический интерфейс через порт 8546, позже

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

Текущий номер блока по состоянию на 24 сентября: 3039786. На моем AMD Ryzen 5 2600, 3,4 ГГц процесс синхронизации занял 3 часа. Ах да, у меня новый игровой ПК!

А пока вы можете подписаться на GophersLand в Твиттере или приготовить ужин, возможно, и завтрак, пойти в тренажерный зал… скажем так, блокчейн - не самая быстрая база данных :)

В конечном итоге напечатанное сообщение будет:

  • ИНФОРМАЦИЯ [‹time›] Количество импортированных новых сегментов сети = 1
  • ИНФОРМАЦИЯ [‹time›] Количество импортированных новых сегментов сети = 1
  • ИНФОРМАЦИЯ [‹time›] Количество импортированных новых сегментов сети = 1
  • ИНФОРМАЦИЯ [‹time›] Количество импортированных новых сегментов сети = 1

Поздравляем, вы стали частью революции блокчейнов менее чем за 10 минут !!!

Создание вашей первой учетной записи на блокчейне

Хранилище ключей

Все учетные записи Ethereum и их ключи хранятся в каталоге, который называется «хранилище ключей». По умолчанию каталог пуст, так как мы еще не создали свою учетную запись!

enchanter@lukas-gaming:~$ ls -la ~/.gophersland_ethereum_r1/
drwx------  4 enchanter enchanter 4096 sep 24 15:26 .
drwxr-xr-x 18 enchanter enchanter 4096 sep 24 11:51 ..
drwx------  4 enchanter enchanter 4096 sep 24 15:26 geth
srw-------  1 enchanter enchanter    0 sep 24 15:26 geth.ipc
drwx------  2 enchanter enchanter 4096 sep 23 09:54 keystore
enchanter@lukas-gaming:~$ ls -la ~/.gophersland_ethereum_r1/keystore/
drwx------ 2 enchanter enchanter 4096 sep 23 09:54 .
drwx------ 4 enchanter enchanter 4096 sep 24 15:26 ..

Счет

Чтобы создать новую учетную запись, выполните следующую уже знакомую команду geth cmd.

geth --datadir=~/.gophersland_ethereum_r1 account new

Вам будет предложено ввести парольную фразу (это ваш СУПЕР СЕКРЕТНЫЙ ПАРОЛЬ). Это необходимо для расшифровки вашего недавно созданного закрытого ключа, связанного с вашим новым адресом Ethereum, поскольку он позволяет вам использовать его позже для подписания транзакций в цепочке блоков. Запишите его где-нибудь, так как он нам понадобится позже. Но не волнуйтесь, если вы это забудете, это все равно тестовая сеть.

enchanter@lukas-gaming:~$ ls -la ~/.gophersland_ethereum_r1/keystore/
drwx------ 2 enchanter enchanter 4096 sep 23 09:54 .
drwx------ 4 enchanter enchanter 4096 sep 24 15:26 ..
enchanter@lukas-gaming:~$ geth --datadir=~/.gophersland_ethereum_r1 account new
INFO [09-24|15:36:33.566] 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: {ceee57f2b700c2f37d1476a7974965e149fce2d4}
enchanter@lukas-gaming:~$ ls -la ~/.gophersland_ethereum_r1/keystore/
drwx------ 2 enchanter enchanter 4096 sep 24 15:36 .
drwx------ 4 enchanter enchanter 4096 sep 24 15:26 ..
-rw------- 1 enchanter enchanter  491 sep 24 15:36 
UTC--2018-09-24T13-36-43.069452577Z--ceee57f2b700c2f37d1476a7974965e149fce2d4

Уууу! Мой новый адрес Ethereum активен: ceee57f2b700c2f37d1476a7974965e149fce2d4.

Обычно вы встретите этот адрес с префиксом «0x», чтобы указать кодировку адреса, HEX.

Самый новый формат ключевых файлов: UTC--<created_at UTC ISO8601>-<your address in hex encoding>. Порядок учетных записей при перечислении является лексикографическим, но, как следствие формата временной шкалы, на самом деле он находится в порядке создания.

Если вам интересно, что находится внутри файла, не стесняйтесь открывать его! Ты увидишь:

  • Адрес: ваш новый шестнадцатеричный адрес.
  • Крипто: набор математических переменных, отвечающих за представление вашего закрытого ключа в зашифрованном виде, пока не беспокойтесь об этой магии.

Интересное примечание: создание учетной записи происходит в автономном режиме и не требует синхронизированного узла цепочки блоков. Интересно, как с технической точки зрения можно сгенерировать уникальный адрес в автономном режиме? Сам исходный код go-ethereum мы рассмотрим в следующей статье.

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

Хорошо, у меня новый блестящий аккаунт Ethereum, каков мой баланс и как мне внести тестовый Ether?

Кстати об эфире… что это на самом деле?

Эфир

Эфир - это криптовалюта, питающая сеть Ethereum. Он используется в качестве единицы стоимости и для оплаты майнерам за проверку, добавление и сохранение транзакций в коллективной БД. Но в основном это метод предотвращения спама, потому что майнеры получают 5 (с прошлого месяца «всего» 3) ETH за каждый успешно добытый блок. Да, это 600 долларов по текущей цене 24 сентября каждые 15 шек. Неплохой бизнес.

Как получить транзакцию 8ETH от фонда Ethereum БЕСПЛАТНО

Проверка баланса счета

Давайте сначала удостоверимся, что баланс нашего аккаунта равен 0, если кому-то уже не удалось отправить немного Эфира по доброте души.

Geth предоставляет консоль JavaScript, которую можно присоединить к исполняемому двоичному файлу для удобного взаимодействия с цепочкой блоков. Мы можем подключиться к нему, указав файл сокета, который открывается после загрузки Geth. Файлы сокетов очень полезны для «межпроцессного взаимодействия на одном компьютере», также известного как IPC.

Вы можете найти этот файл в каталоге данных по умолчанию во время работы программы Geth:

enchanter@lukas-gaming:~$ ls -la ~/.gophersland_ethereum_r1/
drwx------  4 enchanter enchanter 4096 Sep 24 15:44 .
drwxr-xr-x 18 enchanter enchanter 4096 Sep 24 15:47 ..
drwx------  4 enchanter enchanter 4096 Sep 24 15:44 geth
srw-------  1 enchanter enchanter    0 Sep 24 15:44 geth.ipc
drwx------  2 enchanter enchanter 4096 Sep 24 15:47 keystore

Давайте взаимодействуем с сетью Rinkeby с помощью команды «geth attach» в другом терминале, пока ваш узел блокчейна все еще работает. Обязательно укажите абсолютный путь к файлу IPC, иначе вы получите сообщение об ошибке.

enchanter@lukas-gaming:~$ geth attach ipc:/home/enchanter/.gophersland_ethereum_r1/geth.ipc
Welcome to the Geth JavaScript console!
instance: Geth/v1.8.15-stable-89451f7c/linux-amd64/go1.10.1
coinbase: 0xceee57f2b700c2f37d1476a7974965e149fce2d4
at block: 3044891 (Mon, 24 Sep 2018 16:42:36 CEST)
datadir: /home/enchanter/.gophersland_ethereum_r1
modules: admin:1.0 clique:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0
> eth.accounts
["0xceee57f2b700c2f37d1476a7974965e149fce2d4"]
> eth.syncing
false
> eth.getBalance("0xceee57f2b700c2f37d1476a7974965e149fce2d4")
0

Блокчейн запросов:

eth.accounts: для проверки доступных в настоящее время учетных записей.

eth.syncing: чтобы убедиться, что наше состояние, БД полностью обновлено с остальной частью сети, чтобы гарантировать, что ответ getBalance будет основан на последнем состоянии.

eth.getBalance («‹ ваш адрес ›»): для запроса БД.

Получение транзакции 8ETH от фонда Ethereum БЕСПЛАТНО

У фонда Ethereum есть очень удобная программа под названием «Faucet», доступная в Интернете для назначения эфира учетным записям, запрашивающим его в режиме реального времени.

Запрос эфира:

  1. Опубликуйте адрес своей учетной записи в одной из общедоступных социальных сетей.
  2. Например, разместите твит, содержащий ваш адрес Ethereum, в любом месте твита, например, https://twitter.com/EnchanterIO/status/1044238559224483841, убедитесь, что вы пометили @BlocksByLukas и @freeCodeCamp, и сообщите нам, если вам нравится учебник!
  3. Откройте https://www.rinkeby.io/#faucet и вставьте URL-адрес твита.
  4. Нажмите «Дайте мне эфир», выберите 3, 7,5 или 18,75 эфира.
  5. Подождите несколько секунд
  6. Запросите баланс своего аккаунта еще раз

Вуаля

Вы богаты… в тестовой сети.

НО, продолжайте изучать экосистему блокчейн.

Вы хотите знать, как блокчейн работает за кулисами? Какие компоненты нужны? Как запрограммировать основные функции блокчейна?

Создайте блокчейн с нуля с помощью Go!

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

Https://www.freecodecamp.org/news/build-a-blockchain-in-golang-from-scratch/