基于区块链的农业订单平台

2019-03-22 12:57李凤阳
江苏农业科学 2019年24期
关键词:合约订单区块

李凤阳,秦 兴

(杭州电子科技大学电子信息学院,浙江杭州 310018)

受到人们生活水平不断提高带来的需求拉动,养殖业在我国得到了快速发展,其产值已占我国农业生产总产值的34%,从事养殖业的劳动力超过1亿人[1]。近年来,随着互联网、大数据等先进技术的发展,养殖业也逐渐向专业化、信息自动化转变。为解决肉类食品安全隐患,更是开发了一系列的肉类食品质量安全追溯系统来检测家畜健康以及防止病死家畜流入市场,为肉类产品的安全提供了有力保障[2]。但与一些发达国家相比,我国的养殖产业还存在很大的不足[3],如我国目前缺乏完善的养殖交易体系以及养殖投资体系,使整个养殖交易环境存在很大的盲目性和风险不可控性。

现阶段我国的农业养殖方式仍以小规模养殖为主,这种养殖方式存在如下弊端:(1)资金短缺:养殖行业前期需要很高的投入资金,但很多农户并不能拿出这笔资金,同时又无法提供合格的抵押品进行信贷融资[4];(2)盲目性:大部分养殖者的生产具有很大的盲目性,对市场的预测及抗市场风险能力差;(3)缺乏信任:交易双方只是简单的买卖关系,彼此缺乏信任,从而导致整个交易体系不稳定;(4)信息不对称:不同角色掌握的信息存在严重的不对称性,为了维护自身的利益导致信息壁垒严重,进而造成产供销严重脱节[5]。

基于传统的中心化信息技术开发的订单交易平台在一定程度上能够解决上述资金短缺、盲目性等问题,但互信问题却很难得到有效解决。区块链技术的去中心化、分布式存储、信息不可篡改等特点为解决农业订单互信问题提供了有力的技术支撑。

1 区块链技术

区块链技术源自于比特币(Bitcoin)的底层技术,2008年,化名为“中本聪”(Satoshi Nakamoto)的学者首次提出了一种不需要中间任何金融机构,直接由一方发起并支付给另外一方的电子货币交易系统[6-7]。随着区块链技术的发展,目前已经出现很多的区块链技术平台,如2013年Buterin提出的以太坊区块链平台[8]、2014年Schwartz等提出的瑞波比[9]和Linux基金会的开源项目超级账本(Hyperledger Fabric)等。区块链技术的核心优势是去中心化,通过运用数据加密、时间戳、共识算法和分布式存储等手段,在节点无需互信的条件下完成点对点交易,解决了中心化机构普遍存在的高成本、低效率和数据存储不安全等问题[10]。根据用户需求以及应用场景的不同,区块链又分为公有链、私有链、联盟链。其中,公有链的去中心化程度最高,但交易速度慢、节点加入门槛低;私有链与公有链的特点完全相反,网络的写入和读取都要受到某个组织或机构的许可才可进行操作;联盟链介于公有链和私有链之间,实现部分去中心化,有多个组织共同维护区块链的运行,构成一个利益共同体。联盟链不仅交易速度快,同时又能保证数据的安全有效。

本研究平台的搭建主要是基于Fabric底层环境。Hyperledger Fabric不同于比特币和以太坊,它是专门针对于企业级的区块链应用而设计,并引入了成员服务[11],是本研究平台搭建的最好选择。超级账本采用模块化架构设计,复用通用的功能模块和接口。模块化的方法带来了可扩展性、灵活性等优势,会减少模块修改、升级带来的影响,能很好地利用微服务实现区块链应用系统的开发和部署[12-14]。其核心部分包括4个部分:身份管理、账本管理、交易管理、智能合约。

身份管理:考虑到商业应用对安全、隐私、性能的需求,联盟链提高了准入门槛,成员必须被许可才能加入网络。成员管理服务通过公钥基础设施(PKI)和去中心化共识机制使得非许可的区块链变成许可制的区块链。

账本管理:Fabric使用建立在HTTP/2上的P2P协议来管理分布式账本,采用可插拔的方式来根据需求设置共识协议,如PBFT、Raft等(本研究平台使用的是Fabric默认的kafka共识,它提供了交易排序功能和崩溃故障容错的性能)。在账本中主要包括区块链和State两块。区块链是一系列连在一起的区块,用来记录历史交易。State对应账本的当前最新状态,它是一个key-value数据库,Fabric默认采用的是Level DB。

交易管理:Fabric上的交易管理分为部署交易和调用交易。部署交易就是安装链码的过程,当部署交易成功执行时,链码就被部署到各个peer节点上。调用交易是客户端应用程序通过Fabric提供的应用程序接口调用先前已部署好的某个链码的某个函数执行交易,并相应地读取和写入KV数据库,返回成功或者失败。

智能合约:Fabric的智能合约被称为链码,是采用Go、Java、Node.js编写的一段代码,用于处理网络成员同意的业务逻辑。

2 平台设计

2.1 系统整体功能分析

基于区块链的农业订单交易平台实现的功能是订单交易以及订单参养2项业务。参与人员主要分为3类:订单方、基地方、参养方。订单方为生猪收购方,他们根据自己的需求下发订单到该平台;基地方为线下运营方,提供传统养殖中、小、微企业及个人养殖场地,主要以租赁合作方式为主,划分虚拟经营权,实现共同经营。基地方可在该平台看到所有订单方下发的订单,然后根据自己基地的大小接收合适的订单。同时在接收订单后,再按养殖基地的规模分配订单给养殖合作方;参养方是指投资者,可根据基地方发布的参养订单信息选择自己想要参养的产品,提供养殖成本,分享养殖收益。整个订单交易流程如图1所示。

2.2 系统整体架构设计

农业订单交易平台的整体架构可分为应用层、网络层和存储层。其中,在应用层和网络层中间还包含1个合约层,由于合约层主要是对业务逻辑的实现,因此将其与网络层一起介绍。整体架构如图2所示。

应用层封装了整个订单交易的应用场景,是用户与信息平台交互的媒介。应用层是通过Spring MVC框架和HTML标志语言来开发前端页面,通过ajax来完成数据的交互。本研究的平台主要是在Linux操作系统下搭建开发环境,使用Java语言在Eclipse集成开发工具下进行系统开发,采用Apache公司的tomcat应用服务器。同时,在应用层接入了本地数据库,该数据库采用的是MySQL数据库,采用该数据库是为了使用户能快速查询到自己想要查询的信息,该数据库的信息并非人为写入,而是从区块链中动态获取的。数据库在用户登录或指定时间内都会对数据进行动态更新,将底层数据库中的数据导入到本地的MySQL数据库中。可避免人为写入出现的造假情况,从而保证了数据的安全性,同时也解决了用户从区块链中读取数据时间久的问题,提供了更好的用户使用环境。

网络层介于应用层和存储层之间,是整个平台的核心部分。主要是接收应用层发来的操作请求,然后通过fabricjava-sdk接口调用由Go语言编写的链码来完成业务操作。若发来的请求是存储合约则将合约内容打包成区块传入数据层进行存储,若发来的是查询操作,则通过fabric-java-sdk的查询操作从数据库读取数据并返回给应用层。

存储层用来存储数据,每个节点维护一个账本,账本的内容全都是一致的。存储层主要采用的是levelDB数据库,每个区块包含区块头和区块体2个部分。区块头封装了前一区块的hash、目标hash、时间戳以及Merkle根。目标hash的实现代码如下:

Hex.encode Hex String(SDKUtils.calculate Block Hash(client,block InfoTest.get Block Number(),block InfoTest.get Previous Hash(),blockInfoTest.get Data Hash()))

此外,肠道微生物的生长环境与胃肠黏膜联系密切,与肠上皮细胞紧密相连,并对胃肠黏膜的生理功能有一定的调节作用。回肠末端和结肠的L细胞在特定营养物和消化产物的诱导下分泌PYY和GLP-1[63-64]。L细胞也受肠道微生物发酵产生的短链脂肪酸(乙酸、丁酸、丙酸)的影响,提高血浆PYY和GLP-1的水平[65]。L细胞释放的PYY和GLP-1不仅抑制胃运动,改善葡萄糖稳态,还引起饱腹感和行为改变。

其中,blockInfoTest.get Block Number()为获取区块高度,block InfoTest.get Previous Hash()为获取前一区块的hash值,block InfoTest.get Data Hash()为获取的Merkle根(即该区块中全部合约内容生成的hash值)。目标函数是由当前区块高度、前一区块hash以及合约hash再次经过一定的hash计算获得的。

2.3 系统功能模块的设计与代码实现

整个系统实现的功能主要包括用户的注册/登录、合约存储和信息查询,具体功能模块如图3所示。

2.3.1 用户注册和登录模块 用户注册:根据角色的不同选取不同的注册页面,主要包括订单方注册、基地方注册和参养方注册。订单方注册包括账号、密码、订单方名称、负责人姓名、负责人电话、公司法人姓名、法人身份证号、法人手机号码、手机验证码以及上传身份证照片和公司营业执照,以上信息均为必填项,并在文本框中提醒为必填项,将相应信息存入到订单方数据库表中。基地方注册包括账号、密码、基地名称、基地地址、公司法人姓名、法人身份证号、法人手机号码、手机验证码、基地服务内容、服务周期以及上传法人身份证照与营业执照照片、基地logo等,以上信息均为必填项,在文本框中提醒为必填项,并将对应的信息存入到基地方数据库表中。参养方注册包括账号、密码、手机号码、手机验证码,以上信息均为必填项,在文本框中提示为必填项,并将相应信息存储到参养方数据库表中。参养方注册流程图如图4所示。订单方用户注册页面如图5所示。

用户注册信息存储执行的mysql语句如下所示:

INSERT INTO cyf(name,password,phone)VALUES(“张三”,“123456”,“13356776533”)。

用户登录:用户在登录过程中不需要选取角色,只需要输入用户名和密码进行登录。用户的登录过程实质上是数据查询的过程,用户输入用户名和密码后,会从3个数据库表中进行查询,若查找到相同的用户名和密码,根据查找到数据的数据库表名称,页面从登录界面跳转到对应的用户操作界面。

用户登录执行的mysql语句:

SELECT COUNT(*)d FROM ddf WHERE name=“张三”AND password=“123456”;

基地方数据表查询:

SELECTCOUNT(*)j FROM jdfWHERE name=“张三”AND password=“123456”;

参养方数据表查询:

SELECT COUNT(*)c FROM ccf WHERE name=“张三”AND password=“123456”;

2.3.2 合约存储模块 该模块的设计服务对象包括订单方、基地方和参养方。当基地方认购了订单方的订单并经过订单方确认订单合同后,合同信息会进行上链存储。订单认购成功后,参养方可对订单进行参养,参养合同也将进行上链存储。在合同正式存储之前,首先对合约ID进行查询,确保合约不被重复上链。合同内容以json格式存储。

合约存储在Fabric-java-sdk中定义的接口,如下所示:

链码中实现合同存储的部分代码如下:

2.3.3 信息查询模块 信息查询可通过区块查询和合约查询,区块的查询方式又可分为hash查询以及查询全部区块。hash查询是通过输入指定的hash获取指定的区块信息。全部区块查询则是不输入任何hash值直接进行区块查询。合同信息的查询可通过ID获取指定订单的合同信息,也可根据用户名或用户身份获取该用户下全部的订单合同。

Fabric-java-sdk中代码的实现:

3 系统测试与分析

系统测试的目的是检测系统的实际操作流程是否与系统设计的流程相一致,以及是否完成用户要求的全部功能。系统测试环境如表1所示。

表1 系统测试环境

3.1 登录模块测试

具体如表2所示。

3.2 平台订单发布及认购测试

订单的发布以及认购:订单方在登录账号后,可在发布界面发布订单(图6-a),点击保存后,订单发布成功。此时基地方登录账号后,在订单界面可看到所有订单方发布的所有订单(图6-b),可点击认购按钮进行订单认购。在订单方确认后,则合同开始上链,此时查询订单可看到图6-c所示情况,提示上链中和上链成功,经测试可知合同上链时间在1 min内,从而大大节约了用户的等待时间,有更好的用户体验。参养过程和订单认购过程相似,因此不再赘述。同时,视频监控的引入让订单方和参养方能及时了解产品的养殖情况,只需在首页或我的订单中点击查看详情。

表2 登录测试

除此之外,还使用白盒测试方法,使用Junit测试工具对各模块代码进行测试,确保每个模块的代码都能达到预期结果。经过测试可知,合同上链速度维持在1 min以内,这有效节约了用户的等待时间,为使用户有更好的体验,平台引入了本地的MySQL数据库,该数据库的数据是在用户登录账号或一定时间段内动态地从区块链中更新进去的,因此用户查询时,无需再从区块链中进行查询,大大节约了用户时间,同时,由于数据并非人为写入,充分保证数据的安全可靠。

本平台的开发是在分析了国内外当前的养殖交易模式的基础上,依据我国市场需求提出的一种新的养殖交易理念。该平台的开发,为养殖者提供了一个安全、可靠的销售渠道,同时也为收购者提供一个长期、稳定的进货来源,更是为小规模投资提供了可能。区块链技术的应用,有效保证了身份信息、销售信息的准确性和可靠性,解决了陌生人之间的互信问题,也将养殖者、销售者和投资者紧密联系起来,构成一个利益共同体。除此之外,本平台还引入了视频监控系统,每个加入进来的养殖基地都会安装监控设备,并将实时监控视频上传到该平台,每个订单下发者和参养者都可在登录账号后,选择订单列表中订单详情进行视频查看,以便更好地掌握生猪的养殖情况以及养殖环境。

4 结束语

区块链技术作为近年来最火的数据存储底层技术,改变了多年来中心化管理和交易的局面。本研究主要分析了农业订单的交易过程,结合区块链技术,给出了一套基于区块链技术的农业订单平台建设方案。该平台利用区块链技术的去中心化和不可篡改的特性,解决了订单协议的消息不对称、信息安全和互信等问题。同时区块链技术也可用于食品追溯和解决食品安全问题。区块链技术的引用将会为农产品市场打开一个全新的局面。

猜你喜欢
合约订单区块
春节期间“订单蔬菜”走俏
新产品订单纷至沓来
区块链:一个改变未来的幽灵
区块链:主要角色和衍生应用
“最确切”的幸福观感——我们的致富订单
区块链+媒体业的N种可能
读懂区块链
怎样做到日订单10万?
合约必守,谁能例外!——对“情势变更”制度不可寄于过高期望