每个人都认为区块链技术(blockchain)会彻底改变企业的交易方式。我们首先介绍一下相关背景。
术语
以下术语在此规范的有限范围内定义,以帮助读者清楚准确的了解这里所描述的概念。
交易(Transaction)
是区块链上执行功能的一个请求。功能是使用链节点(chainnode)来实现的。交易者(Transactor)
是向客户端应用这样发出交易的实体。总账(Ledger)
是一系列包含交易和当前世界状态(World State)的加密的链接块。世界状态(World State)
是包含交易执行结果的变量集合。链码(Chaincode)
是作为交易的一部分保存在总账上的应用级的代码(如智能合约)。链节点运行的交易可能会改变世界状态。验证Peer(Validating Peer)
是网络中负责达成共识,验证交易并维护总账的一个计算节点。非验证Peer(Non-validating Peer)
是网络上作为代理把交易员连接到附近验证节点的计算节点。非验证Peer只验证交易但不执行它们。它还承载事件流服务和REST服务。带有权限的总账(Permissioned Ledger)
是一个由每个实体或节点都是网络成员所组成的区块链网络。匿名节点是不允许连接的。隐私(Privacy)
是链上的交易者需要隐瞒自己在网络上身份。虽然网络的成员可以查看交易,但是交易在没有得到特殊的权限前不能连接到交易者。保密(Confidentiality)
是交易的内容不能被非利益相关者访问到的功能。可审计性(Auditability)
作为商业用途的区块链需要遵守法规,很容易让监管机构审计交易记录。所以区块链是必须的。
模块介绍
Fabric的构架由成员服务(Membership)、区块链服务(Blockchain)和链码服务(Chaincode)三个主要类别构成。这些类别仅仅是Fabric的逻辑结构,并不是在物理上将组件划分成不同的进程、地址空间或者虚拟机。
成员服务(Membership)
成员服务为网络提供身份管理,隐私,保密和可审计性的服务。在一个不带权限的区块链中,参与者是不需要被授权的,且所有的节点都可以同样的提交交易并把它们汇集到可接受的块中,如:它们没有角色的区分。成员服务通过公钥基础设施(Public Key Infrastructure (PKI))和去中心化的/共识技术使得不带权限的区块链变成带权限的区块链。在后者中,通过实体注册来获得长时间的,可能根据实体类型生成的身份凭证(登记证书enrollment certificates)。在用户使用过程中,这样的证书允许交易证书颁发机构(Transaction Certificate Authority (TCA))颁发匿名证书。这样的证书,如交易证书,被用来对提交交易授权。交易证书存储在区块链中,并对审计集群授权,否则交易是不可链接的。
区块链服务
区块链服务通过 HTTP/2 上的点对点(peer-to-peer)协议来管理分布式总账。为了提供最高效的哈希算法来维护世界状态的复制,数据结构进行了高度的优化。每个部署中可以插入和配置不同的共识算法(PBFT, Raft, PoW, PoS)
链码服务
链码服务提供一个安全的,轻量的沙箱在验证节点上执行链码。环境是一个“锁定的”且安全的包含签过名的安全操作系统镜像和链码语言,Go,Java 和 Node.js 的运行时和 SDK 层。可以根据需要来启用其他语言。
事件
验证 peers 和链码可以向在网络上监听并采取行动的应用发送事件。这是一些预定义好的事件集合,链码可以生成客户化的事件。事件会被一个或多个事件适配器消费。之后适配器可能会把事件投递到其他设备,如 Web hooks 或 Kafka。
应用编程接口(API)
fabric的主要接口是 REST API,并通过 Swagger 2.0 来改变。API 允许注册用户,区块链查询和发布交易。链码与执行交易的堆间的交互和交易的结果查询会由 API 集合来规范
命令行界面(CLI)
CLI包含REST API的一个子集使得开发者能更快的测试链码或查询交易状态。CLI 是通过 Go 语言来实现,并可在多种操作系统上操作。
技术架构
其中最明显、最表层的变化,就是曾经的Validating/Non-Validating Peer没有了,取而代之的是Endorser(背书节点)和 Committer(提交节点)以及从Peer中剥离出的共识模块Orderer。而MemberService(成员管理)、Certificate Authority(证书管理)以及加密算法等模块目前我还没有发现有明显的变动。
扩展模块
- Blockchain-explorer
是为了便于Hyperledger应用浏览/查询区块信息、交易相关信息、网络信息(名称、状态,关联节点)、智能合约信息(浏览、调用、部署、查询)和其他相关信息而设计的Web应用。
Blockchain-explorer
是为了便于Hyperledger应用浏览/查询区块信息、交易相关信息、网络信息(名称、状态,关联节点)、智能合约信息(浏览、调用、部署、查询)和其他相关信息而设计的Web应用。Cello
是一个用于部署区块链服务BSAS(Blockchain-as-a-Service)的工具,它可以帮助用户降低创建、管理和删除区块信息的复杂度。Cello的意义在于,它让区块链的定制化成为了可能,也就是说Cello可以在多种环境下:裸机、虚拟机和其他容器之上,提供有自治的多租户服务。Iroha
Hyperledger Iroha 项目由Makoto Takemiya (Soramitsu), Toshiya Cho (Hitachi), Takahiro Inaba (NTT Data), and Mark Smargon (Colu)几个人提出。目前正处于孵化阶段。Iroha项目的目的在于将分布式账本技术便捷的应用于现有的基础项目上。Sawtooth Lake
Sawtooth Lake是Intel主导的区块链应用组件,目的在于实现区块链技术的多用途和可扩展性。从物联网到金融,人们已经尝试将分布式账本技术应用在多个领域。Sawtooth Lake架构将兼顾各类不同的需求。Sawtooth Lake 支持有许可和无需许可的不是方式,并引入了新的共识算法:Proof of Elapsed Time (PoET)。PoET可以减少肌群达到共识所消耗的资源。交易逻辑的管理由Transaction Families负责,从共识管理层剥离。这样将大大减少交易逻辑的约束。
交易流程
交易从发起到最终完成共识一共需要4个步骤
交易流程
交易从发起到最终完成共识一共需要4个步骤
Client想发起一个交易,它首先要把交易的相关信息(propose message)发给它所选择的Endorser节点。这里解释一点,Endorser的选择是有一定范围的,并不是在所有的Endorser里面随意选择,是由交易所属的Chaincode和该Chaincode所定义的Endorsement Policy共同决定的。
Endorser节点收到上述信息后,首先用Client的公钥验证它的签名,然后开始进行模拟交易(不会写到账本里)并核实相关信息(这里省略了一些信息的介绍,太过技术性就略过了),然后根据Endorsement Policy选择是否为该交易背书(Transaction Endorsed),然后把结果发回给提交的Client。
提交交易的Client收集各个Endorser返回的信息,如果得到了“足够”的背书信息后,就说明这个交易通过了Endorsement阶段。其中足够的数量是多少,依然取决于Endorsement Policy是如何规定的;相反如果Client没有收集到足够的信息的话,这个交易会被废止掉,Client可以选择重新发起交易。
而那些通过了Endorsement阶段的交易,就会进入到共识阶段。共识阶段虽然有不同的算法,不过目的都是把有效的交易加入新生成的区块,并通知所有的节点,使他们的账本保持一致性。共识机制要达成的从根本上讲就是一种保证所有节点都认可的一致性状态时序,Fabric v1.0对所有交易消息进行排序并全序广播相关节点。