基于区块链的航运指数编制方法研究

2021-04-20 03:20
科技管理研究 2021年5期
关键词:货主运价报价

(华南理工大学经济与贸易学院,广东广州 510006 )

1 研究背景

航运市场承载着世界上大多数商品贸易,在全球经济中发挥着重要作用。航运指数是反映航运市场在不同时期的运力、运量等综合变动对于运价影响的相对数,是航运市场的晴雨表,在海运的风险管理和规避中起着重要作用[1]。波罗的海干散货运价指数(BDI)是国际最具有影响力的指数,已被广泛用于反映国际干散货市场的运价。它由经纪人采集固定航线运价,然后对各航线计算运价指数,通过加权平均得出综合指数后定期发布,其它航运指数编制方法与BDI 类似。国内目前有上海航运交易所发布的中国出口集装箱运价指数(CCFI),中国沿海散货运价指数(CBFI)和“一带一路”航贸指数等指数。我国正在推动以上海为主导+广州、宁波等为辅助的全球航运中心建设,航运指数编制是其中核心的内容。

航运指数是航运企业与货主等市场从业者判断市场运价水平、开展金融衍生品交易的重要参考工具,但目前航运交易所大多数是发布综合指数,一条航线的具体情况在其中往往无法反映。若交易航线不在指数统计航线中,还需根据当前综合指数自行协商换算,影响了指数参考的准确性,即缺乏航线指数。其次,航运业投资大,回报周期长,属于风险性行业,即使在一周内,运价的波动也很大[2],运价波动是航运市场风险的集中反映,给参与者带来巨大的经营风险,从业者可以通过航运金融衍生品来控制运价大幅波动风险,因而业界对航运指数的时效性也有更高的要求,但发布周期固定的航运指数影响对市场反映的实时性,难以反映快速变化的航运市场。最后,目前航运指数编制采集的运价是每条航线上固定报价人提交的数据,大多是考虑市场上具有代表性的企业报价,但是在波动频繁的航运市场中,覆盖范围更广的报价数据更能反映波动的市场情况,少量固定报价人提供的数据对整条航线运价情况反映有一定的局限性,从而使得计算得到的指数与航运市场实际供需变化有所出入。

区块链及智能合约具有的弱中心化、不可篡改、去信任和自执行等特点恰好契合了上述航运指数编制所面临的问题,为航运指数编制方法的完善提供了实践条件。本文提出一种基于区块链的航运指数编制新方法,运用区块链中的分布式共识和智能合约可自执行等手段实现航线指数和实时综合指数的计算以及运价的收集,并利用智能合约实现航运运价数据上链、指数计算和历史数据查询等功能。通过将区块链融入航运指数的新编制方法中,使得市场从业者可以通过网络节点参与和基于区块链的编制得到的信息服务从一种服务所有人的“标准化、程序化”固定模式向可以根据个体需要实行个性化定制的模式转变,基于区块链编制的航运指数能更好的服务于航运从业者。

2 相关工作

2.1 区块链

区块链是一种由多方共同维护,使用密码学保证传输和访问安全,能够实现数据一致传输、难以篡改、防止抵赖的记账技术,也称为分布式账本技术[3]。它集成了密码学、共识机制和分布式网络等多种技术,以P2P 网络作为通信载体,依赖密码学确定所有权保护隐私,使用分布式共识保障一致性并维护节点的自治管理,具有去/弱中心化、无需信任和防篡改等优点。极具潜力的区块链已经应用到了图书情报、版权保护和文化产业等多个领域[4-6],在航运领域,周毓萍等[7]提出搭建联盟区块链实现航运结算中心各参与主体点对点交易并实现去中心化交易。刘伟荣等[8]研究通过区块链智能合约保证集装箱的流转和支付,使集装箱形成点对点共享。

根据实际应用场景和设计体系,区块链主要分为公有链、联盟链和私有链三大类,如表1 所示。航运指数编制工作由航运公司、货主等特定主体参与完成,其进入区块链均需相关认证,因此选择联盟链作为航运指数编制方法的区块链原型。

表1 区块链分类

表1(续)

在区块链技术领域,智能合约可看作是运行在分布式账本上预置规则、条件响应自动执行,可封装、验证和执行分布式节点复杂行为,完成信息交换、价值转移等的计算机程序[9],它扩展了区块链的功能,帮助区块链植入不同应用场景。

2.2 Hyper ledger Fabric

Hyper ledger Fabric 是一个允许多方参与、开发、部署和运行区块链应用的联盟链平台,采用模块化插件的灵活设计架构,具有高度的弹性、扩展性和灵活性,适用于航运区块链。它克服了公有链项目吞吐量低、缺乏完善的身份认证模块等的缺陷,更适用于特定场景。在Fabric 中主要包括客户端、背书节点、排序节点和记账节点[10],其中背书节点和记账节点又合称为Peer 节点。客户端是用户与Fabric 网络的接入点,用以发起交易请求等;背书节点主要对交易预案进行校验、模拟执行和背书签名;排序节点根据交易次序构造区块并发送到记账节点;记账节点则验证交易的有效性并将有效交易提交到账本。

Hyper ledger Fabric 提供图灵完备的智能合约(Hyper ledger Fabric称之为chain code,即链上代码,简称链码),具有良好的可扩展性,主要有系统链码和用户链码,系统链码负责Fabric 节点自身的处理逻辑;用户链码是由区块链成员根据不同场景需求编写的业务处理逻辑代码。链码部署在独立且隔离的Docker 容器中,无法被外界干预和篡改。

3 基于区块链的航运指数编制方法核心点

3.1 基于智能合约的航线指数和实时综合指数设计

传统航运指数编制方法中,航运指数由航交所发布,但是基于市场上的资源配置情况,航交所只能发布有限指数,而且大多是航线固定的航运综合指数,航运指数权威性则依赖于航运机构的国际影响,给航运指数的应用带来了局限性。远期合约已成为能够针对某一条具体航线进行风险规避的最佳选择[11],也是航运价格衍生品交易品种中最活跃、最具吸引力的产品。但是基于航交所有限的人力物力,就航运从业者需求专门另外编制某条航线指数的可能性较小。在大数据时代,只要充分交易的市场存在合理需求以及可行性,便可以开拓新指数业务。区块链智能合约恰可实现航线指数的按需定制和即时部署,与航运市场特征和从业者需求天然适应。

Hyper ledger Fabric 允许用户自己定义链码执行的策略[12],因此航线指数设计中,对于不在综合指数统计航线中的交易航线或某些航线,如天津-香港航线,首先,双方协商确定指数计算模型等相关信息后可编写待实例化的链码方案。然后客户端节点根据方案先执行安装链码命令,将链码安装到背书节点指定路径后执行实例化链码命令,构造部署命令的提案请求消息,并发给背书节点请求处理,背书节点通过LSCC 系统链码将实例化数据保存到通道账本的状态数据库中。部署成功后系统会返回对应的chaincodeID 等信息作为其特征属性值,最后只需初始化链码执行环境,从而正常提供链码服务。

链码实例化完成后,区块链成员即可收集此航线的报价数据,然后双方可根据约定从某个时间点二人进行交易参考调用链码计算得到的航线指数,无需机构的国际影响力即可发布指数。部署需要的航线指数计算算法伪代码1),假设某条新航线指数计算采用简单算数平均方法,如下式(1),首先确定航线指数的基期运价,基期代表的是运价水平的常态,为了反映市场运价的长期变动趋势,所以选择固定基期,基期指数设定为1 000,然后调用时间段的报价数据,若此段时间内无报价,则返回0,若有报价则计算航线的平均运价,最后利用报告期和基期的比值计算指数。

区块链允许有需要的节点部署航线指数及调用合约计算,但是也加大了节点恶意攻击的可能性。因此为了维护航运区块链,防止区块链网络资源被滥用或者用户部署无限循环的链码,避免网络因恶意程序或大量密集操作走向失控[13],设定基于超级账本的航运指数编制中的任何可编程的部署、计算受计费限制,该计费单位定义为cost,在区块链中实例化链码、调用指数计算等操作有一定的计费标准。因此,交易双方若需部署如上的航线指数链码,首先需要支付费用,费用从提交方案的账户中扣除。在航运区块链场景中,航运报价数据属于企业的商业机密,无计费要求下成员可能为了追求实时指数而无限制的部署及调用合约计算,滥用企业报价数据,因此设计付费机制。编写付费伪代码2)加入指数计算合约中,每次计算指数前首先启动扣费程序。

当区块链成员需要计算一个新指数的时候,需要对部署成功的链码执行调用操作,首先查询peer节点上已经实例化的链码列表,然后通过发送交易的方式实现链码的调用。客户端的SDK 与链码通过背书节点进行交互,首先创建链码调用规范对象,封装成一个链码请求体数据包,包括链码版本、chaincode ID 对象(链码名称等)等,通过gRPC 发送给背书节点请求执行调用链码操作,背书节点收到调用链码的消息请求后,查看本地维护的表中是否有相应的链码名称再转发给docker 容器,docker容器收到链码消息后,首先按照付费合约判断用户余额是否充足以支付计算,若是则弹出支付确认框来确认是否支付,确认支付后可进行下一步的计算。当计算完成后,链码容器将回复Chain Message_COMPLETE 至背书节点,通知已完成链码的调用流程,最后将封装了签名结果、链码执行返回值、读写集等的交易结果以提案响应的形式返回给请求客户端,Peer 节点将执行成功的交易模拟执行结果发送给orderer 节点请求排序出块。编写链码调用算法伪代码3)模板提供参考。

其次,对于综合指数,区块链的开放性和以及全网统一的分布式账本,支持分布式架构中的数据记录工作处于实时状态。而预制的智能合约支持部署的综合指数计算智能合约可随时计算指数,从而使得航运从业者需要时可进行计算综合指数。

根据市场需求以及区块链的特点,设置两种形式的航运综合指数计算合约,一是周期综合指数计算合约,按照传统指数发布周期发布,事先设定定期触发的合约条件自动计算指数;二是实时综合指数计算合约,设定可以读取当前时间激活,当成员在某个时间需要根据当前指数签订运价合同或进行衍生品交易时,只需支付计算费用,便可调用合约进行实时综合指数的计算。若所需费用不足则会触发异常使得调用回滚,无法得到计算结果。基于区块链的智能合约在调用及执行中不需要第三方的介入,且在任意时间均可调用合约,从而满足参与者对实时指数的需要。

3.2 基于区块链的航运运价数据采集

区块链支持航线指数和实时综合指数的计算,获取更加实时的微观信息。但是传统编制方法中每条航线基于固定报价人的样本采集方式,具有局限性。区块链支持更多的人参与,数据可以源源不断产生并汇聚至多方数据采集者,从而可以扩充样本,捕捉传统指数编制方法中无法反映的变化,各种数据源提供了利用大数据在网络上生成最新信息的可能性。在基于区块链的航运指数新编制方法中,运价数据的采集通过构建的航运区块链网络,航运企业、货主、经纪人等直接通过网络节点向区块链账本写入运价合同数据的方式,引入市场中尽可能多的报价人为航运指数编制提供样本数据,扩大样本量。

然而,在区块链网络,扩大样本采集的过程中由市场利益相关者提供数据将衍生出参与者缺乏激励和样本数据造假的问题。以下将就这两个新问题进行分析。

3.2.1 基于区块链的token 激励

区块链P2P 网络的设计虽可拓展参与的节点,但无法保证每个节点参与报价的积极性。同时运费数据及成交信息属于企业机密经营数据,开发难度大,在无措施保障的情况下难以激发参与者持续参与,无法满足编制指数的长期、大量数据需求。根据哈维茨的机制设计理论,市场经济中每个理性经济人都会有自利的一面,其个人行为会按照自利的规则行动,如果能有一种机制使追求个人利益的行为正好与总体价值最大化的目标相吻合,那么这一机制就是激励。航运企业和货主等存在需要航运指数的客观需求,但是如何将这种需求转化为行动则是激励机制发挥的作用。因此,可利用区块链的Token设计有效的激励机制,吸引更多企业参与报价,满足航运指数计算中对数据量的要求。

根据现有研究,区块链的其中一个应用方向是以Token 作为支付工具和激励手段构建去中心化经济活动[14]。基于Hyper ledger Fabric 的航运区块链定义的Token 是一种凭证或者权益,可在区块链内不同地址之间转让,其转让过程无需受信任的第三方机构。本文提出基于Token 的激励机制,以Token作为记录航运指数编制中企业贡献的工具,激励更多的市场主体参与报价,提交真实数据的参与者都有机会获得Token 奖励,这种表达权由设定的规则予以保障。具体内容如下:

1)设定参与者成功提交合同数据即发放Token,而Token 的使用规则可由航运指数编制参与者共同商定,其中包括作为支付工具用于换取部署航线指数合约和执行合约计算所需的cost 这一重要用途,从而实现获得的Token 与cost 消费的循环,如图1。

2)当参与者报价失败,无法获得用于换取cost的Token。

图1 token 生产消费闭环图

3.2.2 基于区块链成对报价模式

航运指数是航运从业者进行交易的重要参考依据,为保证航运指数反映航运市场的能力,使用真实的运价数据编制航运指数尤为重要。传统编制方法中的市场运价收集通常采用经纪人报价模式。经纪人公司是独立的第三方,其收入与市场成交直接相关,为保证航运市场的成交数量,经纪人会在报价时竭力靠近最可能成交的价格,最大可能的减少虚假样本的存在,因此经纪人报价模式下生成的航运指数能最大程度反映市场运价水平[15]。若从经纪人单一报价改为区块链上航运从业者均可直接参与的报价模式,由于航运衍生品交易与指数挂钩以及Token 激励的作用,航运交易者提供虚假数据达到操纵指数的动机是客观存在的,航运企业可能虚高报价哄抬高指数以提高收益,货主可能虚低报价压低指数以降低成本,即基于区块链的数据采集可能存在虚假样本,此种情况下的报价不是典型的市场价格,若机械的将其作为样本,可能使得生成的指数缺乏客观性。

为解决基于区块链编制新方法中可能存在的数据造假问题,在区块链中,设计成对报价模式替代传统单一报价方式,即同一份运价合同中航运企业、货主和经纪人等参与者的任意两方,通过各自的网络节点上传报价合同。区块链平台将对同一合同的两方信息进行验证,即赋予合约双方相互鉴证的权利,经过验证无误的合同数据即有效样本数据才能写入区块链账本。基于区块链的指数编制方法使得从业者在P2P 网络中,不同的多个节点共同完成统计样本的收集,实现“人人都是统计员”[16]。

3.2.3 数据收集方式有效性模式验证-博弈分析

为解决基于区块链扩充样本采集设计了成对报价和基于Token 的激励机制,本节将以航运企业和货主为例,利用博弈论理论分析成对报价的有效性。

博弈分析基本假设:

1)每一次写入区块链的航运企业和货主的航运合同数据一致即为报价成功,系统自动发放Token,其成功提交合同数据的收益分别为。

2)航运企业和货主的合同数据不一致则报价失败,并使得其失败的代价不可接受,以此作为报价不一致的惩罚,无法获得航运指数,假设航运企业和货主的损失分别为。由于双方独立报价存在虚假报价的情况下,报价一致的可能性很小,因此认为非协商成对报价时双方同时虚高/虚低报价是报价不一致。

3)航运企业和货主都是理性人,会根据航运指数来调整他们合同的定价价格。

博弈模型描述如下:

以协商成对报价为例进行博弈分析,利益可能促使企业采取负面行为(例如撒谎或操纵)以最大化效用,包括忽略或放弃合同的真实性来产生或接受有利于自己的合同。航运企业或货主有动机操纵或依赖合同执行的结果以换取利益,即双方窜通谋取利益。由假设(3)可知,航运企业或货主会根据航运指数来调整下一期合同的价格,报价的高低会造成指数的升降,影响下一阶段航运市场的价格,下面采用多阶段博弈来分析协商成对报价中的博弈关系:

以虚高报价为例,货主同意航运企业共同将航运指数哄高,提交比签订的实际合同更高的运价。假设货主与航运企业保持长期交易,且每期的航运合同价格只与当期航运指数相关,对每期,当航运指数上涨时,下一期货主再次签订合同时货运价格也上升,由此带来的损失为,航运企业随着航运指数上涨获得的收益为,因此,当每一期航运企业提议共同虚高报价抬高航运指数时,针对货主是否同意虚高报价的行为,利用多阶段博弈分析货主收益结果如图2,其中第一收益为航运企业,第二收益为货主。

由此可知,若货主与航运企业保持长期合作,并同意虚高报价,则每一期航运指数发布后,下一期货主都要承受由于航运指数升高、航运价格上涨带来的成本增加。因此货主会自觉约束自己的行为,选择真实报价。

其次,若航运企业每一期都可以自主选择货主,一段时间后升高的航运指数带来的合同运价之间的差额利润促使航运企业放弃与原货主的合作,而货主只能参考此时的航运指数与其他航运企业签订合同,由于航运指数的升高导致运价的增加使得运输成本增加,此时货主利益受损。因此该多阶段博弈最优的战略是最初货主不同意虚高报价,双方取消协商报价。

当双方合谋虚低报价时,同理可得,此时指数下降导致航运企业利益受损,从而选择真实报价。综合比较博弈分析,无论是非协商报价还是协商报价,交易双方在激励机制下成对报价的最优策略都是(真实报价,真实报价)。经过以上的分析,可以验证,基于区块链的成对报价模式可以促使报价双方提供真实的航运运价数据。

4 基于区块链的航运指数编制方法基本框架

区块链运用共识机制在机构之间建立“信任”网络,将信任建立在技术背书之上,而非中心化信用机构。这种机制保证了分布式节点间的数据交互可以在无需相互信任及中心机构信任担保的情况下进行,同时降低航运指数的权威性对发布机构影响力的依赖。

4.1 整体框架

如图3 所示,本文提出的基于区块链的航运指数编制方法由报价人(航运公司、货主和经纪人等)、联盟链和智能合约这些部分构成:报价人作为航运联盟链的权威节点参与到区块链中,与系统进行交互,如提交航线的运价数据赚取Token,用于换取cost 以进行计算航线指数和实时指数,实现Token的生产,在获取区块链中计算的指数等过程中完成Token 消费;联盟链中存储报价人的身份和报价数据的摘要信息,同时结合智能合约存储指数计算公式合约以及指数计算结果等,实现报价样本的收集、指数计算与获取等业务逻辑;智能合约模块负责提供航运指数计算和查询操作,包括合约的部署、初始化和链码交互,其执行与交互需要依靠共识算法、激励及P2P 通信网络等区块链关键技术实现。其它则包括获得证书的用户调用SDK 的相关接口对区块链数据进行操作的权限规定。整体业务流程如图3:

图3 整体框架

4.2 航运报价数据上链

企业的报价合同经各节点提交写入区块链才能进行指数计算。报价合同中的信息包括航线、时间、运价、运量和货物种类等。为保护报价人隐私,设计加密传输模块使用密钥交换协议和对称加密算法相结合。编写相应的报价合同上链伪代码4)。

区块链中航运公司和货主采用成对报价模式。航运公司和货主客户端先向区块链服务器端发送生成公私钥的请求;服务器产生公私钥对并将公钥返回到客户端;客户端根据公钥生成对称密钥key 并用其对报价合同进行加密;接着将客户端公钥和加密合同发送到区块链服务器;服务器根据客户端的公钥再次生成对称密钥,进而将加密的报价合同解密,得到合同详细信息;服务器调用同一合同编号的合同(成对报价提交的报价合同编号相同)进行运价的对比,运价一致说明报价成功,合约自动发放token 奖励给报价者,同时合同被发到特定处进行存储;否则报价失败,无法获得token;最后返回报价执行结果到客户端,完成上链。

5 结论

区块链凭借其开放共识、去信任等特性,吸引了许多领域的专家学者投入研究,推动了区块链技术的发展。本文提出了基于区块链的航运指数新编制方法,为解决传统编制方法中的指数时效性不足和缺乏航线指数的问题,利用区块链的弱中心化和去信任以及智能合约的自动化执行等特点,设计航线指数合约,说明其部署和调用过程,可计算实时指数;为解决固定航线上样本覆盖不足提出基于区块链扩大样本覆盖而引入市场主体参与样本采集方法,而该方法衍生出缺乏激励和数据造假问题,因而提出了基于Token 的激励机制和市场交易双方成对报价的样本采集方式,运用博弈分析验证了激励机制和成对报价解决样本数据造假和鼓励参与者持续报价等衍生问题的有效性;在数据上链过程中使用加密模块使得报价数据在传输过程中都进行了加密处理,保证了运价在传输过程的安全。本文基于区块链搭建了航运指数新编制方法的整体框架,将有助于加快区块链技术在航运等领域的应用。但是基于区块链的航运指数编制方法中激励机制的具体化、智能合约分布机制等仍需在后续的研究进一步探讨。

注释:

1)Contarct hyzscalculation.go

1:func get Data Average Price (APIstub shim.Chain code Stub Interface,t1 string,t2 string)int {

2:resultsIterator,_:=APIstub.Get State By Range(t1,t2) //调用某段时间的报价数据

3:var price,count =0

4:for results Iterator.Has Next() {

5:query Result,err:=results Iterator.Next()

7: If err !=nil{return 0 }

8: price,_=strconv.Atoi(string(query Result.Value))

9: price+=price

10: count+=1}

11:return price/count}

12:func (s *Smart Contract)average (API shim.Chaincode Stub Interface,args []string) sc.Response {

13:P,_:=get Data Average Price (API,args[1],args[2]) // 计算航线指数

14:B,_:=strconv.Atoi(args[3])

15:Return IR:=P/B}

2)1:func integral Change(APIstub shim.Chaincode Stub Interface,args []string) sc.Response {

2: if (balance -ncost)>=0{ //检查余额余额是否充足

3: integral AsBytes,_:=json.Marshal(string(index -ncost))

4: APIstub.Put State(args[0],integral As Bytes)

5: return shim.Success(integral As Bytes)}

6: return shim.Error("Balance is less")}

3)1:Var Fabric_Client=require(‘fabric-client’)//加载SDK 模块

2:Channel.add Peer(peer);

3:var request={

4: chaincodeID.name:‘ ’ //调用的链码名称

5: Fcn:‘Invoke’ //调用函数

6: args:[‘arg1’,‘arg2’,‘arg3’]//参数

7: ChannelID:‘ ’ //所用通道ID

8: Version:‘ ’ //链码版本

9:};

10:Channel.sendTransactionProposal(request)//发送交易

4)1:publicGetRsp,err:=c.cli.myClient.GetKeyValue(context.TODO(),getPublicReq)

2:privateN1,_:=btcec.NewPrivateKey(btcec.S256())

3:secretN1:=btcec.GenerateSharedSecret(privateN1,publicGetRsp.PubKey)

4:encyptCode:=MyDesEncrypt(dataAsBytes,string(secretN1))

5:getPostRsp,err:=c.cli.myClient.GetKeyValue(context.TODO(),encyptCodeReq)

6:decyptCode:=MyDESDecrypt(encyptCode,secretN2)

7:json.Unmarshal([]byte(decyptCode),&contract)

8:If contract.Price==args[6]&&contract.Route==args[4]&&contract.TypeOfGoods==args[5]&&contract.BasePrint==args[7]&&contract.Weight==args[8]{

9:result="1"

10:transferToken(APIstub,args)

11:writeContra(APIstub,args)

12:jsonResp="Comparison success:"+data

13:}else {

14:result="2"

15:jsonResp="Comparison failure:"+data}

猜你喜欢
货主运价报价
物流供应商如何代表境外货主监管国内散货周转
浅论动物检疫合格证明的优化
当萌宠遇到二货主人
台湾海峡两岸间集装箱运价指数
中国沿海煤炭运价指数
中国沿海煤炭运价指数(CBCFI)
中国沿海煤炭运价指数(CBCFI)
报价