APP下载

基于区块链的河湖“四乱”事件存证系统研究

2021-01-04孟令奎王旭觐

水利信息化 2020年6期
关键词:以太合约区块

孟令奎,王旭觐,张 文

(武汉大学遥感信息工程学院,湖北 武汉 430079)

0 引言

为加强河湖管理保护,维护河湖生态健康,水利部于 2018 年 7 月启动河湖“清四乱”专项行动,将其作为水利行业强监管的重要标志性工作,对修复河湖环境,治理河湖生态有着非常重要的意义。

对于“四乱”问题,水利部和地方机构均建立相应的“四乱”问题台账,实行问题整改情况动态跟踪和销号管理[1-2]。台账数据质量是“四乱”问题整改成效的重要指标,其真实性关系到“四乱”问题的整改成败[3-5]。区块链(blockchain)作为一种具有不可伪造、全程留痕、可追溯、公开透明等特征的去中心化数据库[6],于 2020 年 4 月 20 日被国家发展和改革委员会纳入“新基建”的建设范畴。除了最初应用的金融领域外[7-8],区块链被广泛应用在物流[9-10]、电力[11-12]、应急[13-14]、精准扶贫[15-16]等各个领域,取得了较好的成效。在“水利工程补短板,水利行业强监管”的水利改革发展总基调下,区块链技术迎来了新的应用契机,区块链技术可以为落实监管政策,强化监管成效提供重要支持。

为探索区块链技术在河湖“清四乱”专项行动中的应用可行性,研究和实现一种基于区块链智能合约的“四乱”事件存证系统(以下简称存证系统),将“四乱”问题从发现、核实、整改到复查乃至问责这一全流程进行不可篡改的存证,并提供对已存证“四乱”事件的查询和追溯。

1 区块链和智能合约

1.1 区块链

区块链是一种伴随数字加密货币体系的发展而兴起的分布式计算范式,具有去中心化、时序数据、可编程、集体维护、安全可信等特点[17]。不同架构平台的区块链结构存在细微差异,但主体大致相同。以比特币为例阐述的区块链结构如图 1 所示,这是一种链式结构,以数据区块(Block)存储数据,这些数据区块以链条的形式连接起来[18]。

图 1 区块链结构

区块链中的数据区块是一种经过加密的块结构,由魔数、区块大小、区块头、交易计数器和交易构成。魔数作为区块之间的分隔符,一般是常数0xD9B4BEF9。区块大小则表示该字段之后的区块大小。区块头一般包含区块识别和链接相关的信息,通常情况下,区块头由当前版本号、前一个区块的 Hash 值、时间戳、解随机数、Merkle 根、难度值构成[19]。前一个区块的 Hash 值和时间戳能保证区块按照时序连接,Merkle 根可以保证数据的不可篡改性。Merkle 根是由区块中的所有交易经过递归的分组 Hash 后得到的根 Hash 值。区块体主要包括交易相关的信息,如交易数量、交易等。交易中包含本次交易的基本信息,如交易发起方、接受方及区块 Hash 等信息。

随着区块链技术的发展,利用自动化脚本编程和操作数据的区块链平台开始出现并被使用,以太坊就是其中的典型代表[20]。以太坊是一种开源的、实现了智能合约的底层系统,以太坊虚拟机(EVM) 是以太坊的智能合约的运行环境。作为区块链 2.0 的以太坊,提供了图灵完备的脚本语言供用户创建自定义的智能合约[21],用户通过编写智能合约的形式完成复杂操作,通过交易的形式对智能合约进行发布和部署。

1.2 智能合约

智能合约概念的出现远早于区块链,最初由密码学家 Nick Szabo 在 1994 年提出[22]。它的设计初衷是通过智能合约和真实世界的资产进行交互,当用户触发智能合约设定的条件后,相关的条款会被自动执行。智能合约本质上也是一种计算机协议,可以通过计算机进行相关交易条款的自动处理,避免中介需求,降低意外和恶意情况的发生[23]。

伴随着区块链技术的产生和发展,智能合约被赋予了新的内涵。广义上说,智能合约是可以部署在区块链上的代码合集,通过主动或被动的形式接受、存储、处理数据,能够实现复杂的数据操作,满足业务需求。和其他区块链数据一样,智能合约同样通过交易的形式进行部署,经过网络传播和节点之间的验证后,存储到数据区块中,用户可以在任意时刻通过智能合约提供的接口调用智能合约,操作数据。智能合约的优势使得基于以太坊的 DApp开发受到各行各业的青睐[24]。智能合约具有一般区块链数据所具有的典型特征,如安全性、不可篡改性等。此外,还具有以下优点:

1)准确性。这是智能合约能应用于区块链技术中的关键因素。无论何时,对于相同的输入总能输出一样的结果。

2)自动化程度高。智能合约在完成自动部署后,只需触发智能合约设定的条件,就能执行相关的智能合约操作,最大程度地提高交易的效率。

3)去人为干预性。这是智能合约权威性和真实性的保证。当智能合约以交易的形式完成部署后,智能合约条款的执行不再需要人为干预。

4)实时性。智能合约的调用和相关条款的执行是实时的,无需人为干预和中介介入,用户可以在任意时间调用部署过的智能合约。

2 存证系统分析与设计

2.1 需求分析

结合河湖“清四乱”整改专项行动从问题发现到整改完成的完整流程,存证系统至少应满足以下3 个方面的功能需求:

1)“四乱”事件提交和存证的需求。区块链作为一种辅助手段校验“四乱”问题台账的真实性,最基本的需求就是对“四乱”事件进行有效存储。对于授权的用户,可以发布“四乱”事件的相关信息,而这些信息将会被存储到区块链上。对于相同的事件,可以对其在“四乱”问题巡查、详查、核查和复查的不同阶段数据进行存储。由于区块链数据的公开透明性和不可篡改性,若存储在区块链中的数据和问题台账中一致,则证明问题台账的真实性。

2)“四乱”事件查询需求。查询是“四乱”事件的基本需求。用户可以对发布和上链的“四乱”事件进行查询,除了可以查询到“四乱”事件的基本信息外,还可以查询到存储该“四乱”数据的区块、交易信息,以及“查、认、改、罚”等措施的执行情况。

3)“四乱”事件追溯需求。“四乱”事件的追溯属于查询的延伸,用户可以根据“四乱”事件的唯一编码对该事件进行追溯查询。由于每个“四乱”事件被赋予了唯一编码,保证了从事件的发布到整改完成这一全流程的透明性和真实性,对落实责任机制,提高问题整改质量和效率有积极意义。

2.2 系统设计

2.2.1 总体框架设计

存证系统的主要功能是实现“四乱”事件的存储、查询和追溯。存证系统的总体架构如图 2 所示,存证系统自下向上可分为以下 4 个逻辑层:1)存储层。存储层主要为以太坊的数据存储模块,用到以太坊的底层数据库和辅助数据库 MySQL,辅助数据库主要用于存储用户的相关信息。2)网络层。网络层为以太坊网络,用于节点间的通信。3)业务层。业务层实现存证系统的主要功能,实现“四乱”信息的上链、查询和追溯功能。4)显示层。显示层为相关业务对应的可视化界面,如信息上链、发布查询等界面。

图 2 存证系统的总体框架图

2.2.2 模块化设计

根据存证系统总体框架的业务功能,存证系统可以分为 3 个模块,具体设计如表 1 所示。

表 1 存证系统的模块设计

为满足“四乱”事件的查询和追溯需求,对于每个事件,在进行事件提交和存证时需赋予其唯一的事件 ID,便于后续的“四乱”事件查询和追溯。事件的 ID 生成方法需用到“四乱”事件的发生地点、主要责任人、事件记录人员和类型几个字段,将这些字段进行拼接后用 MD5 编码,即可获得“四乱”事件的唯一编码。

2.2.3 智能合约设计

存证系统的 3 个模块功能的实现皆依托于智能合约,可使用运行在以太坊 EVM 上的图灵完备的高级编程语言 Solidity 编写“四乱”事件的信息处理智能合约,在智能合约中实现相关业务逻辑,最后通过智能合约调用实现对应功能。

在智能合约中,通过 struct 结构实例化每个“四乱”事件,struct 的结构设计包括事件的发生时间和地点、主要责任人、记录人员、简要描述、问题类型、巡查类型。对于“四乱”事件集合的存储,采用 mapping 结构实现。mapping 的 key 为“四乱”事件的唯一编码,即事件 ID。由于存证系统提供了对“四乱”事件处理流程中信息的存证功能,因此,同一个事件 ID 会对应着多个“四乱”事件记录。mapping 的 Value 为“四乱”事件的集合,定义为mapping(string=>Case[ ])public caseLists。智能合约中 3 个模块的主要实现流程如下:

1)事件提交和存证模块的实现流程。“四乱”事件提交和存证模块的实现流程如图 3 所示,在调用智能合约中的提交和存证函数后,需要判断调用者是否具备事件的存证权限。若具备权限,则须遍历事件集合以防止重复提交相同的事件记录;若该事件未提交过,则实例化后即可存证,最后以交易的形式将事件存储到区块链上。

图 3 “四乱”事件提交和存证模块的实现流程

2)事件查询模块的实现流程。“四乱”事件查询模块实现流程如图 4 所示,首先从提交的事件记录中获取想要具体查询的事件的交易 Hash,最后根据交易 Hash 获取事件的具体信息,包括事件和区块等信息。查询过程以区块链交易的形式完成。

图 4 “四乱”事件查询模块的实现流程

3)事件追溯模块的实现流程。“四乱”事件追溯模块的实现流程如图 5 所示,在调用智能合约中的追溯函数后,根据需要追溯事件的 ID 查询与该事件相关的所有记录。若事件存在,则须遍历该事件的所有记录集合并将结果返回。追溯的过程同样以区块链交易的形式完成。

图 5 “四乱”事件追溯模块的实现流程

3 存证系统部署

3.1 存证系统环境配置

存证系统是基于以太坊技术开发的 Java Web 应用,开发框架为 Springboot,表 2 和 3 给出了存证系统的环境配置。

表 2 存证系统的硬件环境

表 3 存证系统的软件环境

3.2 以太坊私链构建

以太坊私链的构建是存证系统的基础,只有搭建好合适的私链,相关的“四乱”事件才能得到有效的存储和查询。私链的构建过程主要分初始化创世区块和启动私链 2 个步骤。在初始化创世区块之前,需要对创世区块的参数进行配置,主要包括私链 ID、挖矿难度、gas 的限制等。完成参数配置后,使用geth--datadirdata/init genesis.json命令初始化创世区块。在完成创世区块初始化后,即可启动私链,启动命令为nohup geth--datadir data/--networkid15 --rpc--rpcapi db, eth,net,web3,personal,miner--rpcport8545 2>output.log&。

3.3 智能合约部署

智能合约的部署是后续与其进行交互的条件,主要分为智能合约的编译和部署 2 个部分,使用 truffle简化编译和部署过程。在部署智能合约之前,需要对 truffle 进行配置,truffle 的参数配置文件为 truffleconfig.js,主要对端口号、部署的网络 ID、消耗的gas 限制、solidity 编译器版本等参数进行配置,在完成对 truffle 的配置后,即可对智能合约进行编译和部署,命令为 truffle migrate。该命令会先对智能合约进行编译,编译生成后缀为 sol 的智能合约文件,待编译完成后对 sol 文件执行部署命令。

4 存证系统测试

存证系统主要实现的功能为“四乱”事件的提交和存证、查询及追溯。采用黑盒测试方式分别针对这 3 个模块进行测试,通过测试验证系统的可用性、页面和数据的正确性。在测试中使用的数据皆为模拟的“四乱”事件数据。具体测试如下:

1)“四乱”事件提交和存证模块测试。该模块提供对“四乱”事件的提交和存证功能,测试信息如表 4 所示。

2)“四乱”事件查询模块测试。该模块提供对“四乱”事件的查询功能,测试信息如表 5 所示。

3)“四乱”事件追溯模块测试。该模块提供对“四乱”事件的追溯功能,测试信息如表 6 所示。

5 结语

本研究基于区块链 2.0 以太坊技术,针对“清四乱”专项运动中对“四乱”问题事件的存证需求,设计了合适的智能合约,并在此基础上开发了“四乱”事件存证系统。试验结果表明:存证系统可以有效地将“四乱”事件存储到区块链上,确保事件记录的真实性和透明性,能满足“四乱”违规事件的存证需求。同时,对于已经上链的违规事件,可以获取具体的事件描述和区块等信息,并对其整改流程进行完整的查询和追溯,为落实监管程序、评估监管成效提供了数据支撑。本存证系统是区块链技术在水利行业监管领域的探索性应用,可以将其作为校验手段保证“四乱”问题台账的真实性,为水利综合监管平台的建设提供支持。限于区块链技术的存储限制和技术特点,目前本系统只提供对事件描述信息的存证,如何实现对违规事件的现场图像、视频等记录的存证将会是下一步的研究重点。

表 4 “四乱”事件提交和存证模块的测试信息

表 5 “四乱”事件查询模块的测试信息

表 6 “四乱”事件追溯模块的测试信息

猜你喜欢

以太合约区块
区块链:一个改变未来的幽灵
基于活跃节点库的以太坊加密流量识别方法
以太万物理论概述
区块链:主要角色和衍生应用
《红楼梦》的数字化述评——兼及区块链的启示
车易链:做汽车业的“以太坊”
一场区块链引发的全民狂欢
A Study on the Contract Research Organization