掌桥专利:专业的专利平台
掌桥专利
首页

一种基于区块链智能合约的农产品溯源信息上链方法

文献发布时间:2023-06-19 09:57:26


一种基于区块链智能合约的农产品溯源信息上链方法

技术领域

本发明涉及一种基于区块链智能合约的农产品溯源信息上链方法,尤其涉及的是基于联盟链FISCO BCOS架构的智能合约编译和部署,以及链数据智能验证和预警方法,属于区块链技术领域。

背景技术

目前,市场上现有的基于区块链的农产品溯源信息上链方法,仅仅实现了基础的数据上链功能,然而对农产品上链溯源数据的达标程度没有进一步的判断与反馈。

现有技术中,农产品生产加工中的供应链业务存在如下两个方面的缺陷:一方面,农产品质量安全问题发现总是滞后,可在事后溯源追查问题源头时,却无法提前在农产品流入市场前截留有问题的农产品;另一方面,农产品溯源信息上链成本与获得的业务效益投入产出比太低,没有达到应有的实时监管和管控效果。

发明内容

发明目的:针对现有技术中农产品溯源上链技术的低业务效益、无法实现自动验证预警等评价行为的缺陷,本发明提供一种高效能的、可智能自动化运行验证预警行为的基于区块链智能合约的农产品溯源信息上链方法,本发明通过基于FISCO BCOS联盟链架构的智能合约程序模块,自动判断上链的农产品溯源信息是否符合现实中农产品质量安全标准的参数指标,并对不达标的农产品上链数据向各区块链节点进行预警提示。

技术方案:一种基于区块链智能合约的农产品溯源信息上链方法,包括:智能合约的算法编译与合约在联盟链上部署;农产品溯源校验标准信息上链;农产品溯源信息上链时智能合约验证数据和预警的运行机制。

智能合约的算法编译实现过程为:

首先在计算机上启动FISCO BCOS的架构环境程序和Docker容器引擎程序作为基础环境准备,再打开solcjs编译台,创建一个sol格式智能合约文件;对所述sol格式智能合约文件代码进行编辑,编辑内容包括版本声明、对农产品溯源信息的结构定义、对校验标准的结构定义与校验函数设计和执行返回方法。

所述农产品溯源信息的结构定义是给农产品质量安全关键节点需要上传的数据创建的标准信息录入结构。

所述校验标准的结构定义是农产品质量安全关键节点操作指标标准的数据结构。

所述农产品溯源信息的结构体是溯源信息结构体数组traceInfo[],由多个溯源信息结构体traceInfo组成;其中单个溯源信息结构体traceInfo包括字段:操作名称operationName、是否有投入品ifHasInput、投入品名称inputPrdt、多个溯源关键点指标数组Index[];Index[]是包含多个溯源关键点指标结构体Index的数组;所述单个溯源关键点指标结构体Index包括字段:关键指标名称keyIndex、指标单位unit和指标数值num。

所述校验标准的结构,是校验标准结构体数组standardInfo[],由多个校验标准结构体standardInfo组成;其中单个校验标准结构体standardInfo包括字段:操作名称operationName、是否有投入品ifHasInput、投入品名称inputPrdt、多个溯源关键点指标数组Index[];

Index[]是包含多个溯源关键点指标结构体Index的数组;所述单个溯源关键点指标结构体Index包括字段:关键指标名称keyIndex、指标单位unit和指标数值num。

所述校验函数用于校验录入的溯源信息数据是否符合校验标准数据。校验函数中创建一个存储比较结果的数组对象Count,轮次对比的计数变量i和k,以及创建3个比较结果布尔对象tk1、tk2和tk3;如果农产品溯源信息的是否有投入品字段符合校验标准,tk1为true;如果农产品溯源信息的是否有投入品字段不符合校验标准,tk1为false;如果农产品溯源信息的投入品名称字段符合校验标准,tk2为true;如果农产品溯源信息的投入品名称字段不符合校验标准,tk2为false;设定tk3初始值为true;然后,创建轮次对比的计数变量j,一旦关键点指标数组内有不符合标准的信息,tk3变false并结束循环;把tk1、tk2、tk3的与值赋予变量z,把z的值逐个写入数组对象Count中。

所述校验函数实现(1)查找单个溯源信息结构体和校验标准结构体中包含操作名称operationName相同的校验标准,(2)如果查找到条件匹配的校验标准,逐项对比两者的以下信息是否吻合:是否有投入品ifHasInput、投入品名称inputPrdt、多个溯源关键点指标数组Index[]。

所述执行返回方法实现:(1)如果找不到单个溯源信息结构体和校验标准结构体中操作名称operationName相同的校验标准,则返回“无可参考标准”;(2)如果单个溯源信息结构体和校验标准结构体完全吻合,则返回“符合标准”;(3)如果单个溯源信息结构体和校验标准结构体存在至少一项字段不吻合,则返回“不符合标准,预警”。即:如果Count中没有存入任何值,则赋予结果值“无可参考标准”,如果z值为true,则说明所有信息符合标准,赋予结果值“符合标准”,如果z值为false,则说明有信息符合不标准,赋予结果值“不符合标准,预警”。

使用solcjs对所述sol格式智能合约文件代码进行编译;由原始代码转译成二进制码和字节码。

所述智能合约在联盟链上的部署过程为:将创建的sol格式智能合约文件,以部署交易的方式上链至联盟链;发送智能合约文件二进制码和字节码放入区块链交易的InputData中,编辑接收地址以0x0开头,打包成交易区块;区块链矿工根据0x0的地址头,判定这一交易区块中的交易类型为“发送合约,部署上链”,验证信息正确性后执行区块上链,即将智能合约部署上链。此时智能合约拥有合约地址并存在链上。

所述智能合约部署交易将被联盟链同步至所有节点,即所有节点将可通过EVM(以太坊栈式虚拟机)读取并调用该智能合约。

所述实现农产品溯源校验标准信息上链,包括:将农产品溯源校验标准信息打包成区块并加密、区块上链并同步至所有联盟链内节点。

将溯源校验标准信息打包成区块并加密具体为:某一负责校验标准信息上传的节点A调用SDK工具包,按照一个区块的结构将校验标准信息写入Input Data,并写入时间戳、调用合约地址,然后对校验标准信息进行一次哈希处理,并对哈希进行签名。

将包含校验标准信息的区块上链并同步至所有联盟链节点具体为:包含校验标准信息的区块信息被联盟链广播至所有节点,在数据写入格式符合要求的情况下,通过共识机制将该区块信息同步至所有节点,并更新整条区块链。

所述农产品溯源信息上链时智能合约验证数据和预警的运行机制主要分为信息上链并同步至所有节点、节点调用智能合约判断农产品溯源信息数据、获得判断返回结果、执行回调。如下步骤301~步骤306:

步骤301,信息上链并同步至所有节点,包括:将农产品溯源信息打包成区块并加密、区块上链并同步至所有联盟链内节点。

步骤302,步骤301中提到的将农产品溯源信息打包成区块并加密具体为:某一负责农产品溯源信息上传的节点B调用SDK工具包,按照一个区块的结构将农产品溯源信息写入Input Data,并写入时间戳、调用合约地址等,然后对农产品溯源信息进行一次哈希处理,并对哈希进行签名。

步骤303,将包含农产品溯源信息的区块上链并同步至所有联盟链节点具体为:该包含农产品溯源信息的区块信息被联盟链广播至所有节点,在数据写入格式符合要求的情况下,通过共识机制将该区块信息同步至所有节点,并更新整条区块链。

步骤304,节点调用智能合约判断农产品溯源信息数据机制方法为,节点B自动通过EVM(以太坊栈式虚拟机)读取智能合约的字节码,将农产品溯源信息结构的对应参数值带入智能合约代码,之后执行智能合约。

步骤305,通过步骤304所述将农产品溯源信息结构的对应参数值带入智能合约代码并执行智能合约后,获得三种返回结果类型的其中一型,三种返回结果类型包括:"符合标准"、"不符合标准,预警"、"无可参考标准"。

步骤306,节点B自动将步骤305中所获得的返回结果返回给SDK工具包。

有益效果:与现有技术相比,本发明提供的基于区块链智能合约的农产品溯源信息上链方法,通过所述FISCO BCOS联盟链架构智能合约,可实现在联盟链内对农产品溯源上链信息的智能验证和预警。本发明可广泛应用于智慧农业信息化管理体系与产业供应链大数据共享体系,应用成本低,维护简单,并具有功能性优势与广阔的开发前景。对比现有溯源信息上链技术,本发明核心优势总结如下:

(1)不影响数据上链效率的情况下,拓宽了单次数据上链的业务应用层次,实现了自动验证和预警的评价行为;

(2)智能合约自动化运行,避免传统人工评判溯源数据达标度的错漏问题,避免传统管控系统在半自动评判后不作为的徇私作弊行为。

(3)本发明可在常见服务器上进行部署,并可兼容常见通信设备和采集端口,产业适用度广,应用成本适中,易于联盟链成员机构学习与上手操作。

附图说明

图1是本发明实施例的方法流程图。

具体实施方式

下面结合具体实施例,进一步阐明本发明,应理解这些实施例仅用于说明本发明而不用于限制本发明的范围,在阅读了本发明之后,本领域技术人员对本发明的各种等价形式的修改均落于本申请所附权利要求所限定的范围。

如图1所示,基于区块链智能合约的农产品溯源信息上链方法,包括:智能合约的算法编译与合约在联盟链上部署;农产品溯源校验标准信息上链;农产品溯源信息上链时智能合约验证数据和预警的运行机制。

一,实现用以判断验证农产品溯源信息的智能合约的算法编译,与智能合约在联盟链上的部署过程为:

步骤101,为实现智能合约的算法编译,首先在Linux系统计算机上启动FISCOBCOS的架构环境程序和Docker容器引擎程序作为基础环境准备,再打开solcjs编译台,创建一个sol格式智能合约文件。

步骤102,对步骤101所提到的sol格式智能合约文件代码进行编辑,编辑内容包括版本声明、对农产品溯源信息的结构定义、对校验标准的结构定义与校验函数设计、执行返回方法。

步骤103,对步骤102中提到的版本声明进行编写,调用pragma语句声明使用solidity语言版本为高于0.4.0低于0.7.0。如下:

pragma solidity^0.5.8;

步骤104,对步骤102中提到的结构定义与校验函数设计进行编写。结构定义包括对农产品溯源信息结构的定义和对校验标准结构的定义。农产品溯源信息的结构定义是给农产品质量安全关键节点需要上传的数据创建的标准信息录入结构。同理,校验标准结构定义是农产品质量安全关键节点操作指标标准的标准信息录入结构。

步骤105,定义农产品溯源信息的结构如下(注:此处所列结构体为最基础的农产品溯源信息结构体,实际业务应用场景中可对结构体进行调整与结构复杂度升级):

溯源信息的结构,是溯源信息结构体数组traceInfo[],由多个溯源信息结构体traceInfo组成;其中单个溯源信息结构体traceInfo包括字段:操作名称operationName、是否有投入品ifHasInput、投入品名称inputPrdt、多个溯源关键点指标数组Index[]。

Index[]是包含多个溯源关键点指标结构体Index的数组。所述单个溯源关键点指标结构体Index包括字段:关键指标名称keyIndex、指标单位unit和指标数值num。

步骤106,定义校验标准的结构如下:

所述校验标准的结构,是校验标准结构体数组standardInfo[],由多个校验标准结构体standardInfo组成。其中单个校验标准结构体standardInfo包括字段:操作名称operationName、是否有投入品ifHasInput、投入品名称inputPrdt、多个溯源关键点指标数组Index[]。

Index[]是包含多个溯源关键点指标结构体Index的数组。所述单个溯源关键点指标结构体Index包括字段:关键指标名称keyIndex、指标单位unit和指标数值num。

步骤107,定义校验函数体如下:

对溯源信息的结构定义,和对校验标准的结构定义,将作为校验函数的定义域的结构定义,带入到校验函数的设计中。校验函数用于校验录入的溯源信息数据是否符合校验标准数据。校验函数中创建一个存储单个溯源信息结构体和校验标准结构体的比较结果的数组对象Count,轮次对比的计数变量i和k,以及创建3个比较结果布尔对象tk1、tk2和tk3;如果农产品溯源信息的是否有投入品字段符合校验标准,tk1为true;如果农产品溯源信息的是否有投入品字段不符合校验标准,tk1为false;如果农产品溯源信息的投入品名称字段符合校验标准,tk2为true;如果农产品溯源信息的投入品名称字段不符合校验标准,tk2为false;设定tk3初始值为true;然后,创建轮次对比的计数变量j,一旦关键点指标数组内有不符合标准的信息,tk3变false并结束校验函数的比较循环过程;把tk1、tk2、tk3的与值赋予变量z,把z的值逐个写入数组对象Count中;

该校验函数实现(1)查找单个溯源信息结构体和校验标准结构体中包含操作名称operationName相同的校验标准,(2)如果查找到条件匹配的校验标准,逐项对比两者的以下信息是否吻合:是否有投入品ifHasInput、投入品名称inputPrdt、多个溯源关键点指标数组Index[]。

步骤108,对步骤102中提到的执行返回方法进行编写。如下:

该执行返回方法实现:(1)如果找不到单个溯源信息结构体和校验标准结构体中操作名称operationName相同的校验标准,则返回“无可参考标准”;(2)如果单个溯源信息结构体和校验标准结构体完全吻合,则返回“符合标准”;(3)如果单个溯源信息结构体和校验标准结构体存在至少一项字段不吻合,则返回“不符合标准,预警”。

步骤109,使用solcjs对步骤101所提到的sol格式智能合约文件代码进行编译。由原始代码转译成二进制码和字节码。

步骤110,为实现智能合约在联盟链上的部署,即:将创建的sol格式智能合约文件,以部署交易的方式上链至联盟链。发送智能合约文件二进制码和字节码放入区块链交易的Input Data中,编辑接收地址以0x0开头,打包成交易区块。区块链矿工根据0x0的地址头,判定这一交易区块中的交易类型为“发送合约,部署上链”,验证信息正确性后执行区块上链,即将智能合约部署上链。此时智能合约拥有合约地址并存在链上。

步骤111,智能合约部署交易将被联盟链同步至所有节点,即所有节点将可通过EVM(以太坊栈式虚拟机)读取并调用该智能合约。

二,实现农产品溯源校验标准信息上链,包括:将农产品溯源校验标准信息打包成区块并加密、区块上链并同步至所有联盟链内节点。

步骤201,将溯源校验标准信息打包成区块并加密具体为:某一负责校验标准结构体(校验标准信息)上传的节点A调用SDK工具包,按照一个区块的结构(区块头、区块体)将校验标准信息写入Input Data,并写入时间戳、调用合约地址等,然后对校验标准信息进行一次哈希处理,并对哈希进行签名。

步骤202,将包含校验标准信息的区块上链并同步至所有联盟链节点具体为:该包含校验标准信息的区块信息被联盟链广播至所有节点,在数据写入格式符合要求的情况下(如果数据写入格式不符合要求将不被上链),通过共识机制将该区块信息同步至所有节点,并更新整条区块链。

三,农产品溯源信息上链时智能合约验证数据和预警的运行机制主要分为信息上链并同步至所有节点、节点调用智能合约判断农产品溯源信息数据、获得判断返回结果、执行回调。

步骤301,信息上链并同步至所有节点,包括:将农产品溯源信息打包成区块并加密、区块上链并同步至所有联盟链内节点。

步骤302,步骤301中提到的将农产品溯源信息打包成区块并加密具体为:某一负责农产品溯源信息上传的节点B调用SDK工具包,按照一个区块的结构(区块头、区块体)将农产品溯源信息写入Input Data,并写入时间戳、调用合约地址等,然后对农产品溯源信息进行一次哈希处理,并对哈希进行签名。

步骤303,将包含农产品溯源信息的区块上链并同步至所有联盟链节点具体为:该包含农产品溯源信息的区块信息被联盟链广播至所有节点,在数据写入格式符合要求的情况下(如果数据写入格式不符合要求将不被上链),通过共识机制将该区块信息同步至所有节点,并更新整条区块链。

步骤304,节点调用智能合约判断农产品溯源信息数据机制方法为,节点B自动通过EVM(以太坊栈式虚拟机)读取智能合约的字节码,将农产品溯源信息结构的对应参数值带入智能合约代码,之后执行智能合约。

步骤305,三中获得判断返回结果为,通过步骤304所述将农产品溯源信息结构的对应参数值带入智能合约代码并执行智能合约后,获得步骤108中所提到的三种返回结果类型的其中一型:"符合标准"、"不符合标准,预警"或"无可参考标准"。

步骤306,三中提到的执行回调为,节点B自动将步骤305中所获得的返回结果返回给SDK工具包。

假设节点Y是一家农产品质量安全技术机构,负责上传指定品种水培菜的溯源校验标准信息。其调用SDK工具包,按照一个区块的结构(区块头、区块体)将溯源信息(如下方示例所示)写入Input Data,并写入时间戳、调用合约地址等。然后对溯源信息进行一次哈希处理,并对哈希进行签名。

该区块信息被联盟链广播至所有节点,在数据写入格式符合要求的情况下(如果数据写入格式不符合要求将不被上链),通过共识机制将该区块信息同步至所有节点,并更新整条区块链。因为该区块包括溯源校验标准信息,因此该校验标准信息已上链并同步至所有节点。

假设节点X是一家水培菜生产企业,负责上传本企业的产品溯源信息。其调用SDK工具包,按照一个区块的结构(区块头、区块体)将溯源信息(如下方示例所示)写入InputData,并写入时间戳、调用合约地址等。然后对溯源信息进行一次哈希处理,并对哈希进行签名。

该区块信息被联盟链广播至所有节点,在数据写入格式符合要求的情况下(如果数据写入格式不符合要求将不被上链),通过共识机制将该区块信息同步至所有节点,并更新整条区块链。

节点X自动通过EVM(以太坊栈式虚拟机)读取智能合约的字节码,将溯源信息数据结构的对应参数值带入智能合约代码,之后执行智能合约。

在上述的溯源信息和校验标准的验证比较中,我们能够发现溯源信息的“氮基肥”的“施用次数”3次,不符合校验标准中记录的2次,因此智能合约会判定本次验证的返回结果是“不符合标准,预警”。之后,节点Y将自动将获得的返回结果“不符合标准,预警”返回给SDK工具包。完成本次的溯源信息上链与验证预警。

相关技术
  • 一种基于区块链智能合约的农产品溯源信息上链方法
  • 一种基于区块链与智能合约的产品数据上链方法和介质
技术分类

06120112361476