论文部分内容阅读
摘 要:目前市场供应链环节存在虚假供应信息、数据质量差等问题。区块链技术具有数据防篡改、多方共享、可溯源、分布式存储等优势,能有效解决这些问题,但初始上链数据是否真实需要进行判定。充分利用联盟链具有的多方组织、共同维护、支持智能合约等优势,设计基于Fabric联盟链的个性化背书方案,在数据上链之前可通过智能合约对上链数据进行校验,创新性地解决了初始上链数据的失真问题。
关键词:区块链;联盟链;智能合约;个性化背书
中图分类号:TP311 文献标识码:A 文章编号:2096-4706(2021)06-0180-05
Research and Design of Personalized Endorsement Scheme Based on
Fabric Alliance Chain
LI Jingui
(State Information Center,Beijing 100045,China)
Abstract:At present,there are problems such as false supply information and poor data quality in the market supply chain link. Blockchain technology has the advantages of data tamper proof,multi-party sharing,traceability,distributed storage and so on,which can effectively solve the above problems. But whether the initial linked data is true or not,which needs to be judged. Making full use of the advantages of multiple organizers,joint maintenance,support for smart contracts owned by alliance chain,this paper designs a personalized endorsement scheme based on the Fabric alliance chain. Before the data is linked, the linked data can be verified by smart contract, which innovatively solves the distortion problem of initial linked data.
Keywords:blockchain;alliance chain;smart contract;personalized endorsement
0 引 言
中本聪2008年发布比特币白皮书[1],首次提出“区块链”概念。本质上,区块链是一种分布式数据库,具有去中心化、可追溯、不可篡改等特点,这使得区块链技术迅速发展,体现了巨大的创新和应用价值。根据参与者的不同,区块链可以分为公有链、联盟链和私有链。联盟链由若干组织一起合作维护,对参与者有准入控制,只允许带有权限的参与者加入和退出。超级账本(Hyperledger)是首个面向企业场景的联盟链分布式账本服务,它要求参与账本的各方有一定的信任前提,属于同一“联盟”。
在供应链领域,区块链技术可精准记录每一环节的订单信息,具有不可篡改等特性。但实践中也存在一些不足。供应链金融领域,梁等人[2]针对信息不对称、信任传递难等难题,提出了将区块链技术与供应链金融结合,以共享账本实现商流、资金流、信息流的统一,实现自动清结算。储等人[3]提出了将区块链的分布式账本、智能合约和加密技术引入供应链金融业务环节,实现了参与各方信息对称、核心企业信用传递、流程可视、风险可控、服务全覆盖等。刘军[4]设计了一种基于区块链的智能保兑仓供应链金融业务,解决了原始上链数据可靠性问题。供应链溯源领域,曾等人[5]建立了物联网+区块链的食品安全追溯系统架构,实现了快速定位风险源头。刘等人[6]设计了一个使用公有链和私有链的防伪溯源系统,实现了信息防篡改、快速定位相关责任人等。柳等人[7]设计了基于Fabric的农产品追溯系统,具有责任主体清晰、追溯成本低、无法被篡改等優势。
1 问题提出
基于区块链或联盟链的供应链信息系统,各参与方提交的信息通过区块链或联盟链共享。在各方角色平等不存在“审核”或者“管理者”角色的情况下,虚假信息将无法被有效识别。联盟链的各参与方存在一定的信任基础,属于同一联盟。各参与方提交上链的信息,由各参与方拥有的联盟成员身份提供信用保障,由此解决了供应链环节中可能存在虚假信息、数据质量差等问题。但受限于区块链技术原理,区块链或联盟链都无法保证初始上链数据的真实性。若遇到上链数据为假的情况,交易处理中是无法检查出虚假数据的。因此供应链上的虚假信息问题不能完全避免。
如何确保区块链应用的初始区块可信,即在供应链场景下确保初始上链数据可信,是整个供应链应用能否可靠运行的关键。
2 关键技术
本章主要介绍后文将用到的对等网络、密码学、共识算法等关键技术,每项技术对解决初始上链数据的真实性问题都必不可少。
2.1 区块链
区块链包含交易、区块、链。交易是指一次对账本的操作,结果是改变账本状态,区块记录了在一段时间内交易的集合,区块按发生顺序串联成链。以比特币为代表的数字货币、以以太坊为代表的“去中心化”应用、以超级账本(Hyperledger)为代表的企业级分布式账本,是当前三种典型的区块链应用场景[8]。 区块负责记录一系列有序、不可篡改的状态转移记录,区块串联成链,结构如图1所示。
区块链的第一个区块是创世区块。每个区块包括区块头和交易体,区块头包含前一区块的哈希值、前一区块交易体的哈希值、时间戳等信息。交易体的交易信息有序存储,不仅区块内的交易是有序的,而且区块之间也是有序的。区块内的数据篡改,必然会影响下一区块的区块头中记录的哈希值。因此,最新的区块(图1中区块N)哈希值包含了从创世区块以来的所有交易信息。任何一个区块的任何一项篡改,都会影响最后一个区块的哈希值。因此区块链信息具有不可篡改性。
2.2 Hyperledger和Fabric
由Linux基金會于2015年12月主导发起,由面向不同方向和场景的子项目构成,包括Fabric、Sawtooth、Iroha、Blockchain Explorer、Cello、Indy、Composer、Burrow等顶级项目。
Fabric是Hyperledger项目之一,面向的是联盟链应用场景。由众多组织组成一个联盟,每个单独的组织都构成一个信任域,组织内的实体彼此信任[9]。联盟在整体上定义了共同的规则和政策以及共享的业务逻辑。Fabric引入了智能合约的去中心化管理、协作和共识所用的新链码应用模式、私有数据的优化增强、新的外部链码启动器、新的状态数据库缓存和新的基于Alpine Linux的Docker镜像[10]等技术。
2.3 对等网络
对等网络(Peer-to-peer networking,P2P)是点到点的通信网络,网络中所有节点的地位平等,节点间可以直接通信,不存在中心化的控制机制[11],提供了去中心化的系统架构。Hyperledger Fabric中,没有使用传统的P2P网络协议,每个节点通过构建gRPC对等服务[12]与其他节点通信,每个节点既是客户端也是服务端。
2.4 密码学
2.4.1 哈希算法
哈希算法能将任意长度的二进制明文串映射为固定长度的二进制串(哈希值),实现正向快速、逆向困难、输入敏感、抗碰撞的功能特点[8]。在区块链中,哈希算法常用于生成交易ID、实现区块链接等。
2.4.2 签名和验签
签名和验签基于非对称加密原理[8],在供应链应用中用于证实数字内容的完整性、确认来源,并使其具有不可抵赖性。
2.4.3 加解密算法
加密过程使用加密算法和加密密钥对明文进行加密,获得密文,解密过程使用解密算法和解密密钥对密文进行解密,获得明文。分为对称加密(指加密密钥和解密密钥相同,不能用于签名)和非对称加密(指加密密钥和解密密钥不同,一般适用于签名或密钥协商)。
2.4.4 数字证书
用于解决非对称加密算法和数字签名中公钥分发的安全问题[8],通常由证书认证机构(Certification Authority,CA)来进行签发和背书,如DigiCert、GlobalSign、VeriSign等[8]。此外,用户也可自行搭建CA系统,在私有网络中进行使用。
2.5 共识算法
指在去中心化的区块链网络中,多个节点对某个状态达成一致结果的过程。根据容错类型,可以分为拜占庭容错和非拜占庭容错两类[8]。由于联盟链对成员有准入控制,主要使用PBFT、Paxos、Raft等算法[13]。Raft共识算法中有领导者(Leader)、候选领导者(Candidate)和跟随者(Follower)3类角色,可实现多个决策达成一致的问题[8]。
3 基于Fabric的个性化背书方案设计
本章介绍基于Fabric的交易架构,分析了联盟链中背书节点和用户链码交互的过程,设计了适用于联盟链的个性化背书方案。
3.1 Fabric交易系统角色和网络拓扑
3.1.1 Fabric交易系统角色
Fabric中参与交易的角色有4种[8]:
(1)客户端:信息系统和底层之间交互的媒介节点,通过调用Fabric网络中Peer和Orderer提供的gRPC远程服务访问接口,实现操作Fabric网络以及运行在网络中的链码。
(2)Peer:网络中负责接收交易请求、维护一致账本的节点统称,包含了锚节点(Anchor)、背书节点(Endorser)、确认节点(Committer)。锚节点是唯一能与Orderer进行通信的节点,一个组织内只有一个锚节点,在网络初始化时被指定。背书节点能够执行所有交易提案,由交易相关的链代码的背书策略指定。所有的Peer都是确认节点,负责验证从Orderer接收到的区块是否有效和交易是否有效。若交易有效,则更新区块上的状态数据。
(3)排序节点Orderer:主要负责对收到的交易信息在网络中进行排序,将排序好的交易按照固定时间间隔打包,划分成区块后,分发给锚节点。Fabric版本演变过程中,出现了Solo、Kafka和Etcdraft三种主要的共识模式。Solo共识模式只有一个排序节点;Kafka模式依赖于外部的Kafka集群系统承担排序工作,Kafka模式下排序节点充当生产者(接收来自客户端的交易)和消费者(向组织分发排好的交易)的角色;在Etcdraft共识模式中,排序节点之间直接建立连接,依赖外部系统。
(4)证书颁发机构CA:主要负责对身份证书进行管理,包括生成、撤销等操作。只有被CA机构认可的身份才能够在Fabric上进行交易。
3.1.2 Fabric网络拓扑 Fabric的典型网络拓扑图如图2所示。
客户端向CA机构表明身份、获取身份证书,用以后续的“交易提案”和“提交交易”。客户端向组织1和组织2的背书节点发送交易提案。
组织1和组织2是逻辑概念,它们分别对应一组Peer节点。组织1和组织2各自只有一个锚节点,用于从排序节点接收区块,然后通过Gossip协议在组织内部进行扩散。组织1和组织2是独立的,不会进行相互通信,共同的数据来源于排序节点。
排序节点接收客户端提交的交易后进行排序,然后打包广播给各组织的锚节点。图2中排序节点基于Etcdraft共识服务,排序节点之间直接建立连接。排序节点会创建Raft協程来处理与其他排序节点的通信。
3.2 Fabric中的交易过程
Fabric中的一笔完整交易,指从客户端提交交易给背书节点开始,到确认节点将状态改变更新到区块中结束。具体包括背书阶段、排序阶段和验证阶段[12],如图3所示。
背书阶段:
(1)客户端向背书节点发起提交交易提案的请求。
(2)背书节点验证消息格式和合法性、检查消息的唯一性以及权限策略。验证通过后,背书节点模拟执行提案,对结果签名,并将签名结果、模拟执行结果、链码执行响应消息等封装为提案响应消息返回给客户端。
(3)客户端检查提案响应消息结果的合法性,以及判断是否按照应用程序定义的背书策略继续执行。检查通过且需要继续执行,进入排序阶段。
排序阶段:
(1)客户端检查收到的所有提案响应消息是否按位相等,检查通过后将提案消息、提案响应消息(含链码执行响应消息、模拟执行结果读写集等)、背书信息列表等信息构造成签名交易消息,提交排序节点。
(2)排序节点对交易进行排序并构造成区块,并向各组织锚节点广播区块。
验证阶段:
(1)锚节点收到区块后,验证交易和区块是否有效。验证通过后,执行区块中的合法交易并更新账本状态,之后将区块同步给组织内的其他节点。
(2)其他节点验证交易和区块。
(3)组织内所有节点账本进行更新。
以上三个阶段,组成了Fabric共识机制。最后,Fabric内多个Peer节点对于某一批交易的发生顺序、合法性以及它们对账本状态进行更新的结果达成一致。
3.3 背书节点和用户链码交互
背书阶段,背书节点收到客户端提交的交易提案后,对提案进行检验。检验通过后,则创建模拟执行这一交易的环境。背书节点和用户链码之间使用gRPC传输协议进行通信,以实现模拟执行交易,如图4所示。
链码容器的shim层是背书节点与用户链码交互的中间层。当用户链码的代码逻辑需要读写账本时,通过shim层发送chaincodeMessage操作给背书节点,由背书节点响应消息。
3.4 个性化背书设计
根据背书节点身份和链下数据,验证初始上链数据真实性,实现个性化背书目的,对初始上链数据进行验真。
3.4.1 背书节点身份获取
Fabric中,成员服务提供者(Membership Service Provider,MSP)抽象代表了一个身份验证的实体。通常一个组织或联盟对应到一个层级化的MSP,同一个组织的成员节点在网络中被认为是同一个身份,代表组织进行签名。同一组织内的成员节点有着相同的MSP信息。资源实体基于MSP对数据签名进行确认。背书节点身份获取过程为:
(1)Peer节点启动前,检查启动配置参数是否就绪。在Peer节点配置文件中,指定了Peer节点的环境变量配置。CORE_PEER_LOCALMSPID为该节点所属组织的MSP的ID值,与所属组织MSP的有关。例如Org1MSP代表属于Org1组织。
(2)如果配置参数缺少MSP变量值,可以通过链码容器的shim层,使用系统函数获得背书节点的CORE_PEER_LOCALMSPID环境变量值。
(3)将CORE_PEER_LOCALMSPID环境变量值传给用户链码,用户链码获得了背书节点的身份。
3.4.2 链码与信息系统对接
为了对上链数据进行校验,在用户链码内实现数据上链前的校验操作,链码需要与信息系统进行交互。链码请求查询信息系统的数据库上链数据是否存在。使用HTTP协议的GET方法,构造由服务器IP、端口号、信息系统的项目名称、项目路径、上链数据组成的GET请求URL地址,向信息系统获取或查询上链数据信息。根据信息系统反馈(TRUE或FALSE),对上链数据的真实性、准确性和完整性进行校验。
3.4.3 具体实现
根据上述方案,本文对个性化背书方案进行了设计实现,包括背书节点、shim、用户链码和链下信息系统4类角色。角色之间的交互执行过程如图5所示。
背书节点首先发起chaincodeMessage交互,由shim通过Invoke()与用户链码交互:
(1)在用户链码Invoke()方法中,用户将数据记入区块链之前,在链码中获取当前节点的CORE_PEER_LOCALMSPID环境变量值。
(2)用户得到当前链码的背书节点身份后,与该身份(代表一个确定的组织)的信息系统进行沟通,依据背书节点身份向所属组织的信息系统发出GET确认数据真实性请求,将上链数据作为参数传递给信息系统。
(3)信息系统收到请求后,在本地数据库中查询数据是否一致。向链码返回TRUE或 FALSE。链码收到消息后继续执行后续逻辑或中止执行后续逻辑。 4 结 论
本文以供应链为场景,提出了区块链应用中普遍存在的初始上链数据真实性问题,通过对区块链、联盟链中的关键技术进行阐述,基于Fabric系统设计了个性化背书方案,实现了在背书阶段通过确认用户身份、与信息系统进行交互对自定义数据进行确认的结果,给出了个性化背书方案的执行过程。本文从解决供应链系统中初始上链数据的真实性出发,设计的系统不仅适用于供应链场景,技术实现思路也可以拓展到基于联盟链的数据查询、数据确认以及其他逻辑场景。
参考文献:
[1] NAKAMOTO S. Bitcoin A Peer-to-Peer Electronic Cash System [EB/OL].[2020-12-09].https://bitcoin.org/en/bitcoin-paper.
[2] 梁春丽,叶纯青.“区块链+供应链金融”的探索之路——访布比壹诺金融CEO张明裕 [J].金融科技时代,2020(2):49-51.
[3] 储雪俭,高博.区块链驱动下的供应链金融创新研究 [J].金融发展研究,2018(8):68-71.
[4] 刘军.基于区块链技术的供应链金融应用研究——以智能保兑仓融资为例 [J].商讯,2020(3):5-7.
[5] 曾小青,彭越,王琪.物联网加区块链的食品安全追溯系统研究 [J].食品与机械,2018,34(9):100-105.
[6] 刘家稷,杨挺,汪文勇.使用双区块链的防伪溯源系统 [J].信息安全学报,2018,3(3):17-29.
[7] 柳祺祺,夏春萍.基于区块链技术的农产品质量溯源系统构建 [J].高技术通讯,2019,29(3):240-248.
[8] 楊保华,陈昌.区块链原理、设计与应用 [M].北京:机械工业出版社,2017:20-316.
[9] ANDROULAKI E,DE CARO A,NEUGSCHWANDTNER M,et al.Endorsement in Hyperledger Fabric[C]//2019 IEEE International Conference on Blockchain (Blockchain).Atlanta:IEEE,2019:510-519.
[10] Hyperledger Fabric. What’s new in Hyperledger Fabric v2.0 [EB/OL].(2020-01-30).https://hyperledger-fabric.readthedocs.io/en/release-2.0/whatsnew.html.
[11] 周文莉,吴晓非.P2P技术综述 [J].计算机工程与设计,2006(1):76-79.
[12] ANDROULAKI E,BARGER A,BORTNIKOV V,et al. Hyperledger fabric:a distributed operating system for permissioned blockchains [C]//EuroSys’18:Proceedings of the Thirteenth EuroSys Conference.Porto:Association for Computing Machinery,2018:1-15.
[13] 袁勇,倪晓春,曾帅,等.区块链共识算法的发展现状与展望 [J].自动化学报,2018,44(11):2011-2022.
作者简介:李金贵(1988—),男,汉族,山东枣庄人,工程师,硕士研究生,研究方向:位置大数据、政府信息化。
关键词:区块链;联盟链;智能合约;个性化背书
中图分类号:TP311 文献标识码:A 文章编号:2096-4706(2021)06-0180-05
Research and Design of Personalized Endorsement Scheme Based on
Fabric Alliance Chain
LI Jingui
(State Information Center,Beijing 100045,China)
Abstract:At present,there are problems such as false supply information and poor data quality in the market supply chain link. Blockchain technology has the advantages of data tamper proof,multi-party sharing,traceability,distributed storage and so on,which can effectively solve the above problems. But whether the initial linked data is true or not,which needs to be judged. Making full use of the advantages of multiple organizers,joint maintenance,support for smart contracts owned by alliance chain,this paper designs a personalized endorsement scheme based on the Fabric alliance chain. Before the data is linked, the linked data can be verified by smart contract, which innovatively solves the distortion problem of initial linked data.
Keywords:blockchain;alliance chain;smart contract;personalized endorsement
0 引 言
中本聪2008年发布比特币白皮书[1],首次提出“区块链”概念。本质上,区块链是一种分布式数据库,具有去中心化、可追溯、不可篡改等特点,这使得区块链技术迅速发展,体现了巨大的创新和应用价值。根据参与者的不同,区块链可以分为公有链、联盟链和私有链。联盟链由若干组织一起合作维护,对参与者有准入控制,只允许带有权限的参与者加入和退出。超级账本(Hyperledger)是首个面向企业场景的联盟链分布式账本服务,它要求参与账本的各方有一定的信任前提,属于同一“联盟”。
在供应链领域,区块链技术可精准记录每一环节的订单信息,具有不可篡改等特性。但实践中也存在一些不足。供应链金融领域,梁等人[2]针对信息不对称、信任传递难等难题,提出了将区块链技术与供应链金融结合,以共享账本实现商流、资金流、信息流的统一,实现自动清结算。储等人[3]提出了将区块链的分布式账本、智能合约和加密技术引入供应链金融业务环节,实现了参与各方信息对称、核心企业信用传递、流程可视、风险可控、服务全覆盖等。刘军[4]设计了一种基于区块链的智能保兑仓供应链金融业务,解决了原始上链数据可靠性问题。供应链溯源领域,曾等人[5]建立了物联网+区块链的食品安全追溯系统架构,实现了快速定位风险源头。刘等人[6]设计了一个使用公有链和私有链的防伪溯源系统,实现了信息防篡改、快速定位相关责任人等。柳等人[7]设计了基于Fabric的农产品追溯系统,具有责任主体清晰、追溯成本低、无法被篡改等優势。
1 问题提出
基于区块链或联盟链的供应链信息系统,各参与方提交的信息通过区块链或联盟链共享。在各方角色平等不存在“审核”或者“管理者”角色的情况下,虚假信息将无法被有效识别。联盟链的各参与方存在一定的信任基础,属于同一联盟。各参与方提交上链的信息,由各参与方拥有的联盟成员身份提供信用保障,由此解决了供应链环节中可能存在虚假信息、数据质量差等问题。但受限于区块链技术原理,区块链或联盟链都无法保证初始上链数据的真实性。若遇到上链数据为假的情况,交易处理中是无法检查出虚假数据的。因此供应链上的虚假信息问题不能完全避免。
如何确保区块链应用的初始区块可信,即在供应链场景下确保初始上链数据可信,是整个供应链应用能否可靠运行的关键。
2 关键技术
本章主要介绍后文将用到的对等网络、密码学、共识算法等关键技术,每项技术对解决初始上链数据的真实性问题都必不可少。
2.1 区块链
区块链包含交易、区块、链。交易是指一次对账本的操作,结果是改变账本状态,区块记录了在一段时间内交易的集合,区块按发生顺序串联成链。以比特币为代表的数字货币、以以太坊为代表的“去中心化”应用、以超级账本(Hyperledger)为代表的企业级分布式账本,是当前三种典型的区块链应用场景[8]。 区块负责记录一系列有序、不可篡改的状态转移记录,区块串联成链,结构如图1所示。
区块链的第一个区块是创世区块。每个区块包括区块头和交易体,区块头包含前一区块的哈希值、前一区块交易体的哈希值、时间戳等信息。交易体的交易信息有序存储,不仅区块内的交易是有序的,而且区块之间也是有序的。区块内的数据篡改,必然会影响下一区块的区块头中记录的哈希值。因此,最新的区块(图1中区块N)哈希值包含了从创世区块以来的所有交易信息。任何一个区块的任何一项篡改,都会影响最后一个区块的哈希值。因此区块链信息具有不可篡改性。
2.2 Hyperledger和Fabric
由Linux基金會于2015年12月主导发起,由面向不同方向和场景的子项目构成,包括Fabric、Sawtooth、Iroha、Blockchain Explorer、Cello、Indy、Composer、Burrow等顶级项目。
Fabric是Hyperledger项目之一,面向的是联盟链应用场景。由众多组织组成一个联盟,每个单独的组织都构成一个信任域,组织内的实体彼此信任[9]。联盟在整体上定义了共同的规则和政策以及共享的业务逻辑。Fabric引入了智能合约的去中心化管理、协作和共识所用的新链码应用模式、私有数据的优化增强、新的外部链码启动器、新的状态数据库缓存和新的基于Alpine Linux的Docker镜像[10]等技术。
2.3 对等网络
对等网络(Peer-to-peer networking,P2P)是点到点的通信网络,网络中所有节点的地位平等,节点间可以直接通信,不存在中心化的控制机制[11],提供了去中心化的系统架构。Hyperledger Fabric中,没有使用传统的P2P网络协议,每个节点通过构建gRPC对等服务[12]与其他节点通信,每个节点既是客户端也是服务端。
2.4 密码学
2.4.1 哈希算法
哈希算法能将任意长度的二进制明文串映射为固定长度的二进制串(哈希值),实现正向快速、逆向困难、输入敏感、抗碰撞的功能特点[8]。在区块链中,哈希算法常用于生成交易ID、实现区块链接等。
2.4.2 签名和验签
签名和验签基于非对称加密原理[8],在供应链应用中用于证实数字内容的完整性、确认来源,并使其具有不可抵赖性。
2.4.3 加解密算法
加密过程使用加密算法和加密密钥对明文进行加密,获得密文,解密过程使用解密算法和解密密钥对密文进行解密,获得明文。分为对称加密(指加密密钥和解密密钥相同,不能用于签名)和非对称加密(指加密密钥和解密密钥不同,一般适用于签名或密钥协商)。
2.4.4 数字证书
用于解决非对称加密算法和数字签名中公钥分发的安全问题[8],通常由证书认证机构(Certification Authority,CA)来进行签发和背书,如DigiCert、GlobalSign、VeriSign等[8]。此外,用户也可自行搭建CA系统,在私有网络中进行使用。
2.5 共识算法
指在去中心化的区块链网络中,多个节点对某个状态达成一致结果的过程。根据容错类型,可以分为拜占庭容错和非拜占庭容错两类[8]。由于联盟链对成员有准入控制,主要使用PBFT、Paxos、Raft等算法[13]。Raft共识算法中有领导者(Leader)、候选领导者(Candidate)和跟随者(Follower)3类角色,可实现多个决策达成一致的问题[8]。
3 基于Fabric的个性化背书方案设计
本章介绍基于Fabric的交易架构,分析了联盟链中背书节点和用户链码交互的过程,设计了适用于联盟链的个性化背书方案。
3.1 Fabric交易系统角色和网络拓扑
3.1.1 Fabric交易系统角色
Fabric中参与交易的角色有4种[8]:
(1)客户端:信息系统和底层之间交互的媒介节点,通过调用Fabric网络中Peer和Orderer提供的gRPC远程服务访问接口,实现操作Fabric网络以及运行在网络中的链码。
(2)Peer:网络中负责接收交易请求、维护一致账本的节点统称,包含了锚节点(Anchor)、背书节点(Endorser)、确认节点(Committer)。锚节点是唯一能与Orderer进行通信的节点,一个组织内只有一个锚节点,在网络初始化时被指定。背书节点能够执行所有交易提案,由交易相关的链代码的背书策略指定。所有的Peer都是确认节点,负责验证从Orderer接收到的区块是否有效和交易是否有效。若交易有效,则更新区块上的状态数据。
(3)排序节点Orderer:主要负责对收到的交易信息在网络中进行排序,将排序好的交易按照固定时间间隔打包,划分成区块后,分发给锚节点。Fabric版本演变过程中,出现了Solo、Kafka和Etcdraft三种主要的共识模式。Solo共识模式只有一个排序节点;Kafka模式依赖于外部的Kafka集群系统承担排序工作,Kafka模式下排序节点充当生产者(接收来自客户端的交易)和消费者(向组织分发排好的交易)的角色;在Etcdraft共识模式中,排序节点之间直接建立连接,依赖外部系统。
(4)证书颁发机构CA:主要负责对身份证书进行管理,包括生成、撤销等操作。只有被CA机构认可的身份才能够在Fabric上进行交易。
3.1.2 Fabric网络拓扑 Fabric的典型网络拓扑图如图2所示。
客户端向CA机构表明身份、获取身份证书,用以后续的“交易提案”和“提交交易”。客户端向组织1和组织2的背书节点发送交易提案。
组织1和组织2是逻辑概念,它们分别对应一组Peer节点。组织1和组织2各自只有一个锚节点,用于从排序节点接收区块,然后通过Gossip协议在组织内部进行扩散。组织1和组织2是独立的,不会进行相互通信,共同的数据来源于排序节点。
排序节点接收客户端提交的交易后进行排序,然后打包广播给各组织的锚节点。图2中排序节点基于Etcdraft共识服务,排序节点之间直接建立连接。排序节点会创建Raft協程来处理与其他排序节点的通信。
3.2 Fabric中的交易过程
Fabric中的一笔完整交易,指从客户端提交交易给背书节点开始,到确认节点将状态改变更新到区块中结束。具体包括背书阶段、排序阶段和验证阶段[12],如图3所示。
背书阶段:
(1)客户端向背书节点发起提交交易提案的请求。
(2)背书节点验证消息格式和合法性、检查消息的唯一性以及权限策略。验证通过后,背书节点模拟执行提案,对结果签名,并将签名结果、模拟执行结果、链码执行响应消息等封装为提案响应消息返回给客户端。
(3)客户端检查提案响应消息结果的合法性,以及判断是否按照应用程序定义的背书策略继续执行。检查通过且需要继续执行,进入排序阶段。
排序阶段:
(1)客户端检查收到的所有提案响应消息是否按位相等,检查通过后将提案消息、提案响应消息(含链码执行响应消息、模拟执行结果读写集等)、背书信息列表等信息构造成签名交易消息,提交排序节点。
(2)排序节点对交易进行排序并构造成区块,并向各组织锚节点广播区块。
验证阶段:
(1)锚节点收到区块后,验证交易和区块是否有效。验证通过后,执行区块中的合法交易并更新账本状态,之后将区块同步给组织内的其他节点。
(2)其他节点验证交易和区块。
(3)组织内所有节点账本进行更新。
以上三个阶段,组成了Fabric共识机制。最后,Fabric内多个Peer节点对于某一批交易的发生顺序、合法性以及它们对账本状态进行更新的结果达成一致。
3.3 背书节点和用户链码交互
背书阶段,背书节点收到客户端提交的交易提案后,对提案进行检验。检验通过后,则创建模拟执行这一交易的环境。背书节点和用户链码之间使用gRPC传输协议进行通信,以实现模拟执行交易,如图4所示。
链码容器的shim层是背书节点与用户链码交互的中间层。当用户链码的代码逻辑需要读写账本时,通过shim层发送chaincodeMessage操作给背书节点,由背书节点响应消息。
3.4 个性化背书设计
根据背书节点身份和链下数据,验证初始上链数据真实性,实现个性化背书目的,对初始上链数据进行验真。
3.4.1 背书节点身份获取
Fabric中,成员服务提供者(Membership Service Provider,MSP)抽象代表了一个身份验证的实体。通常一个组织或联盟对应到一个层级化的MSP,同一个组织的成员节点在网络中被认为是同一个身份,代表组织进行签名。同一组织内的成员节点有着相同的MSP信息。资源实体基于MSP对数据签名进行确认。背书节点身份获取过程为:
(1)Peer节点启动前,检查启动配置参数是否就绪。在Peer节点配置文件中,指定了Peer节点的环境变量配置。CORE_PEER_LOCALMSPID为该节点所属组织的MSP的ID值,与所属组织MSP的有关。例如Org1MSP代表属于Org1组织。
(2)如果配置参数缺少MSP变量值,可以通过链码容器的shim层,使用系统函数获得背书节点的CORE_PEER_LOCALMSPID环境变量值。
(3)将CORE_PEER_LOCALMSPID环境变量值传给用户链码,用户链码获得了背书节点的身份。
3.4.2 链码与信息系统对接
为了对上链数据进行校验,在用户链码内实现数据上链前的校验操作,链码需要与信息系统进行交互。链码请求查询信息系统的数据库上链数据是否存在。使用HTTP协议的GET方法,构造由服务器IP、端口号、信息系统的项目名称、项目路径、上链数据组成的GET请求URL地址,向信息系统获取或查询上链数据信息。根据信息系统反馈(TRUE或FALSE),对上链数据的真实性、准确性和完整性进行校验。
3.4.3 具体实现
根据上述方案,本文对个性化背书方案进行了设计实现,包括背书节点、shim、用户链码和链下信息系统4类角色。角色之间的交互执行过程如图5所示。
背书节点首先发起chaincodeMessage交互,由shim通过Invoke()与用户链码交互:
(1)在用户链码Invoke()方法中,用户将数据记入区块链之前,在链码中获取当前节点的CORE_PEER_LOCALMSPID环境变量值。
(2)用户得到当前链码的背书节点身份后,与该身份(代表一个确定的组织)的信息系统进行沟通,依据背书节点身份向所属组织的信息系统发出GET确认数据真实性请求,将上链数据作为参数传递给信息系统。
(3)信息系统收到请求后,在本地数据库中查询数据是否一致。向链码返回TRUE或 FALSE。链码收到消息后继续执行后续逻辑或中止执行后续逻辑。 4 结 论
本文以供应链为场景,提出了区块链应用中普遍存在的初始上链数据真实性问题,通过对区块链、联盟链中的关键技术进行阐述,基于Fabric系统设计了个性化背书方案,实现了在背书阶段通过确认用户身份、与信息系统进行交互对自定义数据进行确认的结果,给出了个性化背书方案的执行过程。本文从解决供应链系统中初始上链数据的真实性出发,设计的系统不仅适用于供应链场景,技术实现思路也可以拓展到基于联盟链的数据查询、数据确认以及其他逻辑场景。
参考文献:
[1] NAKAMOTO S. Bitcoin A Peer-to-Peer Electronic Cash System [EB/OL].[2020-12-09].https://bitcoin.org/en/bitcoin-paper.
[2] 梁春丽,叶纯青.“区块链+供应链金融”的探索之路——访布比壹诺金融CEO张明裕 [J].金融科技时代,2020(2):49-51.
[3] 储雪俭,高博.区块链驱动下的供应链金融创新研究 [J].金融发展研究,2018(8):68-71.
[4] 刘军.基于区块链技术的供应链金融应用研究——以智能保兑仓融资为例 [J].商讯,2020(3):5-7.
[5] 曾小青,彭越,王琪.物联网加区块链的食品安全追溯系统研究 [J].食品与机械,2018,34(9):100-105.
[6] 刘家稷,杨挺,汪文勇.使用双区块链的防伪溯源系统 [J].信息安全学报,2018,3(3):17-29.
[7] 柳祺祺,夏春萍.基于区块链技术的农产品质量溯源系统构建 [J].高技术通讯,2019,29(3):240-248.
[8] 楊保华,陈昌.区块链原理、设计与应用 [M].北京:机械工业出版社,2017:20-316.
[9] ANDROULAKI E,DE CARO A,NEUGSCHWANDTNER M,et al.Endorsement in Hyperledger Fabric[C]//2019 IEEE International Conference on Blockchain (Blockchain).Atlanta:IEEE,2019:510-519.
[10] Hyperledger Fabric. What’s new in Hyperledger Fabric v2.0 [EB/OL].(2020-01-30).https://hyperledger-fabric.readthedocs.io/en/release-2.0/whatsnew.html.
[11] 周文莉,吴晓非.P2P技术综述 [J].计算机工程与设计,2006(1):76-79.
[12] ANDROULAKI E,BARGER A,BORTNIKOV V,et al. Hyperledger fabric:a distributed operating system for permissioned blockchains [C]//EuroSys’18:Proceedings of the Thirteenth EuroSys Conference.Porto:Association for Computing Machinery,2018:1-15.
[13] 袁勇,倪晓春,曾帅,等.区块链共识算法的发展现状与展望 [J].自动化学报,2018,44(11):2011-2022.
作者简介:李金贵(1988—),男,汉族,山东枣庄人,工程师,硕士研究生,研究方向:位置大数据、政府信息化。