和”全体互相广播、两轮确认再定块”的经典 BFT 不同,Avalanche 家族达成共识的方式是抽样问答:节点每轮随机挑一小撮验证者,问它们此刻的偏好,答案够多数就调整自己的偏好并累计置信,反复若干轮后突然定案。官方把这套方法叫反复随机采样,把整套协议统称 Snow 家族;Snowball 是其中处理两个冲突选项的那枚基石,Snowman 再把它拉长成线性区块链,供主网与各条 L1 使用。想读懂它,先分清字母表里的三个符号:k 管每轮问多少人,α 管多少票算多数,β 管连续多少轮一致才拍板。
一轮采样长什么样
节点对一项待决事务发起问询:按质押量加权从验证者集合里抽 k 个节点逐个询问——权重由质押额决定,抽中概率均匀随机这个说法在这里并不成立。被问者若自己还没立场,会直接采纳问询者的偏好作答;否则报出自己当前的偏好。收齐回答后按两道门槛处理:某一选项拿到不少于 AlphaPreference 票,问询者把偏好切换过去;拿到不少于 AlphaConfidence 票,就给该选项的置信计数器加一。任一轮两个门槛都没够到,置信计数直接清零重来。被后续问询时,节点把票投给自己置信更高的一方——偏好就这样在一次轮抽样里滚雪球般扩散。

默认参数就写在代码里
avalanchego 仓库 snow/consensus/snowball 目录的参数文件里,DefaultParameters 写着默认组合:K 为 20,AlphaPreference 与 AlphaConfidence 均为 15,Beta 为 20,并发重询数 4,最优处理条目数 10,最大在途条目 256,单条目最长处理时间 30 秒。同一个文件的校验函数把几条硬规则钉死:AlphaPreference 必须大于 K 的一半,AlphaConfidence 不得低于 AlphaPreference 且不得超过 K,并发重询数落在 1 到 Beta 之间。换句话说,改参数不是自由发挥——换票门槛不能低过简单多数,置信门槛不能低于换票门槛,这是代码级的下限。
β 轮连续一致:从偏好到决定的惊险一跳
置信计数器攒满 Beta——默认 20——次连续成功后,节点把该选项从”偏好”升级为”决定”,写入自己的账本视图,不再回头。“连续”二字是关键:一次失败问询就把计数打回零,因此若网络里同时存在两团对立的置信,谁也攒不满这 20 轮,整体维持在不稳定的偏好摇摆;直到某团的雪球更大、在抽样里被抽到的次数更多,摇摆才会一边倒。这就是反复采样的安全直觉:每轮都是对整个网络的一次小抽样,想伪造多数,需要真实持有足够比例的质押,否则下一轮抽样就会揭穿。α 越接近整份采样,安全越高、活性越差;k=20 配 α=15,相当于把门槛定在样本的百分之七十五,官方文档称之为超多数。健康线另有一式:MinPercentConnectedHealthy 按 AlphaConfidence 与 K 之比乘以零点八再加零点二缓冲算出,默认组合下约为八成——互联跌破这条线,节点就该担心收不齐多数票。以上是默认值而非铁律,每条链都可能在配置里改动它们,读参数表以目标链的链上配置与官方文档为准。
从参数到直觉:为什么抽样能替代全员投票
传统 BFT 要求节点对彼此建立全连接并交换确认,通信量随节点数迅速膨胀;采样路线把问题反过来——不求问遍所有人,只求每轮抽到的二十来个样本能反映整体质押分布。参数之间的几何关系值得记住:k 是每轮问询的人数,两个 α 是这个样本里过关的票数,α 除以 k 就是”样本层面的通过率”,而 β 把单次通过升级成不可回退的决定。把 α 调高,作恶者需要控制更大比例的质押才能在抽样里冒充多数,安全性上升;但同时正常节点更容易凑不够票数,活性下降。k 则决定方差:样本越大,单轮结果越接近全网真实偏好,代价是每轮的网络开销。三者没有万能组合,avalanchego 把下限写进校验函数、把默认值放在同一段代码里,就是提醒改参者:这是一组联动旋钮,动任何一个都要重估其余两个。(风险提示:本文仅解释共识机制,不构成投资建议;评估公链请以官方源码与发布说明核验为准。)
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。