Перейти к содержанию

Режимы работы

graph TD
  subgraph Producers["Производители (Делегаты)"]
    ProducerNode1["Производитель 1"]
    ProducerNode2["Производитель 2"]
    ProducerNode3["Производитель 3"]
  end

  subgraph SeedNodes["SEED Ноды"]
    SeedNode1["SEED Нода 1"]
    SeedNode2["SEED Нода 2"]
  end

  subgraph APINodes["API Ноды"]
    APINode1["API Нода 1"]
    APINode2["API Нода 2"]
  end

  Producers --- SeedNodes
  SeedNodes --- APINodes

  ExternalWorld["Кооперативные приложения"]
  ExternalWorld --- APINodes

Делегатская нода

Делегат - это узел сети, который принимает участие в производстве новых блоков для цепочки. Локальная сеть кооперативной экономики, которая была запущена в процессе "быстрого старта", состоит из 1 делегата, который настроен также в качестве API и SEED-ноды.

Конфигурация делегатской ноды состоит из следующих основных параметров, доступных к изменению в файле coopenomics/boot/configs/config.ini:

plugin = eosio::producer_plugin # (1)
plugin = eosio::producer_api_plugin # (2)
enable-stale-production = true # (3)
signature-provider = EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV=KEY:5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3 # (4)
  1. Плагин производителя
  2. API-производителя, необходимый для работы плагина
  3. Активация режима производства блоков
  4. Публичный и приватный ключ производителя (в процедуре "быстрого старта" используются общеизвестные ключи, которые заменяются в производственных средах)

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

pnpm run cli start

Здесь мы используем команду start, а не boot, поскольку у ноды не подключены API для взаимодействия с ней, и загрузка контрактов будет без успешной. Команда start произведет запуск уже ранее загруженного блокчейна и продолжит работу с ним в режиме одного производителя.

Такой режим запуска необходим при конфигурации сетей кооперативной экономики, где ноды производителей отделены от нод API, SEED и HISTORY, и занимаются исключительно производством блоков, не расходуя свои вычислительные ресурсы на прочие операции, поскольку от своевременности производства блоков зависит устойчивость сети.

API-нода

Запуск ноды в режиме производства блоков не допускает чтения информации из блокчейна или отправку транзакций в него, а только производит цепочку и распространяет её по прямым соединениям с другими нодами. Для того, чтобы мы могли извлекать информацию из таблиц и отправлять транзакции, нам необходимо подключить соответствующие плагины к блокчейну. Вы можете добавить их к действующей ноде производителя:

plugin = eosio::http_plugin # (1)
plugin = eosio::chain_api_plugin # (2)
http-server-address = 0.0.0.0:8888 # (3)
  1. Подключаем HTTP-плагин
  2. Включаем API-ноды для извлечения информации и отправки транзакций.
  3. Открываем доступ к плагину через 8888 порт.

Теперь, после перезапуска, нода станет доступна для получения информации. Проверить это можно посредством вызова простого метода curl:

Запрос:

curl -X GET http://127.0.0.1:8888/v1/chain/get_info

Ответ содержит информацию о состоянии ноды:

{
  "server_version": "b7dd04e2",
  "chain_id": "7f14ce9aca562f3eddf05389f62613a8335f4a1eb9e27515cac6ef4cbd1daf2d",
  "head_block_num": 111,
  "last_irreversible_block_num": 110,
  "last_irreversible_block_id": "0000006e6dd508bb4b92462c844d6c9be88f9e377e41af7186b152f1580c8705",
  "head_block_id": "0000006f5fd74106c28ae37c3daf3cc9aa5d7a19aef7d87dca3ae10edbbd24fd",
  "head_block_time": "2024-08-25T12:02:50.000",
  "head_block_producer": "eosio",
  "virtual_block_cpu_limit": 334508,
  "virtual_block_net_limit": 1170508,
  "block_cpu_limit": 299900,
  "block_net_limit": 1048576,
  "server_version_string": "v5.1.0",
  "fork_db_head_block_num": 111,
  "fork_db_head_block_id": "0000006f5fd74106c28ae37c3daf3cc9aa5d7a19aef7d87dca3ae10edbbd24fd",
  "server_full_version_string": "v5.1.0-b7dd04e2eb15b599cfeac7f7f59ea4f2380f6199",
  "total_cpu_weight": 0,
  "total_net_weight": 0,
  "earliest_available_block_num": 1,
  "last_irreversible_block_time": "2024-08-25T12:02:49.500"
}

Что означает - нода запущена и функционирует нормально. Теперь мы можем подключить командный кошелёк для совершения операций с нодой - извлечения таблиц или отправки транзакций. И по этому же порту, который был открыт нами у API-ноды, мы можем подключать веб-приложения. Обо всём об этом будет рассказано далее.

SEED-нода

Ранее мы сконфигурировали API-ноду, которая стала доступна по HTTP, и которая работает на одной машине с Делегатской нодой. В реальной же конфигурации, нам необходимо поддерживать синхронизацию сети нескольких нод между собой. Для этого, нам необходимо соединить их, открыв порт для входящих подключений:

p2p-listen-endpoint = 0.0.0.0:9876 # (1)
  1. Точка подключения внешних нод для синхронизации.

Теперь API нода Делегата не только занимается производством блоков и передачи информации по HTTP протоколу, но и готова отвечать на входящие соединения от других нод на полную синхронизацию.

Для подключения любой внешней ноды к SEED-ноде, на ней необходимо указать:

p2p-peer-address = XXX.XXX.XXX.XXX:9876 # (1)
  1. IP адрес и порт для синхронизации. IP-адрес можно заменить на доменное имя, если настроена DNS-запись для этого.

SEED-нода, которая была ранее запущена на порту 9876 примет входящее соединение и последовательно, пачками блоков, передаст всю информацию о своём состоянии, начиная с самого начала, и завершая крайним блоком. После полной синхронизации, обе ноды будут идти синхронно - одна производит блоки, а другая их непрерывно получает.

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

Архитектурно, SEED-ноды находятся выделенным слоем между замкнутым кругом делегатов и внешним миром, предоставляя возможность участникам синхронизировать свои ноды без прямого доступа к IP-адресу или имени действующего делегата.

HISTORY-нода

HISTORY-ноды используются для извлечения истории действий в блокчейне, включая все те действия смарт-контрактов, которые вызывались в рамках других действий автоматически в процессе их исполнения. Кроме того, HISTORY-нода предоставляет информацию о истории изменения всех таблиц системы, что в целом позволяет составить полную историческую карту всех событий и их эффектов в системе.

Для конфигурации HISTORY-ноды необходимо задействовать следующие опции в конфиге:

plugin = eosio::state_history_plugin (1)
trace-history = true # (2)
chain-state-history = true # (3)
state-history-endpoint = 0.0.0.0:8080 # (4)
  1. Подключает плагин истории состояний
  2. Включает трассировку истории действий
  3. Включает историю состояний блокчейна
  4. Открываем WS-порт для извлечения истории

HISTORY-ноды используются для извлечения исторических данных. В частности, документы в системе считаются принятыми в реестр кооператива только в том случае, если он содержится и извлекается из HISTORY-ноды.

Также, HISTORY-ноды используются для построения обозревателей блоков, посредством которых возможно тотальное исследование цепочки истории действий от начала времён.