刘 瑶
(天津理工大学管理学院,天津 300384)
当下,区块链技术呈现着蓬勃发展的态势,这一新兴技术正在被积极应用于金融、商业、公益等领域,发展前景广阔。区块链技术是近年来出现的分布式账本技术,具有去中心化、公开透明、不可更改、不可伪造等特点[1]。通过利用点对点通信、非对称加密、共识机制、时间戳等技术,大大减少了交易的中间环节以及复杂度,实现了中心化分布式系统。物流存储是现代物流系统的关键环节。在供应链流转过程中,货物将经历不同的环节。通常情况下,货物经过多次流转后放入仓库进行存储,且存放时间较长。因此仓储单据就显得尤为重要。由此可见,仓库是仓储物流中的关键节点,而仓储单据是供应链和仓储流转过程中的重要凭证。由于供应链之间的信用关系只能建立在可靠的仓储上,因而存储过程中必须使用仓单来记录信息。仓单不仅是保管人支付货款的重要凭证,还是以可信仓库货物为核心的信息表达方式。因此,如果相关信息可以存储在以仓库存储空间为中心的区块链中,建立可靠完整的商品信息网络,对商品进行监管;将有助于在供应链的所有参与者之间建立信任,促进仓库收据的可靠登记与存储,同时也将为电子仓单的便捷交易创造机会。
区块链综合了共识机制、数据存储和密码账本等相关技术,实现了点对点信任关系与时序不可篡改性。通过智能合约,实现了数据的挖掘以及价值互联,使其具备了分布式的总体特征。以区块链技术为支撑的系统网络,通过所有节点就能够完成对系统的监测和维护,不受中央权威机构的管制和监督。各节点利用工作量证明等算法,将运行过程中产生的交易信息及时、安全地封装到区块里。区块的内部由区块头与区块体两部分组成,其中区块头的主要作用是对当前区块的地址、时间戳、随机数、版本号、目标哈希值等的封装[2]。在封装完成后,通过P2P系统实现区块的全网广播。所有区块都由哈希技术紧密连接,形成高度安全的链式存储结构——区块链。通过区块链,不仅可以查询和跟踪整个交易过程的真实数据,还可以确保数据不被篡改,甚至可以避免黑客的暴力攻击。
图1 区块链结构示意图
区块链基础构成由下而上:数据层、网络层、共识层、激励层、契约层和应用层。共识层包含:权益证明机制(PoS)、工作量证明机制(PoW)、股份授权证明机制(DPoS)等常用的共识机制。本文在激励层方面不作研究,主要改进共识层的PBFT算法。
实用拜占庭容错算法(Practical Byzantine Fault Tolerance,简称PBFT)于1999年被Miguel Castro和Barbara Liskov二人提出[3]。利用实用拜占庭容错算法不仅将共识过程中的复杂度降低,还解决了原有算法效率低下等多种问题。PBFT是一种状态机复制算法,它允许(n-1)/3节点故障,其中n是分布式系统一致性过程中涉及的所有节点的数量。该算法可以确保系统处于(n-1)/3的状态,并且在节点故障或被恶意操作的情况下,仍然可以正确访问该节点。在实际应用过程中因其安全性、活动性和容错性等多种优势,成为最受欢迎的共识。此外,PBFT协商一致算法要求所有节点共同维护一个状态。为此需要运行三类基本协议:一致性协议、检查点协议和视图更换协议。一致性协议至少包含请求(request)、序号分配(pre-prepare)、响应(reply)三个阶段[4]。在达成共识的过程中,当主节点不能及时执行客户的请求,或者当节点检测到主节点发生恶意行为或宕机状态时,将启动视图切换协议以替换存在错误的主节点。
仓储是指以仓库为基础进行物资储存、保管的总称,包括与仓库有关的仓储物流活动[5]。仓库货物作为实物资产的重要组成部分,通常情况下利用电子仓单实现资产的动态转变。电子仓单的流转环节主要包括仓单备案、仓单审批、仓单注销、仓单取件、仓单交易等。客户可根据库存状况在指定仓储服务平台提交入库申请。同时,工作人员必须对其进行监督检查。对货物信息内容的准确性、真实性和有效性进行核实后。通过仓单服务平台对仓单进行审核,审核通过后,生成正式仓单。仓单操作的步骤较为复杂,必须依靠仓库、财务、监管等多个服务平台相互配合。因此,过程的透明度和安全性变得尤为重要。在仓单领域使用区块链技术,可以监控储存货物的生产、储存和物流过程。将物流仓储与区块链相结合,将有效改善链上及链下的数据信任问题。
区块链分布式结构存在网络状态、节点状态持续变化的特性。若要保障共识机制的稳定实现,需要选出可信的节点参与共识。因此,本文依据区块链中各节点的信任值的大小来确定计票节点数量。当节点拥有较高的信任值时,该节点相应的历史行为就会更加诚实,在共识过程中就更适合进行计票任务。本文将所有投票节点的信任值全部初始化为T0,通过节点在不同阶段的表现,实时更新各节点的信任值。
共识达成效率直接关系着区块链结构性能,期望参与共识的节点在网络状态、共识系统响应上应有较好表现。对于这种表现的度量,本文定义为可信度。通过统计节点响应分组探测、完成选举投票、实现共识过程中的事务完成表现、应答信息交互表现等数据。这里定义参数T表示可信度,为便于计算将可信度的值域限定为[0:1],值越大表示越可信。通过可信度对节点进行评级,这里采用4级评级制。评分大于0.8的为优,小于0.8但大于0.6的为良,小于0.6大于0.4的为中,小于0.4的为差。其中,优等是分组存续期持续稳定可靠、响应速度快的节点,良等为事务、应答有响应但延时稍大的节点,中等节点是应答有中断或者无响应情况的节点,差等则是有恶意行为的节点。
在分组确定后,各节点初始值T0设置为0.6。而后随着节点参与投票、共识等任务展开统计事务、应答完成情况,更新节点信任值。由于网络的时变特性,可信度指标难以实时准确选出每一个组内的最优节点,但是可以准确的排除那些恶意节点和不太稳定的节点。因此,在进行选举时,可将等级为优的节点视为候选节点,等级为优和良的节点作为选举节点。节点更新信任值方式如下:
其中Tjk表示第j个节点的第k个信任值。Tj(k-1)表示第j个节点的k-1信任值,也是当前节点的前一次信任值。w表示上次选举中对该节点行为的评估值。如果节点行为良好,则w为正,相应节点的基本信任也会增加。如果节点行为恶劣,则w为负,相应节点的基本信任值将显著降低。因此,可以根据特定的业务需求与选举需求动态确定变化量w。当节点的信任值越高,其对应历史各个阶段的投票、计数和检查过程就越诚实。在共识过程中,信任值高的节点较为诚实,适合参与计票任务。
(1)组内选举。具体步骤包括: ①更新当前分组内节点可信度,得到各节点可信度等级与信用值。②确定主节点:初始主节点为种子节点,成功完成组内选举并完成全局共识后,上次被选出的节点为主节点。③确定选举人节点:所有优等节点和良等节点为选举人节点,对优等、良等节点编号。④确定候选人。⑤主节点发起针对提名候选节点投票,进入投票流程。⑥主节点确认投票结果:赞成票数超过投票人数一半,则通过提案,否则为失败。⑦成功则结束选举环节;失败则重复④-⑥步,直到成功选出;若所有候选人全部被淘汰,此时结束选举,进入异常处理过程。
因为参与选举与被选举的节点均通过可信度测算,基本排除恶意节点。这里投票过程采用一种简化的拜占庭的方法实现:首先主节点生成投票准备消息并向其他选举人节点广播。各选举人节点验证消息内容,根据验证结果,生成对应投票消息向选举人节点广播。同时选举人节点还要验证消息正确性并统计收到的消息数。如果成功接收到2f+1个节点的消息,就可以判断与自己意见一致的节点数量。因此可以将确认消息发送给主节点,当主节点收到2f+1个确认信息则表示意见一致,达成共识。
(2)全局共识。各分组完成选举后的节点,形成了参加全局共识的分组。采用经典PBFT机制,达成最终共识。首先根据节点号排序,其次确定首轮主节点编号,从而以该对应节点区块作为记账备选区块。而后按照节点号排序依次担任轮值主节点,对各节点区块进行投票。本算法在进行分组时,各组节点数量并不相等。各组选举出来的代理人所代表的利益是有差别的。这里以各组节点数量为参考计算选票,修正PBFT算法的计票方法,实现更真实的代表选举。组内选举阶段推选出参加全局共识节点,全局共识阶段则确定最终的记账节点,将其对应区块加入区块链中。其算法共识消息处理流程如图2所示。
图2 组内选举投票处理流程
Hyperledger Fabric是一种开源、带权限的分布式账本平台,采用模块化通用型框架,所具有的独一无二的身份管理及访问控制功能使其非常适用于各种行业应用。例如,供应链的追踪和跟踪、贸易融资、忠诚度和奖励,以及金融资产的清算和结算等。用此软件可以快速构建区块链块平台,为用户提供账簿管理、身份管理、智能合约管理、业务管理等功能。
本文根据区块链的内部架构,将其分成三个部分:首先是由数据层和基础设施组成的基础部分;其次是核心技术部分,由契约层、共识层和网络层组成;最后是应用层的交互部分[6]。在基础部分,数据层是由区块链提供的分布式存储。主要功能是将数据存储在仓单业务中,保证数据不被篡改,能够追溯到仓单的历史。在区块链核心技术部分使用Docker技术,将不同的网络节点用多个docker容器虚拟化,并用Go语言进行编程使节点达成共识。在仓单系统的应用层中,通过web应用程序调用fabric提供的API与区块链网络交互。
在数据共享过程中,常规的解决办法是在各用户之间建立数据访问机制,进行数据的交换与共享。然而通过此方式很容易导致“一账多记”的问题。即在多个参与者的账簿上记录相同的记录。这种方法容易导致数据不一致因而产生争议,并使多方数据交换及其追溯性难以实现。然而,有效且安全的多方访问是仓储业务的必要组成部分。与此同时,在不同的交易过程中,由于商品需要频繁流转,所以其溯源性就显得尤为重要。而仓单作为保管人收到货物之后向收货人出具的凭证,就为这一交易提供了良好的解决方案。因此基于上述问题,本文提出以下设计目标:
(1)本系统允许用户动态加入或退出,所有系统内部的用户均可进行监督。
(2)采用非对称加密算法(RSA算法、Elgamal数字签名等)来验证所要接入的成员身份,同时利用较为严格的权限管理机制,对其成员分配相应的权限来满足仓单业务在各方面的要求。
(3)在该方案设计过程中,将该系统与网络对接从而实现信息交互。因此需要设置较多的接口,使各方能够灵活、便捷的与该系统对接,实现企业或移动终端以及web的访问。
在仓单业务中,往往存在以下操作:
(1)入库登记与公示:用户可以选择自己的存货进行入库申请。审批后,将触发区块链仓单事件,生成仓单并进行全网公示。
(2)仓单入库监督:用户入库申请提交后,仓库内部工作人员对入库操作进行审核监督。如果货物的数量与信息正常,将通过审查。
(3)仓单交易:通过一系列操作生成仓单后,可以在一些平台上进行交易,并实时更新交易状态。
(4)区块链的管理包括一些基本功能、共识机制、分布式账本以及节点的管理、成员之间的管理等系统管理功能。
图3 平台功能模块图
通过功能模块,实现物流仓储中按采购预算资金和消耗比例进行物料分配。由于系统允许物资补货业务上链,当物资数据上链以后,可以在区块链环境下的不同部门之间进行流转和共享。此外,共识节点中的主节点可以发起链上物资入库和出库的共识,从而实现其操作并将相关信息写入区块链。
本文提出了“区块链+物流仓储”的方案,将区块链与物流仓储进行了一定程度的结合。利用区块间的相互证明,研究了仓库物流信息的可信存储与电子仓单的交易,解决了流通过程中仓单的可追溯性困难、交易安全不能保证等关键问题。在此基础上,改进了PBFT算法的实现过程,使其在区块链技术中的应用得到了改进。在仓储物流的实际应用中,既满足了仓单交易与信息存储的要求,又为解决数据上链的真实性提供了思路。此外,基于改进的PBFT算法的区块链技术不仅在物流仓储中有较好的应用,还使该技术能较早投入使用,提高了企业的生产效率[1]。