Режимы работы¶
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)
- Плагин производителя
- API-производителя, необходимый для работы плагина
- Активация режима производства блоков
- Публичный и приватный ключ производителя (в процедуре "быстрого старта" используются общеизвестные ключи, которые заменяются в производственных средах)
Эта минимальная конфигурация, необходимая для запуска производства блоков. Для запуска локального блокчейна в конфигурации исключительно производителя выполните команду или произведите запуск иным способом, как описано в разделе "быстрый старт":
Здесь мы используем команду 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)
- Подключаем HTTP-плагин
- Включаем API-ноды для извлечения информации и отправки транзакций.
- Открываем доступ к плагину через 8888 порт.
Теперь, после перезапуска, нода станет доступна для получения информации. Проверить это можно посредством вызова простого метода curl:
Запрос:
Ответ содержит информацию о состоянии ноды:
{
"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, и которая работает на одной машине с Делегатской нодой. В реальной же конфигурации, нам необходимо поддерживать синхронизацию сети нескольких нод между собой. Для этого, нам необходимо соединить их, открыв порт для входящих подключений:
- Точка подключения внешних нод для синхронизации.
Теперь API нода Делегата не только занимается производством блоков и передачи информации по HTTP протоколу, но и готова отвечать на входящие соединения от других нод на полную синхронизацию.
Для подключения любой внешней ноды к SEED-ноде, на ней необходимо указать:
- 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)
- Подключает плагин истории состояний
- Включает трассировку истории действий
- Включает историю состояний блокчейна
- Открываем WS-порт для извлечения истории
HISTORY-ноды используются для извлечения исторических данных. В частности, документы в системе считаются принятыми в реестр кооператива только в том случае, если он содержится и извлекается из HISTORY-ноды.
Также, HISTORY-ноды используются для построения обозревателей блоков, посредством которых возможно тотальное исследование цепочки истории действий от начала времён.