Настройка и установка облачного узла тестовой сети Libra

В этом руководстве рассматривается настройка и развертывание узла тестовой сети блокчейн-валюты Libra Core с использованием облачных экземпляров Amazon Web Services EC2. Он специально использует Amazon Linux 2 и описывает правила безопасности, зависимости и архитектурные аспекты, необходимые для успешного развертывания кодовой базы Libra. Проблемы решаются по мере их возникновения - например, «Какие порты я должен открывать?» Определенные сбои зависимостей, такие как CMake и zlib, выявляются и устраняются.

Весы: новая мировая валюта

Facebook официально объявил о своем предложении по новой глобальной (крипто) валюте, Libra, 18 июня 2019 года. Естественно, слухи об их усилиях просеивались в сообществе разработчиков криптовалют за несколько месяцев до этого, но фактический выпуск новостей был неожиданностью для одного. серьезная причина: зрелость.

Официальное объявление сопровождалось выпуском нескольких ключевых документов - белой книги, технической статьи о самой криптовалюте Libra и подробной спецификации языка для« Move , лежащего в основе смарт-контракта языка».

Кроме того, развитие бизнеса Libra показывает огромное количество партнерских отношений, ранее невиданных в мире криптовалют. Libra Association состоит из 28 крупнейших игроков финансового мира из самых разных слоев общества.

Это «криптовалюта»?

Нет да.

В первые годы своего существования Libra проектировалась как блокчейн с разрешениями, управляемый набором узлов-валидаторов (из которых в конечном итоге будут участвовать 100 партнеров). Libra - это стиль блокчейна уровня 2, в котором транзакции обрабатываются внутри частной сети, а затем публикуются в распределенной общедоступной цепочке блоков.

Предполагается, что через 5 лет технология будет переведена на распределенный механизм Proof-of-Stake без централизованного владения, таким образом, наконец, станет настоящей криптовалютой.

Другими словами, это что-то вроде «переходной» Ripple с огромными финансовыми ресурсами и социальным проникновением.

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

Итак, давайте настроим наш собственный узел тестовой сети Libra с использованием AWS EC2.

Анализ требований

Facebook уже опубликовал публичный репозиторий GitHub для проекта Libra Core: https://github.com/libra/libra

README.md (на момент написания) не ссылается на какие-либо конкретные архитектурные требования (кроме Linux / macOS), такие как RAM, HDD Storage или ядра процессора. Зависимости также не указаны в явном виде, поэтому мы идем немного вслепую.

Мы будем работать с консервативным предложением экземпляров, t2.medium, чтобы увидеть, насколько хорошо программное обеспечение узлов на основе Rust работает в дешевой среде. Он имеет 2 виртуальных ЦП и 4 ГБ оперативной памяти.

Первоначально я пробовал это с t2.micro, но 1 ГБ ОЗУ было недостаточно и вызывал ошибку сегментации при сборке secret_service. Не хватало и t2.small с 2 ГБ ОЗУ, из-за чего память на libra_node исчерпывалась.

Предоставление инстанса EC2 t2.medium с помощью Amazon Linux 2

В этом руководстве будет продемонстрирована подготовка нового экземпляра EC2 с помощью веб-интерфейса AWS. Это также можно сделать с помощью инструментов командной строки и API.

Делали это раньше? Перейдите к первому сеансу входа в систему по SSH. В противном случае подождите, мы выполним простую настройку и запустим:

0. Нажмите кнопку Запустить экземпляр - кажется очевидным, не так ли?

1. Нажмите кнопку Выбрать для Amazon Linux 2 AMI (HVM).

2. Установите флажок для t2.medium НО НЕ НАЖИМАЙТЕ на «Просмотр и запуск». Вместо этого мы выберем «Далее: настройка сведений об экземпляре».

3. Настройте сведения об экземпляре: вы можете оставить значения по умолчанию, если в вашей учетной записи не настроена собственная подсеть / VPC. Если вы это сделаете, убедитесь, что вы выбрали общедоступный, в противном случае просто придерживайтесь значения по умолчанию.

Кроме того, вы можете предотвратить случайное завершение, включив параметр «Включить защиту от прерывания». Это заставит вас отключить защиту перед завершением работы экземпляра (хотя вы можете остановить его работу в любое время).

Мы также оставим опцию производительности «Burstable». Серия предложений EC2 «t» позволяет использовать дополнительные ресурсы ЦП для компенсации внезапных нагрузок процессора: но мы хотим увидеть, как Libra Core работает на «баребонах».

По завершении нажмите «Далее: добавить хранилище».

4. Параметр SSD по умолчанию на 8 ГБ недостаточен для процесса сборки Libra, поэтому мы собираемся увеличить его с 8 ГБ до 20 ГБ.

Если вы оставите флажок «Удалить при завершении» включенным, то хранилище, связанное с этим экземпляром (выделенное пространство на жестком диске), будет уничтожено, если экземпляр будет завершен. Это зависит от ваших предпочтений - я отключаю его, чтобы сохранить резервную копию состояния жесткого диска для повторного развертывания, если я завершу работу экземпляра (и заплачу минимальную стоимость, чтобы сохранить изображение в хранилище).

Нажмите кнопку «Далее: Добавить теги», чтобы продолжить.

5. Давайте дадим экземпляру имя, чтобы мы могли отличить его от любых других экземпляров, которые могут быть в регионе нашей учетной записи. Щелкните ссылку «щелкните, чтобы добавить тег имени» в центре страницы.

Теги - это просто пары ключ / значение, которые имеют значение только для нас, конечных пользователей развертываний AWS. Они очень полезны с программным обеспечением для автоматического управления или прямой интеграцией API. Тег ключа «Name» красиво пометит наш сервер как «Libra Core Test Node» на дисплеях AWS, поэтому мы добавили его.

Нажмите «Далее: настроить группу безопасности», чтобы продолжить.

6. Настройте группу безопасности. Группы безопасности EC2 представляют собой брандмауэр в стиле «ОТКАЗАТЬ ВСЕ» для всего входящего трафика с внесением в белый список портов и протоколов и связанных с ними диапазонов IP-адресов.

Первое, что нужно сделать, это переименовать «Имя группы безопасности» и «Описание», указав что-нибудь более информативное для того, к чему мы применяем эту группу безопасности. Поскольку мы можем повторно использовать эту группу для других экземпляров, мы хотим, чтобы она была согласованной темой: любые изменения в этой группе будут отражаться для любых экземпляров, назначенных ей.

Я также изменил источник для SSH-соединения по умолчанию с «Везде» на «Мой IP», что автоматически определяет мой IP-адрес. Это предотвратит попытки других подключиться к моему открытому SSH-соединению, и мне нужен хотя бы один открытый порт, чтобы я мог подключиться и настроить сервер после его загрузки. .

Примечание. Мы еще не знаем, какие еще порты нам нужно открыть, и мы узнаем об этом достаточно скоро.

Наконец, мы можем нажать «Просмотреть и запустить».

7. Проверьте запуск экземпляра: просто убедитесь, что все в порядке, и нажмите «Запустить». Но нет, мы еще не закончили, даже если вы это сделаете!

8. Пары ключей. Мы собираемся нажать «Создать новую пару ключей» в раскрывающемся меню и дать ей описательное имя.

Затем нажмите кнопку «Загрузить пару ключей». В результате ваш открытый ключ будет встроен в authorized_keys файл сервера, и вы сможете использовать закрытый ключ для входа через SSH.

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

Наконец, нажмите кнопку «Запустить экземпляр».

Если все пойдет хорошо, новый экземпляр вскоре должен отобразиться как доступный и запущенный в списке экземпляров региона вашего аккаунта:

Вы заметите, что IP-адрес для EC2 был назначен, и в данном случае это: 54.19.185.118.

Дополнительно: эластичный IP-адрес и маршрут53

Я собираюсь назначить экземпляру Эластичный IP-адрес, чтобы он имел постоянный IP-адрес на случай, если сервер выйдет из строя / включится. Когда экземпляр запускается изначально, IP-адрес не является постоянным: любые зависимости, которыми вы делитесь на его основе, могут выйти из строя без предупреждения.

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

Сделать это так же просто, как зайти в раздел «Эластичный IP-адрес» в регионе вашей учетной записи и нажать «Выделить новый адрес», а затем назначить этот эластичный IP-адрес идентификатору экземпляра вашего сервера, например:

Кроме того, чтобы упростить себе задачу и мое кодирование, я назначил субдомен через AWS Route53 этому эластичному IP-адресу, который называется: libra-test.cotten.io

Примечание. Нужна помощь в настройке SSH-соединения с помощью PuTTY или другого SSH-клиента? У Amazon есть полезное руководство: Подключение к вашему экземпляру Linux из Windows с помощью PuTTY

Первоначальная установка и конфигурация сервера

Как только мы войдем в наш экземпляр сервера Amazon Linux 2, мы увидим такой экран:

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

sudo yum update -y сделает свое дело, автоматически применив все обновления.

Наконец, мы готовы приступить к работе с Весами!

Git и клонирование публичного репо

На этом этапе нас больше всего интересует тестирование, а не разветвление и участие в разработке проекта, так что можно сделать клон HTTPS без какой-либо аутентификации учетной записи.

Но, несмотря на то, что AMI Amazon Linux 2 поставляется с множеством инструментов для разработки, нам не хватает копии Git. Мы должны установить его, прежде чем мы сможем даже попытаться клонировать репозиторий Git, например Libra, из GitHub.

sudo yum install git -y

Итак, теперь давайте клонируем реальное репозиторий Libra (мы сделаем это в нашем домашнем каталоге, поэтому sudo не понадобится):

cd ~

git clone https://github.com/libra/libra.git

Теперь, когда у нас есть репозиторий, пора приступить к созданию вещей и подключению к сети.

Установка зависимостей

В документации Libra под названием« Моя первая транзакция » есть руководство для этого. Несмотря на то, что название посвящено транзакциям, этот документ фактически также охватывает процесс сборки, который автоматизирован с помощью сценария оболочки: scripts/dev_setup.sh. Давайте запустим его и посмотрим, сможет ли он самостоятельно установить все необходимые нам зависимости (Rust, Go и т. Д.)!

cd libra

./scripts/dev_setup.sh

Скажите y вместо Да. Строчные. Прописная буква «Y» не работает - она ​​действует так же, как «N» и все, что не является «y».

Начнется процесс установки, и через некоторое время вы получите отчет о работоспособности (поскольку это новый чистый экземпляр, совместимый с требованиями Libra).

Строительство Весов

Скрипт dev_setup.sh установил несколько ключевых зависимостей:

  • Ржавчина
  • Go
  • протокол
  • CMake

А, CMake, может, нам понадобится C / C ++? Amazon Linux 2 уже поставляется с gcc для компиляции программ на языке Си. Нам просто нужно установить поддержку C ++.

sudo yum install gcc-c++ -y

Теперь давайте выполним приведенные выше cargo команды и создадим исходный код для проекта Libra.

source /home/ec2-user/.cargo/env

cargo build

Много, много успешных загрузок и компиляций, позже скрипт умер:

Проблемы с CMake

Модуль grpcio-sys не удалось построить и оставил серию загадочных ошибок CMake:

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

CMake Error at CMakeLists.txt:871 (target_compile_options):
  Error evaluating generator expression:
    $<COMPILE_LANGUAGE:CXX>
  Expression did not evaluate to a known generator expression

Однако после некоторых поисков выясняется, что Эрик Фиппс действительно столкнулся с этой проблемой в проекте Kokkos. В частности, для выражения COMPILE_LANGUAGE: CXX требуется CMake версии 3.3 или выше .

Давайте посмотрим на текущую версию CMake:

cmake --version

Ну что ж, поехали. Может быть, у Amazon Linux 2 разные пакеты?

sudo yum search cmake

И вот источник нашей проблемы: сценарий сборки мог установить пакет cmake.x86_64, а Amazon Linux 2 предлагает и его, и пакетcmake3.x86_64 - последний как раз тот, который нам нужен.

sudo yum remove cmake -y; sudo yum install cmake3 -y

Вероятно, нам потребуется создать символическую ссылку, чтобы жестко запрограммированные ссылки на cmake в cargo build скриптах в конечном итоге указывали на новый /usr/bin/cmake3.

sudo ln -s /usr/bin/cmake3 /usr/bin/cmake

А теперь продолжим и снова выполним cargo build:

Отсутствует zlib

К счастью, нашу следующую ошибку решить гораздо проще.

Как говорится в сообщении об ошибке: Could NOT find zlib (missing: ZLIB_LIBRARIES) при компиляции libtitan_sys.

Это легко исправить с помощью простой установки пакета yum:

sudo yum install zlib zlib-devel -y

Повторный запуск команды cargo build вернет нас к действию.

Если процесс сборки завершится неудачей в любой момент, ничего страшного: cargo будет отслеживать, что было построено, и, за исключением худших случаев, продолжит компиляцию после того, как вы разрешите любые трудности. В этом руководстве мы уже рассмотрели эти проблемы для Amazon Linux 2.

Пора подключиться к тестовой сети!

Подключение к Testnet

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

./scripts/cli/start_cli_testnet.sh

Это скомпилирует интерфейс командной строки (CLI), и, как вы можете видеть, некоторые фоновые требования уже были скомпилированы исходной командой cargo build, которую мы выполнили.

Вот и все! Мы готовы использовать Весы! Или, подождите, наверняка Libra использует порт, который мы не открывали в нашей группе безопасности, верно? Как мы можем узнать?

Давайте продолжим следовать руководству команды Libra «Моя первая транзакция» и посмотрим, не произойдет ли что-то не так.

Создайте тестовые учетные записи (A для Алисы, B для Боба)

Я создал два аккаунта, повторяя команду account create, это действительно так просто. У каждого из них был внутренний идентификатор «кошелька» интерфейса командной строки, на который я могу сослаться.

Давайте добавим несколько монет из фонтана тестовой сети Libra с помощью account <id> mint <amount>.

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

Через несколько минут мы проверяем: query balance <id>

Но как это работало? На моем сервере только входящий порт 22 открыт для SSH? Практически с любой другой криптовалютой мне нужно было бы открыть порт, специфичный для моего валидатора / узла майнинга ... ну, верно. Валидаторы Libra являются внутренними по отношению к Libra Association. Я не настоящий узел в традиционном смысле этого слова! Мой сервер - это просто интерфейс к тестовой сети.

Мы успешно подключились к тестовой сети Libra и финансировали наши тестовые аккаунты!

Резюме

  • Libra - это разрешенный блокчейн, в котором наши узлы подключения не участвуют в схеме проверки.
  • cmake3 требуется для сценариев сборки в Amazon Linux 2
  • zlib должен быть установлен для Amazon Linux 2
  • Минимальные требования EC2: 20 ГБ жесткого диска (18,9 ГБ израсходовано после установки) и 4 ГБ ОЗУ.
  • Экземпляр t2.medium может обрабатывать узел CLI