Перейти к основному содержимому

Типы узлов

Savitri Network поддерживает три типа узлов, каждый из которых оптимизирован для различных ролей.

Мастернода

Роль: Координатор сети, формирование групп, сертификация принятия блоков.

./target/release/savitri-masternode config/masternode.toml
ФункцияПодробности
КонсенсусПолный BFT + PoU
ХранилищеRocksDB (обязательно)
P2PПолная сеть gossipsub
ГруппыФормирует и управляет группами лайтнод
Производство блоковНет (координирует лайтноды)
RPCОпционально (фича rpc)
ZKPОпционально (zkp-plonk, zkp-arkworks)

Конфигурация

# config/masternode/mn-1.toml
[network]
listen_port = 5021
max_peers = 50
group_size = 7
group_node_timeout_secs = 600

[consensus]
block_time_secs = 5
slashing_enabled = true

[storage]
db_path = "data/mn1"

Ключевые обязанности

  • Формирование групп: Назначает лайтноды в группы на основе оценок PoU
  • Принятие блоков: Проверяет Сертификаты Принятия Блоков (BAC) от групп
  • Управление пирами: Отслеживает активность через сообщения gossipsub, удаляет неактивные узлы по истечении таймаута
  • Объявления групп: Публикует назначения групп каждые ~30 секунд

Лайтнода

Роль: Производитель блоков, обработчик транзакций, участник PoU.

cargo run -p savitri-lightnode --bin lightnode -- \
--listen-port 4001 \
--tx-interval-secs 2 \
--block-interval-secs 10 \
--max-block-txs 32 \
--bootstrap PEER_ID@/ip4/127.0.0.1/tcp/5021
ФункцияПодробности
КонсенсусОценка PoU + внутригрупповые выборы
ХранилищеRocksDB (опционально на мобильных устройствах)
P2PGossipsub + прямой запрос-ответ
ГруппыУчаствует в группах, назначенных мастернодой
Производство блоковДа (при избрании предложителем)
RPCДа (порт 8545)
МемпулПолный конвейер с SIMD-оптимизацией

Аргументы командной строки

АргументПо умолчаниюОписание
--listen-port4001P2P порт для входящих подключений
--tx-interval-secs2Интервал генерации транзакций (0 = максимальная скорость)
--block-interval-secs10Интервал производства блоков
--max-block-txs32Максимальное число транзакций в блоке
--dblightnode.dbПуть к базе данных
--network-key-pathlightnode-network.keyКлюч идентификации P2P
--producer-key-pathlightnode-producer.keyКлюч подписи блоков
--bootstrapНетНачальный пир (PEER_ID@/ip4/IP/tcp/PORT)

Флаги функций

ФлагОписание
desktopОптимизации для настольных компьютеров (по умолчанию)
mobileОптимизации для мобильных устройств (облегчённое хранилище)
rocksdbХранилище RocksDB (по умолчанию)
lightweight-p2pМинимальный P2P (меньше топиков)

Гардиан

Роль: Архивный/резервный узел, режим наблюдателя (без участия в консенсусе).

./target/release/savitri-guardian
ФункцияПодробности
КонсенсусНет (только наблюдатель)
ХранилищеRocksDB (полный архив)
P2PТолько подписка (без публикации)
Производство блоковНет
МониторингДа (функции архива и мониторинга)

Сценарии использования

  • Полный архив цепочки
  • Резервное копирование и восстановление данных
  • Источник данных для обозревателя блоков
  • Аналитика и мониторинг

Запуск локальной сети

2 мастерноды + 10 лайтнод

# Windows
scripts/run_all.bat

# Или вручную
./target/release/savitri-masternode exucutables/configs/masternode/mn-1.toml &
./target/release/savitri-masternode exucutables/configs/masternode/mn-2.toml &

for i in $(seq 1 10); do
cargo run -p savitri-lightnode --bin lightnode -- \
--listen-port $((5000 + i)) \
--db "lightnode${i}.db" \
--bootstrap PEER_ID@/ip4/127.0.0.1/tcp/5021 &
done

Порты (локальное тестирование)

УзелP2P портПримечания
MN 1-55021-5025Мастерноды
LN 1-105001-5010Лайтноды
Генератор TX5029Генератор транзакций

Мониторинг

# Проверить работающие узлы
scripts/check_status.bat

# Остановить все
scripts/stop_all.bat

# Метрики Prometheus
curl http://localhost:9090/metrics

Docker

# Одна мастернода
cd savitri-masternode
docker build -t savitri-masternode .
docker run -p 4021:4021 -p 9090:9090 savitri-masternode

# Полная тестовая сеть
cd savitri-testnet
docker-compose up -d
# Grafana: http://localhost:3000