美国爱达荷州锯齿湖 (图片来自The OutBound)
前面几期分别介绍了超级账本项目结构、Fabric子项目架构、Fabric部署和发布(上述链接均可点击)。本期介绍超级账本另一个子项目Sawtooth Lake(锯齿湖)。更多区块链相关的技术细节,请参考邹均博士等专家和笔者合著的新书《区块链技术指南》。(参见文末) 上期赠书活动由贵州读者"白袍小将"胜出,新书将于近期寄出。
Sawtooth Lake(锯齿湖)是由超级账本联盟成员英特尔(Intel)公司发起的分布式账本平台试验项目,最初发布的时候称为intelledger,在进入超级账本项目后,更名为“锯齿湖”,该名称来源于美国爱达荷州锯齿山上著名的高山湖。
Swatooth Lake是第二个进入超级账本孵化阶段的提案。在超级账本中同时孵化功能相近、设计和实现不同的多个项目,目的是促进更深入地探索各类问题需求和各项目的适配场景。因此,在这些项目的后期,不排除有互相合并或集成的可能。
项目概述
锯齿湖提供了一个构建、部署和运行分布式账本的高度模块化平台,功能上有其独特的地方。譬如,锯齿湖分离了账本和交易,使两者成为松耦合的关系;提出了交易家族的概念,能够扩展到不同的商业领域;适合权限或无权限区块链的可插拔共识算法。
在锯齿湖项目中的分布式账本包括三个组件:
其中,数据模型和交易语言的实现称为“交易家族”(Transaction Family)。尽管用户根据自身账本的需要,可在锯齿湖的基础上开发出定制化的交易家族,锯齿湖项目还是提供了适合构建数字资产市场的三种交易家族,足以用来创建、测试和部署这类市场应用。这三种可直接使用的交易家族分别为:注册账本服务(EndPointRegistry)、测试部署账本(IntegerKey)和数字资产买卖交易系统(MarketPlace)。前两种交易家族内置在锯齿湖的代码内核中,MarketPlace交易家族则是作为应用示例,包含了几乎所有数字资产交易所涉及的元素,如账号、资产、债务、出价等等。用户根据已有的交易家族,能够开发更多的特定领域的交易家族。
项目架构
锯齿湖的设计中包含3个主要的架构层次:账本层、日志层和通信层,如下图所示。
(1)账本层
账本层(Ledgers)从概念上讲是交易类型的数据模型层次。因为其实现是基本通过延展日志层和通信层的功能来完成的。例如系统内置的EndpointRegistry和IntergerKey Registry两个交易家族,以及作为范例的MarketPlace交易家族,都是通过扩展底层功能而来的。
(2)日志层
日志(Journal)层是锯齿湖实现区块链核心功能的层次,实现了共识算法、交易(transaction)、区块(block)、全局存储管理器和数据存储(块存储和键值存储)。其中的区块和交易概念与其他区块链项目比较类似。
交易是指可以更改账本状态的一组操作,操作通常要依照数据模型和表示形式的定义。例如,在IntegerKey 的交易家族中,数据模型是键值对(key/value pair)存储,交易的操作可用设置(set)、增加(inc)和减少(dec)来表达。
区块则是一组交易的集合,是写入账本的单位。在锯齿湖日志的每个区块中,允许有不同类型的交易混合在同一个区块中。
日志层在所有节点之间复制区块数据,采用共识算法确定每个区块的顺序、块内交易顺序以及交易内容。
(3)通信层
通信层主要通过聊天(gossip)协议实现节点之间的通信,主要包括了协议层连接管理和基本的流控制。节点之间的互相发送消息来交换信息,信息通常要封装在不同类型的消息中来传输,如交易消息、交易区块消息、连接消息等。和许多分布式系统一样,在整个架构中,需要在节点之间通过聊天协议发送大量的消息,为此,通信层实现了TokenBucket的机制,以控制数据包的传输速度。
(4)共识算法
锯齿湖项目使用的共识算法有两种:时间消逝证明(Proof of Elapsed Time,PoET)和法定人数投票(Quorum Voting)。
PoET和比特币的工作证明(Proof of Work,PoW)一样都属于彩票算法,即按照一定规则随机地选取出“赢家”节点,由该节点作为区块的主记账者,其他节点则负责验证和确认该节点的结果。
PoET比PoW明显的优势是不需要消耗大量的算力和能耗,但是需要CPU硬件支持SGX (Software Guard Extensions)特性。Intel处理器在Skylake微架构上新增了一组CPU指令集,可以产生一个称为“飞地”(enclave)的代码隔离运行环境,甚至对操作系统内核也可隔离。在这个可信的运行环境中,可以生成公平且可验证的随机等待计时器,在计时器等待结束之后,能够对等待的时间进行签名认证。各个节点间根据退出计时器等待的时间,就可确定那个结点作为主记账人。目前在锯齿湖里面的实现的是飞地模拟环境,并不是一个真正的可信运行环境,因此,暂时不适合在生产环境中使用PoET共识算法。
“法定人数投票算法”是从Ripple和Stellar的共识算法修改而来的,主要用于需要满足交易即刻最终性(finality)的应用。
小结
超级账本是目前最大的区块链开源项目,集结了众多科技和金融界的巨头,目标是建立面向商业应用的分布式账本基础技术。本连载介绍了超级账本项目成立的产生背景和管理方式,并详细介绍了两个孵化期的项目Fabric和Sawtooth Lake的架构原理。Fabric和Sawtooth Lake都提供了分布式账本的实现,两者都采用了可扩展和可插拔的模块化设计,以适应不同场景的需求。Fabric侧重于权限控制、私密性保护和交易性能提高,Sawtooth Lake则注重提供完整的交易家族和节能的共识算法。
由于超级账本成立时间不长,孵化期的项目发展过程中可能会有较大的变化,同时新的提案和项目也会不断增加。因此,本连载主要描述超级账本项目设计的总体原理和技术要点,旨在起到抛砖引玉的作用。(本文节选自《区块链技术指南》)