协议工作组的责任是致力于协议不同子系统的安全性、可扩展性、渐进式分散化和维护。
它在分布式拜占庭容错系统、协议经济学、Cadence智能合约语言和治理的交叉点上运作。
性能和可扩展性的改进
首要任务之一是改善网络吞吐量TPS,以更好地支持高交易量的应用的增长和采用。虽然提高吞吐量是关键,但实现这一目标的结果必须保持分散和安全。当务之急是,任何性能增益都不会提高节点运营商的准入门槛。
在性能领域有足够的低悬果实,可以期望在不久的将来达到1000 TPS。核心协议工作组正专注于几个工作流。
- 对执行状态代码(也称为Ledger)进行改进,以减少内存并提高操作和证明验证的速度
- 平行执行不冲突的事务,同时保持区块的确定性和同步排序
核心协议的另一个重要优先事项是提高执行存储的可扩展性和性能。这些工作流正在被优先处理,以解决长期的状态膨胀问题,方法是:1:
- 通过优化和压缩存储的节奏和FVM值来减少内存和磁盘的使用,改善merkle树的结构
- 通过在访问模式的基础上整合存储值,在交易过程中尽量减少字节的读/写,优化存储操作性能(如对Atree的改进)。
- 通过使用替代的加密解决方案(如矢量承诺)减少merkle树的深度,从而减少证明的大小和内存的使用。
协议的零停机时间滚动升级
软件升级和维护是任何去中心化服务不可避免的一部分,对于Flow来说,这些都是通过 "spork "实现的。叉子通常每两个月发生一次,目前的临时停机时间大约为90分钟。社区节点运营商和协议工程团队负责改善网络正常运行时间,减少spork维护窗口,并达到零停机的滚动升级状态。
目前的目标是在不需要数据迁移的情况下,向零停机时间的协议升级迈进,通常只有在数据格式发生变化时才会发生。这可以通过高度协调的协议升级来实现,类似于其他连锁店使用的策略。在短期内,在高度协调的升级过程成熟之前,如果数据存储格式有了更新,可能仍然需要一个spork。正因为如此,目前的迁移和分叉过程也在进行优化,当分叉不涉及任何数据存储格式升级时,应该可以在30分钟内分叉。将分叉频率降低到每季度一次,再加上频繁的滚动升级,将确保协议在不影响创新步伐的情况下提供更多的无缝升级。
核心协议工作组正在研究实现零停机状态迁移的更具体的想法,并将在适当的时候更新这个页面。
可扩展的点对点网络,实现数据的可检索性
目前,Flow的核心协议并没有指定任何方法来永久存储它在一段时间内提交的所有执行状态变化。数据量太大,无法实现这一点,而且这也是对链上存储历史数据的宝贵浪费。引入观察者和归档节点将允许用户在本地提取数据用于归档和验证。尽管如此,仍然需要一个经济上可行的解决方案来访问历史数据,而不需要运行一个完整的归档节点,目前这需要完整的数据中心级硬件。关于谁来存储历史数据,有几个想法,包括。
- 去中心化协议中的激励性市场,可以用merkle证明提供历史数据
- 管理服务平台,如Coinbase Cloud、Block Daemon、Quicknode、Infura,可以运行存档节点
- 点对点(P2P)网络中的客户端,可以存储链条历史的随机部分。这个自愿的P2P网络中的所有客户提供必要的数据和功能,以暴露标准的gRPC & REST API
P2P网络的设计可以确保参与这些网络的客户可以用最小的网络带宽、CPU、RAM和HDD资源来完成。在短期内,历史访问可以由Dapper实验室的档案节点提供。然而,从中长期来看,通过其他协议或社区激励措施提供历史访问将更有效率。
我们邀请社区为Flow的执行状态同步协议提出额外的功能。我们的目标是实现利用执行状态的有价值的附加服务,这些附加服务超出了核心协议的范围,但需要实现(小的)附加协议功能。社区可以通过Flow开发者资助计划为这个工作流做出贡献。如果你想做出贡献,请与我们联系。
提高拜占庭容错能力
拜占庭容错[BFT]是指在去中心化的网络中,即使存在主动的恶意(又称拜占庭)节点,网络也能安全地运行,这是解锁无许可节点运行的关键。它要求所有的节点必须对源自无权限节点的任何可想而知的恶意行为具有弹性。BFT可以划分为三类攻击:消息级攻击(包括冒充或伪装攻击)、协议级攻击(多个单独有效的消息构成违反协议)和垃圾邮件。
作为第一步,需要为缓解冒充或伪装攻击的全网框架奠定基础。一个新的执行状态复制的BFT协议将补充网络的保护,并关闭访问节点、观察者节点和存档节点的协议级攻击的剩余表面,从而使他们的无权限操作。
在以后的步骤中,核心贡献者应该专注于进一步强化执行状态复制协议,以防止大规模的垃圾邮件和DDoS攻击,从而使我们能够进一步增加无权限的访问、观察和存档节点的数量。
目前,核心协议工作组正在为执行状态复制协议的垃圾邮件漏洞寻求同行评审。
提高共识的运行时弹性
Flow使用HotStuff,一种基于领导者的共识算法。在过去的两年里,该领域的研究取得了相当大的进展。具体来说,Jolteon协议(2021年6月)在两个重要领域改进了最初的HotStuff[v6]。
- 在幸福的道路上,Jolteon只需要两个额外的回合就能完成一个区块(与HotStuff v6的3个相比)。
- Jolteon结合了一个PaceMaker
Jolteon的PaceMaker利用专用消息进行BFT视图同步,这大大提高了协议对广泛的故障场景的弹性,包括连续的领导者故障、网络分区、不利的启动条件等。Jolteon的关键进展也被Diem团队(前身为Facebook)采用,导致DiemBFT v4(2021年8月)。
经过对前沿方法的全面审查,核心协议团队决定采用Jolteon(经过一些小的修改)。此外,PaceMaker生成的超时证书也是Flow中抗拜占庭的Epoch切换的先决条件。从今年年初开始,研究和实施工作已经在进行。
目前,该小组正在邀请大家帮助进一步模块化Flow协议的代码库。一个用于研究目的的独立的共识实现,与Flow的生产实现共享代码库将特别有帮助(见这里的细节)。此外,我们感谢学术界对JolteonPaceMaker的最佳参数化的贡献(详见这里)。
无权限节点操作
我们的目标是让所有节点类型完全无权限,但网络可以通过渐进式的去中心化和循序渐进的过程,让越来越多的社区节点运营商主动拥有。简而言之,我们致力于充分授权任何有意愿的参与者在Flow生态系统中做出贡献并从中受益。这是通过渐进式去中心化实现的--在这个过程中,我们将随着时间的推移逐步放弃控制权。采取循序渐进的方法使我们能够集中精力,创造一条通往安全网络的道路。
随着观察者节点和即将推出的档案节点的引入,该网络为每个人释放了参与机会,而不需要任何赌注。拥有自己的节点意味着你不必依靠第三方来了解网络的状况。你可能无法获得与完全抵押的节点一样的经济收益,但你可能会看到其他好处,如隐私、安全、平衡负载分配、减少对第三方服务器的依赖和网络去中心化。
有桩接入节点的无权限节点操作将需要一个对社区透明的新的运营商选择算法。广泛的研究已经进入了实现拜占庭容错[BFT]的保护,以防止生态系统中的无许可拜占庭行为者可能产生的任何攻击。这个工作流可以在未来为其他节点类型(验证、收集、共识)解锁无许可操作。
目前,该工作组正在寻求同行评议,并邀请赏金提议对该功能进行战斗测试。如果你想了解更多,请与我们联系!
引入一个新的钉子节点操作者选择算法
历史上,要成为一个节点运营商,你需要确保你满足最低的赌注和程序要求,以获得批准。虽然这种人工程序确保了网络的持续安全,但要想成为一个有桩的节点运营商,所需的$FLOW数额非常高,这排除了许多有抱负的运营商。挑选过程也缺乏对公众的透明度。福禄应该引入一个节点运营商的选择过程,可以随着时间的推移逐步放弃控制权。这可以分两步进行。
- 引入自动档期分配(钉住档期)。
- 降低最低的赌注要求
钉子槽的想法是建立一个自动流程,将新节点纳入钉子表,同时管理每个节点类型的最大节点数量。这个过程在未来可以通过拍卖机制进行扩展,以完全无权限的方式选择节点运营商。
降低最低赌注要求仍在研究中,以确保赌注足够高,不影响网络的安全。
支持大规模的状态大小
Flow的执行状态被存储在一个Merkle trie数据结构中。目前在Flow节点软件中的实现,称为mtrie,完全驻留在内存中,并为执行节点的高性能应用进行了优化。由于执行状态非常大,所以在性能和节点硬件要求之间有一个权衡。因此,执行节点需要大量的内存(512GB的RAM)来将整个 trie加上少量的历史完全存储在内存中。
对于其他应用,如档案节点,存储容量和宽松的硬件要求比性能更重要,所以希望有一个为大数据集优化的可扩展的三角形。这将允许在消费级硬件上运行的节点,但有大型磁盘。
我们希望通过Flow开发者资助计划邀请社区对这一工作流做出贡献。
整合密码学的进步
目前,核心小组正在进一步强化已实现的密码学基元和协议,以提高链的拜占庭容错性。这些改进包括将节点操作员的BLS私钥的占有证明(PoP)整合到钉子过程中。PoP是协议选择的防御手段,以保证多个BLS签名聚合和基于BLS的SPoCK方案。BLS签名和基于BLS的阈值签名的实现正在不断地更新,以包括最新的性能进步和提高其标准的符合性。基于Pedersen的随机信标的分布式密钥生成也在更新,以提高对恶意行为的抵御能力。
此外,该协议试图使用一些额外的密码学研究领域来提高链的安全性和性能。其中一个领域是基于BLS的保密知识专门证明(SPoCK),它正在被扩展以支持聚合和优化协议的密封机制。
其他可能的研究课题包括对加密累积器和矢量承诺的探索。
核心协议工作小组的现任主席是 Alex Hentschel核心贡献者是Dapper Labs、Coinbase Cloud、NCC Group、Halborn和Metrika。该工作组在以下方面进行合作 核心协议GitHub并在不久的将来举办一次公开的研发会议,讨论工作流的更新,跨职能的头脑风暴,并接受彼此的反馈。