基于联盟链的电力数据资产交易平台

2021-04-30 06:14郭仪于雷张瀚文颜拥孙毅
数据与计算发展前沿 2021年1期
关键词:以太共识区块

郭仪,于雷*,张瀚文,颜拥,孙毅

1.中国科学院计算技术研究所,北京 100190

2.中国科学院大学计算机科学与技术学院,北京 100049

3.国网浙江省电力有限公司电力科学研究院,浙江 杭州 310014

引 言

党的十九大提出了建设“数字中国”的重大战略命题,随着信息技术的进步和物联网领域的飞速发展,数据正在以前所未有的速度产生,数据的价值也越来越被公众所认可。国家电网规划建设的枢纽型、平台型、共享型的能源互联网数据管理平台,将大数据以及大数据思维嵌入政府治理流程是大数据时代实现政府治理能力和治理体系现代化的重要意旨[1]。

电力大数据的价值主要体现在不同领域对其的开发利用,因此实现电网大数据的安全有效共享非常必要,这样其他领域的研究可以充分地发挥电力大数据的潜在价值。比如,对某些研究机构而言,其理论研究成果需要建立在实际电力数据的基础之上,但是传统的电力大数据管理架构有着严格的限制,因此在使用过程中需要花费大量的时间来人工处理权限审查等问题,严重影响了电力大数据的价值发现[2]。

区块链最早起源于中本聪2008年提出的比特币,是一种以密码学算法为基础的、去中心化的点对点分布式账本技术[3],其首次解决了基于信任的中心化模型带来的安全问题,使得系统中互无信任关系的参与方通过相互协作,完成可信的数据传递与价值流转。

联盟链作为区块链的一种,节点的加入需要经过链上验证节点的严格审核,在一定程度上保障了生态的稳定性、安全性,而且通过特殊的共识机制弱化了系统整体挖矿资源的消耗,强化了链上用户的身份认证标准,同时兼备区块链不易篡改、可溯源、公开透明的特性,在解决能源互联网领域存在的数据孤岛、价值封闭问题方面具有天然优势,可促进能源数据资源跨部门开放共享、数据访问权保护、数据有偿使用等。

目前国内外在相关领域已经有了一定的研究发展。文献[4]提出了一种高性能的智能设备的区块链管理平台,该平台使用分布式网络架构、设备节点映射及共识算法等技术实现智能设备的分散自治。文献[5]在智能电网场景下,对基于区块链的点对点能源交易服务进行研究,并使用中间人攻击、重放攻击与伪装攻击验证了该机制的安全性与可靠性。文献[6]提出了基于区块链和多重签名的电能交易机制,保障了交易双方的权益。文献[7]基于以太坊平台的区块链技术,建立了面向实时交易请求与数据采集的层级化智能配售电交易平台体系架构。文献[8]应用区块链技术的多中心化、可信任、可追溯等特性,使联盟企业的数字资产交易系统相互连通,实现数字资产跨机构安全流转。文献[9]提出基于区块链的电力数据统一监管与共享交易模型,设计基于摘要目录树集中式检索的电力数据共享交易第三方平台,形成了区块链下以“弱化第三方数据集中托管中心,强化点对点交易”为特点的数据共享交易机制。文献[10]提出基于联盟链的微电网身份认证协议,将区块链应用于微电网的身份认证,以解决微电网电力交易存在的身份认证协议不安全、交易中心化、数据无法追踪溯源、节点之间缺乏共识等问题。文献[11]利用联盟区块链的分布式存储、智能合约、共识机制等技术解决泛在电力物联网的信息安全、数据建模、网络传输等问题。文献[12]从多种维度对区块链在能源互联网中的运用进行了总结,并对区块链在能源互联网各种运用场景中发挥的作用进行了探讨。

虽然目前针对电力数据管理的研究已经在区块链、身份认证、溯源等方面有了一定的成果,但是综合多种技术需求的实用平台仍有待研究,由此,本文设计并实现了一个基于联盟链并结合身份认证、链上链下双数据库同步存储以及数据访问权追踪的电力数据交易平台方案。

1 区块链相关概念及技术介绍

1.1 区块链简介

2008年,中本聪首先在Bitcoin:A Peer-to-Peer Electronic Cash System[13]中提出比特币的概念。而区块链则是从比特币系统中抽离出来的关键技术实现。从本质上讲,区块链是一个安全、可信的基于密码学的分布式数据库,记载所有交易记录。区块链基于密码学而非基于信任的交易规则及共识方式,使得达成一致的各方可以直接进行交易,而无需第三方中介的参与。

系统中的每项操作以“交易”的形式广播到所有的参与者,按照系统统一规则将获得共识的交易信息记录到“块”中,每个块记载着前一个块的摘要信息,从而构成环环相扣的链式结构,因此,一个块的变化会使得其后续链的数据一致性失效,从而确保了链上信息的安全性。

图1 区块链链式结构Fig.1 Blockchain structure

链式结构以及多方共识机制的存在,使得区块链具有其他技术所没有的天然优势——公开透明,高度安全。公开透明源于其去信任化规则,网络中节点通过数字签名技术进行验证,无需相互信任,只有遵守链上固定“合同”——智能合约,节点产生的数据才会被其他节点认可;高度安全则源于其多中心化的特点,整个区块链网络中存在多个中心化的硬件或管理机构,每个中心包括一个或多个接入节点,区块链数据由所有节点共同维护,如有节点想篡改数据,那么其必须拥有超过半数的算力(计算资源),这一设计极大地提高了区块链的安全性。

区块链发展初期,主要应用于数字货币领域,代表应用即为比特币,实现了可编程货币,这被称之为“区块链1.0 时代”。随着人们对区块链认识程度的不断深入,区块链开始应用至数字货币以外的诸多领域,如数字存证、数字版权等。2014年,支持图灵完备“智能合约”(smart contract)的以太坊(Ethereum)诞生,业界由此进入了“区块链2.0”时代。

根据不同的应用场景以及用户需求,区块链大致可以分为公有链(Public Blockchain)、私有链(Private Blockchain)以及联盟链(Consortium Blockchain)三大类[8]。具体分类见表格1。

表1 区块链的种类Table 1 Types of blockchain

1.2 以太坊

以太坊作为区块链2.0 时代的代表,通过一套图灵完备的脚本语言(Ethereum Virtual Machinecode,简称EVM 语言)来允许用户建立应用。以太坊整体架构分为三层:顶层应用、核心层、底层服务。顶层应用中包括 API 接口、智能合约和去中心化应用(DApp)等。核心层包含区块链、共识算法和以太坊虚拟机等核心元件,以区块链技术为主题,辅以以太坊特有的共识算法,并且以 EVM(Ethereum Virtual Machine,以太坊虚拟机)作为运行智能合约的载体。底层服务包括P2P 网络服务、LevelDB 数据库、密码学算法及分片(Sharding)优化等基础服务。

1.3 共识机制

共识机制诞生于分布式系统中,几十年来,该领域已经成为一个很重要的研究方向,共识机制的存在,使得分布式节点集合中的共享数据或者共享状态达到一致性,而这种一致性的需求,在于需要保证在同一个网络中,数据库系统中的信息能够被保证不受故障节点影响,也就是说,即使一个或多个网络节点失效,共识机制可以保证数据不会丢失。

共识机制是分布式系统核心。区块链共识机制的目标是促使所有诚实节点保存一致的区块链视图,即同时满足一致性和有效性。其中,一致性是指所有诚实节点保存的区块链前缀部分完全相同;而有效性是指由某诚实节点发布的信息终将被其他所有诚实节点记录在自己的区块中[14]。

2 系统设计与实现

本文提出的基于联盟链的电子数据资产交易平台在实现主要业务功能的基础上,提出了基于智能合约的身份管理随机验证模型,采用更适合于联盟链的POA 共识机制,设计并实现基于区块链监听账户的周期性同步机制,设计并实现基于B+树的数据访问权追踪机制。

2.1 系统整体架构设计

系统架构(见图2)整体分为四层:业务层、服务层、接口层以及数据层。

图2 系统架构图Fig.2 System architecture

业务层提供了登录,注册,查询(包括在售数据信息,已购数据信息,访问权追踪等),出售数据,购买数据,转让数据,创建账户等功能。

服务层我们使用python 语言,采用了基于Flask框架的后台管理服务,充分利用了Flask 扩展性强的特性,合理地使用了数据库插件、登录插件、表单插件、管理员插件等功能,提高了开发效率。

合约层基于solidity 智能合约编程语言进行开发,除了基本的交易操作(出售、购买、转让),还必须向外提供驱动链上信息进行周期性同步的接口,以及基于智能合约的身份认证管理功能。

在数据层,我们采用了链上链下数据库相结合的存储方式。这一点的设计主要是因为区块链存储成本高昂,不适合于存储大量文本信息,同时基于K-V 型数据库的特性使得区块链擅长写操作,但是基于非键值的读取和范围查询效率低下。因此,我们只在区块链上存储数据库中文本信息的hash 值以及必要的交易信息,保证其不被篡改,同时为了方便访问权过程的查询,我们使用基于区块链监听账户的周期性同步机制将信息备份到链下MySql 数据库中,保证数据的快速查询。

2.2 主要业务功能

2.2.1 简介

在本文设计的系统平台中(系统模式见图3),电力数据本身并没有发生实质性的转移,数据依旧保存在国家电网的系统中,不同的是,我们对电力数据进行了访问权限控制约束,即联盟链中的节点可以通过有偿交易的方式从其他节点获取电力数据的访问权,拥有电力数据访问权限的节点(比如研究院所,高等学校,政府机构等)在确认权限合法之后,可以通过国家电网的指定接口访问对应的电力数据,方便后续研究使用。

图3 系统模式图Fig.3 System model

链下机构或个人如果想加入到联盟链中,需要在系统中提交详细的验证信息,只有通过不低于2/3的节点验证时,才可以成为链上节点,进行链内电力数据访问权的交易。

系统平台向用户提供的主要业务包括:注册/登陆系统平台、创建联盟链账户、电力数据交易、查询电力数据访问权。业务流程见图4。

图4 业务流程图Fig.4 System model

2.2.2 注册

在注册过程中,待注册用户需要提供详细的机构信息或者个人信息,作为后期身份认证的重要依据;即使注册成功,用户也无法进行实际的交易操作,只能进行基本的查询功能,只有在创建链上账户并成功经过链上身份认证之后,才拥有售卖、购买、转让电力数据访问权的权利。

2.2.3 创建链上账户

用户在网站注册成功之后,仅仅是拥有了进入网站的权限,如果进行交易操作,则需要创建链上账户,创建账户的过程会触发身份认证管理功能,即经过验证节点验证确认通过,才可以进行相关的交易操作。

2.2.4 交易(出售、购买、转让)

在用户成功创建链上账户并成功经过身份认证后,可以直接发起数据出售的请求,卖家可以根据数据访问期限、数据范围来确定不同的价格。请求成功后,则等待买家进行购买;买家一旦购买成功,将拥有对该数据附加条件(访问期限,访问范围)的访问权,并通过返回的秘钥从网站专用接口访问卖方数据库,获取数据;买家在成功购买数据之后,可以将数据的访问权转赠给其他用户,一旦转赠成功,原买家不再拥有该访问权,无法访问数据。

电力数据访问权交易信息以及属性信息见表格2 和表格3。

表2 电力数据访问权交易信息Table 2 Transaction of electronic data access authority

表3 电力数据访问权属性信息Table 3 Attribution of electronic data access authority

2.2.5 查询

查询过程中的关键部分在于数据访问权的追踪查询,对数据访问权的追踪查询有利于解决数据的滥用问题,可以方便的查询到数据访问权每一次的变更状态。

2.3 关键技术设计与实现

本系统的关键技术主要涉及到四个方面:(1)基于智能合约的身份管理随机验证模型;(2)适用于联盟链的POA 共识机制;(3)基于区块链监听账户的周期性同步机制;(4)基于B+树的数据访问权追踪机制。

2.3.1 基于智能合约的身份管理随机验证模型

在联盟链中,节点的加入以及交易操作需要获得身份许可,在这里我们借鉴了潘维等人的基于智能合约的身份管理及认证模型[15],在该模型中,基于solidity 智能合约实现用户多类型身份数据的发布、验证、认证以及撤销功能,达到管理用户身份数据进行身份认证的目的。

在原模型中,用户在注册过程中会指定一个验证者节点,进行后续用户身份信息的验证,但是指定单一节点,有可能形成联合作恶问题,从而导致待注册用户轻松获得身份许可,形成系统安全的高风险点。因此平台在处理注册操作的过程中,将使用随机算法随机选择一组验证节点进行验证,避免待注册用户与单一验证节点共同作恶现象的出现。验证是否通过由一组长度等于验证节点列表长度的状态位来决策。

表4 Register 函数Table 4 Register function

在验证过程中,如果当前验证节点验证通过,则将其对应的状态位置为1,当有超过1/2 的状态位为1 的时候,说明该用户的认证信息已验证通过。具体验证合约函数见表格5。

表5 Confirm 函数Table 5 Conf rm function

2.3.2 POA 共识机制

共识机制是区块链内分布式协作实现数据一致性的多方协议,用于协调多参与方达成共同接受的唯一结果,且保证此过程难以伪造作假,且可持续稳定运行。在区块链系统中,共识机制旨在解决节点之间的信任问题。在该系统中,基于以太坊平台,选择了更适合于联盟链的POA 共识机制。

POA 全称Proof-of-Authority,由以太坊联合创始人Gavin Wood 提出。在基于POA 的网络中,交易和区块由认可的帐户(称为验证者“singer”)验证。验证程序运行软件,使他们可以将交易分批进行。该过程是自动化的,不需要验证者不断监视他们的计算机。相对于耗用大量电力进行计算的POW 共识机制而言,POA 节省了大量的电力成本,占用更少的内存资源,实现更高的性能。

在POA 共识机制中,个人可以获得成为验证者的权利,因此会努力保持他们所获得的共识参与权。同时在交易的过程中,会在身份上附加声誉,这种机制激励验证者保持积极正当的交易,而不希望降低自己的信誉值。这被认为是比POS(Proof-of-Stake权益证明)更强大的地方[16]。

2.3.3 基于区块链监听账户的周期性同步机制

区块链是一种分布式数据库,以太坊区块链的数据库是以K-V 型的LevelDB 为基础,如前所述,LevelDB 具有很高的随机写性能,但随机读性能一般,因此适用于查询较少,而写很多的场景,因此本文使用监听账户将交易信息周期性备份到关系型数据库(MySQL)中方便查询。

(1)监听账户

监听账户是安排在区块链上的一种特殊账户,其只能读取需要备份的信息,而没有写入或者读取其他信息的权限。

监听账户的设置由智能合约完成,且只能由“创世”账户进行创建。

当备份机制进行工作的时候,会首先通过合约接口向区块链获取监听账户的地址,如果返回的地址为:0x0,则说明不存在监听账户。此时,备份机制会跳转到创建监听账户的函数create_listen_account(),并通过personal.newAccount()函数创建新的监听账户。

(2)信息同步

同步信息主要包括链上交易状态,具体信息见表格6。

表6 同步信息Table 6 Synchronize information

链上智能合约通过附加访问地址限制的同步接口sync()向外输出待同步信息。

链下使用python 通过web3 接口获取待同步信息,并同步更新至链下数据库。

使用Linux 系统服务器命令crontab 周期执行同步任务。

2.3.4 基于B+树的数据访问权追踪机制

(1)介绍

从技术角度上来说,目前的数据溯源应用或者数据追踪应用的数据存储在传统的关系型数据库如MySQL,SQLServer 中,这类中心化数据库存在着多种由于单点依赖造成的数据安全问题,如数据被污染,黑客攻击等[17]。

而完全基于区块链实现数据存储并进行信息追踪的方案的执行效率十分低下,前文介绍过区块链本身基于K-V 型数据库,在数据的查询搜索效率上,远不及传统关系型数据库。

因此,我们借助前文提到的基于区块链监听账户的周期性同步机制,将链上的追踪信息周期性的同步到链下关系型数据库中。当用户在客户端发起访问权追踪请求时,可以通过关系数据库实现更快的查询响应速度。同时在不损失查询效率的基础之上,也通过区块链的不可篡改性保证了数据的安全性。

(2)数据结构

在数据访问权追踪机制中,设计链上追踪信息数据结构见表格7,并将其同步到链下关系型数据库中。

表7 数据结构Table 7 Data structure

(3)追踪机制

每一个访问追踪机制函数的请求者,必须是数据的发布方,只有通过数据发布者地址验证才可以一步步进行数据的追踪。

因为有效数据hash 以及机构地址分别都有着明显的大小序关系,所以我们可以根据有效数据hash及来源机构地址来维护一个B+树结构。

B+ 树是一种树型数据结构,通常用于数据库和操作系统的文件系统索引方案中。B+ 树的特点是能够保持数据稳定有序,其插入与修改拥有较稳定的对数时间复杂度。而未使用B+树进行维护的数据,虽然插入数据的时间复杂度为O(1),但是查找的时间复杂度为O(N),所以整个平均下来,使用了二维B+树进行维护的数据结构在查询以及插入操作上会花费更少的时间[18]。

在MySql 数据库中,我们可以对字段设置索引,从而使用B+树结构进行数据的插入与查询。

创建索引的命令如下:

CREATE INDEX track_index ON trackInfo(validHash(255), source(255));

数据访问权追踪函数见表格8:

表8 TrackOwner 函数Table 8 TrackOwner function

3 测试与分析

3.1 测试环境

本系统部署在安装了Linux 操作系统的虚拟机上,测试过程具体配置见表格9。

表9 测试环境Table 9 Test environment

3.2 功能测试

在上述实验测试环境下,我们对系统主要模块进行了黑盒测试,对于电力数据,我们采用本地数据文件进行模拟,测试结果见表格10。

表10 测试结果Table 10 Test result

3.3 性能测试

3.3.1 基于B+树的数据访问权追踪机制性能测试

本文主要针对基于B+树的数据访问权追踪机制,在仅使用链上数据库,使用链下MySql 数据库添加索引,使用链下MySql 数据库不添加索引三种情况下的查询效率做了对比测试分析。

对于插入操作,当分别插入1000,2000,3000,4000,5000 条数据的时候,对应的测试结果见表格11。

表11 插入测试Table 11 Insert test

对于查询操作,我们在每组测试数据中分别随机选择了500 条数据进行查询,测试结果见表格12。

表12 查询测试Table 12 Query test

通过测试数据,可以发现,无论是插入操作还是查询操作,区块链的执行时间远高于MySql;对MySql 的插入操作而言,MySql 是否添加索引对插入操作执行时间几乎没有影响,可以满足电力数据的交易通量需求;就MySql 的查询操作而言,随着测试数据量的增加,无索引情况下的查询时间成线性递增,而有索引情况下的查询时间几乎保持常数。综上,基于B+树的数据访问权追踪机制的综合功能效益和性能效益明显。

3.3.2 联盟链与公有链交易性能测试

本文中提到的联盟链基于以太坊进行设计,使用了POA 共识机制,该机制不像POW 共识机制那样需要使用大量的算力来实现共识,从而大大节约了电力资源。

同时POW 的计算过程有一定的难度约束,因此在理论上,使用了POW 的区块链其共识过程以及出块时间相对使用POA 的区块链要慢,为了验证这一理论,我们在3.1 节的测试环境中对基于POA 的以太坊联盟链和基于POW 的以太坊公有链进行了比较测试。

在测试过程中针对基于POA 的以太坊联盟链,本文设计了五个节点,三个节点为验证节点;针对基于POW 的以太坊公有链,本文设计了五个节点,挖矿初始困难度设置为默认困难度0x80000。

测试任务是针对两种区块链,分别计算其执行100,200,300……1900,2000 笔交易时所花费的时间(单位:秒)。测试结果如图5所示,在该图中,可以看出,随着交易数的提高,基于POA 的以太坊联盟链所花费的时间增长速率相对稳定,而基于POW的以太坊公有链增长速率波动较大不稳定,而且两者相比较可以发现,在耗费的时间上,基于POW 的以太坊公有链整体要比基于POA 的以太坊联盟链高,因此该实验结果对本文提出的基于联盟链的电力数据资产交易平台提供了有效的支撑。

图5 系统模式图Fig.5 System model

4 总结

本文设计并实现了基于联盟链的电力数据资产交易平台,允许不同的机构的不同部门在身份认证之后可以加入到该链中有偿共享数据,在应用层面上,一定程度解决了电力部门的数据孤岛问题。

在完成基本功能的前提下,提出了基于智能合约的身份管理随机验证模型;对比多种共识方案的优缺点,选择了适合于联盟链的POA 共识机制;设计并实现了基于区块链监听账户的周期性同步机制;设计并实现了基于B+树的数据访问权追踪机制。

我们基于以太坊,在Linux 平台上对系统进行了功能测试、数据访问权追踪机制的性能测试以及联盟链与公有链交易性能测试实验,实验表明系统功能完备且运行平稳,同时性能测试表明访问权追踪查询的综合效率提升明显,基于联盟链的电力数据资产交易平台有着更高的性能。

利益冲突声明

所有作者声明不存在利益冲突关系。

猜你喜欢
以太共识区块
共识 共进 共情 共学:让“沟通之花”绽放
区块链:一个改变未来的幽灵
论思想共识凝聚的文化向度
基于活跃节点库的以太坊加密流量识别方法
以太万物理论概述
区块链:主要角色和衍生应用
《红楼梦》的数字化述评——兼及区块链的启示
商量出共识
车易链:做汽车业的“以太坊”
一场区块链引发的全民狂欢