노드 유형
Savitri Network는 세 가지 노드 유형을 지원하며, 각각 다른 역할에 최적화되어 있습니다.
Masternode
역할: 네트워크 조정자, 그룹 구성, 블록 수락 인증.
./target/release/savitri-masternode config/masternode.toml
| 기능 | 세부 사항 |
|---|---|
| 합의 | 완전 BFT + PoU |
| 스토리지 | RocksDB (필수) |
| P2P | 완전 gossipsub 메시 |
| 그룹 | lightnode 그룹 구성 및 관리 |
| 블록 생성 | 없음 (lightnode 조정) |
| 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 점수를 기반으로 lightnode를 그룹에 배정
- 블록 수락: 그룹으로부터 블록 수락 인증서(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 + 직접 요청-응답 |
| 그룹 | masternode가 배정한 그룹에 참여 |
| 블록 생성 | 예 (제안자로 선출 시) |
| RPC | 예 (포트 8545) |
| 멤풀 | 완전한 SIMD 최적화 파이프라인 |
CLI 인수
| 인수 | 기본값 | 설명 |
|---|---|---|
--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 | Masternode |
| LN 1-10 | 5001-5010 | Lightnode |
| TX 생성기 | 5029 | 트랜잭션 생성기 |
모니터링
# 실행 중인 노드 확인
scripts/check_status.bat
# 모두 중지
scripts/stop_all.bat
# Prometheus 메트릭
curl http://localhost:9090/metrics
Docker
# 단일 masternode
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