[0034] 下面将结合本发明的附图,对本发明实施例的技术方案进行清楚、完整的描述。
[0035] 本发明所揭示的一种基于智能合约执行优化的并行区块链分片方法,对于分片环境下的区块链系统来说,交易执行的最大并发性是非常重要的性能指标,并发指的是同时执行的交易数,高并发性不仅可以提高系统资源的利用率,而且可以最大化交易吞吐量。为了提高并发性,本发明引入智能合约优化处理模型(如图1所示),该模型包括预处理和智能合约调度两个模块,通过预处理模块将接收到的合约交易与历史的交易进行对比,收集冲突的合约特征信息,并以收集的特征信息为基础进行分组,优化合约交易集的并发性,智能合约调度模块结合SV‑SCC算法对优化的合约交易集进行合约执行,执行时综合考虑执行时间,冲突率和资源占用等特征信息进行系统调度,并将运行时获取的而在信息反馈给预处理模块,更新特征信息表,达到实时调整优化性能的目标。
[0036] 在智能合约调度模块中,都会采用SCC算法进行并发执行,现有的SCC算法是基于乐观方法,并依靠冗余计算来找到可序列化的调度,现有算法可以在于处理冲突的同时减少交易的阻塞和重新启动,根据SCC‑NS生成的阴影数量与并发程序呈正相关,但要付出大量计算代价,为了兼顾开发和计算成本两个因素,本发明使用了改进的SCC算法,也就是一种可变影子推测并发控制算法(SV‑SCC算法),利用执行时间,冲突率及可用资源来动态计算合约交易所需的影子数量,该算法可以减少交易阻塞和重启问题,保证合约交易以较低的计算成本实现更高的并发性。
[0037] 如图2所示,本发明所揭示的一种基于智能合约执行优化的并行区块链分片方法,包括如下步骤:
[0038] 步骤一、在区块链分片环境中,每个矿工节点从对等网络获取一组合约交易,每个合约交易都与一个智能合约函数相关联,节点获取的合约交易送入预处理模块;
[0039] 步骤二、预处理模块将接收的合约交易与历史交易进行对比后分组优化,将优化后的交易序列送入智能合约调度模块;
[0040] 随着分片的引入,所有的网络交易都被映射到不同的分片进行处理,为了减少由于某个分片中的单节点过热而导致的性能下降,通过预处理模块对分片的交易集进行简单的预处理,预处理模块包括特征信息获取单元(FIA‑Unit)和分类监视单元(CAM‑Unit)。
[0041] 特征信息获取单元的建立是为了协助智能合约调度模块的高效运行,该单元对智能合约调度模块中发生冲突的合约特征信息进行实时统计,并使用收集的要素信息作为解决合约冲突的重要参考因素。这些特征信息包括冲突频率较高的相应智能合约帐户地址与相关的成员函数。特征信息获取单元根据统计的特征信息生成特征信息统计表FIS,该特征信息统计表记录两种类型数据,分别为冲突的合约用户地址集和高冲突率成员函数集。
[0042] 分类监视单元通过关联系数将合约交易分配到不同的集合中,优化并发性,同时限制合约交易的执行数量,减少交易冲突的可能性,同时将并发加速比保持在理想范围内。
[0043] 步骤三、智能合约调度模块基于SV‑SCC算法对交易序列进行并发的执行智能合约,并计算最终状态;
[0044] 为了同时执行智能合约,矿工节点将优化后的合约交易加载到隔离的沙盒环境中,利用SV‑SCC算法识别冲突并在执行中记录冲突。
[0045] SV‑SCC算法为利用执行时间Et,冲突率Cr及可用资源R动态计算合约交易所需的影子数N,参见公式:
[0046]
[0047] 其中φ为常系数,e为常数,R(Tsc)0为系统中平均空闲资源的数量,R(Tsc)表示执行交易Tsc可用的空闲资源数,Cr(Tsc)表示交易Tsc的冲突率,Et(Tsc)表示交易Tsc的执行时间。
[0048] 影子数是用于控制和调度合约执行中读、写操作的并发执行,N体现了顺利执行该合约所需的进程数量,不同情形下运行的不同合约可能需要不同的影子数,通过动态计算合约交易所需要的影子数,来保证其并发性能可以充分发挥出来。
[0049] 步骤四、并发执行的矿工节点生成一个新的区块,该区块包括合约交易集,冲突记录,最终状态及上一个区块的哈希值;
[0050] 步骤五、矿工节点生成的新的区块送入所有网络节点进行验证,并在验证有效后添加到区块链内;
[0051] 区块在网络节点中的验证方法为:验证节点根据矿工节点提供的冲突记录以并发的确定性方式验证合并的交易,并将计算出的最终状态与其他并发矿工节点给出的最终状态进行比较,最终状态相匹配就表示矿工节点生成的区块有效,否则表示无效。
[0052] 步骤六、新的冲突记录同步送入预处理模块,预处理模块进行特征信息统计表FIS的更新。
[0053] 智能合约的本质是在网络上运行的可重用,不可篡改且自动执行的计算机程序,它是无法主动执行的。其交互方式分为外部呼叫和内部呼叫,即EOA呼叫智能合约,CA呼叫智能合约。相应地,特征信息获取单元对特征信息的统计分析也分为冲突的合约用户地址集和高冲突率成员函数集的统计分析。当调度模块同时执行智能合约时,它将记录新冲突并反馈给特征信息获取单元。其中,有冲突的合约帐户地址记录在冲突的合约用户地址集中,而冲突频率较高的相关合约函数则记录在高冲突率成员函数集中,以确保特征信息统计表FIS中统计信息的不断更新。
[0054] 在步骤二中,分类监视单元通过关联系数将合约交易分配到不同的集合中,具体的分配步骤为:
[0055] A、将后续合约交易分为set_δ、set_λ、set_μ三个集合,三个集合中合约交易的执行时间关系为set_δ<set_λ<set_μ,三个集合中合约交易的冲突概率关系为set_δ<set_λ<set_μ;
[0056] 也就是说set_δ中的合约交易具有最低的冲突率和最短的执行时间,set_μ中的合约交易具有最高的冲突率和最长的执行时间。
[0057] B、对于新获取的合约交易,通过对比特征信息统计表FIS,将没有特征信息的合约交易记录在set_δ集合中;
[0058] C、对于有特征信息的合约交易,将其阈值P与指定阈值β进行比对,若P≥β,则将合约交易记录在set_λ集合中,否则合约记录在set_μ集合中。
[0059] 合约交易的阈值P由以下公式获得:
[0060]
[0061] 其中α为参数,Et交易估计的执行时间,Cr为交易的冲突率,wt为执行时间Et的权重,wr为Cr的权重。
[0062] 分片设计方案可以按类别将网络中的大量合约交易映射到不同的分片。因此,对于合约交易执行时间Et的值,我们假设“相似的作业具有相似的执行时间”,并使用完成的智能合约执行时间来预测相似智能合约的执行时间。
[0063] 对于估计合约交易Jsc的执行时间Et(Jsc),其预测具体步骤如下:
[0064] 1.使用三个属性值确定一个模板:Gas price,Gas Limit和Amount是模板的组成元素,用{p,l,a}来表示;
[0065] 2.根据模板{p,l,a},选择与合约交易Jsc相似的历史合约交易形成一个集合[0066] 3.在集合 中,基于三个数值属性值{p,l,a}形成的相似度 计算合约交易 与 的相似度,选择与合约交易Jsc类似的M个合约形成G,相似度计算公式为:
[0067]
[0068] 其中pi、li、ai为合约交易 的三个属性值,pj、lj、aj为合约交易 的三个属性值。
[0069] 4.在获得一组关于Jsc相似合约交易G之后,在G中的合约交易的实际执行时间便可以用来预测Jsc的执行时间,我们采用平均值法,即使用G合约交易的平均执行时间作为Jsc的预测时间,计算公式如下:
[0070]
[0071] 其中Ri是第i个合约的实际执行时间。
[0072] 合约冲突率Cr是指智能合约在执行时与任何其他合约发生冲突的可能性,其理想情况是根据当前的冲突情况进行判断。由于无法对智能合约进行静态分析,因此在执行合约之前无法知道它是否会发生冲突,因此无法基于某一时刻的系统状态判断的合约冲突的可能性。
[0073] 因此,我们使用过去一段时间的冲突率来预测合约交易的当前冲突情况。合约交易的数据结构包含了发送方和接收方的地址,我们可以使用线性回归预测方法来计算当前时刻的冲突率Cr。选择过去N分钟内来自同一地址的合约交易,时间为t,回归系数k是反映冲突率影响大小的的参数,则冲突率Cr满足公式:
[0074] 其中回归系数k由公式 进行计算,其中, 为第n分钟的平均冲突率;
[0075] 综合上述两个公式可以得到Cr的表达式:
[0076]
[0077] 本发明所采用的的方法可以实现更高的交易吞吐量,减少交易阻塞和重启问题,同时保证合约交易以较低的计算成本实现更高的并发性,下面通过实验结合其他的算法进行对比。
[0078] 在配置了Intel Core i5‑44603.20GHz CPU和16GB内存的PC上建立一个模拟的区块链分片模型,并通过打开不同的服务器端口在本地创建不同的实验节点。该实验使用图灵完备的Solidity作为智能合约的开发语言,并使用Truffle作为智能合约的开发框架和构建工具。
[0079] 本实验将SV‑SCC算法与其他两种传统并发控制算法Lock算法及BTO算法进行比较,并以串行执行的结果为极限来模拟每种方法的平均加速度。
[0080] 由于我们只关注智能合约的并发执行,因此简化了流程中的POW和其他相关因素。实验主要集中在以下几个方面:(1)当交易量增加时,每种方法的加速比变化情况;(2)当冲突率增加时,每种方法的加速比变化情况;(3)当节点数量增加时,每种方法的吞吐量变化情况;(4)随着分片数量的增加,单个分片和整个系统的吞吐量变化情况。得到的试验结果如图3~图6所示:
[0081] 由图3可知,当交易流量低时,使用Lock算法相对而言不会带来加速甚至会造成减速。这是因为由冲突处理引起的额外开销会影响并发性能。随着平台上交易流量的不断增加,经过一段时间的加速后,Lock算法像BTO算法一样开始放慢速度。本发明的框架基于并发的优化以及交易阻塞和重启的改进,可以减轻由交易流增加而导致的性能下降。
[0082] 由图4可知,随着冲突率的增加,三种方法引起的加速度呈下降趋势。当冲突率接近68%时,使用BTO算法执行智能合约比串行执行要慢。相比之下,以悲观方法为例的Lock算法更适合于冲突率更高的情况。但是,由于冲突率的增加,跨分片交互的可能性也在增加,复杂性也越来越高,因此总体趋势也在下降,但是SV‑SCC算法总体实现仍略胜于以上两种方式。
[0083] 由图5可知,SV‑SCC算法可以与分片兼容,并且仍然保持线性可扩展性的特性,即随着节点数量和网络容量的增加,可以通过并行化数据流来提高处理性能。在传统方法下,即使同时执行智能合约,随着节点数量的增加,其交易速度仍然会降低。
[0084] 由图6可知,在传统方法下,尽管全网络吞吐量随着碎片数量的增加而增加。但是,单个碎片的吞吐量仍然很低,仅为50,且没有明显的性能改进。SV‑SCC算法保证了单个分片的性能提高,而整个系统的吞吐量也达到了很高的水平。
[0085] 本发明的技术内容及技术特征已揭示如上,然而熟悉本领域的技术人员仍可能基于本发明的教示及揭示而作种种不背离本发明精神的替换及修饰,因此,本发明保护范围应不限于实施例所揭示的内容,而应包括各种不背离本发明的替换及修饰,并为本专利申请权利要求所涵盖。