CN114741066B - 区块链应用的生成方法及生成系统 - Google Patents
区块链应用的生成方法及生成系统 Download PDFInfo
- Publication number
- CN114741066B CN114741066B CN202210645008.8A CN202210645008A CN114741066B CN 114741066 B CN114741066 B CN 114741066B CN 202210645008 A CN202210645008 A CN 202210645008A CN 114741066 B CN114741066 B CN 114741066B
- Authority
- CN
- China
- Prior art keywords
- transaction
- client
- functional module
- engine
- intelligent contract
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/14—Details of searching files based on file metadata
- G06F16/148—File search processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
- G06F21/563—Static detection by source code analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/64—Protecting data integrity, e.g. using checksums, certificates or signatures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
Abstract
本申请公开了一种区块链应用的生成方法及生成系统,属于区块链技术领域。所述方法包括:转换引擎获取程序代码;对程序代码进行静态分析,得到至少一个功能模块和每个功能模块所依赖的业务逻辑,功能模块的类型包括网页接口调用、数据库读写、文件读写和状态变量中的至少一种;根据功能模块生成智能合约,根据功能模块所依赖的业务逻辑生成客户端代码;加速引擎接收客户端发送的批量交易,从批量交易中筛选出调用参数之间不存在依赖关系的多个交易组成并发交易列表,通过智能合约并发执行并发交易列表中的多个交易,交易中的调用参数是由客户端代码根据业务逻辑生成的。本申请既降低了开发成本也提高了开发效率,还提高了交易的执行效率。
Description
技术领域
本申请涉及区块链技术领域,特别涉及一种区块链应用的生成方法及生成系统。
背景技术
传统的软件系统对于数据的存储和读取都是中心化的,数据读写的方式包括网页接口(web API)调用,数据库读写,文件读写等。中心化的数据存储存在一定的安全风险,容易被攻击和篡改。区块链应用的数据存储是去中心化的分布式存储,可以保证数据的不可篡改。此外,区块链应用可以使得每个参与方互相信任数据的真实性和完整性。如果一个软件系统需要多方参与并且要保证数据的安全和不可篡改,那么基于区块链技术去开发是最合适的。目前,越来越多的企业正在将现有的中心化存储的软件系统改造成区块链应用。
现有的技术方案是区块链开发者基于现有软件系统的业务逻辑,重新开发一套区块链应用,将现有的数据存储转移到区块链的账本上。这样,开发者需要开发智能合约,以及调用智能合约的客户端代码。
开发者手动开发智能合约以及客户端代码的过程费时费力,成本很高,这需要开发者有专业的区块链开发技能,并且手动编写的代码量很大。
发明内容
本申请提供了一种区块链应用的生成方法及生成系统,用于解决开发者手动开发区块链应用时,开发成本较高且开发效率较低的问题。所述技术方案如下:
一方面,提供了一种区块链应用的生成方法,用于区块链应用的生成系统中,所述区块链应用包括链上的智能合约和链下的客户端中的客户端代码,且所述生成系统中包括转换引擎和加速引擎,所述方法包括:
所述转换引擎获取程序代码;
所述转换引擎对所述程序代码进行静态分析,得到至少一个功能模块和每个功能模块所依赖的业务逻辑,所述功能模块的类型包括网页接口调用、数据库读写、文件读写和状态变量中的至少一种;
所述转换引擎根据所述功能模块生成所述智能合约,根据所述功能模块所依赖的业务逻辑生成所述客户端代码;
所述加速引擎接收所述客户端发送的批量交易,从所述批量交易中筛选出调用参数之间不存在依赖关系的多个交易组成并发交易列表,通过所述智能合约并发执行所述并发交易列表中的多个交易,所述交易中的调用参数是由所述客户端代码根据所述业务逻辑生成的。
在一种可能的实现方式中,所述生成系统中还包括部署在所述客户端中的验证引擎,所述方法还包括:
所述验证引擎根据生成所述调用参数的业务逻辑生成算术电路,并获取用于生成所述调用参数的变量的赋值;
所述验证引擎根据所述算术电路和所述赋值生成所述调用参数的密码学证明;
所述验证引擎将所述密码学证明发送给所述智能合约;
所述智能合约对所述密码学证明进行验证,其中,验证通过的密码学证明表示所述调用参数的生成过程未被篡改。
在一种可能的实现方式中,当存在多个业务逻辑,且所述多个业务逻辑之间无依赖关系时,所述验证引擎对每个业务逻辑对应的算术电路和赋值并发生成多个调用参数的密码学证明。
在一种可能的实现方式中,在所述通过所述智能合约并发执行所述并发交易列表中的多个交易之后,所述方法还包括:
针对每个交易,所述加速引擎获取所述智能合约反馈的账本读集合和账本写集合,所述账本读集合中包括执行所述交易时所需读取的参数的第一键值,所述账本写集合中包括执行所述交易时所需写入的参数的第二键值;
在所述并发交易列表中,若第一交易对应的第一键值与第二交易对应的第二键值相等,或所述第一交易对应的第二键值与所述第二交易对应的第一键值相等,则所述加速引擎从所述并发交易列表中删除所述第一交易和所述第二交易,并指示所述客户端重新串行发送所述第一交易和所述第二交易。
在一种可能的实现方式中,所述方法还包括:
在所述并发交易列表中,若第三交易对应的第一键值与其他交易对应的第二键值都不等,且所述第三交易对应的第二键值与其他交易对应的第一键值都不等,则所述加速引擎将所述第三交易发送给共识节点进行共识和上链。
在一种可能的实现方式中,当所述功能模块的类型是网页接口调用时,所述转换引擎根据所述功能模块生成所述智能合约,根据所述功能模块所依赖的业务逻辑生成所述客户端代码,包括:
所述转换引擎从所述功能模块中查找http函数,所述http函数包括http get函数和http post函数;
对于每个http函数,所述转换引擎为所述http函数分配函数标识,并获取所述http函数中定义的接口信息,将所述函数标识和所述接口信息对应添加到智能合约中;将与所述http函数的调用参数相依赖的业务逻辑转换为所述客户端代码。
在一种可能的实现方式中,当所述功能模块的类型是数据库读写时,所述转换引擎根据所述功能模块生成所述智能合约,根据所述功能模块所依赖的业务逻辑生成所述客户端代码,包括:
所述转换引擎从所述功能模块中查找结构化查询语言,并对相应的数据表进行分析,得到表信息;
若所述结构化查询语言是插入语言,则在所述转换引擎生成的所述智能合约中,将所述表信息中的表名和待插入的数据表作为传入参数,并将所述数据表中所有字段信息与字段数值组成的字符串和表标识对应上链;
若所述结构化查询语言是删除语言,则在所述转换引擎生成的所述智能合约中,将所述表信息中的表名和待删除的数据表作为传入参数,并将表标识和空字符对应上链;
若所述结构化查询语言是修改语言,则在所述转换引擎生成的所述智能合约中,将所述表信息中的表名和待修改的字段信息和字段值作为传入参数,从链上获取与所述字段信息对应的字符串,利用所述字段值对所述字符串进行修改后与表标识对应上链;
若所述结构化查询语言是查找语言,则在所述转换引擎生成的所述智能合约中,将所述表信息中的表名和表标识作为传入参数,根据表标识从链上获取字符串并返回给所述客户端,所述字符串被所述客户端解析成字段信息和字段值;
所述转换引擎将与所述结构化查询语言的调用参数相依赖的业务逻辑转换为所述客户端代码。
在一种可能的实现方式中,当所述功能模块的类型是文件读写时,所述转换引擎根据所述功能模块生成所述智能合约,根据所述功能模块所依赖的业务逻辑生成所述客户端代码,包括:
所述转换引擎从所述功能模块中查找读文件函数或写文件函数,并获取相应的文件名;
若查找到读文件函数,则在所述转换引擎生成的所述智能合约中,将根据所述文件名从链上获取的文件哈希值返回给所述客户端;在所述转换引擎生成的客户端代码中,将从链上获取的文件哈希值与本地文件的文件哈希值进行对比,以确定文件是否被篡改;
若查找到写文件函数,则在所述转换引擎生成的所述智能合约中,将所述文件名和文件哈希值对应上链;在所述转换引擎生成的客户端代码中,生成文件哈希值,将文件名和所述文件哈希值对应上链。
在一种可能的实现方式中,当所述功能模块的类型是状态变量时,所述转换引擎根据所述功能模块生成所述智能合约,根据所述功能模块所依赖的业务逻辑生成所述客户端代码,包括:
所述转换引擎获取预先定义的状态变量,将所述状态变量和所述状态变量所依赖的代码添加到所述智能合约中;
在所述转换引擎生成的客户端代码中,将所述状态变量所依赖的代码中的参数作为所述调用参数。
一方面,提供了一种区块链应用的生成系统,所述区块链应用包括链上的智能合约和链下的客户端中的客户端代码,且所述生成系统中包括转换引擎和加速引擎;
所述转换引擎,用于获取程序代码;
所述转换引擎,还用于对所述程序代码进行静态分析,得到至少一个功能模块和每个功能模块所依赖的业务逻辑,所述功能模块的类型包括网页接口调用、数据库读写、文件读写和状态变量中的至少一种;
所述转换引擎,还用于根据所述功能模块生成所述智能合约,根据所述功能模块所依赖的业务逻辑生成所述客户端代码;
所述加速引擎,用于接收所述客户端发送的批量交易,从所述批量交易中筛选出调用参数之间不存在依赖关系的多个交易组成并发交易列表,通过所述智能合约并发执行所述并发交易列表中的多个交易,所述交易中的调用参数是由所述客户端代码根据所述业务逻辑生成的。
本申请提供的技术方案的有益效果至少包括:
区块链应用包括链上的智能合约和链下的客户端中的客户端代码,生成系统中的转换引擎可以对程序代码进行静态分析后得到至少一个功能模块和对应的业务逻辑,然后根据功能模块生成智能合约,根据对应的业务逻辑生成客户端代码,从而实现根据程序代码自动生成区块链应用,既降低了开发成本也提高了开发效率。另外,生成系统中的加速引擎可以从客户端发送的批量交易中筛选出调用参数之间不存在依赖关系的多个交易组成并发交易列表,通过智能合约并发执行并发交易列表中的多个交易,从而提高了交易的执行效率,加速数据上链的性能。
生成系统中的验证引擎根据业务逻辑生成调用参数的密码学证明,智能合约对密码学证明进行验证,若验证通过,则说明根据该业务逻辑生成调用参数的计算过程未被篡改,从而可以保证链下计算的安全和正确性。另外,不存在依赖关系的业务逻辑的密码学证明可以并发进行,提高了计算效率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请一个实施例提供的区块链应用的生成方法的方法流程图;
图2是根据部分示例性实施例示出的一种区块链应用的生成系统的结构示意图;
图3是本申请另一实施例提供的网页接口调用的转换示意图;
图4是本申请另一实施例提供的数据库读写的转换示意图;
图5是本申请另一实施例提供的文件读写的转换示意图;
图6是本申请另一实施例提供的状态变量的转换示意图;
图7是本申请另一实施例提供的并发执行交易的示意图;
图8是本申请另一实施例提供的密码学证明的生成示意图;
图9是本申请再一实施例提供的区块链应用的生成系统的结构框图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
请参考图1,其示出了本申请一个实施例提供的区块链应用的生成方法的方法流程图,该区块链应用的生成方法可以应用于区块链应用的生成系统中,区块链应用包括链上的智能合约和链下的客户端中的客户端代码,且生成系统中包括转换引擎和加速引擎。该区块链应用的生成方法,可以包括:
步骤101,转换引擎获取程序代码。
转换引擎是部署在线下的引擎,且其作用是根据程序代码生成区块链应用。其中,区块链应用中包括部署在线上的智能合约和部署在客户端中的客户端代码,且客户端代码能够调用智能合约。
其中,程序代码可以包括函数代码以及参数赋值,程序代码的编写语言可以是Java、C++、etc等,本实施例不作限定。
步骤102,转换引擎对程序代码进行静态分析,得到至少一个功能模块和每个功能模块所依赖的业务逻辑,功能模块的类型包括网页接口调用、数据库读写、文件读写和状态变量中的至少一种。
转换引擎可以对程序代码进行静态分析,以获取程序代码的所有分支路径,并识别出程序代码中的功能模块和每个功能模块所依赖的业务逻辑,这里所说的业务逻辑可以理解为客户端调用智能合约所需要准备的调用参数以及对智能合约反馈的数据的处理方式。
本实施例中的功能模块可以有四个类型,分别是网页接口(Web API)调用、数据库读写、文件读写和状态变量。其中,网页接口调用类型的功能模块用于调用网页接口,数据库读写类型的功能模块用于读写数据库中的数据表,文件读写类型的功能模块用于读写文件,状态变量是用户定义的需要保证其计算逻辑不可被篡改的变量。
每个功能模块对应于一个业务逻辑,如图2所示,假设对程序代码分析出的功能模块分别是Web API调用及其对应的业务逻辑1、数据库读写及其对应的业务逻辑2、文件读写及其对应的业务逻辑3、状态变量及其对应的业务逻辑4。
步骤103,转换引擎根据功能模块生成智能合约,根据功能模块所依赖的业务逻辑生成客户端代码。
本实施例中,转换引擎可以对所有的功能模块和对应的业务逻辑生成区块链应用;或者,用户可以从所有的功能模块中选择至少一种类型的功能模块,转换引擎再对选出的功能模块和对应的业务逻辑生成区块链应用。
下面根据四种类型,分别对转换引擎生成区块链应用的流程进行说明。
(1)功能模块的类型是网页接口调用。为了保证网页接口的调用历史不可被篡改,本实施例中需要将网页接口的调用过程上链,所以,转换引擎需要基于网页接口调用类型的功能模块生成智能合约。
具体的,转换引擎根据功能模块生成智能合约,根据功能模块所依赖的业务逻辑生成客户端代码,可以包括:转换引擎从功能模块中查找http函数,http函数包括http get函数和http post函数;对于每个http函数,转换引擎为http函数分配函数标识,并获取http函数中定义的接口信息,将函数标识和接口信息对应添加到智能合约中;将与http函数的调用参数相依赖的业务逻辑转换为客户端代码。
在查找http函数的过程中,若程序代码中包括函数调用,例如Util.get(url),则需要继续递归地静态分析函数调用,直到查找到http函数为止。
在查找到http函数之后,转换引擎可以基于http函数调用的参数自动化地生成智能合约,保存接口的调用参数。智能合约保存的账本信息都以键值对Key -value的形式存在,所以,链上保存API信息的数据结构为:
Key:invokeId,value: API info,其中,invokeId 是为http函数分配的函数标识,API info包括API的类型,API url,API的参数,API的执行结果。
转换引擎将程序代码中与网页接口的调用参数相依赖的业务逻辑转换为区块链应用中的客户端代码,其中,调用参数之间的依赖关系可以依靠静态代码分析获取。
请参考图3,其示出了网页接口调用的程序代码,该程序代码包括两个部分,第一部分是Web API依赖参数(例如params1和params2),第二部分是Web API调用(例如httpClient get和http Client post),转换引擎可以根据第一部分生成客户端代码(Fabricsdk代码),根据第二部分生成智能合约(Fabric Tx)。
在生成客户端代码时,分析可知str1和str2与params1相依赖,str3和str4与params2相依赖。在客户端代码中,每个Web API操作的上链都通过一次交易调用完成。图3中包含两次Web API调用,因此,转为区块链应用后有2笔交易。
(2)功能模块的类型是数据库读写。为了保证数据库的读写历史不可被篡改,本实施例中需要将数据库的读写过程上链,所以,转换引擎需要基于数据库读写类型的功能模块生成智能合约。
具体的,转换引擎根据功能模块生成智能合约,根据功能模块所依赖的业务逻辑生成客户端代码,可以包括:转换引擎从功能模块中查找结构化查询语言,并对相应的数据表进行分析,得到表信息;若结构化查询语言是插入语言,则在转换引擎生成的智能合约中,将表信息中的表名和待插入的数据表作为传入参数,并将数据表中所有字段信息与字段数值组成的字符串和表标识对应上链;若结构化查询语言是删除语言,则在转换引擎生成的智能合约中,将表信息中的表名和待删除的数据表作为传入参数,并将表标识和空字符对应上链;若结构化查询语言是修改语言,则在转换引擎生成的智能合约中,将表信息中的表名和待修改的字段信息和字段值作为传入参数,从链上获取与字段信息对应的字符串,利用字段值对字符串进行修改后与表标识对应上链;若结构化查询语言是查找语言,则在转换引擎生成的智能合约中,将表信息中的表名和表标识作为传入参数,根据表标识从链上获取字符串并返回给客户端,字符串被客户端解析成字段信息和字段值;转换引擎将与结构化查询语言的调用参数相依赖的业务逻辑转换为客户端代码。
转换引擎可以基于静态代码分析,找出程序代码中的数据操作函数,该数据操作函数包括数据库表的增删改查的操作函数。转换引擎可以基于程序代码中数据库表的增删改查的操作函数自动化生成智能合约。具体的,转换引擎可以用静态分析找出原始程序代码中对数据库表增删改查的代码,并且通过原始代码中的结构化查询语言(sql)语句,对相应的数据表分析表结构,获取表信息。下面基于增删改查这四种操作函数,分别对生成智能合约的流程进行说明。
(a)数据表记录的插入操作转智能合约:在智能合约中,将接收到的表名和插入的数据表记录作为传入参数,将数据表记录的id作为key,将数据表记录中的所有字段信息和字段值(value)所组成的json形式字符串作为value,保存在区块链账本中。
请参考图4,InsertDB为程序代码中插入操作的函数,智能合约(Fabricchaincode)中的table为表名、values[]为数据表记录、stuld为数据表记录的id,valueJsonStr为json字符串。
(b)数据表记录的删除操作转智能合约:在智能合约中,将接收到的表名和待删除的数据表记录的id作为传入参数。将数据表记录的id作为key,将空字符串作为value,保存在区块链账本中。
请参考图4,Delete为程序代码中删除操作的函数,智能合约(Fabric chaincode)中的table为表名、stuld为数据表记录的id。
(c)数据表记录的修改操作转智能合约:在智能合约中,将接收到的表名和需要修改的字段信息和字段值为传入参数,将数据表记录的id作为key,从区块链账本中查找对应的json字符串,将修改的字段值修改后组成新的json字符串作为value,保存到区块链账本中。
请参考图4,Modify为程序代码中修改操作的函数,智能合约(Fabric chaincode)中的table为表名、modifyRecord函数中的stuld为待修改的字段、newScore为字段值、GetState函数中的stuld为从区块链账本中查找到的json字符串、putState中的stuld为数据表记录的id、valueJsonStr为新的json字符串。
(d)数据表记录的查找操作转智能合约:在智能合约中,将接收到的表名和数据表记录的id作为传入参,将数据表记录的id作为key,读取区块链账本中保存的json字符串并返回,在客户端解析成字段信息和字段值。其中,查找操作在区块链中属于只读交易。
请参考图4,Selete为程序代码中查找操作的函数,智能合约(Fabric chaincode)中的table为表名、SeleteRecord函数中的stuld为数据表记录的id、GetState函数中的stuld为从区块链账本中查找到的json字符串。
在生成客户端代码时,转换引擎基于静态代码分析找出程序代码中与数据库操作函数的调用参数存在依赖关系的代码,将其定义为与数据库操作相依赖的业务逻辑,将这部分业务逻辑放在客户端代码中。比如,图4中的stuld、Name和Score是业务逻辑,生成的客户端代码如图4中的Fabric sdk代码所示。
(3)功能模块的类型是文件读写。为了保证文件的读写历史不可被篡改,本实施例中需要将文件的读写过程上链,所以,转换引擎需要基于文件读写类型的功能模块生成智能合约。
转换引擎可以基于程序代码中读写文件的操作自动化生成智能合约。具体的,转换引擎用静态代码分析找出程序代码中读文件函数(read file)和写文件函数(writefile)的代码。在智能合约中,对于读文件,可以将文件名作为key,返回文件的hash值;对于写文件,可以将文件名作为key,文件的hash值作为key保存在区块链账本中。
在客户端代码中,对于读文件,可以基于文件名,从区块链账本中获取文件的hash值,和本地文件的hash值对比,从而确认文件内容是否被篡改。对于写文件,可以保留原始的文件写入操作,生成文件的hash值,然后将文件名和hash值作为参数,调用交易将其保存在区块链账本上。
请参考图5,智能合约(Fabric chaincode)中的writeFile表示写文件,其参数包括文件名和文件的hash值;readFile表示读文件,其参数包括文件名。客户端代码(Fabricsdk)中的writeFile表示写文件,readFile表示读文件。
(4)功能模块的类型是状态变量。为了保证状态变量的计算逻辑不可被篡改,本实施例中需要将状态变量的计算过程上链,所以,转换引擎需要基于状态变量类型的功能模块生成智能合约。
具体的,转换引擎根据功能模块生成智能合约,根据功能模块所依赖的业务逻辑生成客户端代码,可以包括:转换引擎获取预先定义的状态变量,将状态变量和状态变量所依赖的代码添加到智能合约中;在转换引擎生成的客户端代码中,将状态变量所依赖的代码中的参数作为调用参数。
用户如果要保证程序代码中某些变量的计算逻辑保证不可被篡改,则可以定义这些变量为状态变量。请参考图6中,用户将stateVariable作为状态变量,那么,转换引擎通过静态代码分析,获取与stateVariable相关的代码,将状态变量以及与其依赖的代码,全部转移到智能合约中。
在客户端代码中,转换引擎将程序代码中与状态变量有依赖关系的函数参数变量作为区块链交易调用的参数,以便后续调用智能合约。
步骤104,加速引擎接收客户端发送的批量交易,从批量交易中筛选出调用参数之间不存在依赖关系的多个交易组成并发交易列表,通过智能合约并发执行并发交易列表中的多个交易,交易中的调用参数是由客户端代码根据业务逻辑生成的。
由于转换引擎可以分析出调用参数之间的依赖关系,在此基础上,可以串行执行有依赖关系的交易,并行执行没有依赖关系的交易,从而提高交易的执行效率。
如果不同交易之间的调用参数不存在依赖关系,则将它们组成候选的并发交易列表。请参考图7,图7中tx1和tx2的调用参数存在依赖关系,无法并发,将它们排除出并发交易列表,因此,并发交易列表包括tx3、tx4、tx5和tx6。
在实际实现时,除了需要分析调用参数之间是否有依赖关系,还需要分析执行交易时的读写参数是否有依赖关系。具体的,在通过智能合约并发执行并发交易列表中的多个交易之后,针对每个交易,加速引擎获取智能合约反馈的账本读集合和账本写集合,账本读集合中包括执行交易时所需读取的参数的第一键值,账本写集合中包括执行交易时所需写入的参数的第二键值;在并发交易列表中,若第一交易对应的第一键值与第二交易对应的第二键值相等,或第一交易对应的第二键值与第二交易对应的第一键值相等,则加速引擎从并发交易列表中删除第一交易和第二交易,并指示客户端重新串行发送第一交易和第二交易。
仍然以上面的示例进行说明,则将tx3、tx4、tx5和tx6并发地发送给区块链节点之后,执行智能合约,进行背书。智能合约对每歌交易都会返回一个账本读集合read set,以及一个账本写集合write set。
此时,需要分析不同的交易之间读写集合的冲突关系。在区块链应用中,如果一个交易的第一键值(read key)和另外一个交易的第二键值(write key)相等,则在上链的过程中,它们并发执行会存在冲突风险,导致前一个交易无效。图7中tx4的read key:“K1”与tx3中的write key:“K1”冲突,在并发过程中,tx4读取K1后,还没有完成上链的时候,tx3可能修改K1,从而导致tx4无效,因此,需要将tx3,tx4移除出并发交易列表,在客户端重新调用这两笔交易,并指示客户端按照顺序串行执行这两个交易。
可选的,在并发交易列表中,若第三交易对应的第一键值与其他交易对应的第二键值都不等,且第三交易对应的第二键值与其他交易对应的第一键值都不等,则加速引擎将第三交易发送给共识节点进行共识和上链。如图7所示,Tx5和tx6不存在冲突,直接发给共识模块,最终上链。
综上所述,本申请实施例提供的区块链应用的生成方法,区块链应用包括链上的智能合约和链下的客户端中的客户端代码,生成系统中的转换引擎可以对程序代码进行静态分析后得到至少一个功能模块和对应的业务逻辑,然后根据功能模块生成智能合约,根据对应的业务逻辑生成客户端代码,从而实现根据程序代码自动生成区块链应用,既降低了开发成本也提高了开发效率。另外,生成系统中的加速引擎可以从客户端发送的批量交易中筛选出调用参数之间不存在依赖关系的多个交易组成并发交易列表,通过智能合约并发执行并发交易列表中的多个交易,从而提高了交易的执行效率,加速数据上链的性能。
客户端根据业务逻辑生成调用参数的密码学证明,智能合约对密码学证明进行验证,若验证通过,则说明根据该业务逻辑生成调用参数的计算过程未被篡改,从而可以保证链下计算的安全和正确性。
如果将客户端代码都放在链下执行,则无法保证链下的业务逻辑不可篡改。由于本申请的目的是将程序代码改造成区块链应用,因此,也要保证业务逻辑不可篡改。传统的解决方法是将所有业务逻辑也放在智能合约执行,但是这种解决方法会增加链上的计算量和存储,而且会大大降低交易执行的性能。
本申请中,可以基于链下的业务逻辑生成密码学证明,从而可以保证链下的业务逻辑不可篡改,执行过程是正确的。这样,既可以节省链上的计算量和存储,也可以加强数据上链的性能。
具体的,生成系统中还包括部署在客户端中的验证引擎,则验证引擎根据生成调用参数的业务逻辑生成算术电路,并获取用于生成调用参数的变量的赋值;验证引擎根据算术电路和赋值生成调用参数的密码学证明;验证引擎将密码学证明发送给智能合约;智能合约对密码学证明进行验证,其中,验证通过的密码学证明表示调用参数的生成过程未被篡改。
在实现时,验证引擎可以基于代码插桩,在动态执行客户端代码的过程中记录变量的赋值。此外,可以对每个功能模块的业务逻辑提前生成算术电路 (第一次需要手动生成,相同业务逻辑每次执行时候的算术电路是相同的)。验证引擎可以基于算术电路和业务逻辑中代码变量的赋值,为每个业务逻辑生成密码学证明,然后将所有的密码学证明保存到链上,智能合约会验证每个密码学证明。
当存在多个业务逻辑,且多个业务逻辑之间无依赖关系时,验证引擎对每个业务逻辑对应的算术电路和赋值并发生成多个调用参数的密码学证明,提高了计算效率,如图8所示。
请参考图9,其示出了本申请一个实施例提供的区块链应用的生成系统的结构框图,区块链应用包括链上的智能合约和链下的客户端中的客户端代码,且生成系统中包括转换引擎910和加速引擎920;
转换引擎910,用于获取程序代码;
转换引擎910,还用于对程序代码进行静态分析,得到至少一个功能模块和每个功能模块所依赖的业务逻辑,功能模块的类型包括网页接口调用、数据库读写、文件读写和状态变量中的至少一种;
转换引擎910,还用于根据功能模块生成智能合约,根据功能模块所依赖的业务逻辑生成客户端代码;
加速引擎920,用于接收客户端发送的批量交易,从批量交易中筛选出调用参数之间不存在依赖关系的多个交易组成并发交易列表,通过智能合约并发执行并发交易列表中的多个交易,交易中的调用参数是由客户端代码根据业务逻辑生成的。
在一个可选的实施例中,生成系统中还包括部署在客户端中的验证引擎930;
验证引擎930,用于根据生成调用参数的业务逻辑生成算术电路,并获取用于生成调用参数的变量的赋值;
验证引擎930,还用于根据算术电路和赋值生成调用参数的密码学证明;
验证引擎930,还用于将密码学证明发送给智能合约;
智能合约,还用于对密码学证明进行验证,其中,验证通过的密码学证明表示调用参数的生成过程未被篡改。
在一个可选的实施例中,当存在多个业务逻辑,且多个业务逻辑之间无依赖关系时,验证引擎930,还用于对每个业务逻辑对应的算术电路和赋值并发生成多个调用参数的密码学证明。
在一个可选的实施例中,针对每个交易,加速引擎920,还用于在通过智能合约并发执行并发交易列表中的多个交易之后,获取智能合约反馈的账本读集合和账本写集合,账本读集合中包括执行交易时所需读取的参数的第一键值,账本写集合中包括执行交易时所需写入的参数的第二键值;
在并发交易列表中,若第一交易对应的第一键值与第二交易对应的第二键值相等,或第一交易对应的第二键值与第二交易对应的第一键值相等,则加速引擎920,还用于从并发交易列表中删除第一交易和第二交易,并指示客户端重新串行发送第一交易和第二交易。
在一个可选的实施例中,在并发交易列表中,若第三交易对应的第一键值与其他交易对应的第二键值都不等,且第三交易对应的第二键值与其他交易对应的第一键值都不等,则加速引擎920,还用于将第三交易发送给共识节点进行共识和上链。
在一个可选的实施例中,当功能模块的类型是网页接口调用时,转换引擎910,还用于:
转换引擎910从功能模块中查找http函数,http函数包括http get函数和httppost函数;
对于每个http函数,转换引擎910为http函数分配函数标识,并获取http函数中定义的接口信息,将函数标识和接口信息对应添加到智能合约中;将与http函数的调用参数相依赖的业务逻辑转换为客户端代码。
在一个可选的实施例中,当功能模块的类型是数据库读写时,转换引擎910,还用于:
转换引擎910从功能模块中查找结构化查询语言,并对相应的数据表进行分析,得到表信息;
若结构化查询语言是插入语言,则在转换引擎910生成的智能合约中,将表信息中的表名和待插入的数据表作为传入参数,并将数据表中所有字段信息与字段数值组成的字符串和表标识对应上链;
若结构化查询语言是删除语言,则在转换引擎910生成的智能合约中,将表信息中的表名和待删除的数据表作为传入参数,并将表标识和空字符对应上链;
若结构化查询语言是修改语言,则在转换引擎910生成的智能合约中,将表信息中的表名和待修改的字段信息和字段值作为传入参数,从链上获取与字段信息对应的字符串,利用字段值对字符串进行修改后与表标识对应上链;
若结构化查询语言是查找语言,则在转换引擎910生成的智能合约中,将表信息中的表名和表标识作为传入参数,根据表标识从链上获取字符串并返回给客户端,字符串被客户端解析成字段信息和字段值;
转换引擎910将与结构化查询语言的调用参数相依赖的业务逻辑转换为客户端代码。
在一个可选的实施例中,当功能模块的类型是文件读写时,转换引擎910,还用于:
转换引擎910从功能模块中查找读文件函数或写文件函数,并获取相应的文件名;
若查找到读文件函数,则在转换引擎910生成的智能合约中,将根据文件名从链上获取的文件哈希值返回给客户端;在转换引擎910生成的客户端代码中,将从链上获取的文件哈希值与本地文件的文件哈希值进行对比,以确定文件是否被篡改;
若查找到写文件函数,则在转换引擎910生成的智能合约中,将文件名和文件哈希值对应上链;在转换引擎910生成的客户端代码中,生成文件哈希值,将文件名和文件哈希值对应上链。
在一个可选的实施例中,当功能模块的类型是状态变量时,转换引擎910,还用于:
转换引擎910获取预先定义的状态变量,将状态变量和状态变量所依赖的代码添加到智能合约中;
在转换引擎910生成的客户端代码中,将状态变量所依赖的代码中的参数作为调用参数。
综上所述,本申请实施例提供的区块链应用的生成系统,区块链应用包括链上的智能合约和链下的客户端中的客户端代码,生成系统中的转换引擎可以对程序代码进行静态分析后得到至少一个功能模块和对应的业务逻辑,然后根据功能模块生成智能合约,根据对应的业务逻辑生成客户端代码,从而实现根据程序代码自动生成区块链应用,既降低了开发成本也提高了开发效率。另外,生成系统中的加速引擎可以从客户端发送的批量交易中筛选出调用参数之间不存在依赖关系的多个交易组成并发交易列表,通过智能合约并发执行并发交易列表中的多个交易,从而提高了交易的执行效率,加速数据上链的性能。
客户端根据业务逻辑生成调用参数的密码学证明,智能合约对密码学证明进行验证,若验证通过,则说明根据该业务逻辑生成调用参数的计算过程未被篡改,从而可以保证链下计算的安全和正确性。另外,不存在依赖关系的业务逻辑的密码学证明可以并发进行,提高了计算效率。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述并不用以限制本申请实施例,凡在本申请实施例的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请实施例的保护范围之内。
Claims (9)
1.一种区块链应用的生成方法,其特征在于,用于区块链应用的生成系统中,所述区块链应用包括链上的智能合约和链下的客户端中的客户端代码,且所述生成系统中包括转换引擎和加速引擎,所述方法包括:
所述转换引擎获取程序代码;
所述转换引擎对所述程序代码进行静态分析,得到至少一个功能模块和每个功能模块所依赖的业务逻辑,所述功能模块的类型包括网页接口调用、数据库读写、文件读写和状态变量中的至少一种;
所述转换引擎根据所述功能模块生成所述智能合约,根据所述功能模块所依赖的业务逻辑生成所述客户端代码;
所述加速引擎接收所述客户端发送的批量交易,从所述批量交易中筛选出调用参数之间不存在依赖关系的多个交易组成并发交易列表,通过所述智能合约并发执行所述并发交易列表中的多个交易,所述交易中的调用参数是由所述客户端代码根据所述业务逻辑生成的;
在所述通过所述智能合约并发执行所述并发交易列表中的多个交易之后,所述方法还包括:
针对每个交易,所述加速引擎获取所述智能合约反馈的账本读集合和账本写集合,所述账本读集合中包括执行所述交易时所需读取的参数的第一键值,所述账本写集合中包括执行所述交易时所需写入的参数的第二键值;
在所述并发交易列表中,若第一交易对应的第一键值与第二交易对应的第二键值相等,或所述第一交易对应的第二键值与所述第二交易对应的第一键值相等,则所述加速引擎从所述并发交易列表中删除所述第一交易和所述第二交易,并指示所述客户端重新串行发送所述第一交易和所述第二交易。
2.根据权利要求1所述的方法,其特征在于,所述生成系统中还包括部署在所述客户端中的验证引擎,所述方法还包括:
所述验证引擎根据生成所述调用参数的业务逻辑生成算术电路,并获取用于生成所述调用参数的变量的赋值;
所述验证引擎根据所述算术电路和所述赋值生成所述调用参数的密码学证明;
所述验证引擎将所述密码学证明发送给所述智能合约;
所述智能合约对所述密码学证明进行验证,其中,验证通过的密码学证明表示所述调用参数的生成过程未被篡改。
3.根据权利要求2所述的方法,其特征在于,当存在多个业务逻辑,且所述多个业务逻辑之间无依赖关系时,所述验证引擎对每个业务逻辑对应的算术电路和赋值并发生成多个调用参数的密码学证明。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在所述并发交易列表中,若第三交易对应的第一键值与其他交易对应的第二键值都不等,且所述第三交易对应的第二键值与其他交易对应的第一键值都不等,则所述加速引擎将所述第三交易发送给共识节点进行共识和上链。
5.根据权利要求1至4中任一项所述的方法,其特征在于,当所述功能模块的类型是网页接口调用时,所述转换引擎根据所述功能模块生成所述智能合约,根据所述功能模块所依赖的业务逻辑生成所述客户端代码,包括:
所述转换引擎从所述功能模块中查找http函数,所述http函数包括http get函数和http post函数;
对于每个http函数,所述转换引擎为所述http函数分配函数标识,并获取所述http函数中定义的接口信息,将所述函数标识和所述接口信息对应添加到智能合约中;将与所述http函数的调用参数相依赖的业务逻辑转换为所述客户端代码。
6.根据权利要求1至4中任一项所述的方法,其特征在于,当所述功能模块的类型是数据库读写时,所述转换引擎根据所述功能模块生成所述智能合约,根据所述功能模块所依赖的业务逻辑生成所述客户端代码,包括:
所述转换引擎从所述功能模块中查找结构化查询语言,并对相应的数据表进行分析,得到表信息;
若所述结构化查询语言是插入语言,则在所述转换引擎生成的所述智能合约中,将所述表信息中的表名和待插入的数据表作为传入参数,并将所述数据表中所有字段信息与字段数值组成的字符串和表标识对应上链;
若所述结构化查询语言是删除语言,则在所述转换引擎生成的所述智能合约中,将所述表信息中的表名和待删除的数据表作为传入参数,并将表标识和空字符对应上链;
若所述结构化查询语言是修改语言,则在所述转换引擎生成的所述智能合约中,将所述表信息中的表名和待修改的字段信息和字段值作为传入参数,从链上获取与所述字段信息对应的字符串,利用所述字段值对所述字符串进行修改后与表标识对应上链;
若所述结构化查询语言是查找语言,则在所述转换引擎生成的所述智能合约中,将所述表信息中的表名和表标识作为传入参数,根据表标识从链上获取字符串并返回给所述客户端,所述字符串被所述客户端解析成字段信息和字段值;
所述转换引擎将与所述结构化查询语言的调用参数相依赖的业务逻辑转换为所述客户端代码。
7.根据权利要求1至4中任一项所述的方法,其特征在于,当所述功能模块的类型是文件读写时,所述转换引擎根据所述功能模块生成所述智能合约,根据所述功能模块所依赖的业务逻辑生成所述客户端代码,包括:
所述转换引擎从所述功能模块中查找读文件函数或写文件函数,并获取相应的文件名;
若查找到读文件函数,则在所述转换引擎生成的所述智能合约中,将根据所述文件名从链上获取的文件哈希值返回给所述客户端;在所述转换引擎生成的客户端代码中,将从链上获取的文件哈希值与本地文件的文件哈希值进行对比,以确定文件是否被篡改;
若查找到写文件函数,则在所述转换引擎生成的所述智能合约中,将所述文件名和文件哈希值对应上链;在所述转换引擎生成的客户端代码中,生成文件哈希值,将文件名和所述文件哈希值对应上链。
8.根据权利要求1至4中任一项所述的方法,其特征在于,当所述功能模块的类型是状态变量时,所述转换引擎根据所述功能模块生成所述智能合约,根据所述功能模块所依赖的业务逻辑生成所述客户端代码,包括:
所述转换引擎获取预先定义的状态变量,将所述状态变量和所述状态变量所依赖的代码添加到所述智能合约中;
在所述转换引擎生成的客户端代码中,将所述状态变量所依赖的代码中的参数作为所述调用参数。
9.一种区块链应用的生成系统,其特征在于,所述区块链应用包括链上的智能合约和链下的客户端中的客户端代码,且所述生成系统中包括转换引擎和加速引擎;
所述转换引擎,用于获取程序代码;
所述转换引擎,还用于对所述程序代码进行静态分析,得到至少一个功能模块和每个功能模块所依赖的业务逻辑,所述功能模块的类型包括网页接口调用、数据库读写、文件读写和状态变量中的至少一种;
所述转换引擎,还用于根据所述功能模块生成所述智能合约,根据所述功能模块所依赖的业务逻辑生成所述客户端代码;
所述加速引擎,用于接收所述客户端发送的批量交易,从所述批量交易中筛选出调用参数之间不存在依赖关系的多个交易组成并发交易列表,通过所述智能合约并发执行所述并发交易列表中的多个交易,所述交易中的调用参数是由所述客户端代码根据所述业务逻辑生成的;
针对每个交易,所述加速引擎,还用于在所述通过所述智能合约并发执行所述并发交易列表中的多个交易之后,获取所述智能合约反馈的账本读集合和账本写集合,所述账本读集合中包括执行所述交易时所需读取的参数的第一键值,所述账本写集合中包括执行所述交易时所需写入的参数的第二键值;
在所述并发交易列表中,若第一交易对应的第一键值与第二交易对应的第二键值相等,或所述第一交易对应的第二键值与所述第二交易对应的第一键值相等,则所述加速引擎,还用于从所述并发交易列表中删除所述第一交易和所述第二交易,并指示所述客户端重新串行发送所述第一交易和所述第二交易。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210645008.8A CN114741066B (zh) | 2022-06-09 | 2022-06-09 | 区块链应用的生成方法及生成系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210645008.8A CN114741066B (zh) | 2022-06-09 | 2022-06-09 | 区块链应用的生成方法及生成系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114741066A CN114741066A (zh) | 2022-07-12 |
CN114741066B true CN114741066B (zh) | 2022-09-16 |
Family
ID=82287402
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210645008.8A Active CN114741066B (zh) | 2022-06-09 | 2022-06-09 | 区块链应用的生成方法及生成系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114741066B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116049319B (zh) * | 2023-03-07 | 2023-07-25 | 天聚地合(苏州)科技股份有限公司 | 一种基于预言机信誉值的链外数据获取方法和装置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106899680B (zh) * | 2017-03-09 | 2019-07-30 | 深圳壹账通智能科技有限公司 | 多区块链的分片处理方法和装置 |
CN109840429B (zh) * | 2019-01-08 | 2020-04-14 | 北京众享比特科技有限公司 | 智能合约部署、调用方法和装置 |
CN112686671B (zh) * | 2021-01-07 | 2022-07-12 | 腾讯科技(深圳)有限公司 | 基于区块链的智能合约部署方法、装置、设备以及介质 |
-
2022
- 2022-06-09 CN CN202210645008.8A patent/CN114741066B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN114741066A (zh) | 2022-07-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108846659B (zh) | 基于区块链的转账方法、装置及存储介质 | |
CN110427331B (zh) | 基于接口测试工具自动生成性能测试脚本的方法 | |
CN112104709B (zh) | 智能合约的处理方法、装置、介质及电子设备 | |
CN112070608B (zh) | 信息处理方法、装置、介质及电子设备 | |
CN110532182B (zh) | 一种虚拟化平台的自动化测试方法及装置 | |
CN114741066B (zh) | 区块链应用的生成方法及生成系统 | |
CN110032568B (zh) | 数据结构的读取及更新方法、装置、电子设备 | |
CN111008841A (zh) | 一种业务处理系统、业务处理的方法、装置及设备 | |
CN107526679A (zh) | 自动化测试框架、基于其上的自动化测试方法、存储介质和计算机设备 | |
CN112035090A (zh) | 基于容器化技术实现智能合约智慧化管理系统及方法 | |
CN116204438A (zh) | 测试用例生成方法、自动化测试方法和相关装置 | |
CN113326026B (zh) | 一种微服务业务流程接口的生成方法与终端 | |
CN110362792A (zh) | 将rn文件转换为小程序文件的方法、装置及转换设备 | |
CN110232028A (zh) | 一种测试用例自动化运行方法及系统 | |
CN117112060A (zh) | 组件库构建方法、装置、电子设备及存储介质 | |
WO2023092986A1 (zh) | 基于分布式身份标识的数据跨链转移和系统 | |
US11074294B2 (en) | System and method for Directed Acyclic Graph (DAG) encoding into hash linked blocks | |
CN115033590A (zh) | 一种多域数据融合的方法、装置和存储介质 | |
CN114253920A (zh) | 一种交易重新排序方法、装置、设备及可读存储介质 | |
CN112783791A (zh) | 接口测试案例的生成方法及装置 | |
CN112148710B (zh) | 微服务分库方法、系统和介质 | |
CN113051580B (zh) | 一种Hyperledger Fabric智能合约问题检测方法 | |
CN117992548A (zh) | 去中心化的规则引擎的同步方法、设备及存储介质 | |
CN113886428A (zh) | 基于业务方法的动态sql的生成方法及装置 | |
CN114282512A (zh) | 支持扩展日志及文件导出的方法、系统、设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |