1.一种静态、动态分析相结合的智能合约状态提取方法,其特征在于,所述静态、动态分析相结合的智能合约状态提取方法,包括:采用静态分析工具将智能合约源代码解析为抽象语法树,然后将每个状态的存储布局信息记录到状态记录表中,并将状态记录表与智能合约一同部署到区块链中;
部署了状态记录表的全节点,开启全同步过程监听区块链网络,下载历史区块,读取区块中的交易,识别交易发往的智能合约地址,将相应的状态记录表加载到内存中;
部署了状态记录表的全节点依次运行区块中的所有交易,采用动态分析工具实时维护动态类型状态的存储布局信息,更新状态记录表;
在区块内的所有交易执行完成后,部署了状态记录表的全节点将内存中的状态记录表持久化到数据库中;
其中,所述采用静态分析工具将智能合约源代码解析为抽象语法树,然后将每个状态的存储布局信息记录到状态记录表中,还包括:将抽象语法树中变量按照声明顺序依次遍历分析;
将变量分为静态类型或动态类型,分别提取对应状态的存储布局信息记录到状态记录表中;
对于复合类型变量,将其解析为静态类型或动态类型,然后分别提取对应状态的存储布局信息记录到状态记录表中;
所述状态记录表采用如下通用的数据结构记录状态的存储布局信息:状态记录表={变量名,变量类型,{槽位,偏移量},初始槽位,层数,指针};
所述采用动态分析工具实时维护动态类型状态的存储布局信息,更新状态记录表,包括:获取操作码,如果是SHA3操作码,则判断SHA3操作码参数的长度是否大于或等于32;
如果SHA3操作码参数的长度大于或等于32,则根据SHA3操作码参数推算出初始槽位,然后查询状态记录表,如果在状态记录表中匹配到初始槽位,则以SHA3操作码计算出的槽位结果更新状态记录表中槽位。
2.如权利要求1所述的静态、动态分析相结合的智能合约状态提取方法,其特征在于,所述将状态记录表与智能合约一同部署到区块链中,包括:智能合约通过开发者的账户发送普通交易到区块链,部署在所有全节点中;
状态记录表部署到已开启动态分析服务的全节点中,开发者通过指定已开启动态分析服务的全节点的IP地址和端口号,同时发送一个特殊的交易用于部署状态记录表。