赵文婷,沈 蒙,金智新,3,王盈森,李 懿
(1.太原理工大学 经济管理学院,太原 030024;2.北京理工大学 计算机学院,北京 100081;3.山西焦煤集团有限公司,太原 030024;4.太原理工大学 信息与计算机学院,太原 030024)
随着全球电力市场的快速成长,参与电力交易的市场主体变得越来越多元化,尤其是储能技术的发展,推动着交易主体开始从生产者或消费者向产消者转变[1-2]。多元化的市场主体增加了电力交易的复杂性,增加了运营和维护成本。电力市场能源交易的去中心化交易模式可以有效降低能源市场的管理运营成本,因此受到广泛关注,并开始应用于电力市场研究中[3]。然而,脱离中间运营商监管和运行的去中心化交易模式,也存在着用户信息和交易数据容易被篡改等安全隐患,以致于交易过程的透明性和安全性得不到有力保障。因此推动电力交易的去中心化运行模式,降低电力市场的运作成本,保证电力交易信息的安全性和可靠性,是研究电力交易市场的新方向。
区块链不仅是一个分布式的记账系统,也是一种后端的基础架构。其本质是一种全局共享的分布式账本,即不需要任何第三方组织,通过自证清白的方式建立分布式信任机制,维护不断增长的数据记录列表。在区块链中完成的每笔交易的信息都是共享的,并且可供所有节点使用,其具有去中心化、高公信力、数据不可篡改等特点[4]。该技术最初应用于比特币,并作为加密货币系统[5]。随着算法和应用程序的不断发展,区块链正在广泛应用于金融服务、信用调查、供应链和物联网[6]。该技术增强了这些行业中各个主体间的信任,降低了运作成本,提高了数据和信息的安全性。将区块链技术用于能源领域是一个新的研究热点,目前,在美国纽约和澳大利亚巴瑟尔顿,已将区块链技术用于电能交易系统研究中,并将基于区块链技术的电能交易系统投入运行。MENGELKAMP et al[7]基于区块链技术推出了七个组件,并构建了高效微电网能源市场框架。XU et al[8]基于区块链构建了微电网群信息流交易模型。同时,通过改善信息素浓度和调整参数来改进蚁群优化算法,求解所提出的微电网群信息流交易模型。目前,这些研究更侧重于市场框架或市场竞争策略优化的问题,而基于区块链技术的电力市场交易系统研究才刚刚起步。
基于上述分析,本文提出一种基于Hyperledger Fabric去中心化交易模型,并将其引入电力交易系统研究中,然后选择Kafka共识机制并基于Fabric 1.1构架进行链码部署及系统性能测试。采用联盟区块链技术构建的电力市场交易系统,可以降低市场运营和管理成本,并确保交易过程的透明性和安全性。
“区块链”这一概念[5]由中本聪于2008年提出。该技术使用对等(peer to peer;P2P)网络自动执行智能合约,使区块链的分布式数据库进行自我管理。本节将对研究中所涉及到的区块链的相关原理和技术进行简要阐述。
区块链通常被视为分布式公共分类账,按时间顺序和公开记录交易。区块链技术的核心功能是独立保护数据的真实性,不依赖于任何中央或第三方代理机构,打破信任障碍,大大降低了业务运营的信任成本,提高了业务效率。该技术确保了区块链数据库的完整性、连续性和一致性,使交易透明化,保证数据信息不能被篡改[9]。
袁勇等[10]通过对区块链技术的深入研究,提出区块链六层架构:应用层、合约层、激励层、共识层、网络层、数据层,如图1所示。其中,数据层主要解决区块中的数据以怎样的方式组合在一起的问题,封装了包括时间戳、哈希函数、非对称加密技术、数据区块的链式结构[11]等在内的底层技术。网络层封装了P2P连网机制、数据信息传送机制和数据信息校验机制。共识层主要包括共识算法和共识机制,是整个区块链网络中的分布式节点对同一区块进行有效性判断的依据。在激励层中,每一个区块链系统都有其独有的经济激励和Token分配制度,以鼓励区块链网络中的节点来共同维护区块链网络[12]。在合约层中,由于区块链具有可编程的特性,使得每一个区块中都可以包含脚本、算法以及智能合约。智能合约可以使区块链系统在达到约束条件下自动触发执行合约内容,而不需额外的人工干预。该层极大限度地扩充了区块链的应用场景,使得区块链成为降低信用成本的技术之一[13]。应用层主要指区块链的具体应用场景。
图1 区块链的6层基础架构Fig.1 Six-layer structure of blockchain
从区块链的数据结构来看,区块链是由密码学算法产生带有时间戳数据的区块组成的链条。区块头的内容是用于连接下一数据区块的外部信息。区块数据用于数据分析和处理,为节点用户提供决策方案,如图2所示。
图2 区块链区块结构Fig.2 Block structure
目前根据去中心化程度区块链技术可分为3类,包括公有区块链、联盟区块链、私有区块链。在公有链中,链上的每一个参与者都可以发送交易,每个个体均能够介入整个共识过程。但是,运用公有链交易的能耗较大,且不可控。私有链仅仅使用区块链的总账技术进行记账,一般只在一个企业或机构内使用。
由多个组织构建的联盟区块链只有部分节点参与其共识过程,其余节点只参与交易过程,因此联盟区块链具有部分去中心化特点。它既有私有链的隐私性,也有公有链的去中心化思维,因此联盟链具有以下特点[14]:
1) 交易成本低、速度快。联盟链交易只需部分节点参与验证与记账,少量的联盟节点具有较高的可信度,从而简化了认证过程,使其比公有链有更快的交易速度。
2) 数据信息安全性高。不同于公有链,联盟链的数据只限于联盟里的主体才有访问权限。访问权限受到限制,从而可以提供更好的隐私保护。
3) 可调控性。联盟链在短期内具有可扩展的优势,具有一定程度的调控性。
电力交易市场的参与主体并不止是一个企业,故私有链不适用于微电网。另一方面,电力市场属于一个行业,对区域和市场主体有一定的划分。同时,参与电力交易的主体需要符合一定的资质才能进行交易,因此联盟链更适用于电力交易市场的研究。
1.2.1Hyperledger Fabric
Hyperledger Fabric是由IBM公司牵头发起的一个联盟链项目,2015年底移交给Linux基金会后成为开源项目。该项目旨在通过成员共同合作,针对不同行业各种用户案例,建立一个可以使共识和会员服务等组件即插即用的基础区块链服务平台。目前Hyperledger Fabric已经推出到1.0以上的版本,自1.0版本以来,Fabric将区块链的数据维护和共识服务进行了分离。共识服务从节点(peer)中完全分离出来,独立为共识节点(orderer);数据维护服务通过通道(channel)结构的建立予以实现,新的结构使得业务隔离性能和数据安全性能得到大幅度的提升[15]。
Fabric在架构上采用了模块化设计,主要由三个服务模块组成:成员服务、共识服务和链码服务,如图3所示。成员服务提供注册登录、身份管理以及交易审计功能,用来限制访问权限以确保系统登录的安全性。共识服务负责节点的分布式账本计算、订单排序、P2P协议的实施以及背书验证。链码服务提供一个智能合约的执行引擎,为Fabric的合约代码程序提供部署运行环境。链码可以通过多种编程语言来开发,包括Go、Java和Node.js等。目前,支持最完善的是Go语言版本的链码。
图3 Fabric整体架构图Fig.3 Overall architecture of fabric
1.2.2共识机制
Hyperledger Fabric的共识算法是由经过许可的节点组成的分布式系统,只能由构成联盟的给定业务环境中的部分获准成员进行操作。许可的区块链将识别节点如何控制和更新共享分类帐,并且通常还具有控制谁可以发出交易的方法。同时,排序服务(order service)用来对Hyperledger Fabric的每个节点的订单进行统一处理,以确保每个节点上的订单顺序统一,从而防止产生分叉问题。目前,Fabric1.1支持3种共识算法,包括:分布式队列(Kafka)、简单的拜占庭容错(SBFT)、单节点共识(Solo)。SBFT处理事务的速度更快,具有更好的扩容性。Solo只有一个订购服务节点,如果该节点崩溃,Fabric将无法生成阻止,因此仅在实验室测试环境中使用该共识算法[15]。Kafka是一种高吞吐量的分布式发布消息系统,其多排序节点可以避免单点故障而导致整个网络崩溃的问题。下面重点介绍Kafka算法。
Kafka结构如图4所示,由以下几类角色构成:1) Broker,消息处理节点,主要任务是接收消息生产者(Producer)发送的消息,并将排序后的消息发送给订阅该主题(Topic)消息的消费者(Consumer);2) Topic,主题,Kafka通过对Topic进行分区来提高吞吐量;3) Zookeeper,分布式协调服务,用于集群管理和元数据存储,以实现Kafka动态水平扩展;4) Producer,消息生产者,程序会将所产生和公布的消息传送至Brokers;5) Consumer,消息消费者,通过应用程序接口(Application Programming Interface,API)订阅Topic,从而对所收到的信息进行处理。
图4 分布式队列(Kafka)架构图Fig.4 The structure of kafka consensus algorithm
分布式能源的发展大力推动了电力交易市场的建设。目前,电力交易市场的传统运营方式需要中间机构的监管和运作,存在着运营成本较高、交易自由度较低等缺点。此外,由于中间机构的运作使得交易不够透明,交易数据可篡改且用户信息的安全得不到保障。区块链技术可以作为一种去中心化的技术解决方案,所有当前参与的节点去共同维护一个交易账本,以确保交易过程具有较高的安全性和透明性。因此,本文从以下3个方面来对区块链技术用于电力市场交易研究进行分析:
1) 首先,区块链技术可以保障数据不可篡改,促进电力交易过程透明化。
2) 其次,区块链技术能够解决市场主体间的信任问题,进而免除中间运营商的监管环节,从而实现电力市场去中心化交易。去中心化的点对点交易可以减少电力交易过程中信息流和能量流的流通环节,提高信息的时效性,增加交易的自由度。基于区块链技术的电力市场交易模式可以实现主体间的点对点交易,提高交易效率,降低运营成本。
3) 最后,区块链技术可以提高电力交易市场的主体信息和交易数据的安全性。当去中心化这种新型的交易模式应用于电力交易市场中时,交易过程的安全性则成为了所有市场主体所担心的问题。非对称加密算法是保证区块链安全的核心技术,该算法包含2个秘钥:公开密钥(public key)和私有秘钥(private key)。这种加密算法使得节点数据为全网用于认证的节点共同认证和鉴定,能够有力保障电力交易全部过程的安全性。
基于Hyperledger Fabric电力市场交易系统模型整体框架如图5所示,电力交易的市场主体分别为:售电单元(power unit,PU)和购电单元(buyer unit,BU)。其中,PU是一笔电力交易的售电方,它可能是一个小型分布式电源,也有可能是一个拥有光伏发电板的普通家庭。BU是一笔电力交易的购电方,它可能是一家小型电力公司也可能是一个普通的用电家庭。每一笔交易都必须由所有的参与方共同认证方可生效,我们将每个加入交易网络的用户单元都抽象成为一个成员组织,每一个组织在区块链网络中至少拥有两个节点。每一个参与方,无论是用电单元还是售电单元,都至少拥有一个智能电表。当有新的电力交易请求时,请求将会传入区块链交易系统的证书颁发机构(certificate authority;CA)申请身份,该接口会根据预设的逻辑来判断该能源请求是否符合要求,若符合,发放许可并将该请求提交给交易系统。然后,交易系统会将请求的内容发送到区块链交易匹配中心(matchmaking trading center;MTC)完成交易过程。当交易完成后,通过排序服务(order service),将交易记录记入账本。
基于Hyperledger Fabric电力交易系统执行的具体流程如图6所示,可分为3个阶段,包括交易认证阶段、交易执行阶段和交易结算阶段。
在交易认证阶段,PU和BU分别向CA申请以获得入网许可,具体流程如下[16]。
步骤1:根据安全参数,CA生成自己的主私钥(master private key,MPK).
步骤2: PU和BU向CA提出入网申请,获取在交易网络中相应的相关属性集(attribute set,AS),包括身份标识、用户类型、用户权限、用户征信报告以及用户的钱包地址等。
步骤3:CA根据各单元属性集,利用自己的主私钥为各单元颁发私钥,并通过安全信道发送给各用户单元。
图5 基于Hyperledger Fabric电力交易模型Fig.5 Power trading model based on Hyperledger Fabric
图6 基于Hyperledger Fabric电力交易系统执行的具体流程图Fig.6 Flow chart of execution of power trading system based on Hyperledger Fabric
KeyGen(MPK,AS)→PKr.
(1)
式中:MPK为主私钥,PKr为各单元颁发私钥,AS为相应的属性集。
售电单元和购电单元发布交易信息,然后在MTC中进行交易匹配,用户根据内部电价和交易量签订相关交易的智能合约,具体步骤如下。
步骤1:BU向MTC提交需求信息,并使用自身私钥对最终的需求信息进行身份标识,生成签名,通过MTC进行发布。
Intb(IDb,Addr,Td,Ed,Pb,Sigb)→Demand .
(2)
式中:IDb为身份标识、Addr为钱包地址、Ed为需求量、Td为交货时间、Pb为价格,Sigb为需求信息生成签名。
步骤2:PU向MTC提交售电信息,并使用自身私钥对最终的售电信息进行身份标识,生成签名,通过MTC进行发布。
Intp(IDp,Ep,Pp,Sigp)→Supply .
(3)
式中:IDp为身份标识,Ep为预计售电量,Pp为售电价格,Sigp为售电信息生成签名。
步骤3:PU与BU通过MTC进行匹配,并加上交易匹配成功的时间戳Ts,生成交易订单Ord.
Match(Demand,Supply,Ts)→Ord .
(4)
式中:Ts为时间戳,Demand和Supply分别为所发布的需求信息和供电信息,Ord为所生成的交易订单。
订单一旦形成,参与该交易的PU与BU便选择一个合适的MTC节点,形成一条能源调度通路,伴随交易通路的形成,MTC会生成一个随机数。
Hash(PUid,BUid,MTCid)→Rand .
(5)
式中:PUid为PU的身份信息,BUid为BU的身份信息,MTCid为交易匹配信息,Rand为随机数。
当交易完成时,提交至排序服务进行事务排序,排序结束后记入账本中。然后调用调度系统,按照请求的具体内容完成能源调度。
步骤1:在交易系统中,随机数与已达成的交易订单一并整合为一条交易记录,根据链码中的背书策略,然后发向各组织中的节点1.
Intr=(Ord,Rand)→Record .
(6)
Rand为MTC中所生成的随机数,Ord为所达成的交易订单。
步骤2:节点1会检查交易的合法性,检查结束后会使用自身的私钥PKr对执行结果进行签名,并发还给交易系统。
步骤3:当交易系统收集到足够数量的结果后会把交易事务发向排序服务。
步骤4:排序服务将收到的每一笔事务按顺序打包至一个区块中,直到区块的大小达到系统预设的阈值。
步骤5:当一个区块达到指定阈值后,排序服务会将该区块提交给节点1以及节点2,节点2此时会校验结果并将区块写入账本中。这时,电力交易系统收到交易达成通知,并发送至调度系统,根据交易请求完成能源调度。
本节性能测试主要为了评估文章中所提电力交易模型在高负载、高并发交易请求下的执行状况。在实验过程中使用四台搭载有Intel Core i5-4590S CPU 3.00 GHz处理器,16 GB内存,Ubuntu18.04操作系统的主机。其中,一台主机安装有区块链性能测评工具Hyperledger Caliper,作为高频率发送交易请求的客户端;其余三台主机搭建了Hyperledger Fabric v1.1的运行环境,分别充当参与电力交易的三方实体:PU,BU和MTC,它们一同构成了分布式的联盟链服务端,来处理客户端发送过来的交易请求。
一个区块链网络的事务处理能力可以从以下两个参考指标进行评价:吞吐量(throughput)和延迟(latency).Throughput是衡量一个区块链解决方案的重要参考指标,该指标用来表征区块链网络在一定时间内能够处理事务的数量,一般使用tps(transaction per second)来表示每秒钟能够处理的事务数量。Latency指区块链系统处理一笔事务所需要花费的时间,在性能测试中请求的延时包括一个事务从客户端到区块链网络并得到网络响应的时间,一般使用ms(毫秒)来作为该指标的单位。
Caliper通过预设的http端口向区块链网络发送事务请求,通过不断增加事务的发送速率(Send Rate)来观察所提模型Throughput和Latency的变化趋势。测试结果如表1所示。
表1 Caliper的加压测试结果Table 1 Caliper’s pressure test results
为了更直观地观察所提模型的事务处理能力,从表格中抽取所关注的Throughput以及Average latency两项指标的数据,绘制成图7.
我们分别对Throughput和Average latency进行分析。Average latency的情况在图7中以柱状图的形式展示。通过观察可得,随着Send Rate的增加,所提模型的Average latency整体呈现上升趋势,但在300 tps以前,Average latency增长比较平缓,基本维持在1 000 ms左右,而当Send Rate超过300 tps时,呈大幅增长趋势。
图7 模型测试结果Fig.7 Test results of the trading model
Throughput测试结果以折线图的形式在图中展示。通过观察可得,随着Send Rate的增加,所提模型的Throughput整体呈上升趋势,但到达饱和点280 tps时,Throughput增长缓慢,基本维持在一个稳定的状态。
区块链技术最初应用于比特币,旨在解决在没有第三方权威介入的情况下进行点对点交易过程中所存在的信任问题。随着分布式电源和储能的发展,传统的电力交易市场参与主体变得多样化和复杂化,进而增加了第三方中间运营商的管理和运营成本,也降低了交易市场主体的收益。本文通过将区块链技术应用于电力交易市场,以密码学的方式来保证用户的交易信息和数据的安全性、透明性及不可被篡改性,解决了交易市场中去中心化交易模式的安全问题。同时,通过引入联盟链中公私钥管理的方式,将准入与公私钥的管理权限赋予给了区块链网络中交易匹配节点,在一定程度上改善了公有链中节点无法监管的现象,使得新型的去中心化的电力交易模式得以实现。