早在1994年,加密大师尼克萨博就提出了智能合约的概念,但由于缺少可信的执行环境并没有得到应用。
直到2009年比特币诞生后,人们意识到其底层区块链技术可以为智能合约提供可信的执行环境。
然而,比特币的区块链架构主要围绕去中心化的数字货币展开,用来支撑智能合约还非常局限。
例如比特币的区块链平台使用工作量证明共识算法(Proof of Work,PoW),在执行时需要每个旷工计算随机数以争夺记账权,这需要消耗大量的算力,并且一笔交易的确认至少需要10分钟,达不到商用要求。

近年来,以以太坊、Hyperledger为代表的区块链2.0技术的长足发展,保证了智能合约的高效运行。
与比特币系统比较起来,电费结算智能合约系统在节点的准入机制、传输协议、Hash算法、加密方法、共识机制等方面有诸多不同,下图给出了对主要技术实现的改进。

一、智能合约
通过在区块链上发布一个购售电合同的智能合约实例,分析区块链系统运行的正确性、稳定性和效率。该合约根据约定的购售电量和实际实施的购、发电量之间的关系,做出如下约定:
(对的,区块链的智能合约有点像好莱坞科幻大片里讲的机器人定律设置)
约定1:甲方年度实际购电量高于年度合同约定电量的105%时,直接交易结算电量为甲方年度合同约定电量×105%,超出部分按照对应电压等级的大工业目录电价×110%结算。
约定2:甲方年度实际购电量低于年度合同约定电量的95%时,直接交易结算电量为甲方年度实际购电量。对低于年度约定购电量×95%的差额电量,甲方按电量差额乘以0.02元/千瓦·时(含税,下同)的标准向乙方支付违约金,违约金计算式为:
(月度约定购电量×95%–当月实际购电量)×0.02元/千瓦·时
约定3:如果乙方因设备故障等原因导致当月全部上网电量低于约定直接交易电量的95%,低于部分电量由乙方按甲方相应的目录电价与直接交易到户电度电价的差价向丙方支付补偿金。补偿金计算式为:
(甲方月度约定购电量×95%–乙方当月实际上网电量)×(甲方目录电价–甲方直接交易到户电度电价)
对售电方发电充足、售电方发电不足、购电方的购电量上下浮动等多种情况都会通过区块链配置开发工具配置成规则,并存放在区块链上。购售双方一旦在区块链上签名,该合约就会根据智能电表的抄表情况自动履行。(是不是有点像规则引擎)

上图是在一个由4000个节点构成的P2P网络中执行该智能合约的结果。在一周时间内,共签署了7129个智能合约,其中顺利履约的有7085个,失效的合约有44个,成功率约为99.38%。合约失效的原因主要是购电方的保证金不足或合约发布方的gas耗尽。同时,合约履行时每笔支付的平均交易确认时间约为16秒。
与原来的双边合约相比,由分布式记账本管理的能源零售市场增加了配售电公司和用电用户的选择权,合约内的多余电量不仅可以存于电池备用,或返回给电网,还可以出售给网络里出价最高的买家,甚至异地赎回(如给在行驶的电动车充电)等。
通过建立在区块链上的智能合约,可以数字化、智能化地完成售电公司的切换,用电用户只需在电脑或手机上点击几次,就可以便捷地完成供应商的更换。
由此可见,区块链技术能推动能源零售市场的智能化,使得公民在能源零售市场中发挥更大的作用。
利用区块链技术,用电成本和需求数据能及时地反映在一体化的能源市场上,帮助公民做出正确的决策,鼓励公民积极参与能源市场,简化能源供应合同的切换。
区块链技术帮助能源生产者和能源消费者共同制定因需求而动态变化的能源价格,保证不同市场的互联互通性,使电网中的能源用户真正获得收益。
通过分布式发电、智能电网和储能技术,居民可以通过区块链参与能源的生产和销售,降低电费开支。
二、权益证明共识算法及图灵完备计算环境
比特币采用PoW,不仅耗费大量算力,而且每秒最多只支持7笔交易,效率低下。
本智能合约系统采用PoW+PoS的共识机制,将区块分为PoW区块和PoS区块两种。
权益(Stake)体现为区块链节点对特定数量货币的所有权,称为币龄或币天数(Coin Age)。
在PoS区块中,旷工通过向自己支付并消耗特定数量的币龄来获取区块记账权。

上图是整个过程,左边第一个输入称为内核(Kernel),本质上是一条达成哈希目标的协议,要求币龄大于哈希目标,其中哈希目标由区块平均权益、未被花费的输出(Unspent Transaction Output,UTXO)和当前时刻共同决定,而币龄等于当前拥有的币数量乘以最后一次交易的时间。
由此可见,在生成内核的过程中消耗的币龄越多,越容易满足哈希目标。
PoS共识过程仅依靠内部币龄和权益而不需要消耗外部算力和资源,从根本上解决了PoW共识算力浪费的问题,并且能够在一定程度上缩短达成共识的时间。
比特币系统从安全角度出发,其脚本引擎非图灵完备,因此目前能通行的比特币脚本指令不多,应用场景仅限于数字货币。
本方案是基于图灵完备的256位计算环境—以太坊虚拟机(EVM),可以进行任何种类的计算,从而支持智能合约的运行。(其实以太坊的这套方案也拿到今天来看,也不是最佳技术栈选型,以后小编再分享更强大的区块链底层框架)
EVM中运行智能合约需要消耗Gas(即执行的代码受参数Gas的严格限制),规定了可运行计算指令的上限,从而避免无限循环。
假设整个网络状态为,合约运算剩余的Gas为g,区块链运行环境中的重要信息保存在元组I(当前合约地址,合约发起者地址,本次交易的Gas价格,交易输入数据,执行合约的账户地址,合约账户余额,当前区块头,当前CALL操作和CREATE操作数)内,系统状态转移函数记为,σ'为系统运行后状态,g'为运行后剩余Gas,s为执行终止操作的合约列表,l为记录序列,r为运行后返还的Gas,o为合约产生的输出,则整个状态转换可表示为:

在大多数情况下,
被定义为不断迭代系统临时状态和虚拟机临时状态的过程,迭代的终止由以下两个条件决定:
(1)系统状态出现异常使得EVM停止工作,例如Gas不足、指令无效、虚拟机堆栈不足等情况;
(2)EVM执行完所有指令并返回结果,正常停止。
在每一次迭代过程中,智能合约的指令被压入堆栈,EVM按堆栈索引执行指令。每执行一条指令就支付相应的Gas,直到所有指令执行完毕,堆栈被清空;若遇到异常,EVM则停止工作并逐层向上返回。
今天先整理材料介绍这些,明天再整理。小编有点累了。


