一种以太坊智能合约字节码优化方法、装置、介质及设备
- 国知局
- 2024-09-05 14:26:23
本发明涉及程序优化技术,尤其是以太坊智能合约字节码的优化技术。
背景技术:
1、区块链技术去中心化、分布式账本特性确保了交易的安全与可信。以太坊平台通过智能合约增强了区块链的可编程性,使其能够在区块链上部署程序,提供了更大的灵活性和开发潜力。智能合约是自动执行的代码,不受外部干预,保证了透明度和安全性。在以太坊上,已经有加密货币、金融、游戏等各类领域的智能合约存在。
2、智能合约使用solidity语言编写,编译为字节码后部署到区块链上。它们在以太坊虚拟机(evm)上运行,这是一个支持图灵完备程序的栈机模型。然而,智能合约的图灵完备性也带来了风险,可能导致资源浪费或程序无限循环。以太坊引入了燃料(gas)系统来限制程序执行,防止计算资源的浪费。用户执行智能合约时需要支付燃料费,该费用以eth计价,具体费率取决于网络拥堵程度。随着eth价格上涨、以太坊生态逐渐兴盛,运行智能合约的手续费也越来越高。因此,优化智能合约的开销成为以太坊区块链领域的重点需求,即使是小幅优化,也能为用户节省大量交易手续费。
3、现有的智能合约分析工具集中于检测智能合约的安全性,以避免黑客利用智能合约的安全漏洞,窃取智能合约内的资产。对智能合约的优化,相关工具较为有限。从官方视角看,智能合约开发语言solidity的编译工具属于社区开发,在编译过程中不能提供最成熟的编译优化。从外部提供的优化工具看,则此类工具主要集中在高级语言的高开销模式侦测和底层字节码的局部优化。对于高级语言的模式侦测,其局限性在于多数工具仅提供相关模式的侦测,不能自动完成优化,且仅限侦测预定义的几个模式,扩展性有限。对于底层字节码的局部优化,则主要集中在预设模式的窥孔优化和基于合成的超级优化,前者也存在预定义模式无法扩展的问题,而后者则限于超级优化的穷举搜索特性,不能处理较大场景的优化,必须通过将程序切分成细粒度的代码窗口,才能在可接受时间内完成优化。因此,当前智能合约还存在很大的优化空间。
技术实现思路
1、本发明所要解决的问题:对以太坊智能合约字节码优化,减少gas消耗。
2、为解决上述问题,本发明采用的方案如下:
3、根据本发明的一种以太坊智能合约字节码优化方法,该方法包括如下步骤:
4、步骤s1:获取智能合约字节码指令集;
5、步骤s2:对所述智能合约字节码指令集进行基本块切分和基本块跳转分析,以确定基本块和基本块之间的跳转关系,并确定调度器基本块;然后根据函数入口跳转自调度器基本块以及出口跳转向调度器基本块确定函数和函数所包含的基本块;
6、步骤s3:根据基本块跳转关系所确定的控制流图和路径,对函数所包含的基本块进行控制流图的路径分析,找出其中表示源代码非循环连续性条件判断语句的连续性条件跳转的基本块及其跳转目标基本块组成的子控制流图,得到第一子图集合;
7、步骤s4:对第一子图集合中的子控制流图所对应的字节码指令进行符号化执行分析,通过符号化执行分析,得到子控制流图中条件变量计算的字节码指令,以及条件变量判定项和跳转目标基本块之间的约束关系;所述条件变量判定项或为布尔类型的条件变量,或为关于单个比较操作符的条件变量比较表达式;
8、步骤s5:根据子控制流图中的条件变量判定项和跳转目标基本块之间的约束关系,构建二元决策树;所述二元决策树由节点和表示节点父子关系的边组成树形数据结构;其中,节点包括带有两个子节点的枝干节点和不带有子节点的叶子节点;所构建的二元决策树的相同层次的枝干节点为所述子控制流图中同一条件变量判定项;所述枝干节点的两个子节点分别表示枝干节点对应的条件变量判定项分别为真或假的两种后续处理;所述叶子节点为所述子控制流图中跳转目标基本块;
9、步骤s6:循环遍历二元决策树中子节点包括有叶子节点的枝干节点,对所遍历的枝干节点做如下裁剪处理:
10、若该枝干节点的两个子节点指向同一个跳转目标基本块,则将该枝干节点父节点指向该枝干节点的边指向该跳转目标基本块;
11、若两个枝干节点同构,且为父节点的两个子节点,则将该枝干节点父节点的父节点指向该枝干节点父节点的边指向两个枝干节点之一;
12、所述两个枝干节点同构是指条件变量判定项为真时,两个枝干节点的子节点相同,并且条件变量判定项为假时,两个枝干节点的子节点相同;
13、步骤s7:根据条件变量计算的字节码指令和跳转目标基本块,为裁剪处理后的二元决策树中的枝干节点构建相应的跳转基本块,并重新调整跳转目标基本块的位置,以替换原子控制流图中的各个基本块。
14、进一步,根据本发明的以太坊智能合约字节码优化方法,所述步骤s5中,构建二元决策树时,首先对条件变量判定项进行排序,所构建二元决策树不同层级上的条件变量判定项按照排序后的条件变量判定项进行配置;所述条件变量判定项的排序包括如下步骤:
15、步骤s51:根据子控制流图中的条件变量判定项和跳转目标基本块之间的约束关系,构建关于条件变量判定项真假取值与跳转目标基本块之间的真值表;
16、步骤s52:根据真值表计算各个条件变量判定项的评估值,所述各个条件变量判定项的评估值采用如下公式计算:
17、ev(i)=abs(max(tcount(i,j)-fcount(i,j));其中,
18、ev(i)表示第i个条件变量判定项评估值;
19、abs表示绝对值;
20、tcount(i,j)表示真值表中第i个条件变量判定项取值为真对应的第j个跳转目标基本块的个数;
21、fcount(i,j)表示真值表中第i个条件变量判定项取值为假对应的第j个跳转目标基本块的个数;
22、max表示在各个跳转目标基本块中取最大值;
23、步骤s53:按照条件变量判定项的评估值从大到小的顺序对条件变量判定项排序。
24、进一步,根据本发明的以太坊智能合约字节码优化方法,所述步骤s2包括如下步骤:
25、步骤s21:遍历调度器基本块,若调度器基本块的最后一条指令为jump指令,且跳转目标的基本块不属于调度器基本块,则将跳转目标的基本块加入至第一基本块集合;
26、步骤s22:判断以第一基本块集合中的基本块为跳转目标的其他基本块是否至少有两个,且这些以第一基本块集合中的其他基本块为跳转目标的基本块是否均以jump指令立即跳转;若以第一基本块集合中的基本块为跳转目标的其他基本块至少有两个且这些以第一基本块集合中的其他基本块为跳转目标的基本块是否均以jump指令立即跳转,则将这些第一基本块集合中的基本块组成第二基本块集合;
27、步骤s23:按照基本块之间的跳转关系,以第二基本块集合中的基本块作为函数入口处的基本块为起点,进行跳转目标基本块的深度搜索,直到搜索到基本块最后jump立即跳转指令的跳转目标为调度器基本块;然后将该立即跳转目标为调度器基本块的基本块加入至候选函数出口基本块集合;函数入口处的基本块和候选函数出口基本块集合组成候选函数出入口信息,从而得到候选函数出入口信息集合;
28、步骤s24:判断候选函数出入口信息的候选函数出口基本块集合中的基本块的跳转目标是否至少有两个且是否都通过jump指令立即跳转;若基本块的跳转目标是否至少有两个且是否都通过jump指令立即跳转,则将其作为函数出口处的基本块和函数入口处的基本块组成确定函数出入口信息,从而得到确定函数出入口信息集合;
29、步骤s25:将函数入口处的基本块和函数出口处的基本块之间能够通过跳转关系遍历到的基本块组成函数,并将这些基本块作为该函数所包含的基本块。
30、进一步,根据本发明的以太坊智能合约字节码优化方法,所述步骤s3包括如下步骤:
31、步骤s31:首先遍历函数所包含的基本块找出其中最后一条指令为条件跳转jumpi的且不为循环体的基本块加入至跳转基本块集合中;
32、步骤s32:从跳转基本块集合中提取基本块加入至连续性条件跳转序列;
33、步骤s33:从连续性条件跳转序列中提取最后一个基本块,若后续基本块的第一条指令为jumpdest,最后一条指令为jumpi,则将该后续基本块该后续基本块加入至连续性条件跳转序列;
34、步骤s34:重复步骤s33直到连续性条件跳转序列中最后一个基本块的后续基本块不满足第一条指令为jumpdest,最后一条指令为jumpi;
35、步骤s35:按顺序遍历连续性条件跳转序列中的基本块,将所遍历的基本块加入至连续性条件跳转集合,并判读该基本块的后续基本块是否存在基本块满足如下条件:该后续基本块的第一条指令为pop指令,其他指令为条件变量计算指令,且该后续基本块的后续基本块在连续性条件跳转序列中,则将该后续基本块加入至连续性条件跳转集合;
36、步骤s36:遍历连续性条件跳转集合中的基本块,若其后续基本块不在遍历连续性条件跳转集合中,则将其作为跳转目标基本块加入至跳转目标基本块集合;
37、步骤s37:将连续性条件跳转集合中的基本块和跳转目标基本块集合中的基本块组成子控制流图,加入至第一子图集合;
38、步骤s38:将连续性条件跳转集合中的基本块从跳转基本块集合中剔除后,重复步骤s32至步骤s38直到跳转基本块集合为空。
39、根据本发明的一种以太坊智能合约字节码优化装置,该装置包括如下模块:
40、模块m1,用于:获取智能合约字节码指令集;
41、模块m2,用于:对所述智能合约字节码指令集进行基本块切分和基本块跳转分析,以确定基本块和基本块之间的跳转关系,并确定调度器基本块;然后根据函数入口跳转自调度器基本块以及出口跳转向调度器基本块确定函数和函数所包含的基本块;
42、模块m3,用于:根据基本块跳转关系所确定的控制流图和路径,对函数所包含的基本块进行控制流图的路径分析,找出其中表示源代码非循环连续性条件判断语句的连续性条件跳转的基本块及其跳转目标基本块组成的子控制流图,得到第一子图集合;
43、模块m4,用于:对第一子图集合中的子控制流图所对应的字节码指令进行符号化执行分析,通过符号化执行分析,得到子控制流图中条件变量计算的字节码指令,以及条件变量判定项和跳转目标基本块之间的约束关系;所述条件变量判定项或为布尔类型的条件变量,或为关于单个比较操作符的条件变量比较表达式;
44、模块m5,用于:根据子控制流图中的条件变量判定项和跳转目标基本块之间的约束关系,构建二元决策树;所述二元决策树由节点和表示节点父子关系的边组成树形数据结构;其中,节点包括带有两个子节点的枝干节点和不带有子节点的叶子节点;所构建的二元决策树的相同层次的枝干节点为所述子控制流图中同一条件变量判定项;所述枝干节点的两个子节点分别表示枝干节点对应的条件变量判定项分别为真或假的两种后续处理;所述叶子节点为所述子控制流图中跳转目标基本块;
45、模块m6,用于:循环遍历二元决策树中子节点包括有叶子节点的枝干节点,对所遍历的枝干节点做如下裁剪处理:
46、若该枝干节点的两个子节点指向同一个跳转目标基本块,则将该枝干节点父节点指向该枝干节点的边指向该跳转目标基本块;
47、若两个枝干节点同构,且为父节点的两个子节点,则将该枝干节点父节点的父节点指向该枝干节点父节点的边指向两个枝干节点之一;
48、所述两个枝干节点同构是指条件变量判定项为真时,两个枝干节点的子节点相同,并且条件变量判定项为假时,两个枝干节点的子节点相同;
49、模块m7,用于:根据条件变量计算的字节码指令和跳转目标基本块,为裁剪处理后的二元决策树中的枝干节点构建相应的跳转基本块,并重新调整跳转目标基本块的位置,以替换原子控制流图中的各个基本块。
50、进一步,根据本发明的以太坊智能合约字节码优化装置,所述模块m5中,构建二元决策树时,首先对条件变量判定项进行排序,所构建二元决策树不同层级上的条件变量判定项按照排序后的条件变量判定项进行配置;所述条件变量判定项的排序包括如下模块:
51、模块m51,用于:根据子控制流图中的条件变量判定项和跳转目标基本块之间的约束关系,构建关于条件变量判定项真假取值与跳转目标基本块之间的真值表;
52、模块m52,用于:根据真值表计算各个条件变量判定项的评估值,所述各个条件变量判定项的评估值采用如下公式计算:
53、ev(i)=abs(max(tcount(i,j)-fcount(i,j));其中,
54、ev(i)表示第i个条件变量判定项评估值;
55、abs表示绝对值;
56、tcount(i,j)表示真值表中第i个条件变量判定项取值为真对应的第j个跳转目标基本块的个数;
57、fcount(i,j)表示真值表中第i个条件变量判定项取值为假对应的第j个跳转目标基本块的个数;
58、max表示在各个跳转目标基本块中取最大值;
59、模块m53,用于:按照条件变量判定项的评估值从大到小的顺序对条件变量判定项排序。
60、进一步,根据本发明的以太坊智能合约字节码优化装置,所述模块m2包括如下模块:
61、模块m21,用于:遍历调度器基本块,若调度器基本块的最后一条指令为jump指令,且跳转目标的基本块不属于调度器基本块,则将跳转目标的基本块加入至第一基本块集合;
62、模块m22,用于:判断以第一基本块集合中的基本块为跳转目标的其他基本块是否至少有两个,且这些以第一基本块集合中的其他基本块为跳转目标的基本块是否均以jump指令立即跳转;若以第一基本块集合中的基本块为跳转目标的其他基本块至少有两个且这些以第一基本块集合中的其他基本块为跳转目标的基本块是否均以jump指令立即跳转,则将这些第一基本块集合中的基本块组成第二基本块集合;
63、模块m23,用于:按照基本块之间的跳转关系,以第二基本块集合中的基本块作为函数入口处的基本块为起点,进行跳转目标基本块的深度搜索,直到搜索到基本块最后jump立即跳转指令的跳转目标为调度器基本块;然后将该立即跳转目标为调度器基本块的基本块加入至候选函数出口基本块集合;函数入口处的基本块和候选函数出口基本块集合组成候选函数出入口信息,从而得到候选函数出入口信息集合;
64、模块m24,用于:判断候选函数出入口信息的候选函数出口基本块集合中的基本块的跳转目标是否至少有两个且是否都通过jump指令立即跳转;若基本块的跳转目标是否至少有两个且是否都通过jump指令立即跳转,则将其作为函数出口处的基本块和函数入口处的基本块组成确定函数出入口信息,从而得到确定函数出入口信息集合;
65、模块m25,用于:将函数入口处的基本块和函数出口处的基本块之间能够通过跳转关系遍历到的基本块组成函数,并将这些基本块作为该函数所包含的基本块。
66、进一步,根据本发明的以太坊智能合约字节码优化装置,所述模块m3包括如下模块:
67、模块m31,用于:首先遍历函数所包含的基本块找出其中最后一条指令为条件跳转jumpi的且不为循环体的基本块加入至跳转基本块集合中;
68、模块m32,用于:从跳转基本块集合中提取基本块加入至连续性条件跳转序列;
69、模块m33,用于:从连续性条件跳转序列中提取最后一个基本块,若后续基本块的第一条指令为jumpdest,最后一条指令为jumpi,则将该后续基本块该后续基本块加入至连续性条件跳转序列;
70、模块m34,用于:重复执行模块m33的功能直到连续性条件跳转序列中最后一个基本块的后续基本块不满足第一条指令为jumpdest,最后一条指令为jumpi;
71、模块m35,用于:按顺序遍历连续性条件跳转序列中的基本块,将所遍历的基本块加入至连续性条件跳转集合,并判读该基本块的后续基本块是否存在基本块满足如下条件:该后续基本块的第一条指令为pop指令,其他指令为条件变量计算指令,且该后续基本块的后续基本块在连续性条件跳转序列中,则将该后续基本块加入至连续性条件跳转集合;
72、模块m36,用于:遍历连续性条件跳转集合中的基本块,若其后续基本块不在遍历连续性条件跳转集合中,则将其作为跳转目标基本块加入至跳转目标基本块集合;
73、模块m37,用于:将连续性条件跳转集合中的基本块和跳转目标基本块集合中的基本块组成子控制流图,加入至第一子图集合;
74、模块m38,用于:将连续性条件跳转集合中的基本块从跳转基本块集合中剔除后,重复执行模块m32至模块m38的功能直到跳转基本块集合为空。
75、根据本发明的一种介质,该介质内存储有能够被机器读取的程序指令集,当该介质所存储的程序指令集被机器读取后执行时,该机器能够实现上述的以太坊智能合约字节码优化方法。
76、根据本发明的一种设备,该设备包括有相连的处理器和存储器;所述存储器内存储有程序指令集;当所述存储器内所存储的程序指令集被处理器读取后执行时,该设备能够实现上述的以太坊智能合约字节码优化方法。
77、本发明的技术效果如下:本发明通过对以太坊智能合约字节码指令集中的条件跳转指令的优化处理,删除不必要中间跳转和重复计算实现整体优化。
本文地址:https://www.jishuxx.com/zhuanli/20240905/286488.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。
下一篇
返回列表