Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

이 가이드는 다양한 사용 사례에 대한 최적화를 포함하여 Stable 노드의 모든 구성 옵션을 다룹니다.

구성 파일 개요

Stable 노드는 두 가지 주요 구성 파일을 사용합니다.

  • config.toml: 코어 StableBFT 구성
  • app.toml: 애플리케이션별 구성

두 파일 모두 ~/.stabled/config/에 위치합니다.

코어 구성 (config.toml)

기본 설정

Mainnet
# 참여할 체인의 ID
chain_id = "stable_988-1"
 
# 이 노드에 대한 사용자 지정의 사람이 읽을 수 있는 이름
moniker = "your-node-name"
 
# 데이터베이스 백엔드: goleveldb | cleveldb | boltdb | rocksdb | badgerdb
db_backend = "goleveldb"

P2P 구성

Mainnet
[p2p]
# 들어오는 연결을 수신할 주소
laddr = "tcp://0.0.0.0:26656"
 
# 피어가 다이얼하도록 알릴 주소
external_address = "YOUR_PUBLIC_IP:26656"
 
# 쉼표로 구분된 시드 노드 목록
seeds = "c21897d374c480a963edcda941ac94030895f6b4@seed1.stable.xyz:46656"
 
# 쉼표로 구분된 영구 피어 목록
persistent_peers = "b896f6f8ca5a4d1cc40de09407df0c96e76df950@peer1.stable.xyz:26656"

추가 P2P 설정 (두 네트워크 모두 동일):

# 인바운드 피어의 최대 수
max_num_inbound_peers = 50
 
# 아웃바운드 피어의 최대 수
max_num_outbound_peers = 30
 
# 동일한 IP에서 연결하는 피어에 대한 보호를 비활성화하는 토글
allow_duplicate_ip = false
 
# 피어 연결 구성
handshake_timeout = "20s"
dial_timeout = "3s"
 
# 연결에서 메시지를 플러시하기 전 대기 시간
flush_throttle_timeout = "100ms"
 
# 메시지 패킷 페이로드의 최대 크기
max_packet_msg_payload_size = 1024
 
# 속도 제한
send_rate = 5120000  # 5 MB/s
recv_rate = 5120000  # 5 MB/s
 
# 시드 모드 (시드 노드에만 해당)
seed_mode = false
 
# 피어 교환 리액터 활성화
pex = true

RPC 서버 구성

[rpc]
# RPC 서버의 TCP 또는 UNIX 소켓 주소
laddr = "tcp://127.0.0.1:26657"
 
# 교차 도메인 요청을 실행할 수 있는 원본 목록
cors_allowed_origins = ["*"]
 
# 클라이언트가 교차 도메인 요청에 사용할 수 있는 메서드 목록
cors_allowed_methods = ["HEAD", "GET", "POST"]
 
# 클라이언트가 교차 도메인 요청에 사용할 수 있는 비단순 헤더 목록
cors_allowed_headers = ["Origin", "Accept", "Content-Type", "X-Requested-With", "X-Server-Time"]
 
# gRPC 서버의 TCP 또는 UNIX 소켓 주소
grpc_laddr = "tcp://127.0.0.1:9090"
 
# 동시 연결의 최대 수
grpc_max_open_connections = 900
 
# /dial_seeds 및 /unsafe_flush_mempool과 같은 안전하지 않은 RPC 명령 활성화
unsafe = false
 
# 동시 연결의 최대 수 (WebSocket 포함)
max_open_connections = 900
 
# 연결할 수 있는 고유한 clientID의 최대 수
max_subscription_clients = 100
 
# 특정 클라이언트가 구독할 수 있는 고유 쿼리의 최대 수
max_subscriptions_per_client = 5
 
# 트랜잭션이 커밋될 때까지 기다리는 시간
timeout_broadcast_tx_commit = "10s"
 
# 요청 본문의 최대 크기
max_body_bytes = 1000000
 
# 요청 헤더의 최대 크기
max_header_bytes = 1048576

멤풀 구성

[mempool]
# 사용할 멤풀 버전
version = "v1"
 
# 재확인 활성화
recheck = true
 
# 브로드캐스트 활성화
broadcast = true
 
# 멤풀의 트랜잭션 최대 수
size = 3000
 
# 멤풀의 모든 트랜잭션의 총 크기 제한
max_txs_bytes = 1073741824  # 1GB
 
# 캐시 크기
cache_size = 10000
 
# 캐시에서 유효하지 않은 트랜잭션을 제거하지 않음
keep-invalid-txs-in-cache = false
 
# 단일 트랜잭션의 최대 크기
max_tx_bytes = 1048576  # 1MB
 
# 피어에게 보낼 트랜잭션 배치 최대 크기
max_batch_bytes = 0

합의 구성

[consensus]
# 제안 블록을 기다리는 시간 (nil 프리보팅 전)
timeout_propose = "5s"
 
# 각 라운드에서 timeout_propose가 증가하는 시간
timeout_propose_delta = "10ms"
 
# +2/3 프리보팅을 받은 후 기다리는 시간
timeout_prevote = "150ms"
 
# 각 라운드에서 timeout_prevote가 증가하는 시간
timeout_prevote_delta = "10ms"
 
# +2/3 프리커밋을 받은 후 기다리는 시간
timeout_precommit = "150s"
 
# 각 라운드에서 timeout_precommit이 증가하는 시간
timeout_precommit_delta = "10ms"
 
# 모든 프리커밋을 가지는 즉시 진행
skip_timeout_commit = false
 
# 이중 서명 확인 활성화/비활성화
double_sign_check_height = 2
 
# EmptyBlocks 모드
create_empty_blocks = true
create_empty_blocks_interval = "0s"
 
# 리액터 슬립 시간
peer_gossip_sleep_duration = "100ms"
peer_query_maj23_sleep_duration = "2s"

애플리케이션 구성 (app.toml)

기본 애플리케이션 설정

# 가지치기 전략 (Pruning strategy)
pruning = "default"
 
# HaltHeight는 노드가 정지할 0이 아닌 블록 높이를 포함합니다.
halt-height = 0
 
# HaltTime은 노드가 정지할 0이 아닌 시간을 포함합니다.
halt-time = 0
 
# MinRetainBlocks는 노드가 유지할 블록의 수를 정의합니다.
min-retain-blocks = 0
 
# InterBlockCache는 블록 간 캐싱을 활성화합니다.
inter-block-cache = true
 
# IndexEvents는 {eventType}.{attributeKey} 형식의 이벤트 세트를 정의합니다.
index-events = []
 
# IavlCacheSize는 iavl 트리 캐시의 크기를 설정합니다.
iavl-cache-size = 781250

API 구성

[api]
# Enable은 API 서버를 활성화할지 여부를 정의합니다.
enable = true
 
# Swagger는 swagger 문서가 자동으로 등록되어야 하는지 여부를 정의합니다.
swagger = true
 
# Address는 API 서버가 수신할 주소를 정의합니다.
address = "tcp://0.0.0.0:1317"
 
# MaxOpenConnections는 최대 열린 연결 수를 정의합니다.
max-open-connections = 1000
 
# EnabledUnsafeCORS는 CORS가 활성화되어야 하는지 여부를 정의합니다.
enabled-unsafe-cors = true

gRPC 구성

[grpc]
# Enable은 gRPC 서버를 활성화할지 여부를 정의합니다.
enable = true
 
# Address는 gRPC 서버가 바인딩할 주소를 정의합니다.
address = "0.0.0.0:9090"

EVM JSON-RPC 구성

[json-rpc]
# JSON-RPC 서버 활성화
enable = true
 
# JSON-RPC 서버를 바인딩할 주소
address = "0.0.0.0:8545"
 
# WebSocket 서버를 바인딩할 주소
ws-address = "0.0.0.0:8546"
 
# 활성화할 API
api = "eth,net,web3,txpool,personal,debug"
 
# eth_call/estimateGas의 가스 한도
gas-cap = 25000000
 
# eth_call/estimateGas의 EVM 시간 초과
evm-timeout = "5s"
 
# 트랜잭션의 트랜잭션 수수료 한도
txfee-cap = 1
 
# eth_getLogs의 필터 한도
filter-cap = 200
 
# FeeHistory 한도
feehistory-cap = 100
 
# eth_getLogs의 블록 범위 한도
logs-cap = 10000
 
# 블록 범위 한도
block-range-cap = 10000
 
# HTTP 시간 초과
http-timeout = "30s"
 
# HTTP 유휴 시간 초과
http-idle-timeout = "120s"
 
# 보호되지 않은 트랜잭션 허용
allow-unprotected-txs = true
 
# 풀의 트랜잭션 최대 수
max-tx-in-pool = 3000
 
# 인덱서 활성화
enable-indexer = false
 
# 측정항목 활성화
metrics = true

구성 프로필

풀 노드 (기본)

풀 노드를 위한 균형 잡힌 구성:

# config.toml 조정
sed -i 's/^indexer = ".*"/indexer = "kv"/' ~/.stabled/config/config.toml
sed -i 's/^max_num_inbound_peers = .*/max_num_inbound_peers = 50/' ~/.stabled/config/config.toml
sed -i 's/^max_num_outbound_peers = .*/max_num_outbound_peers = 30/' ~/.stabled/config/config.toml
 
# app.toml 조정
sed -i 's/^pruning = ".*"/pruning = "default"/' ~/.stabled/config/app.toml
sed -i 's/^snapshot-interval = .*/snapshot-interval = 1000/' ~/.stabled/config/app.toml

아카이브 노드

가지치기 없음, 전체 기록:

# config.toml 조정
sed -i 's/^indexer = ".*"/indexer = "kv"/' ~/.stabled/config/config.toml
 
# app.toml 조정
sed -i 's/^pruning = ".*"/pruning = "nothing"/' ~/.stabled/config/app.toml

RPC 노드

공개 RPC 엔드포인트 구성:

# config.toml 조정
sed -i 's/^max_num_inbound_peers = .*/max_num_inbound_peers = 30/' ~/.stabled/config/config.toml
sed -i 's/^max_open_connections = .*/max_open_connections = 30/' ~/.stabled/config/config.toml
sed -i 's/^cors_allowed_origins = .*/cors_allowed_origins = ["*"]/' ~/.stabled/config/config.toml
 
# app.toml 조정
sed -i 's/^enable = .*/enable = true/' ~/.stabled/config/app.toml
sed -i 's/^swagger = .*/swagger = true/' ~/.stabled/config/app.toml
sed -i 's/^enabled-unsafe-cors = .*/enabled-unsafe-cors = true/' ~/.stabled/config/app.toml

모니터링 구성

Prometheus 메트릭

# config.toml
[instrumentation]
# Prometheus 메트릭 활성화
prometheus = true
 
# 메트릭 수신 주소
prometheus_listen_addr = ":26660"
 
# 메트릭 네임스페이스
namespace = "stablebft"

로깅

# config.toml
[log]
# 로그 레벨 (trace|debug|info|warn|error|fatal|panic)
level = "info"
 
# 로그 형식 (plain|json)
format = "plain"

구성 변경 적용

구성 변경 후:

# 노드 재시작
sudo systemctl restart ${SERVICE_NAME}
 
# 오류 로그 확인
sudo journalctl -u ${SERVICE_NAME} -f
 
# 로드된 구성 확인
curl localhost:26657/status | jq '.result.node_info'

다음 단계