零点课堂 | 利用雪崩算法主动协调交易本地状态(1)
摘要
本文描述一种在中本聪共识机制网络下的节点之间的传播协议,在该协议中节点之间积极地协调各自的本地状态。它使得节点能够对彼此进行采样,以确定一个相冲突的集中哪个选项是在当前大多数节点的选择,并且将相同的选择推向大多数节点。本协议是基于雪崩共识算法改进而来,提供了协议的异步性、亚稳定性和静态终结性。
本文档不会深入讨论在雪崩算法白皮书中描述的细节和知识点,这些是需要读者自己去阅读原白皮书。同时,本文还要求读者已经理解了中本聪共识机制。
动机
降低比特币在多网络节点之间的熵的好处被广泛讨论,其中包括将执行成本高的工作移出关键路径来提高可扩展性、更快的交易确认/双花保护,和更强的拜占庭对抗中短期期链重组攻击。
中本聪共识是希望任何节点可以无须信任地参与达成共识,它通过使用工作量证明赋于每个状态一个真实世界权重。不幸的是,这对系统提出了一些不理想的要求,如同步性,刻意的人为延迟,和永久性地需要维护共识。比如,一个状态无法100%地确定。
我们意识到,由挖矿节点构成的大型节点,和大量的支付基础设施始终在线但不参与达成共识,我们可以设计一个协议,允许他们快速达成共享的网络状态,尽管这是主观的。矿工可以继续完成他们的工作,并最终将他们的本地状态固化为全局状态,从而使新加入的节点可以无须信任地加入共识。该协议试图使用预共识技术,以达成更快、更具扩展性和更安全的比特币现金。
目标
我们希望在协议上达成如下目标:
· 证明预共识系统在比特币现金上是可行的。
· 挖掘更多需要研究的,或潜在的问题。
· 提供一个可以工作的预共识系统,以允许任何节点都可以加入参与其中,用于实验和收集信息。
此外,协议必须具有以下属性:
· 无须许可:任何人都可以提供或索要采样
· 低延迟:实现秒级达成决策
· 元稳定性:参与者主动参与工作,并将系统状态朝着单一方向坍缩,并且能抵抗状态回撤。
· 平静:一旦做出决定,就不可逆,而且最终状态将不再需要额外的工作。
· 可扩展的成员体系:我们希望任何有兴趣的人都能加入
· 可扩展的资源:我们需要将系统扩展到全球现金系统水平。
· 拜占庭式容错:我们不假设所有参与者都是诚实的,系统能抗恶意行为。
协议概述
基于互斥点(based on points of mutual exclusion)我们认为每个区块和交易都是1个或多个冲突集的成员,比如花费相同的UTXO。我们使用雪崩算法,将每一个冲突集精确地分解为单个项目,并且参与者使用其本地状态参与解决网络冲突集,从而为所有参与节点提供共享的本地状态。
每个客户端在看到的一个未完成的项目时,都会维护一个基于雪球(Snowball-based)投票累加器。一旦看到一个项目,就会创建一个累加器,并开始投票确定最终状态的过程。只要有未解决的冲突集,客户端就会随机选择一个对等节点,询问它对这个项目的投票,并将这些投票输入投票累加器。一旦项目的接受信任度达到阈值,则冲突解决;这个项目被全网接受,并且拒绝所有冲突项目。这个过程会持续工作,直到所有冲突集都被解决为止。
通过将内存池里所有被拒绝的项,替换为被接受的项,网络中的参与者就可以拥有几乎相同的本地状态。结合再有的规范排序规则,这些客户端就可以看到几乎一致的区块。
详细规则
安全参数
我们的算法也采用雪崩算法白皮书描述的安全参数,如下:
发信号支持
客户端应使用以下服务位来表示他们理解协议:
NODE_SNOWGLOBE= (1 << 26)
握手
当节点希望提供其采样状态时,它们应该使用适当的服务位给其他节点发送一个连接消息。接收到该消息的客户端应该验证该消息,并且:
1.如果消息是非法的,则禁止其节点
2.如果消息是合法的,则将其节点加入到合作内存参与者之列。
使用币龄抗女巫攻击
使用一组使用币金额乘于区块年龄的UTXO信息,我们称之为“币块”,才能向其他节点发起查询服务,通过该机制可实现抗女巫攻击。如果索要查询服务的节点发出的消息不包含足够的币块阈值,该消息为非法的,并且该节点会被禁止,不能加入Snowglobe内存池中。
初始的币块值设为1440,但需要进一步研究,是否有更合适的值。
使用身份和下注(stake)发信号及验证