跳到主要内容

内存池架构

内存池管理待处理交易的完整生命周期,从准入、评分到区块生产排空。

处理流水线

网络(gossipsub /savitri/tx/1)


预验证(无状态)
│ 签名格式、大小限制

准入控制
│ 配额检查、每发送方上限

有状态验证
│ nonce、余额、手续费限额

SIMD 批量评分
│ fee * 0.7 + class * 0.3

评分缓存(LRU)


待处理池


drain_for_block_production()
│ 按评分取前 N 名,final_validation

区块提议者

交易类别

类别优先级用途
FederatedUpdate1.0(最高)联邦学习模型更新
Financial0.8代币转账
Governance0.7投票、提案
IoTData0.5传感器数据

准入配额

类别最大待处理数每发送方上限
Financial50,000512
IoT100,000512
Global100,000512

drain_fair_batch() 函数在排空交易时调用 record_removal(),以正确递减类别计数(第 6 轮修复)。

SIMD 评分

评分公式

score = fee_normalized * fee_weight + class_priority * class_weight

默认值:fee_weight = 0.7class_weight = 0.3

架构专属实现

架构内部指令通道数最小批量
x86_64(AVX2+FMA)_mm256_set1_pd_mm256_fmadd_pd4 个双精度32
ARM(NEON)vdupq_n_f64vfmaq_f642 个双精度32
回退(Fallback)标量循环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 条
生存时间(TTL)60 秒300 秒

Nonce 管理

标准流程

  1. 交易携带 nonce N 到达
  2. 检查:N >= account.storage_nonce
  3. 排空期间在 pending_nonces HashMap 中跟踪
  4. 区块最终确定后提交 nonce

间隙容忍

nonce 间隙最大允许 5000,用于长时间停滞后的突发恢复(第 11 轮从 1000 提升至此)。

冷启动修复

storage_nonce=0 且 pending_nonces=0 时,接受最低可用 nonce 作为起始点。此举解决了交易已被排空但前任提议者从未提交区块的情况。

Nonce 重置

local_nonce > storage_nonce + 200MAX_NONCE_AHEAD)时,交易生成器重置本地 nonce。此前本地 nonce 可能漂移至 2000+,而存储中仅为 84,导致所有交易被拒绝。

重放防护

通过跟踪交易哈希来防止重放攻击。一旦某交易哈希被记录,重复提交将被拒绝。

手续费验证

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动态权重调整