锯齿湖(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的文档介绍了三个方面的开发

应用开发

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

Solidity合约的开发

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


image.png

核心开发

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

总结

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容

  • 久羁春城不识春, 冰雪皑皑三尺寒。 今日和风忽扶柳, 蚕月雩台当歌归。
    八月的忧愁阅读 353评论 3 1
  • 1. 上周的今天,大学一朋友向我说:我想辞职了。一天到晚都有干不完的活,连休息时领导就要打个电话喊我去处理一点事儿...
    木里兮阅读 718评论 1 3