4. PSAN 네트워크 아키텍처

PSAN(Role-Polymorphic Self-Adjusting Network, 역할 다형성 자율 조정 네트워크)은 UBMS의 P2P 네트워크 설계 철학.

핵심 원리

1. 역할 다형성: 하나의 노드가 릴레이/투표자/채굴자 역할을 동적으로 수행
2. 자율 조정:   네트워크 규모에 따라 BP(Blueprint) 수를 자동 산출
3. CF 완화:     메시지 플러딩 방지, 결정론적 경로로 대역 낭비 제거

BP(Blueprint) 계산 공식 (백서 인용)

R=max⁡(3,⌊log⁡2(N)/2⌋×2+1)R=max(3,⌊log2​(N)/2⌋×2+1)

V=max⁡(5,⌊log⁡2(N)/1.2⌋×2+1)V=max(5,⌊log2​(N)/1.2⌋×2+1)

N = 전체 노드 수, 항상 홀수로 설정하여 다수결 명확화

노드 수별 BP 예시

100개 노드:      log₂(100) ≈ 6.64    →  R = 3,   V = 11
1,000개 노드:    log₂(1000) ≈ 9.96   →  R = 5,   V = 21
10,000개 노드:   log₂(10000) ≈ 13.28 →  R = 7,   V = 51
100,000개 노드:  log₂(100000) ≈ 16.61→  R = 11,  V = 101

최소 합의 요건

릴레이 노드  3개 이상
투표 노드    5개 이상
채굴 노드    1개 이상
합계        최소 9개 노드로 합의 가능

비콘 체인 없는 완전 분산형 합의:
  별도의 비콘 체인이나 중앙 코디네이터 없이
  노드 간 직접 투표로 합의를 달성함

4.1 스레딩 모델

메인 스레드
  UBMS::EventBase (신호 처리)
  P2P 허브
    UBMS::UringPool (CPU 코어 수만큼 스레드)
      UBMS::ServerBinP2P (인바운드 P2P)
      UBMS::ServerWeb (웹소켓)
    워커 스레드들 (각각 독립 큐 보유)
      UBMS::DecodeWorker  (바이너리 프레임 디코딩)
      UBMS::SendWorker    (메시지 직렬화 + 전송)
      UBMS::NodeWorker    (피어 관리, 토폴로지)
      UBMS::ChainWorker   (블록 채굴, 검증, 동기화)
      UBMS::TxWorker      (트랜잭션 전파)
    UBMS::HttpWorker (REST API)

4.2 메시지 흐름

수신:

UBMS::ServerBinP2P::onRead (UBMS::UringPool 스레드)
  -> DecodeWorker 큐에 push
  -> 32바이트 메시지 ID 중복 확인
  -> 평문 해제 또는 복호화
  -> p2p::execPlain/execCrypto (라우팅)
  -> NodeWorker / ChainWorker / TxWorker 큐에 push

전송:

워커에서 UBMS::SendWorker::sendToOutbound() 호출
  -> 직렬화 + 압축(평문) 또는 암호화
  -> 32바이트 메시지 ID 생성
  -> UBMS::ClientBinP2P::sendMessageBinary()

4.3 P2P 프로토콜

메시지 구조 (UBMS::S_MESSAGE):

messageId   32바이트 해시
header      명령 식별자 (REQUEST_INIT, VOTE_BLOCK, ADD_BLOCK 등)
type        페이로드 타입
payload     직렬화된 데이터
ttl         가십 전파 수명 (기본값 5)
priority    우선순위
path        라우팅 경로

피어 핸드셰이크:

아웃바운드 연결 -> REQUEST_INIT(평문) -> RESPONSE_INIT(평문)
  -> REQUEST_PEER_LIST(암호) -> RESPONSE_PEER_LIST(암호)
  -> 토폴로지 구성

가십 3가지 모드:

GOSSIP       무작위 5개 피어에 전파 (전통 가십, 보조용)
             TTL=5, XOR 모듈러2 기반 피어 거리 계산
GOSSIP_PATH  경로 내장형 전달 (3경로: 최단 + 좌편향 + 우편향)
             메시지에 path[]를 싣고 다음 노드 한 칸만 전진
             루프 구조적 차단, 중간 판단 불필요
GOSSIP_DIR   지향성 가십 (결정론 격자 기반 부채꼴 전파)
             방향 벡터 u=(sx,sy)를 메시지에 내장
             전방 이웃만 선택 (delta dot u > 0)
             팬아웃 최대 3, TTL = max(3, floor(0.8 * 대각선))

4.4 합의 흐름 (PoW + PoS + PoB 하이브리드)

RESET (라운드 초기화)
  -> REQUEST_MINE_INFO (TX 목록 수집)
  -> MINE (PoW: 블록 생성, 난이도 충족 해시 탐색)
  -> DISTRIBUTE_BLOCK (PSAN 경로로 검증자에게 전달)
  -> VOTE_BLOCK (PoS: 스테이커 검증자가 투표)
  -> VOTE_BLOCK_AGREE (70% 이상 승인, BFT 2/3 기준 + 안전 여유)
  -> ADD_BLOCK (체인에 추가)
     +-> 채굴자 보상 5%
     +-> 스테이커 보상 95% (Shifted Sigmoid 분배)
     +-> TX 수수료 -> 5단계 유통인 분배 (PoB: 60/20/10/7/3%)
  -> 새 RESET

블록 부족 시:

REQUEST_BLOCK -> RESPONSE_BLOCK -> ACCEPT_RESPONSE_BLOCK
  -> 높이가 따라잡으면 정상 모드 전환

5. 검증 체계

UBMS::InspectManager가 9개의 세부 검증기를 통합 관리.

UBMS::InspectTx        TX 구조 검증
UBMS::InspectUtxo      UTXO 유효성
UBMS::InspectBlock     블록 해시, 이전해시, 머클루트, 난이도, 타임스탬프
UBMS::InspectInput     입력 유효성
UBMS::InspectSpent     UTXO 소비 여부
UBMS::InspectStake     스테이크 검증
UBMS::InspectReferral  추천인 검증
UBMS::InspectBalance   잔액 검증
UBMS::InspectSignature 서명 검증

서명 중복 방지: 최근 서명을 윈도우 기반으로 추적.

Inspector (감사 도구):

buildReport()로 주소별 종합 감사 실행
  - UTXO 스냅샷 vs DB 일치성
  - 마이닝 보상 테이블 검증
  - 전체 블록 리플레이 시뮬레이션
  - 이중 지불 탐지