Типы узлов
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 (опционально на мобильных устройствах) |
| P2P | Gossipsub + прямой запрос-ответ |
| Группы | Участвует в группах, назначенных мастернодой |
| Производство блоков | Да (при избрании предложителем) |
| RPC | Да (порт 8545) |
| Мемпул | Полный конвейер с SIMD-оптимизацией |
Аргументы командной строки
| Аргумент | По умолчанию | Описание |
|---|---|---|
--listen-port | 4001 | P2P порт для входящих подключений |
--tx-interval-secs | 2 | Интервал генерации транзакций (0 = максимальная скорость) |
--block-interval-secs | 10 | Интервал производства блоков |
--max-block-txs | 32 | Максимальное число транзакций в блоке |
--db | lightnode.db | Путь к базе данных |
--network-key-path | lightnode-network.key | Ключ идентификации P2P |
--producer-key-path | lightnode-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-5 | 5021-5025 | Мастерноды |
| LN 1-10 | 5001-5010 | Лайтноды |
| Генератор TX | 5029 | Генератор транзакций |
Мониторинг
# Проверить работающие узлы
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