1.一种工业区块链中智能合约冲突的分布式检测方法,其特征在于,包括以下步骤:步骤1,获取智能合约;
步骤2,智能合约特征提取;
步骤3,智能合约聚类分析;
步骤4,智能合约代码分析;
步骤5,生成智能合约特征码;
步骤6,智能合约代码冲突分析;
步骤7,智能合约函数依赖分析;
步骤8:智能合约数据依赖分析;
步骤9:智能合约符号扫描;
步骤10,智能合约冲突检测结果输出;
在步骤1中,由分布在每一个工业区块链节点上的Solidity分布式设计器(100)获取智能合约,并多个节点并行获取智能合约,同时进行智能合约的分布式设计;每一个节点调用Solidity合约表达式分析器(101)获取智能合约的表达式,并分析表达式的语法、语义和逻辑关系,并返回调用结果;每一个节点调用Solidity合约逻辑分析器(102),获取智能合约的逻辑结构、逻辑分支、函数之间的逻辑关系,数据之间的逻辑关系,并返回调用结果;
在步骤2中,每一个工业区块链节点上的Solidity分布式设计器(100)进一步分析Solidity合约表达式分析器(101)返回的调用结果,Solidity合约逻辑分析器(102)返回的调用结果,并提取智能合约的表达式特征,智能合约的逻辑特征;建立智能合约的表达式特征矩阵、及智能合约的逻辑特征矩阵;
在步骤3中,并行运行的工业区块链节点调用Solidity合约关联图生成器(103),将本节点调用Solidity合约表达式分析器(101)返回的智能合约表达式特征矩阵、以及Solidity合约逻辑分析器(102)返回的智能合约逻辑特征矩阵,发送给其他节点;Solidity合约关联图生成器(103)与从其他节点处获取智能合约的表达式特征矩阵、以及智能合约的逻辑特征矩阵;各个节点比较本节点和相邻节点的智能合约的表达式特征矩阵、以及智能合约的逻辑特征矩阵,进行聚类分析,Solidity合约关联图生成器(103)将具有相似表达式特征矩阵和相似逻辑特征矩阵的智能合约归入同一类,而将特征不同的智能合约归入不同类,根据分类结果生成所有节点上智能合约的关联图。
2.根据权利要求1所述的方法,其特征在于,在步骤4中,每个工业区块链节点开始运行Solidity分布式编译器(200)对智能合约的代码进行分析;Solidity分布式编译器(200)调用Solidity合约代码分析器(201),分析每个节点上智能合约流程控制、不同流程的代码结构、函数代码、数据输入代码、数据处理代码、数据输出代码。
3.根据权利要求2所述的方法,其特征在于,在步骤5中,工业区块链节点运行Solidity分布式编译器(200),并调用Solidity合约代码生成器(202),根据Solidity合约表达式分析器(101)返回的智能合约表达式特征矩阵,和Solidity合约逻辑分析器(102)返回的智能合约逻辑特征矩阵,提取智能合约代码的特征,并将所有特征编码成合约代码的特征码。
4.根据权利要求3所述的方法,其特征在于,在步骤6中,所有工业区块链节点并行运行Solidity分布式编译器(200)并调用Solidity合约代码冲突分析器(203),将本节点智能合约代码的特征码发送给其他节点,并将从其他节点学习到的智能合约代码的特征码与本节点进行比较,检测是否存在冲突;如果本节点的智能合约与其他邻居节点的智能合约在代码的特征码上不一致,可以初步判断本节点运行的智能合约代码出现了冲突;否则,如果本节点的智能合约与其他邻居节点的智能合约在代码的特征码上一致,可以初步判断本次运行的智能合约代码无冲突。
5.根据权利要求4所述的方法,其特征在于,在步骤7中,为了准确判断智能合约是否存在冲突,所有工业区块链节点将Solidity分布式编译器(200)的检测结果发送到Solidity分布式检测器(300);所有节点通过Solidity分布式检测器(300)调用Solidity合约函数依赖分析器(301),并输入Solidity合约关联图生成器(103)返回智能合约的关联图,根据关联图分析智能合约之间的函数依赖关系;如果本节点的智能合约与其他邻居节点的智能合约在函数依赖上不一致,可以进一步步判断本节点运行的智能合约代码出现了冲突;否则,如果本节点的智能合约与其他邻居节点的智能合约在函数依赖上一致,可以进一步判断本次运行的智能合约代码无冲突;并生成本次智能合约冲突检测结果。
6.根据权利要求5所述的方法,其特征在于,在步骤8中,所有工业区块链节点通过Solidity分布式检测器(300)调用Solidity合约数据依赖分析器(302),并输入Solidity合约表达式分析器(101)返回的智能合约表达式特征矩阵,和Solidity合约逻辑分析器(102)返回的智能合约逻辑特征矩阵,分析智能合约的数据是否存在依赖关系;如果本节点的智能合约与其他邻居节点的智能合约在数据依赖上不一致,可以进一步步判断本节点运行的智能合约代码出现了冲突;否则,如果本节点的智能合约与其他邻居节点的智能合约在数据依赖上一致,可以进一步判断本次运行的智能合约代码无冲突;并生成本次智能合约冲突检测结果;
在步骤9中,所有工业区块链节点通过Solidity分布式检测器(300)调用Solidity合约符号扫描器(303),检测智能合约是否存在冲突的符号标识;如果本节点的智能合约与其他邻居节点的智能合约存在符号不一致,可以进一步步判断本节点运行的智能合约代码出现了冲突;否则,如果本节点的智能合约与其他邻居节点的智能合约在符号上一致,可以进一步判断本次运行的智能合约代码无冲突;并生成本次智能合约冲突检测结果;
在步骤10中,Solidity分布式检测器(300)将本次智能合约冲突检测结果分类,生成工业区块链智能合约冲突分类编码,中止冲突的智能合约,并将冲突检测结果输出,包括Solidity合约函数依赖分析器(301)生成的冲突检测结果,Solidity合约数据依赖分析器(302)生成的冲突检测结果,Solidity合约符号扫描器(303)生成的冲突检测结果。
7.一种工业区块链中智能合约冲突的分布式检测系统,其特征在于,它包括Solidity分布式设计器(100)、与Solidity分布式设计器(100)的输出端连接的Solidity分布式编译器(200)、以及与Solidity分布式编译器(200)的输出端连接的Solidity分布式检测器(300);
Solidity分布式设计器(100)包括Solidity合约表达式分析器(101)、Solidity合约逻辑分析器(102)、Solidity合约关联图生成器(103);Solidity分布式编译器(200)包括Solidity合约代码分析器(201)、Solidity合约代码生成器(202)、Solidity合约代码冲突分析器(203);Solidity分布式检测器(300)包括Solidity合约函数依赖分析器(301)、Solidity合约数据依赖分析器(302)、Solidity合约符号扫描器(303);
Solidity合约表达式分析器(101)用于获取智能合约的表达式,Solidity合约逻辑分析器(102)用于对合约的语法和语义进行分析,并绘制智能合约的关键路径和逻辑顺序;
Solidity合约关联图生成器(103)运行于不同节点上并同步工作,为所有节点互相交换智能合约数据,对所有节点上的智能合约构建一个关联网络,展示节点间智能合约的关联。
8.根据权利要求7所述的系统,其特征在于,所述Solidity合约代码分析器(201)对智能合约的代码进行语法和语义分析,包括代码之间的函数依赖和数据依赖分析、代码读/写变量分析、代码中受保护的函数分析,变量作用域分析和生存时间分析;
Solidity合约代码生成器(202)用于提取智能合约代码的特征码,该特征码的输入包括Solidity合约表达式分析器(101)返回的智能合约表达式特征矩阵,和Solidity合约逻辑分析器(102)返回的智能合约逻辑特征矩阵,并对表达式特征矩阵和逻辑特征矩阵进行相加、相乘、和转置运算,确保智能合约代码的特征码与表达式特征矩阵和逻辑特征矩阵一致;
Solidity合约代码冲突分析器(203)用于将智能合约代码编译成字节码指令,通过静态分析方式判断智能合约的字节码指令是否存在冲突。
9.根据权利要求7或8所述的系统,其特征在于,所述Solidity合约函数依赖分析器(301)用于对各种智能合约函数定义了依赖模式与独立模式,具体为首先输入Solidity合约关联图生成器(103)所生成的合约关联图,再分析关联图中的合约函数依赖关系,从关联图中提取精确函数依赖信息,并把这些信息用以检测依赖函数是否一致;如果被检测的函数依赖关系相一致,则可认为无函数依赖冲突,否则将该合约标记为冲突合约;
Solidity合约数据依赖分析器(302)可使用多个节点同时进行分布式数据依赖分析;
Solidity合约符号扫描器(303)可使用基于动态符号的方式扫描智能合约,执行动态符号扫描合约代码行和数据行。
10.根据权利要求9所述的系统,其特征在于,所述Solidity合约符号扫描器(303)在进行扫描时,提取常见的区块链攻击行为的符号特征,对智能合约运行过程的符号进行动态扫描,实时识别,一旦发现有区域链攻击行为的符号特征,则认定为智能合约攻击类冲突。