Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Avalanche Snow

Snow 家族用反复随机抽样代替全员 quorum。节点对冲突值(颜色、交易、块)做本地决定:每轮向网络抽 \(k\) 个节点问其当前偏好,若某值占比 \(\ge \alpha\) 则把偏好改成该值。metastable:一旦诚实多数偏向一侧,抽样会把剩余节点吸过去。

协议层级

名称增加的状态作用
Slush无计数按抽样翻转偏好,可振荡
Snowflake连续成功轮数 \(\beta\)连续 \(\beta\) 轮同色则决定
Snowball每色置信计数用计数抵抗短暂翻转
AvalancheDAG 上的 Snowball交易互相确认
Snowman线性化的 Snowball一条链,供合约 VM 用

Avalanche L1 的 C-Chain / P-Chain 跑 Snowman。早期 X-Chain 用 DAG Avalanche,后亦线性化。

一轮

参数 \(k,\alpha,\beta\) 为常数,与全网节点数 \(n\) 无关:

  1. 对当前冲突集,向均匀抽样的 \(k\) 个节点查询其偏好。
  2. 若某值的回复 \(\ge \alpha\),采纳为本地偏好;对应置信计数加一,其它色清零或递减(视变体)。
  3. 连续 \(\beta\) 轮(Snowflake)或置信超过阈值(Snowball)则 decide,之后不再翻转。

每轮通信 \(O(k)\)。\(n\) 增大时延迟不按 \(n^2\) 涨,前提是抽样能碰到在线诚实节点。

错误概率

决定是概率的,参数把错误压到可忽略。每轮错误侧要凑够 \(\alpha\) 票才会翻转或维持错误偏好;当 \(\alpha > k/2\) 时,单轮“维持错误“的概率有上界 \(p_e < 1\)。连续 \(\beta\) 轮同色才 decide,因此

\[ P(\text{wrong decide}) \le p_e^{\beta} \]

  • 参数与全网规模 \(n\) 无关:\(k\) 越大错误概率越低但每轮开销越大,\(\alpha/k\) 越接近 1 抗翻转越强但收敛越慢,\(\beta\) 直接决定错误概率的量级。
  • 论文给出 \(k=20\)、\(\alpha=15\)、\(\beta\approx20\) 一档参数时错误概率已到 \(10^{-3}\) 量级,再增加 \(\beta\) 每几轮再降一个数量级。
  • 前提是诚实节点占比超过与 \(\alpha/k\) 相关的阈值;抽样不均匀(如分区内只剩恶意节点)会让 \(p_e\) 失去意义。

安全假设

分析通常要求诚实节点占比超过某个与 \(\alpha/k\) 相关的阈值,且网络允许随机抽样(诚实节点的查询能到达诚实节点)。拜占庭节点可以返回任意颜色,但不能伪造他人身份(需质押或 Sybil 代价,Avalanche 用质押的验证者集合)。

与 BFT quorum 的差别:

  • 没有 \(2f+1\) 证书,决定是概率的:存在极小概率在冲突值上 decide。参数把该概率压到可忽略。
  • 没有视图切换。冲突靠抽样漂移消掉,而不是换领导者重提。
  • 最终性是「decide 之后本地不可逆」,不是全网同时持有同一 QC。收敛后新节点通过抽样也会进入同一状态。

Snowman

把 Snowball 的决策对象换成线性区块:父块必须已 prefer / decide,子块才能被查询。分叉时对同一高度的冲突块做抽样,一侧 decide 后另一侧作废。合约执行需要总序,因此 C-Chain 不用 DAG Avalanche。

吞吐来自分叉上并行 gossip 与小 \(k\) 查询,不是来自单领导者流水线。与 DAG-BFT 都弱化「全员对单块投票」,但 Snow 用随机抽样,Narwhal 用证书 DAG。