System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种静态、动态分析相结合的智能合约状态提取方法技术_技高网

一种静态、动态分析相结合的智能合约状态提取方法技术

技术编号:40921918 阅读:2 留言:0更新日期:2024-04-18 14:46
本发明专利技术公开了一种静态、动态分析相结合的智能合约状态提取方法,通过静态分析工具解析智能合约源代码,生成状态记录表,并将状态记录表与智能合约一同部署到区块链中,部署了状态记录表的全节点,依次运行区块中的所有交易,采用动态分析工具实时维护动态类型状态的存储布局信息,更新状态记录表,在区块内的所有交易执行完成后,部署了状态记录表的全节点将内存中的状态记录表持久化到数据库中。本发明专利技术只需要在一个全节点上部署服务,对区块链几乎不带来任何开销,利用了全节点同步机制而非使用API获取历史交易,避免了API限速和故障等问题。

【技术实现步骤摘要】

本申请属于计算机数据信息处理,尤其涉及一种静态、动态分析相结合的智能合约状态提取方法


技术介绍

1、近几年区块链技术的崛起为各行业带来了巨大的变革,智能合约在不依赖于可信第三方的情况下可以执行任意的业务逻辑,因而被广泛应用于金融、供应链、医疗和保险等领域。智能合约是一种在区块链某个地址上运行的程序,它们是由数据和函数组成的,可以在收到交易时执行。solidity应运而生,它是为实现智能合约而创建的高级编程语言,已被广泛使用。智能合约一旦部署在区块链上就不能在同一地址上进行更新升级,但在现实场景中有必要升级智能合约以修复智能合约代码中的漏洞或添加新功能。关键的挑战是不仅要在升级的版本中进行代码更改,还要重用和提取原智能合约中变量存储的数据(状态),但区块链系统并不维护这些状态的存储位置。

2、为了解决这一问题,研究人员寻求各种解决方案,以准确提取智能合约中的所有状态。在智能合约中,状态变量按照声明的顺序以大小为32字节的槽位(slot)为单位分配存储空间,对于两个相邻但大小小于32字节的状态将被存储在一个slot内。因此,一些静态分析工具和反编译器,接收智能合约的代码或字节码为输入,通过分析以太坊虚拟机(evm)的存储管理,进而计算状态的存储位置。但是,它们都不能提取键值映射类型(mapping)的状态,这是因为mapping变量的“值”(value)的存储位置是由“键”(key)决定的,key可能是伴随着交易运行动态生成的,因而无法静态获取。为了提取到mapping类型的状态,一些动态分析工具从区块链api中获取并重放所有历史交易,对代码的控制流图进行可达性分析和回溯算法来逼近分析key生成的可能路径,从而获取key的集合及其存储位置。然而,由于api限速和故障等问题,这些工具很难确保快速准确地获取所有历史交易。更重要的是,它们的准确率不能达到100%,这在现实场景中可能意味着用户的财产丢失。因此,急需一种可以准确提取智能合约状态的工具,以应对现实场景中的合约升级以及状态迁移需求。


技术实现思路

1、本申请的目的在于克服现有技术的缺点,提供一种静态、动态分析相结合的途径,以实现智能合约全部变量类型的状态提取。该方法使得开发者无需具备任何额外的evm存储管理知识,开发好的智能合约由静态分析技术自动提取相关状态信息,并且只需要部署一个带有状态提取功能的全节点即可获取任意的状态信息,无需对整个区块链中的所有节点进行分叉升级。

2、为实现上述目的,本申请技术方案如下:

3、一种静态、动态分析相结合的智能合约状态提取方法,包括:

4、采用静态分析工具将智能合约源代码解析为抽象语法树,然后将每个状态的存储布局信息记录到状态记录表中,并将状态记录表与智能合约一同部署到区块链中;

5、部署了状态记录表的全节点,开启全同步过程监听区块链网络,下载历史区块,读取区块中的交易,识别交易发往的智能合约地址,将相应的状态记录表加载到内存中;

6、部署了状态记录表的全节点依次运行区块中的所有交易,采用动态分析工具实时维护动态类型状态的存储布局信息,更新状态记录表;

7、在区块内的所有交易执行完成后,部署了状态记录表的全节点将内存中的状态记录表持久化到数据库中。

8、进一步地,所述状态记录表采用如下通用的数据结构记录状态的存储布局信息:

9、状态记录表={变量名,变量类型,{槽位,偏移量},初始槽位,层数,指针}。

10、进一步地,所述将状态记录表与智能合约一同部署到区块链中,包括:

11、智能合约通过开发者的账户发送普通交易到区块链,部署在所有全节点中;

12、状态记录表部署到已开启动态分析服务的全节点中,开发者通过指定已开启动态分析服务的全节点的ip地址和端口号,同时发送一个特殊的交易用于部署状态记录表。

13、进一步地,所述采用动态分析工具实时维护动态类型状态的存储布局信息,更新状态记录表,包括:

14、获取操作码,如果是sha3操作码,则判断sha3操作码参数的长度是否大于或等于32;

15、如果sha3操作码参数的长度大于或等于32,则根据sha3操作码参数推算出初始槽位,然后查询状态记录表,如果在状态记录表中匹配到初始槽位,则以sha3操作码计算出的槽位结果更新状态记录表中槽位。

16、进一步地,所述采用静态分析工具将智能合约源代码解析为抽象语法树,然后将每个状态的存储布局信息记录到状态记录表中,还包括:

17、将抽象语法树中变量按照声明顺序依次遍历分析;

18、将变量分为静态类型或动态类型,分别提取对应状态的存储布局信息记录到状态记录表中;

19、对于复合类型变量,将其解析为静态类型或动态类型,然后分别提取对应状态的存储布局信息记录到状态记录表中。

20、本申请提出的一种静态、动态分析相结合的智能合约状态提取方法,清晰完整地记录了智能合约中状态的存储空间,为合约升级或数据迁移提供技术支撑。优点在于:开发者无需了解各种类型的变量的存储空间管理机制,直接访问数据库就可以方便快捷的获取到智能合约所有的状态;系统作为外部服务安装在全节点中,确保了所有交易的运行时信息都将被监控识别,因而可以准确识别mapping变量的存储空间;系统的实现只需要在一个全节点上部署服务,对区块链几乎不带来任何开销,利用了全节点同步机制而非使用api获取历史交易,避免了api限速和故障等问题。

本文档来自技高网...

【技术保护点】

1.一种静态、动态分析相结合的智能合约状态提取方法,其特征在于,所述静态、动态分析相结合的智能合约状态提取方法,包括:

2.如权利要求1所述的静态、动态分析相结合的智能合约状态提取方法,其特征在于,所述状态记录表采用如下通用的数据结构记录状态的存储布局信息:

3.如权利要求1所述的静态、动态分析相结合的智能合约状态提取方法,其特征在于,所述将状态记录表与智能合约一同部署到区块链中,包括:

4.如权利要求2所述的静态、动态分析相结合的智能合约状态提取方法,其特征在于,所述采用动态分析工具实时维护动态类型状态的存储布局信息,更新状态记录表,包括:

5.如权利要求1所述的静态、动态分析相结合的智能合约状态提取方法,其特征在于,所述采用静态分析工具将智能合约源代码解析为抽象语法树,然后将每个状态的存储布局信息记录到状态记录表中,还包括:

【技术特征摘要】

1.一种静态、动态分析相结合的智能合约状态提取方法,其特征在于,所述静态、动态分析相结合的智能合约状态提取方法,包括:

2.如权利要求1所述的静态、动态分析相结合的智能合约状态提取方法,其特征在于,所述状态记录表采用如下通用的数据结构记录状态的存储布局信息:

3.如权利要求1所述的静态、动态分析相结合的智能合约状态提取方法,其特征在于,所述将状态记录表与智能合约一同部...

【专利技术属性】
技术研发人员:程宏兵孙文翔张晓丽周坤丁江涛项逸婧
申请(专利权)人:浙江工业大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1