Блокчейн II — Развертывание вашего самого первого собственного узла Блокчейн

В последней истории мы узнали, что такое блокчейн, и реализовали простую модель на Java. Но как нам расширить этот простой пример и использовать нашу цепочку блоков для решения реальных проблем? Поэтому мы должны обернуть этот пример и развернуть его как сервис.

Открытие блокчейна миру

Поскольку теперь у нас есть локальная работающая цепочка блоков, мы хотим, чтобы другие люди могли использовать нашу цепочку блоков. Первым шагом к открытию блокчейна для внешнего мира является определение требований к узлу.
Узел — это орган, который может майнить новый блок и добавлять его в цепочку блоков. Поскольку узлы независимы и не имеют центральной власти, всякий раз, когда узел добавляет новый блок, он должен распространять этот блок / измененную цепочку на все другие активные узлы.

Наш первый узел, оберните модель в сервис

Наша текущая модель еще не готова к развертыванию в качестве узла. В нем отсутствует поддержка межпроцессного взаимодействия и нет таких возможностей, как разрешение и синхронизация цепочек, поскольку у нас есть только простая модель Java. Мы расширим нашу текущую модель сервисом REST, который даст нам возможность общаться между узлами через Интернет.

Настройка модели для поддержки узла

Помните нашу старую структуру:

Первым шагом является добавление одного дополнительного свойства: идентификатора блока. Блок должен знать свое положение в цепочке. Это будет очень важно, когда мы будем думать о ветвлении, синхронизации цепочки и разрешении конфликтов. Результат будет выглядеть так:

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

Добавление сервисного слоя Spring Boot, работающего поверх цепочки блоков

Взаимодействия с объектом блокчейна должны быть централизованы и должны быть реализованы на сервисном уровне. Итак, мы добавляем сервис цепочки блоков:

Контроллер REST и конечные точки для работы с сервисом

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

Начальная загрузка нашего приложения Spring

В конце мы добавим наше обязательное приложение Spring Boot (не удивляйтесь, мой блокчейн-проект называется «sage»):

Собираем все вместе

Последний обзор всех классов и файлов:

Поэкспериментируйте со встроенным сервисом

Теперь у нас есть работающий сервис, аху! Давайте выполним несколько запросов и посмотрим на результаты.

Генезисный блок
В начале наша цепочка блоков должна содержать только начальный генезисный блок с фиктивным доказательством работы и индексом 0. Он также не должен содержать никаких транзакций. Откроем почтальона и протестируем!

Выглядит вполне законно! Наш самый первый блок абсолютно на месте, и мы можем начать с добавления нашей первой транзакции!

Вау! Мы создали новую транзакцию. Для завершения этой транзакции нам теперь нужно добыть блок, как мы узнали в предыдущей истории.

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

Цепочка теперь действительно содержит нашу транзакцию, это чистая магия!

Вывод

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