区块链在中国(1):IBM HyperLedger

在我看来,比特币就是现实中的V字仇杀队,当然现实是更残酷的世界政府,这场博弈关乎着人类文明、政治、社会属性、经济和人权。

IBM HyperLeger 又叫 fabric,你可以把它想象成一个由全社会来共同维护的一个超级账本,没有中心机构拥揽权力,你的每一笔交易都是全网公开且安全的,信用由全社会共同见证。它与Bitcoin的关系就是,你可以利用fabric构建出一个叫Bitcoin的应用来帮助你change the world。

愿景是那么的牛X,貌似正合我们想改变世界的胃口,但是在残酷的现实和世界面前我们永远是天真幼稚的,blockchain需要一步一步脚印来构建它的宏伟蓝图,起码目前是没有将它用于工业生产和国家经济的案例的。

fabric源于IBM,初衷为了服务于工业生产,IBM将44,000行代码开源,是了不起的贡献,让我们可以有机会如此近的去探究区块链的原理,但毕竟IBM是从自身利益和客户利益出发的,并不是毫无目的的去做这项公益事业,我们在看fabric的同时要有一种审慎的思维:区块链不一定非得这样,它跟比特币最本质的非技术区别在哪里。我们先来大致了解一下fabric的关键术语(因为一些词汇用英文更准确,我就不硬翻译了)。

1. Terminology

  • Transaction 它一条request,用来在ledger上执行一个function,这个function是用chaincode来实现的
  • Transactor 发出transaction的实体,比如它可能是一个客户端应用
  • Ledger Legder可以理解为一串经过加密的block链条,每一个block包含着transactions和当前world state等信息
  • World State world state是一组变量的集合,包含着transactions的执行结果
  • Chaincode 这是一段应用层面的代码(又叫smart contract,智能合约),它存储在ledger上,作为transaction的一部分。也就是说chaincode来运行transaction,然后运行结果可能会修改world state
  • Validating Peer 参与者之一,它是一种在网络里负责执行一致性协议、确认交易和维护账本的计算机节点
  • Nonvalidating Peer 它相当于一个代理节点,用来连接transactor和邻近的VP(Validating Peer)节点。一个NVP节点不会去执行transactions但是回去验证它们。同时它也会承担起事件流server和提供REST services的角色
  • Permissioned Ledger 这是一个要求每一个实体和节点都要成为网络成员的blockchain网络,所有匿名节点都不被允许连接
  • Privacy 用来保护和隐蔽chain transactors的身份,当网络成员要检查交易时,如果没有特权的话,是无法追踪到交易的transactor
  • Confidentiality 这个特性使得交易内容不是对所有人可见,只开放给利益相关者
  • Auditability 将blockchain用于商业用途需要遵守规则,方便监管者调查交易记录

2. Architecture

架构核心逻辑有三条:Membership、Blockchain和Chaincode。

2.1 Membership Services

这项服务用来管理节点身份、隐私、confidentiality 和 auditability。在一个 non-permissioned的区块链网络里,参与者不要求授权,所有的节点被视作一样,都可以去submit一个transaction,去把这些交易存到区块(blocks)中。那Membership Service是要将一个 non-permissioned的区块链网络变成一个permissioned的区块链网络,凭借着Public Key Infrastructure (PKI)、去中心和一致性。

2.2 Blockchain Services

Blockchain services使用建立在HTTP/2上的P2P协议来管理分布式账本。提供最有效的哈希算法来维护world state的副本。采取可插拔的方式来根据具体需求来设置共识协议,比如PBFT,Raft,PoW和PoS等等。

2.3 Chaincode Services

Chaincode services 会提供一种安全且轻量级的沙盒运行模式,来在VP节点上执行chaincode逻辑。这里使用container环境,里面的base镜像都是经过签名验证的安全镜像,包括OS层和开发chaincode的语言、runtime和SDK层,目前支持Go、Jave和Nodejs开发语言。

2.4 Events

在blockchain网络里,VP节点和chaincode会发送events来触发一些监听动作。比如chaincode是用户代码,它可以产生用户事件。

2.5 API 和 CLI

提供REST API,允许注册用户、查询blockchain和发送transactions。一些针对chaincode的API,可以用来执行transactions和查询交易结果。对于开发者,可以通过CLI快速去测试chaincode,或者去查询交易状态。


3. Topology

分布式网络的拓扑结构是非常值得研究的。在这个世界里散布着众多参与者,不同角色,不同利益体,各种各样的情况处理象征着分布式网络里的规则和法律,无规则不成方圆。在区块链网络里,有Membership service,有VP节点,NVP节点,一个或多个应用,它们形成一个chain,然后会有多个chain,每一个chain都有各自的安全要求和操作需求。

3.1 单个VP节点网络

最简单的网络就是只包含一个VP节点,因此就省去了共识部分。

3.2 多个VP节点网络

多个VP和NVP参与的网络才是有价值和实际意义的。NVP节点分担VP节点的工作压力,承担处理API请求和events的工作。

而对于VP节点,VP节点间会组成一个网状网络来传播信息。一个NVP节点如果被允许的话可以与邻近的一个VP节点相连。NVP节点是可以省略的,如果Application可以直接和VP节点通讯。

3.3 Multichain

还会存在一个网络里多条chain的情况,各个chain的意图不一样。


4. Protocol

fabric是用gRPC来做P2P通讯的,是一个双向流消息传递。使用 Protocol Buffer来序列化要传递的数据结构。

4.1 Message

message分四种:Discovery,Transaction,Synchronization 和 Consensus。每一种信息下还会包含更多的子信息,由payload指出。

payload是一个不透明的字节数组,它包含着一些对象,比如 Transaction 或者 Response。例如,如果 type 是 CHAIN_TRANSACTION,那么 payload 就是一个 Transaction的对象。

message Message {
   enum Type {
        UNDEFINED = 0;

        DISC_HELLO = 1;
        DISC_DISCONNECT = 2;
        DISC_GET_PEERS = 3;
        DISC_PEERS = 4;
        DISC_NEWMSG = 5;

        CHAIN_STATUS = 6;
        CHAIN_TRANSACTION = 7;
        CHAIN_GET_TRANSACTIONS = 8;
        CHAIN_QUERY = 9;

        SYNC_GET_BLOCKS = 11;
        SYNC_BLOCKS = 12;
        SYNC_BLOCK_ADDED = 13;

        SYNC_STATE_GET_SNAPSHOT = 14;
        SYNC_STATE_SNAPSHOT = 15;
        SYNC_STATE_GET_DELTAS = 16;
        SYNC_STATE_DELTAS = 17;

        RESPONSE = 20;
        CONSENSUS = 21;
    }
    Type type = 1;
    bytes payload = 2;
    google.protobuf.Timestamp timestamp = 3;
}

4.1.1 Discovery Messages

一个新启动的节点,如果CORE_PEER_DISCOVERY_ROOTNODE(ROOTNODE是指网络中其它任意一个节点的IP)被指定了,它就会开始运行discovery协议。而ROOTNODE就作为最一开始的发现节点,然后通过ROOTNODE节点进而发现全网中所有的节点。discovery协议信息是DISC_HELLO,它的payload是一个HelloMessage对象,同时包含信息发送节点的信息:

message HelloMessage {
  PeerEndpoint peerEndpoint = 1;
  uint64 blockNumber = 2;
}
message PeerEndpoint {
    PeerID ID = 1;
    string address = 2;
    enum Type {
      UNDEFINED = 0;
      VALIDATOR = 1;
      NON_VALIDATOR = 2;
    }
    Type type = 3;
    bytes pkiID = 4;
}

message PeerID {
    string name = 1;
}
属性 含义
PeerID 在启动之初定义的或者在配置文件中定义的该节点的名字
PeerEndpoint 描述该节点,并判断是否是NVP和VP节点
pkiID 该节点的加密ID
address ip:port
blockNumber 该节点目前拥有的blockchain的高度

如果一个节点接收到DISC_HELLO信息,发现里面的block height高于自己目前的block height,它会立即发送一个同步协议来与全网同步自己的状态(mark:但是在源码层面似乎并没有实现同步这个逻辑)。

在这个刚加入节点完成DISC_HELLO这轮消息传递后,接下来回周期性的发送DISC_GET_PEERS来发现其它加入网络中的节点。为了回复DISC_GET_PEERS,一个节点会发送DISC_PEERS。

4.1.2 Synchronization Messages

Synchronization 协议是接着上面所说的discovery协议开始的,当一个节点发现它的block的状态跟其它节点不一致时,就会触发同步。该节点会广播(broadcast)三种信息:SYNC_GET_BLOCKS , SYNC_STATE_GET_SNAPSHOT 或者

SYNC_STATE_GET_DELTAS,同时对应接收到三种信息:SYNC_BLOCKS , SYNC_STATE_SNAPSHOT 或者 SYNC_STATE_DELTAS。

目前fabric嵌入的共识算法是pbft。

SYNC_GET_BLOCKS 会请求一系列连续的block,发送的数据结构中payload将是一个SyncBlockRange对象。

message SyncBlockRange {
    uint64 correlationId = 1;
    uint64 start = 2;
    uint64 end = 3;
}

接收的节点会回复SYNC_BLOCKS,它的payload是一个SyncBlocks对象:

message SyncBlocks {
    SyncBlockRange range = 1;
    repeated Block blocks = 2;
}

start和end表示起始和结束的block。例如start=3, end=5,代表了block 3,4,5;start=5, end=3,代表了block 5,4,3。

SYNC_STATE_GET_SNAPSHOT 会请求当前world state的一个snapshot,该信息的payload是一个SyncStateSnapshotRequest对象:

message SyncStateSnapshotRequest {
    uint64 correlationId = 1;
}

correlationId是发出请求的peer用来追踪对应的该信息的回复。收到该消息的peer会回复SYNC_STATE_SNAPSHOT,它的payload是一个SyncStateSnapshot对象:

message SyncStateSnapshot {
    bytes delta = 1;
    uint64 sequence = 2;
    uint64 blockNumber = 3;
    SyncStateSnapshotRequest request = 4;
}

SYNC_STATE_GET_DELTAS 默认Ledger会包含500个transition deltas。delta(j)表示block(i)和block(j)之间的状态转变(i = j -1)。

4.1.3 Consensus Messages

Consensus framework会将接收到的CHAIN_TRANSACTION转变成CONSENSUS,然后广播给所有的VP节点。

4.1.4 Transaction Messages

在fabric中的交易有三种:Deploy, Invoke 和 Query。Deploy将指定的chaincode安装到chain上,Invoke和Query会调用已经部署好的chaincode的函数。

4.2 Ledger

Ledger主要包含两块:blockchain和world state。blockchain就是一系列连在一起的block,用来记录历史交易。world state是一个key-value数据库,当交易执行后,chaincode会将state存在里面。

4.3 Consensus Framework

consensus framework包含了三个package:consensus、controller和helper。

  • consensus.Communicator用来发送消息给其他的VP节点
  • onsensus.Executor用于交易的启动、执行和回滚,还有preview、commit
  • controller指定被VP节点使用的consensus plugin
  • helper用来帮助consensus plugin与stack交互,例如维护message handler

目前有两个consensus plugin:pbft和noops。

pbft是 微软论文PBFT共识算法的一个实现。

noops 用于开发和测试,它没有共识机制,但是会处理所有consensus message,所以如果要开发自己的consensus plugin,从它开始吧。



接下来就是fabric的security部分,涉及加密和密码学,以上是从一个分布式系统的角度来描述这个开源项目,接下来的security部分并不是我的强项,暂且先不切入,留到以后的章节去尝试阐述。关于区块链接下来的部分,我会从源码的角度深入剖析这个分布式系统,以及我们如何入手去开发。

时间: 2024-10-08 19:29:55

区块链在中国(1):IBM HyperLedger的相关文章

区块链组织-超级账本(Hyperledger)的简介

区块链上有国外比较著名的组织比如R3联盟.超级账本(Hyperledger),国内的中国区块链研究联盟(China Blockchain Research Alliance).中国分布式总账基础协议联盟(China Ledger联盟).金融区块链合作联盟等. 超级账本(Hyperledger)是Linux基金会于2015年发起的推进区块链数字技术和交易验证的开源项目,目标是让成员共同合作,共建开放平台,满足来自多个不同行业各种用户案例,并简化业务流程.创始人有IBM.Intel.思科等大公司.2

区块链在中国怎么练?

区块链技术被誉为第四次工业革命代表性成果之一,“最有潜力触发第五轮颠覆性革命浪潮的核心技术”,代表着互联网的未来,具有划时代意义.它被认为是与1975年的个人计算机.1993年的因特网同样具有革命性的信息技术突破. 当前,区块链正在成为全球技术发展的前沿阵地,区块链技术应用覆盖到数字金融.物联网.智能制造.供应链管理.数字资产交易等多个领域,全球主要国家都在加快布局区块链技术发展.继英国.德国等国家将区块链上升为国家发展战略之后,在我国对区块链技术的重视也上升到了前所未有的高度.日前,全国工商联

当IBM区块链遇到供应链金融,一步跨入信用+数据新经济时代

自从2016年突然在国内出现了区块链技术的爆火,国内很多金融企业乃至非金融企业都开始关注这一被认为是下一代互联网技术的黑科技.尽管区块链的技术体系和应用框架还处于早期阶段,但这并不能阻挡国内企业实践区块链技术的热情,其中一个主要的跨金融场景就是供应链金融. 国内一家叫作云南九天投资控股集团有限公司(以下简称:九天集团)的供应链金融公司在IBM的帮助下实现了用区块链改造供应链金融,通过区块链网络可把企业的收款账期间缩短到货物交付当天或隔天(T+0到T+1).也就是说只要在区块链电子账本中输入交货信

区块链:价值网络的中国机遇

本文转自 http://blog.sina.com.cn/s/blog_182cf59430102xebs.html 互联网实现了信息专递,而区块链则实现了价值传递.反观20世纪90年代以来互联网对人类社会发展的巨大贡献,区块链也因此被追捧为下一个数字时代的新动力. 作为一项创新的技术架构,有人将区块链比作20世纪90年代的互联网基础协议TCP/IP,而将基于区块链所形成的新互联网称为价值网络:也有人将区块链比作更为具体的SMTP协议,认为互联网实现了信息传递,而区块链则实现了价值传递. 反观2

HyperLedger Fabric Introduction——区块链超级账本介绍

介绍 HyperLedger Fabric是一个基于模块化架构的分布式账本解决方案平台,它拥有深度加密.便捷扩展.部署灵活及可插拔等特性.它设计之初的目的是支持不同组件的可插拔实现,并适应整个经济生态系统中存在的复杂性和高精度性. HyperLedger Fabric与其它的区块链平台解决方案相比,提供了一种独特的扩展便捷和灵活部署的架构.它更多的适用于联盟链形式,即适合企业级之间的区块链联盟方向,建立在可信任的基础上.如果是企业级区块链部署的话,建议可以采用HyperLedger Fabric

区块链向前走:步步奇葩,还是步步生花?

(上图为Linux基金会HyperLedger超级账本项目执行董事Brian Behlendorf) 区块链恐怕是时下最热门的前沿技术了.这项兴起于比特币的技术,现在已经被视为金融业和许多其他行业的颠覆性技术.尽管区块链的技术体系和应用框架还处于早期阶段,但这并不能阻挡上至行业巨头下至创业公司的热情. 2016年6月30日,Linux基金会下属的HyperLedger超级账本项目宣布了7位新入成员,其中包括莫斯科证券交易所和来自中国的三家技术公司.自去年12月成立以来,超级账本项目已经从最开始的

区块链从概念到落地,多样化应用激活大数据经济

随着比特币在今年创下一轮又一轮令人咋舌的新高,比特币的底层技术区块链也迎来了爆发式的阶段.麦肯锡公司最近向美国联邦保险咨询委员会提交了一份区块链技术报告,报告把2009年以2016年称为"黑暗时代",其间所有区块链解决方案都基于比特币,而区块链的新时代将从2016年开始,超过100种区块链技术解决方案已被探索.麦肯锡认为,基于区块链目前的发展速度,区块链解决方案也许会在未来5年达到全部潜力. 在今年5月的Consensus 2017全球区块链大会上,来自全球数百位区块链专家和数千位从业

比特币下车, 区块链不死: 资本下一站, 请关注这些公司

ICO被封杀,比特币也就随之被普遍认为是"死了".问题是下一步会怎样?不管市场如何变化,资本是永远不会"死"的.在这个流动性早就严重过剩的时代,人们实际上关心的并不是哪个项目的死与活,而是资本将会往哪个方向流动?这才是最具本质性的问题. 这些年来随着比特币的炒作,多数人似懂非懂地都知道了另一个词:区块链.甚至有不少人以为比特币就是区块链,而区块链也就是比特币本身.比特币死了,区块链是不是也跟着死了?笔者的意见是区块链不会死. A. 区块链不是比特币,而是一种新兴的技

区块链学习路线

2018年春节最火热的概念应该就是区块链了,从百度的莱茨狗和网易星球刷屏朋友圈,到3点钟区块链无眠群的大火, 大佬们纷纷进军区块链,不了解区块链好像错过了什么,这里把自己学习区块链过程中的一些资料进行索引,可以循序渐进的了解区块链技术及其应用. 一.目标 比特币发展历史,挖矿以及相关应用 区块链底层技术,如共识算法, 侧链技术, 密码学知识等,理解PKI基本知识和原理 研究以太坊技术,了解ERC20,能够自行开发DAPP 熟悉Hyperledger Fabric 1.0架构,了解其业务流程和设计