Sui区块链技术解析

Sui区块链技术解析

项目简介

Sui是一个高性能的L1,它直接继承了Diem的Move编程语言来编写智能合约,其核心卖点是高吞吐量+低延迟。核心团队也来自Diem团队,其系统设计与实现和Apotos有很多相似之处

为支撑Sui网络的高吞吐量和低延迟,Sui实现了Narwhal交易池协议和改进的Dag异步共识对网络进行加速,前者通过在交易池中实现可靠广播来分担共识过程对交易主体内容传输的负担,后者提高共识的活性。

核心价值:

  • 加持了Narwhal交易池协议
  • 异步共识协议(一种基于dag的共识)
  • Move语言

Narwhal交易池协议

Narwhal解决的问题:交易可靠传输的问题,缓解共识压力。

Narwahl的主要思想:完美的交易池应该完成对交易的可靠传输,也是一个高性能区块链系统的主要赋能者。交易的可靠传输也应该从共识协议中分离开来,共识协议只需要完成排序任务,该排序任务中待排序的主体可以是占用空间较小的一个交易引用。这种分离的综合系统能够让共识的吞吐量对系统吞吐量影响降到最小。

交易池设计

交易主要生命周期:

交易 ----->  缓冲区 ----->  进入交易池 ----->  打包成交易池区块 ----->  Narwhal协议传播 ----->  生成交易池区块Cert ----->  发送到共识层

详细设计流程:

说明:

区块:交易池中一批交易的统称,区别于区块链中共识的区块。

Cert:区块存在交易池的密码学证明,Certificate由2f+1个节点签名组成(文中出现的2f+1表示包含自身节点的签名,2f则表示不包含自身节点签名)

轮次:每个验证者本地维护一个从0开始单调递增的序号,表示当前的交易池进度,记为r,初始化r=0。

节点数量:n,且f<1/3n

Narwhal协议每个轮次r运行一个区块的可靠传播实例,并通过轮次的推进持续对区块进行可靠传播

主要流程:

1、一旦验证者推进到新的轮次r,创建并广播一个新的区块(诚实的验证者每个轮次只创建一个区块),每个区块中包含创建者签名、交易列表、轮次r、2f+1个来自轮次r-1的Cert(如果是系统初始化r=0可以不包含Cert)。

2、创建区块的验证者广播给其他所有验证者(第一,这里每个验证者都会创建自己的区块,并发送给其他所有人。第二,严格来说可靠广播double echo的实现需要O(n^2)通信复杂度,这里只广播一次,解释见下文实现部分)自己创建的区块,确保区块完整性、可用性。

3、验证者收到来自其他验证者的区块,进行验证。验证内容包括:

1)创建者签名

2)轮次号r与自己的一致

3)r=0(创世块)或者包含轮次r-1的至少2f+1个区块的Cert

4)区块为创建者在轮次r的第一个区块

4、若区块有效,验证者存储到本地,并发送区块摘要、轮次号r、创建者身份的签名返回到区块创建者

5、一旦创建者收到2f+1个区块的签名,可以生成该区块的有效Cert

6、创建者发送该Cert给所有验证者

7、若验证者收到来自其他2f个不同验证者创建的区块的Cert(意味着每一个轮次r,每个验证都需要收到至其他2f个验证者创建的区块和Cert),推进到下一轮次r+1

垃圾回收:

交易池的目的是完成交易的可靠传输,实现的也是是无状态的广播协议。如果要对交易池进行垃圾回收的优化,需要配合上层的共识协议来完成,共识协议完成确定性的状态推进(如左图),被共识过得区块就可以完成回收,清除到交易池外。

安全说明:

一个Cert关于区块的2f+1个签名,至少f+1个诚实的验证者已经验证过并且存储了该区块。因此,区块在交易池中是可用的,能够被检索到。同时每个验证者都已经对区块完整性、可用性进行了验证,最终可以通过区块包含上一个轮次的Cert引用进行归纳论证所有的causal history是合法的、可用的。

 交易池实现

可靠广播实现:

经典的可靠广播范式double-echo,需要完成两次阶段广播过程(echo阶段、vote阶段,可参考PBFT的prepare、commit阶段就是一次double echo),复杂度为O(n^2)保证Totality性质,这对于大规模扩展来说是一个瓶颈。

在实现中,Narwhal交易池实现广播的阶段,Narwhal并未采用可靠广播算法double-echo。协议中通过两种机制来进行优化:

1)一次的广播-响应投票生成区块的Cert,用来证明区块已经被2f+1个验证者节点收到。但是仅仅一轮只能保证验证者在局部视角看到系统中存在2f+1节点收到了该区块(并不能证明有2f+1个验证者知道了系统中已经有2f+1个节点收到了区块),可能会导致某个诚实的验证者收到了区块却并未收到Cert。Narwhal协议使用Dag的结构,每个区块必须引用上一个轮次的2f+1个Cert来实现相同的double echo效果,收到区块的验证者就能通过当前区块的Cert看到系统中被Cert引用的区块被安全确认了。

2)拉取策略,轮次r的区块完成可靠广播,需要保证轮次r-1的2f+1个区块存在的对应的Cert。因此,验证者一旦收到轮次r的一个区块的Cert,但轮次r-1缺少区块所引用的2f+1个Cert以及区块。验证者对每个区块只需要O(1)个请求,当请求得到响应后所有其他的区块请求都能被丢弃。

验证者节点扩展:

验证者节点在系统中是n个参与者中的一个单元,不被限制是否由单独的一个电脑实体构成。而采用分离交易池的设计,系统最终会被存储、带宽、单个验证者的计算资源限制。

如图,在实现中,可以对验证者进行扩展。分离交易池协议中的消息为交易消息和交易元数据消息。对验证者进行横向扩展,每个验证者采用primary-worker的方式运行。

发送和存储交易数据可以“尴尬”并行:

1)worker创建一个batch的交易,发送该batch交易给其他所有验证者的worker

2)一旦收到quorum个(2f+1)确认,则该batch的摘要与primary共享(此处确认没有密码学证明)。

3)primary运行Narwhal协议,仅仅在区块中包含batch的摘要。此时,区块交易的可用性通过检查是否交易已经在worker中保证。

4)primary若发生区块缺失,则需要通知worker拉取相应的区块交易。

注:worker的作用仅仅是起到细粒度的对交易池传输分层,让Narwahl协议和上层共识协议每次以几乎相同的传输量平稳运行,保证交易batch比区块先到达验证者节点

Narwhal交易池特点

  • 验证者节点上具备高吞吐量的数据可用引擎,该可用性通过密码学证明来保证
  • DAG架构能够快速检索每个区块的交易信息
  • 验证者的可扩展架构,网络、磁盘I/O分离到各个验证者的worker中
  • 共识完全分离架构,共识层可灵活进行替换

Tusk & Bullshark共识协议

Tusk协议是Narwahl论文中的补充共识协议,来源于Dag-Rider,而Bullshark则是Dag-rider的改进版本。共识协议实现的是异步共识,在网络异步时通过random coin产生随机数进而达成共识,保证在异步网络中的活性。可与Narwhal交易池协议单独分离开使用。

从理论上来说,系统的吞吐量主要受限于共识的理论复杂度。从工程实现上说,共识的目的是排序,排序的过程并不关心内容是什么,目的是对特定的“顺序”达成共识。Narwhal通过分离交易的可靠传输过程到交易池中,缓解常规做法中共识协议传输全量的交易内容的压力,使得共识协议每次只需要传输少量交易的引用。分离的设计,好处在于第一无论是异步共识还是半同步共识在运行过程中都不需要关心交易的同步、传输问题;第二,Tusk和Bullshark作为异步共识的作用主要体现在活性上,异步共识没有视图切换的过程,共识中DAG的策略,每个节点都在贡献“区块”(指共识的区块)。不存在由于主节点异常导致的失去活性的局面。因此,从性能的角度来说,异步共识协议的补充对于Sui来说并不是主要优化。