메인 콘텐츠로 건너뛰기

멤풀 아키텍처

멤풀은 입장부터 평가를 거쳐 블록 생성을 위한 드레인까지 대기 중인 트랜잭션을 관리합니다.

파이프라인

네트워크 (gossipsub /savitri/tx/1)


사전 검증 (비상태)
│ 서명 형식, 크기 제한

입장 제어
│ 할당량 확인, 발신자별 제한

상태 검증
│ 논스, 잔액, 수수료 제한

SIMD 배치 평가
│ fee * 0.7 + class * 0.3

점수 캐시 (LRU)


대기 풀


drain_for_block_production()
│ 점수별 상위-N, final_validation

블록 제안자

트랜잭션 클래스

클래스우선순위사용 사례
FederatedUpdate1.0 (최고)FL 모델 업데이트
Financial0.8토큰 전송
Governance0.7투표, 제안
IoTData0.5센서 데이터

입장 할당량

클래스최대 대기발신자별 제한
Financial50,000512
IoT100,000512
전체100,000512

drain_fair_batch() 함수는 트랜잭션이 드레인될 때 클래스별 카운트를 올바르게 감소시키기 위해 record_removal()을 호출합니다 (Round 6에서 수정됨).

SIMD 평가

점수 공식

score = fee_normalized * fee_weight + class_priority * class_weight

기본값: fee_weight = 0.7, class_weight = 0.3.

아키텍처별 구현

아키텍처인트린직레인 수최소 배치
x86_64 (AVX2+FMA)_mm256_set1_pd, _mm256_fmadd_pddouble 4개32
ARM (NEON)vdupq_n_f64, vfmaq_f64double 2개32
폴백스칼라 루프1항상

트랜잭션이 32개 미만인 배치에서는 스칼라 계산을 사용합니다. SIMD 초기화 비용이 이점을 초과하기 때문입니다.

적응형 가중치 (선택 사항)

adaptive_weights 기능 플래그를 사용하면 다음을 기반으로 가중치가 조정됩니다:

  • 수수료 분포: 수수료가 상위에 집중되면 fee_weight 증가
  • 클래스 다양성: 클래스가 많이 다양하면 class_weight 증가
  • 과거 처리량: 최근 블록을 기반으로 조정

매개변수:

base_fee_weight = 0.7
base_class_weight = 0.3
adaptation_rate = 0.1 (감쇠)
fee_threshold_high = 2,000,000,000
fee_threshold_low = 500,000,000
class_diversity_threshold = 0.5

점수 캐시

LRU 캐시는 점수 재계산을 방지합니다:

매개변수개발운영
캐시 크기항목 100개항목 10,000개
TTL60초300초

논스 관리

표준 흐름

  1. TX가 논스 N으로 도착
  2. 검증: N >= account.storage_nonce
  3. 드레인 중 pending_nonces HashMap에서 추적
  4. 블록 최종화 후 논스 커밋

간격 허용

장기 정지 후 복구를 위해 최대 5000의 논스 간격이 허용됩니다 (Round 11에서 1000에서 증가).

콜드 스타트 수정

storage_nonce=0 AND pending_nonces=0이면 사용 가능한 가장 낮은 논스가 시작점으로 수락됩니다. 이는 TX가 드레인되었지만 이전 제안자에 의해 블록이 확인된 적이 없는 경우를 처리합니다.

논스 재설정

TX 생성기는 local_nonce > storage_nonce + 200 (MAX_NONCE_AHEAD)일 때 로컬 논스를 재설정합니다. 이전에는 로컬 논스가 스토리지가 84인 상태에서 2000+까지 올라가 모든 TX가 거부되는 문제가 있었습니다.

리플레이 방지

트랜잭션 해시를 추적하여 리플레이 공격을 방지합니다. TX 해시가 한 번 확인되면 중복 요청은 거부됩니다.

수수료 검증

FeeLimits {
min_fee: 100_000_000_000_000, // 0.0001 SAVT
max_fee: 1_000_000_000_000_000_000, // 1.0 SAVT
}

기능 플래그

플래그설명
simdSIMD 최적화 평가 (기본값)
cache점수 캐시 (기본값)
adaptive_weights동적 가중치 조정