锯齿湖(sawtooth)要点

项目简介

sawtooth是Hyperledger下的一个开源项目,虽然不像fabric那么广为人知,却有它独到的设计和应用场景可供借鉴。
项目代码
主要开发语言采用Python,github上收获465 stars。
代码统计

--------------------------------------------------------------------------------
Language                      files          blank        comment           code
--------------------------------------------------------------------------------
Python                          366          14493          19483          49055
C/C++ Header                     38           2718           5697           8843
Go                               78           1553           2036           8419
YAML                             75            462           1067           6404
C++                              29            815            934           4383
Rust                             31            804            560           4371
JSON                              6              0              0           2893
Bourne Again Shell               39            341            395           1701
C                                 2            161            227           1483
JavaScript                       22            360            628           1397
Java                             19            316            457           1334
Protocol Buffers                 32            372           1000           1110

项目文档地址
与fabric相同,它的文档应该也是采用sphinx制作的。文档组织形式相当简洁,而且支持全文检索。
这篇文章可以作为使用sphinx的教程。

与fabric相似之处

除了文档采用相同的制作工具,sawtooth还有以下技术特征与fabric颇为相似:

  • 目标场景定位为企业应用(联盟链)
  • 提供REST api和cli两种集成方式
  • 采用Protobuf定义协议消息体
  • 支持可插拔的共识算法
  • 提供docker部署镜像
  • 提供Event机制用于事件传播和处理
  • 采用Merkle树作为全局状态(Global State)改变的输出共识

接下来聊聊sawtooth的特点:

默认采用的PoET共识

比特币的POW共识的确是公开链的简单有效的共识策略,但是一旦切换到联盟链场景,它通常是最先被换掉的。——它的算力浪费遭人诟病。
每次出块直接乐透抽奖选出一个出块人,显然可以极大地提升交易的实时性和交易通量,PoET(Proof-of-Elapsed-Time)共识就是这么干的。
sawtooth使用一个可信任环境(TEE)如 Intel® Software Guard Extensions (SGX) 来随机选出一个出块人(无法作弊)。
RepChain的无协商随机抽签算法,在每个节点都能获得在网节点的基础上,通过上一区块hash随机抽签选出出块人,达到的效果是等效的,而且并不需要依赖特定的硬件支持。

Transactions and Batches

Transaction Families

sawtooth提出了Transaction Families的概念,认为在特定的场景下会使用到特定的交易集合。
在最底层sawtooth提供了几个内置的核心Transaction Families,包括:

  • 验证节点的注册
  • 部署测试
  • 配置管理
  • 身份及信任证书管理

核心层之上,sawtooth针对特定场景提供针对通用目标的Transaction Families:

  • 用于性能测试和分析的Smallbank基准
  • 集成Hyperledger Burrow提供的EVM,支持对EVM合约的创建和执行
  • 用于块链信息存储

在最上层,sawtooth给出了三个针对应用场景的实例Transaction Families:

  • XO: “井”字格游戏,执行交易时需要验证交易冲突
  • Supply Chain:sawtooth用于供应链的基础设施
  • Track and Trade:为用户跟踪货物在供应链中的移动提供了一种方法。 包括:所有权和保管的历史,以及各种物业的历史,如温度和位置。

Transaction Batches

多个Transaction可以打包为Transaction Batch,Transaction Batch整体作为原子操作,要么Batch内的所有交易都执行,要么都不执行。Transaction Batch简化了客户端所需要的事务操作。
sawtooth允许将来自不同Transaction Families的交易打包到一个Batch中,这个特性简化了了功能复用。
Transaction Batch中必须包含负责打包者的公钥,只有打包者有权将Batch内的交易拆散重新使用。

交易调度

Executor负责交易的执行,在Executor之上,Serial Scheduler负责串行交易的调度执行,Parallel Scheduler负责并行地调度执行交易。

共识机制

sawtooth通过抽象接口,实现了可插拔的共识算法。包括以下三类接口:

  • Consensus.BlockPublisher:负责创建候选块
    Consensus.BlockVerifier:负责对候选块进行验证
    Consensus.ForkResolver:对链分叉进行决策,确定其中一只作为有效链

sawtooth的共识机制可以作为共识模块化设计的参考学习范例。

锯齿湖(sawtooth)要点_第1张图片
共识模块组成图

开发篇

sawtooth的文档介绍了三个方面的开发

应用开发

应用的开发基于sawtooth提供的SDK或者REST api,应用的功能通常体现在构造和提交交易,以及查看状态。
sawtooth提供了三种语言版本的SDK:java、javascript和Python。

Solidity合约的开发

seth-rpc服务负责以 JSON-RPC接口的方式,将以太坊支持的JavaScript API 连接到sawtooth的validator节点以及其支持的Seth Transaction Family(用于部署和调用合约)


锯齿湖(sawtooth)要点_第2张图片
image.png

核心开发

介绍开发环境的搭建和部署

总结

sawtooth是一个以Python实现的开源区块链平台,它提供可插拔的共识机制,并内置了依赖硬件的高效的PoET共识。可应用于供应链追踪场景(高频交易)。
sawtooth的合约执行采用与EVM兼容的开源实现,并直接使用以太坊的javascript API作为自己的合约API。
与fabric只关注与平台不同,sawtooth在项目内进一步给出了应用场景,以及实现细节,对于自行设计实现区块链平台,以及探讨区块链的应用场景(尤其是应用于供应链追踪)具有重要的学习参考价值。

你可能感兴趣的:(锯齿湖(sawtooth)要点)