节点类型
Savitri Network 支持三种节点类型,每种类型针对不同角色进行了优化。
主节点(Masternode)
角色:网络协调器,负责分组组建、区块接受认证。
./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 秒发布一次分组分配信息
轻节点(Lightnode)
角色:区块生产者,交易处理器,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(更少话题) |
守护节点(Guardian)
角色:存档/备份节点,观察者模式(不参与共识)。
./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 | 轻节点 |
| 交易生成器 | 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