Avalanche Snow
Snow 家族用反复随机抽样代替全员 quorum。节点对冲突值(颜色、交易、块)做本地决定:每轮向网络抽 \(k\) 个节点问其当前偏好,若某值占比 \(\ge \alpha\) 则把偏好改成该值。metastable:一旦诚实多数偏向一侧,抽样会把剩余节点吸过去。
协议层级
| 名称 | 增加的状态 | 作用 |
|---|---|---|
| Slush | 无计数 | 按抽样翻转偏好,可振荡 |
| Snowflake | 连续成功轮数 \(\beta\) | 连续 \(\beta\) 轮同色则决定 |
| Snowball | 每色置信计数 | 用计数抵抗短暂翻转 |
| Avalanche | DAG 上的 Snowball | 交易互相确认 |
| Snowman | 线性化的 Snowball | 一条链,供合约 VM 用 |
Avalanche L1 的 C-Chain / P-Chain 跑 Snowman。早期 X-Chain 用 DAG Avalanche,后亦线性化。
一轮
参数 \(k,\alpha,\beta\) 为常数,与全网节点数 \(n\) 无关:
- 对当前冲突集,向均匀抽样的 \(k\) 个节点查询其偏好。
- 若某值的回复 \(\ge \alpha\),采纳为本地偏好;对应置信计数加一,其它色清零或递减(视变体)。
- 连续 \(\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。