发明内容
本发明的目的在于提供一种运行智能合约的区块链实现方法及设备。
为解决上述问题,本发明提供一种运行智能合约的区块链实现方法,包括:
将区块链节点角色划分为客户端、记账节点和共识节点群;
在所述客户端保存一组公私秘钥,将所述客户端设置为用于发起交易;
在所述记账节点保存一组密钥对,将所述记账节点设置为存储分布式账本,并运行智能合约和验证交易;
在所述共识节点保存一组密钥对,将所述共识节点设置为存储分布式账本,并运行智能合约,验证交易,对区块内的多个交易排序并在所有共识节点间达成排序的共识;
所述客户端将智能合约调用指令打包为交易提议,发起交易提议至多个记账节点;
各个记账节点各自验证所述交易提议的有效性、并执行验证为有效的交易提议,返回提议结果至所述客户端;
所述客户端等待多个记账节点响应所述交易提议,比对所述提议结果,如果不一致则重新发起交易提议,如果一致则提交所述提议结果至共识节点群;
所述共识节点群收集所述提议结果,验证所述提议结果的有效性,给验证为有效的提议结果加上序号,当所述序号达到预设序号阈值或收集所述提议结果的等待时间达到预设时间阈值后,将所述提议结果打包成待定区块,发送所述待定区块至所述记账节点,同时验证所述待定区块内的交易提议,剔除验证失败的交易提议后将只含有验证成功的交易提议打包成区块添加到区块链,同时记账节点收到共识节点的待定区块后,验证所述待定区块内的交易提议,剔除验证失败的交易提议后将只含有验证成功的交易提议打包成区块添加到区块链。
进一步的,在上述方法中,所述客户端将智能合约调用指令打包为交易提议,发起交易提议至多个记账节点之前,还包括:
将所述客户端、记账节点和共识节点群的对应运行***分成包括数据层、网络层、共识层、合约层、授权层和应用层的六部分;
将所述数据层设置为包括键值数据库和数据库管理模块,用于保存区块数据与智能合约产生的数据、提供对智能合约数据做增删改查的接口,在所述数据层定义所述区块链中分布式账本的结构,账本由区块链和世界状态组成,其中,所述区块链是由区块组成的可追溯的链表,区块由区块头、区块数据、元数据组成,区块由交易提议组成,所述交易提议有两种类型:部署交易和调用交易,其中,部署交易是将智能合约文件写入区块的记录,记录内容包括文件源代码、部署人、版本号、配置信息、交易唯一标识;调用交易是智能合约调用过程的记录,记录内容包括智能合约源码所在区块高度、交易唯一标识、智能合约方法名、调用参数,以及交易发起人、执行人的数字签名;世界状态是所有智能合约的状态的集合,状态是智能合约运行后最终对数据库操作的表达方式;智能合约运行结果由读写集表示,读写集由读集与写集组成,其中,写集是一个智能合约一次调用产生的状态的集合;
设置所述网络层管理一个点对点网络,所述网络层包括数据传输协议、节点探索模块、数据同步模块和广播交易模块,其中,数据传输协议是一种最终一致性算法,实现了Gossip协议,用于同步区块链各节点的数据,同步过程是在一个同步周期内发送-接收-更新-发回-更新-再发回-再更新的流程,每个周期随机选择一个节点,最终将数据传播到所有节点;节点探索模块管理一个网络中已知节点IP地址的列表,这个列表最初在部署区块链网络时手动输入,当一个新节点加入网络,探索模块生成探索消息,探索消息包含该节点在区块链网络中获得的授权以及已知节点列表,授权由所述授权层给出,数据传输协议发送和接收探索消息,先从节点列表选出接收者节点,再广播一条探索消息至接收者,接收者的探索模块收到消息后对比本地的已知节点列表,如果探索消息中包含本地没有的节点IP则把这个IP新增至本地节点列表,如果不包含则不更新本地列表,对比完成后发回探索响应至探索消息的发送人,探索响应内容包括节点自身的授权和更新后的已知节点列表,接收人收到探索响应后根据响应内容以同样方式更新本地节点列表,更新后再发回探索响应的响应消息,接收人再次更新节点列表;数据同步模块发送和接收数据同步消息,同步消息分为同步区块高度和同步区块数据,其中,所述同步区块高度包含节点本地的区块高度、消息的数字签名,所述同步区块数据包含需要更新的区块内容、消息的数字签名,所述同步消息同样遵循数据传输协议向其他节点广播,节点定时发送同步区块高度消息,当发现接受者区块高度大于自身区块高度则发送同步区块数据消息以获取最新的区块;广播交易模块分为客户端侧,记账节点侧和共识节点侧,为不同角色提供不同功能。客户端侧将应用层产生的交易提议发往记账节点,记账节点侧将运行结果发回客户端,客户端侧将结果处理为交易消息并发往共识节点,交易消息包含记账节点的处理结果,消息的数字签名,共识节点侧接收交易消息,处理后发送共识结果至记账节点;
设置所述共识层将所有共识节点组成共识节点群,所述共识节点群接收客户端发起的交易并通过共识算法对多个交易排序,所述共识算法是PBFT算法的实现;
设置所述合约层包括智能合约打包和运行***、合约代码检查器和交易流转模块,其中,对于部署交易,先由所述合约代码检查器对智能合约代码静态扫描以拦截恶意程序,通过检查后由所述打包和运行***校验智能合约是否可被***运行,通过校验后由所述交易流转模块将智能合约文件发送至网络层处理;对于调用交易,先由所述合约代码检查器对智能合约代码静态扫描以拦截恶意程序,通过检查后将交易中包含的输入参数输入至所述打包和运行***,所述打包和运行***运行智能合约代码后输出运行结果至所述交易流转模块,所述流转模块将运行结果处理为带版本号的读写集发送至网络层处理;
设置所述授权层包括数字证书签发机构、节点注册和验证模块,其中,所述授权层授权节点加入区块链网络,验证节点的合法性;
设置所述应用层包括数字证书和秘钥管理、客户端SDK、命令行接口和远程调用接口,其中,所述应用层提供客户端与区块链的交互方式,以代码调用和命令行的方式向客户端提供包括申请授权API、交易提议API、授权结果回调API、执行智能合约API和执行结果回调API。
进一步的,在上述方法中,所述数字证书签发机构,由参与智能合约的相关组织共同维护,所述数字证书签发机构持有一组密钥对,密钥对由ECDSA算法生成,所述数字证书签发机构持有的密钥对中的公钥告知网络中全部节点,密钥对中的私钥只有签发机构本身拥有,节点经数字证书签发机构授予数字证书和私钥后才能加入区块链网络,由数字签名算法保证数字证书和私钥不可伪造,数字签名使用一组密钥对,数字签名使用的密钥对由所述数字证书签发机构签名和发放,节点加入网络前须向所述数字证书签发机构申请授权,数字证书签发机构通过申请后为节点生成一组密钥对,将公钥和节点信息保存为数字证书,数字证书签发机构用自身私钥对证书作数字签名,签名后的数字证书与节点私钥由节点保存,节点在网络中广播的所有消息带上数字证书并用自身私钥对消息做数字签名,其他节点收到广播后对发送人的合法性做校验,校验分为证书有效性检查和证书持有检查,证书有效性检查是校验证书是否由所述数字证书签发机构生成,使用ECC算法验证数字证书的内容是否由所述数字证书签发机构签名,证书持有检查确保节点从所述数字证书签发机构获得证书而非拷贝其他节点的证书,使用ECC算法验证广播内容、广播的数字签名是否符合数字证书中的公钥。
进一步的,在上述方法中,所述客户端SDK,分为Java SDK,PHP SDK,Go SDK,分别对应不同编程语言实现的客户端,所述客户端SDK将不同编程语言代码转换为JSON字符串发送至远程调用接口;所述命令行接口将命令行的输入转换为JSON字符串发送至远程调用接口;所述远程调用接口的接收和输出数据格式均为JSON字符串,通过HTTP协议传输数据,其中,对于申请授权API,将接受的数据解析为申请信息发送至网络层,通过授权结果回调API通知客户端;对于交易提议API,将接收的数据解析为智能合约调用指令,生成交易提议,用私钥生成交易提议数字签名并附带数字证书作为交易提议消息发送至网络层,节点本地的账本更新后通过所述执行结果回调API通知客户端。
根据本发明的另一面,还提供一种运行智能合约的区块链实现设备,包括::
客户端,用于保存一组公私秘钥,并用于发起交易,其中,所述客户端用于将智能合约调用指令打包为交易提议,发起交易提议至多个记账节点,并等待多个记账节点响应所述交易提议,比对所述提议结果,如果不一致则重新发起交易提议,如果一致则提交所述提议结果至共识节点群;
记账节点,用于保存一组密钥对,并用于存储分布式账本、运行智能合约和验证交易,其中,各个记账节点用于各自验证所述交易提议的有效性、并执行验证为有效的交易提议,返回提议结果至所述客户端,及记账节点收到共识节点的待定区块后,验证所述待定区块内的交易提议,剔除验证失败的交易提议后将只含有验证成功的交易提议打包成区块添加到区块链;
共识节点,用于保存一组密钥对,用于存储分布式账本,并运行智能合约,验证交易,对区块内的多个交易排序并在所有共识节点间达成排序的共识;其中,所述共识节点群用于收集所述提议结果,验证所述提议结果的有效性,给验证为有效的提议结果加上序号,当所述序号达到预设序号阈值或收集所述提议结果的等待时间达到预设时间阈值后,将所述提议结果打包成待定区块,发送所述待定区块至所述记账节点,同时验证所述待定区块内的交易提议,剔除验证失败的交易提议后将只含有验证成功的交易提议打包成区块添加到区块链。
进一步的,上述设备中,还包括:
数据层,包括键值数据库和数据库管理模块,所述数据层用于保存区块数据与智能合约产生的数据、提供对智能合约数据做增删改查的接口,在所述数据层定义所述区块链中分布式账本的结构,账本由区块链和世界状态组成,其中,所述区块链是由区块组成的可追溯的链表,区块由区块头、区块数据、元数据组成,区块由交易提议组成,所述交易提议有两种类型:部署交易和调用交易,其中,部署交易是将智能合约文件写入区块的记录,记录内容包括文件源代码、部署人、版本号、配置信息、交易唯一标识;调用交易是智能合约调用过程的记录,记录内容包括智能合约源码所在区块高度、交易唯一标识、智能合约方法名、调用参数,以及交易发起人、执行人的数字签名;世界状态是所有智能合约的状态的集合,状态是智能合约运行后最终对数据库操作的表达方式;智能合约运行结果由读写集表示,读写集由读集与写集组成,其中写集是一个智能合约一次调用产生的状态的集合;
网络层,用于管理一个点对点网络,所述网络层包括数据传输协议、节点探索模块、数据同步模块和广播交易模块,其中,数据传输协议是一种最终一致性算法,实现了Gossip协议,用于同步区块链各节点的数据,同步过程是在一个同步周期内发送-接收-更新-发回-更新-再发回-再更新的流程,每个周期随机选择一个节点,最终将数据传播到所有节点;节点探索模块,用于管理一个网络中已知节点IP地址的列表,这个列表最初在部署区块链网络时手动输入,当一个新节点加入网络,探索模块生成探索消息,探索消息包含该节点在区块链网络中获得的授权以及已知节点列表,授权由所述授权层给出,数据传输协议发送和接收探索消息,先从节点列表选出接收者节点,再广播一条探索消息至接收者,接收者的探索模块收到消息后对比本地的已知节点列表,如果探索消息中包含本地没有的节点IP则把这个IP新增至本地节点列表,如果不包含则不更新本地列表,对比完成后发回探索响应至探索消息的发送人,探索响应内容包括节点自身的授权和更新后的已知节点列表,接收人收到探索响应后根据响应内容以同样方式更新本地节点列表,更新后再发回探索响应的响应消息,接收人再次更新节点列表;所述数据同步模块,用于发送和接收数据同步消息,同步消息分为同步区块高度和同步区块数据,其中,所述同步区块高度包含节点本地的区块高度、消息的数字签名,所述同步区块数据包含需要更新的区块内容、消息的数字签名,所述同步消息同样遵循数据传输协议向其他节点广播,节点定时发送同步区块高度消息,当发现接受者区块高度大于自身区块高度则发送同步区块数据消息以获取最新的区块;所述广播交易模块,用于分为客户端侧,记账节点侧和共识节点侧,为不同角色提供不同功能。客户端侧将应用层产生的交易提议发往记账节点,记账节点侧将运行结果发回客户端,客户端侧将结果处理为交易消息并发往共识节点,交易消息包含记账节点的处理结果,消息的数字签名,共识节点侧接收交易消息,处理后发送共识结果至记账节点;
共识层,用于将所有共识节点组成共识节点群,所述共识节点群接收客户端发起的交易并通过共识算法对多个交易排序,所述共识算法是PBFT算法的实现;
合约层,包括智能合约打包和运行***、合约代码检查器和交易流转模块,其中,对于部署交易,先由所述合约代码检查器对智能合约代码静态扫描以拦截恶意程序,通过检查后由所述打包和运行***校验智能合约是否可被***运行,通过校验后由所述交易流转模块将智能合约文件发送至网络层处理;对于调用交易,先由所述合约代码检查器对智能合约代码静态扫描以拦截恶意程序,通过检查后将交易中包含的输入参数输入至所述打包和运行***,所述打包和运行***运行智能合约代码后输出运行结果至所述交易流转模块,所述流转模块将运行结果处理为带版本号的读写集发送至网络层处理;
授权层,包括数字证书签发机构、节点注册和验证模块,其中,所述授权层授权节点,用于加入区块链网络,验证节点的合法性;
应用层,包括数字证书和秘钥管理、客户端SDK、命令行接口和远程调用接口,其中,所述应用层,用于提供客户端与区块链的交互方式,以代码调用和命令行的方式向客户端提供包括申请授权API、交易提议API、授权结果回调API、执行智能合约API和执行结果回调API。
进一步的,上述设备中,所述数字证书签发机构,由参与智能合约的相关组织共同维护,所述数字证书签发机构持有一组密钥对,密钥对由ECDSA算法生成,所述数字证书签发机构持有的密钥对中的公钥告知网络中全部节点,密钥对中的私钥只有签发机构本身拥有,节点经数字证书签发机构授予数字证书和私钥后才能加入区块链网络,由数字签名算法保证数字证书和私钥不可伪造,数字签名使用一组密钥对,数字签名使用的密钥对由所述数字证书签发机构签名和发放,节点加入网络前须向所述数字证书签发机构申请授权,数字证书签发机构通过申请后为节点生成一组密钥对,将公钥和节点信息保存为数字证书,数字证书签发机构用自身私钥对证书作数字签名,签名后的数字证书与节点私钥由节点保存,节点在网络中广播的所有消息带上数字证书并用自身私钥对消息做数字签名,其他节点收到广播后对发送人的合法性做校验,校验分为证书有效性检查和证书持有检查,证书有效性检查是校验证书是否由所述数字证书签发机构生成,使用ECC算法验证数字证书的内容是否由所述数字证书签发机构签名,证书持有检查确保节点从所述数字证书签发机构获得证书而非拷贝其他节点的证书,使用ECC算法验证广播内容、广播的数字签名是否符合数字证书中的公钥。
进一步的,上述设备中,所述客户端SDK,分为Java SDK,PHP SDK,Go SDK,分别对应不同编程语言实现的客户端,所述客户端SDK,用于将不同编程语言代码转换为JSON字符串发送至远程调用接口;所述命令行接口,用于将命令行的输入转换为JSON字符串发送至远程调用接口;所述远程调用接口的接收和输出数据格式均为JSON字符串,用于通过HTTP协议传输数据,其中,对于申请授权API,将接受的数据解析为申请信息发送至网络层,通过授权结果回调API通知客户端;对于交易提议API,将接收的数据解析为智能合约调用指令,生成交易提议,用私钥生成交易提议数字签名并附带数字证书作为交易提议消息发送至网络层,节点本地的账本更新后通过所述执行结果回调API通知客户端。
根据本申请的另一面,还提供一种计算机可读介质,其上存储有计算机可读指令,所述计算机可读指令可被处理器执行以实现上述任一项所述的方法。
根据本申请的另一面,还提供一种用于在网络设备端信息处理的设备,该设备包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该设备执行上述任一项所述的方法。
与现有技术相比,本发明通过户端将智能合约调用指令打包为交易提议,发起交易提议至多个记账节点;各个记账节点各自验证所述交易提议的有效性、并执行验证为有效的交易提议,返回提议结果至所述客户端;所述客户端等待多个记账节点响应所述交易提议,比对所述提议结果,如果不一致则重新发起交易提议,如果一致则提交所述提议结果至共识节点群;所述共识节点群收集所述提议结果,验证所述提议结果的有效性,给验证为有效的提议结果加上序号,当所述序号达到预设序号阈值或收集所述提议结果的等待时间达到预设时间阈值后,将所述提议结果打包成待定区块,发送所述待定区块至所述记账节点,同时验证所述待定区块内的交易提议,剔除验证失败的交易提议后将只含有验证成功的交易提议打包成区块添加到区块链,同时记账节点收到共识节点的待定区块后,验证所述待定区块内的交易提议,剔除验证失败的交易提议后将只含有验证成功的交易提议打包成区块添加到区块链,优化了区块链运行智能合约的过程,能够有效降低运行区块链节点的服务器负担。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
如图1所示,本发明提供一种运行智能合约的区块链实现方法,包括:
步骤S1,将区块链节点角色划分为客户端、记账节点和共识节点群;
步骤S2,在所述客户端保存一组公私秘钥,将所述客户端设置为用于发起交易;
步骤S3,在所述记账节点保存一组密钥对,将所述记账节点设置为存储分布式账本,并运行智能合约和验证交易;
步骤S4,在所述共识节点保存一组密钥对,将所述共识节点设置为存储分布式账本,并运行智能合约,验证交易,对区块内的多个交易排序并在所有共识节点间达成排序的共识;
步骤S5,所述客户端将智能合约调用指令打包为交易提议,发起交易提议至多个记账节点;
步骤S6,各个记账节点各自验证所述交易提议的有效性、并执行验证为有效的交易提议,返回提议结果至所述客户端;
步骤S7,所述客户端等待多个记账节点响应所述交易提议,比对所述提议结果,如果不一致则重新发起交易提议,如果一致则提交所述提议结果至共识节点群;
步骤S8,所述共识节点群收集所述提议结果,验证所述提议结果的有效性,给验证为有效的提议结果加上序号,当所述序号达到预设序号阈值或收集所述提议结果的等待时间达到预设时间阈值后,将所述提议结果打包成待定区块,发送所述待定区块至所述记账节点,同时验证所述待定区块内的交易提议,剔除验证失败的交易提议后将只含有验证成功的交易提议打包成区块添加到区块链,同时记账节点收到共识节点的待定区块后,验证所述待定区块内的交易提议,剔除验证失败的交易提议后将只含有验证成功的交易提议打包成区块添加到区块链。
在此,智能合约在区块链***上运行的完整流程是:所述客户端将智能合约调用指令打包为交易提议,发起交易提议至多个记账节点;各个记账节点各自验证所述交易提议的有效性、并执行验证为有效的交易提议,返回提议结果至所述客户端;所述客户端等待多个记账节点响应所述交易提议,比对所述提议结果,如果不一致则重新发起交易提议,如果一致则提交所述提议结果至共识节点群;共识节点群收集所述提议结果,验证所述提议结果的有效性,给验证为有效的提议结果加上序号,当所述序号达到预设序号阈值或收集所述提议结果的等待时间达到预设时间阈值后,将所述提议结果打包成待定区块,发送所述待定区块至所述记账节点,同时验证所述待定区块内的交易提议,剔除验证失败的交易提议后将只含有验证成功的交易提议打包成区块添加到区块链,同时记账节点收到共识节点的待定区块后做相同的验证操作并打包成区块添加到区块链。
本发明中所述区块链用Go编程语言实现,智能合约运行环境为Golang运行时,区块链上广播的消息为智能合约执行指令与结果,本发明优化了区块链运行智能合约的过程,能够有效降低运行区块链节点的服务器负担。
本发明的运行智能合约的区块链实现方法一实施例中,步骤S5,所述客户端将智能合约调用指令打包为交易提议,发起交易提议至多个记账节点之前,还包括:
将所述客户端、记账节点和共识节点群的对应运行***分成包括数据层、网络层、共识层、合约层、授权层和应用层的六部分;
将所述数据层设置为包括键值数据库和数据库管理模块,用于保存区块数据与智能合约产生的数据、提供对智能合约数据做增删改查的接口,在所述数据层定义所述区块链中分布式账本的结构,账本由区块链和世界状态组成,其中,所述区块链是由区块组成的可追溯的链表,区块由区块头、区块数据、元数据组成,区块由交易提议组成,所述交易提议有两种类型:部署交易和调用交易,其中,部署交易是将智能合约文件写入区块的记录,记录内容包括文件源代码、部署人、版本号、配置信息、交易唯一标识;调用交易是智能合约调用过程的记录,记录内容包括智能合约源码所在区块高度、交易唯一标识、智能合约方法名、调用参数,以及交易发起人、执行人的数字签名;世界状态是所有智能合约的状态的集合,状态是智能合约运行后最终对数据库操作的表达方式;智能合约运行结果由读写集表示,读写集由读集与写集组成,其中写集是一个智能合约一次调用产生的状态的集合,区块的数据结构可如图2所示;
设置所述网络层管理一个点对点网络,所述网络层包括数据传输协议、节点探索模块、数据同步模块和广播交易模块,其中,
数据传输协议是一种最终一致性算法,实现了Gossip协议,用于同步区块链各节点的数据,同步过程是在一个同步周期内发送-接收-更新-发回-更新-再发回-再更新的流程,每个周期随机选择一个节点,最终将数据传播到所有节点;
节点探索模块管理一个网络中已知节点IP地址的列表,这个列表最初在部署区块链网络时手动输入,当一个新节点加入网络,探索模块生成探索消息,探索消息包含该节点在区块链网络中获得的授权以及已知节点列表,授权由所述授权层给出,数据传输协议发送和接收探索消息,先从节点列表选出接收者节点,再广播一条探索消息至接收者,接收者的探索模块收到消息后对比本地的已知节点列表,如果探索消息中包含本地没有的节点IP则把这个IP新增至本地节点列表,如果不包含则不更新本地列表,对比完成后发回探索响应至探索消息的发送人,探索响应内容包括节点自身的授权和更新后的已知节点列表,接收人收到探索响应后根据响应内容以同样方式更新本地节点列表,更新后再发回探索响应的响应消息,接收人再次更新节点列表;
数据同步模块发送和接收数据同步消息,同步消息分为同步区块高度和同步区块数据,其中,所述同步区块高度包含节点本地的区块高度、消息的数字签名,所述同步区块数据包含需要更新的区块内容、消息的数字签名,所述同步消息同样遵循数据传输协议向其他节点广播,节点定时发送同步区块高度消息,当发现接受者区块高度大于自身区块高度则发送同步区块数据消息以获取最新的区块;
广播交易模块分为客户端侧,记账节点侧和共识节点侧,为不同角色提供不同功能。客户端侧将应用层产生的交易提议发往记账节点,记账节点侧将运行结果发回客户端,客户端侧将结果处理为交易消息并发往共识节点,交易消息包含记账节点的处理结果,消息的数字签名,共识节点侧接收交易消息,处理后发送共识结果至记账节点;
设置所述共识层将所有共识节点组成共识节点群,所述共识节点群接收客户端发起的交易并通过共识算法对多个交易排序,所述共识算法是PBFT算法的实现,能够保证节点群内部对各个交易的排序达成一致;
设置所述合约层包括智能合约打包和运行***、合约代码检查器和交易流转模块,其中,对于部署交易,先由所述合约代码检查器对智能合约代码静态扫描以拦截恶意程序,通过检查后由所述打包和运行***校验智能合约是否可被***运行,通过校验后由所述交易流转模块将智能合约文件发送至网络层处理;对于调用交易,先由所述合约代码检查器对智能合约代码静态扫描以拦截恶意程序,通过检查后将交易中包含的输入参数输入至所述打包和运行***,所述打包和运行***运行智能合约代码后输出运行结果至所述交易流转模块,所述流转模块将运行结果处理为带版本号的读写集发送至网络层处理;
设置所述授权层包括数字证书签发机构、节点注册和验证模块,其中,所述授权层授权节点加入区块链网络,验证节点的合法性;所述数字证书签发机构由参与智能合约的相关组织共同维护,所述数字证书签发机构持有一组密钥对,密钥对由ECDSA算法生成,所述数字证书签发机构持有的密钥对中的公钥告知网络中全部节点,密钥对中的私钥只有签发机构本身拥有,节点经数字证书签发机构授予数字证书和私钥后才能加入区块链网络,由数字签名算法保证数字证书和私钥不可伪造,数字签名使用一组密钥对,数字签名使用的密钥对由所述数字证书签发机构签名和发放,节点加入网络前须向所述数字证书签发机构申请授权,数字证书签发机构通过申请后为节点生成一组密钥对,将公钥和节点信息保存为数字证书,数字证书签发机构用自身私钥对证书作数字签名,签名后的数字证书与节点私钥由节点保存,节点在网络中广播的所有消息带上数字证书并用自身私钥对消息做数字签名,其他节点收到广播后对发送人的合法性做校验,校验分为证书有效性检查和证书持有检查,证书有效性检查是校验证书是否由所述数字证书签发机构生成,使用ECC算法验证数字证书的内容是否由所述数字证书签发机构签名,证书持有检查确保节点从所述数字证书签发机构获得证书而非拷贝其他节点的证书,使用ECC算法验证广播内容、广播的数字签名是否符合数字证书中的公钥;
设置所述应用层包括数字证书和秘钥管理、客户端SDK、命令行接口和远程调用接口,其中,所述应用层提供客户端与区块链的交互方式,以代码调用和命令行的方式向客户端提供包括申请授权API、交易提议API、授权结果回调API、执行智能合约API和执行结果回调API;
所述客户端SDK分为Java SDK,PHP SDK,Go SDK,分别对应不同编程语言实现的客户端,所述客户端SDK将不同编程语言代码转换为JSON字符串发送至远程调用接口;所述命令行接口将命令行的输入转换为JSON字符串发送至远程调用接口;所述远程调用接口的接收和输出数据格式均为JSON字符串,通过HTTP协议传输数据,其中,
对于申请授权API,将接受的数据解析为申请信息发送至网络层,通过授权结果回调API通知客户端;对于交易提议API,将接收的数据解析为智能合约调用指令,生成交易提议,用私钥生成交易提议数字签名并附带数字证书作为交易提议消息发送至网络层,节点本地的账本更新后通过所述执行结果回调API通知客户端。
根据本发明的另一面,还提供一种运行智能合约的区块链实现设备,包括::
客户端,用于保存一组公私秘钥,并用于发起交易,其中,所述客户端用于将智能合约调用指令打包为交易提议,发起交易提议至多个记账节点,并等待多个记账节点响应所述交易提议,比对所述提议结果,如果不一致则重新发起交易提议,如果一致则提交所述提议结果至共识节点群;
记账节点,用于保存一组密钥对,并用于存储分布式账本、运行智能合约和验证交易,其中,各个记账节点用于各自验证所述交易提议的有效性、并执行验证为有效的交易提议,返回提议结果至所述客户端,及记账节点收到共识节点的待定区块后,验证所述待定区块内的交易提议,剔除验证失败的交易提议后将只含有验证成功的交易提议打包成区块添加到区块链;
共识节点,用于保存一组密钥对,用于存储分布式账本,并运行智能合约,验证交易,对区块内的多个交易排序并在所有共识节点间达成排序的共识;其中,所述共识节点群用于收集所述提议结果,验证所述提议结果的有效性,给验证为有效的提议结果加上序号,当所述序号达到预设序号阈值或收集所述提议结果的等待时间达到预设时间阈值后,将所述提议结果打包成待定区块,发送所述待定区块至所述记账节点,同时验证所述待定区块内的交易提议,剔除验证失败的交易提议后将只含有验证成功的交易提议打包成区块添加到区块链。
本发明的运行智能合约的区块链实现设备一实施例中,包括:
数据层,包括键值数据库和数据库管理模块,所述数据层用于保存区块数据与智能合约产生的数据、提供对智能合约数据做增删改查的接口,在所述数据层定义所述区块链中分布式账本的结构,账本由区块链和世界状态组成,其中,所述区块链是由区块组成的可追溯的链表,区块由区块头、区块数据、元数据组成,区块由交易提议组成,所述交易提议有两种类型:部署交易和调用交易,其中,部署交易是将智能合约文件写入区块的记录,记录内容包括文件源代码、部署人、版本号、配置信息、交易唯一标识;调用交易是智能合约调用过程的记录,记录内容包括智能合约源码所在区块高度、交易唯一标识、智能合约方法名、调用参数,以及交易发起人、执行人的数字签名;世界状态是所有智能合约的状态的集合,状态是智能合约运行后最终对数据库操作的表达方式;智能合约运行结果由读写集表示,读写集由读集与写集组成,其中写集是一个智能合约一次调用产生的状态的集合;
网络层,用于管理一个点对点网络,所述网络层包括数据传输协议、节点探索模块、数据同步模块和广播交易模块,其中,数据传输协议是一种最终一致性算法,实现了Gossip协议,用于同步区块链各节点的数据,同步过程是在一个同步周期内发送-接收-更新-发回-更新-再发回-再更新的流程,每个周期随机选择一个节点,最终将数据传播到所有节点;节点探索模块,用于管理一个网络中已知节点IP地址的列表,这个列表最初在部署区块链网络时手动输入,当一个新节点加入网络,探索模块生成探索消息,探索消息包含该节点在区块链网络中获得的授权以及已知节点列表,授权由所述授权层给出,数据传输协议发送和接收探索消息,先从节点列表选出接收者节点,再广播一条探索消息至接收者,接收者的探索模块收到消息后对比本地的已知节点列表,如果探索消息中包含本地没有的节点IP则把这个IP新增至本地节点列表,如果不包含则不更新本地列表,对比完成后发回探索响应至探索消息的发送人,探索响应内容包括节点自身的授权和更新后的已知节点列表,接收人收到探索响应后根据响应内容以同样方式更新本地节点列表,更新后再发回探索响应的响应消息,接收人再次更新节点列表;所述数据同步模块,用于发送和接收数据同步消息,同步消息分为同步区块高度和同步区块数据,其中,所述同步区块高度包含节点本地的区块高度、消息的数字签名,所述同步区块数据包含需要更新的区块内容、消息的数字签名,所述同步消息同样遵循数据传输协议向其他节点广播,节点定时发送同步区块高度消息,当发现接受者区块高度大于自身区块高度则发送同步区块数据消息以获取最新的区块;所述广播交易模块,用于分为客户端侧,记账节点侧和共识节点侧,为不同角色提供不同功能。客户端侧将应用层产生的交易提议发往记账节点,记账节点侧将运行结果发回客户端,客户端侧将结果处理为交易消息并发往共识节点,交易消息包含记账节点的处理结果,消息的数字签名,共识节点侧接收交易消息,处理后发送共识结果至记账节点;
共识层,用于将所有共识节点组成共识节点群,所述共识节点群接收客户端发起的交易并通过共识算法对多个交易排序,所述共识算法是PBFT算法的实现;
合约层,包括智能合约打包和运行***、合约代码检查器和交易流转模块,其中,对于部署交易,先由所述合约代码检查器对智能合约代码静态扫描以拦截恶意程序,通过检查后由所述打包和运行***校验智能合约是否可被***运行,通过校验后由所述交易流转模块将智能合约文件发送至网络层处理;对于调用交易,先由所述合约代码检查器对智能合约代码静态扫描以拦截恶意程序,通过检查后将交易中包含的输入参数输入至所述打包和运行***,所述打包和运行***运行智能合约代码后输出运行结果至所述交易流转模块,所述流转模块将运行结果处理为带版本号的读写集发送至网络层处理;
授权层,包括数字证书签发机构、节点注册和验证模块,其中,所述授权层授权节点,用于加入区块链网络,验证节点的合法性;
应用层,包括数字证书和秘钥管理、客户端SDK、命令行接口和远程调用接口,其中,所述应用层,用于提供客户端与区块链的交互方式,以代码调用和命令行的方式向客户端提供包括申请授权API、交易提议API、授权结果回调API、执行智能合约API和执行结果回调API。
本发明的运行智能合约的区块链实现设备一实施例中,所述数字证书签发机构,由参与智能合约的相关组织共同维护,所述数字证书签发机构持有一组密钥对,密钥对由ECDSA算法生成,所述数字证书签发机构持有的密钥对中的公钥告知网络中全部节点,密钥对中的私钥只有签发机构本身拥有,节点经数字证书签发机构授予数字证书和私钥后才能加入区块链网络,由数字签名算法保证数字证书和私钥不可伪造,数字签名使用一组密钥对,数字签名使用的密钥对由所述数字证书签发机构签名和发放,节点加入网络前须向所述数字证书签发机构申请授权,数字证书签发机构通过申请后为节点生成一组密钥对,将公钥和节点信息保存为数字证书,数字证书签发机构用自身私钥对证书作数字签名,签名后的数字证书与节点私钥由节点保存,节点在网络中广播的所有消息带上数字证书并用自身私钥对消息做数字签名,其他节点收到广播后对发送人的合法性做校验,校验分为证书有效性检查和证书持有检查,证书有效性检查是校验证书是否由所述数字证书签发机构生成,使用ECC算法验证数字证书的内容是否由所述数字证书签发机构签名,证书持有检查确保节点从所述数字证书签发机构获得证书而非拷贝其他节点的证书,使用ECC算法验证广播内容、广播的数字签名是否符合数字证书中的公钥。
本发明的运行智能合约的区块链实现设备一实施例中,所述客户端SDK,分为JavaSDK,PHP SDK,Go SDK,分别对应不同编程语言实现的客户端,所述客户端SDK,用于将不同编程语言代码转换为JSON字符串发送至远程调用接口;所述命令行接口,用于将命令行的输入转换为JSON字符串发送至远程调用接口;所述远程调用接口的接收和输出数据格式均为JSON字符串,用于通过HTTP协议传输数据,其中,对于申请授权API,将接受的数据解析为申请信息发送至网络层,通过授权结果回调API通知客户端;对于交易提议API,将接收的数据解析为智能合约调用指令,生成交易提议,用私钥生成交易提议数字签名并附带数字证书作为交易提议消息发送至网络层,节点本地的账本更新后通过所述执行结果回调API通知客户端。
根据本申请的另一面,还提供一种计算机可读介质,其上存储有计算机可读指令,所述计算机可读指令可被处理器执行以实现上述任一项所述的方法。
根据本申请的另一面,还提供一种用于在网络设备端信息处理的设备,该设备包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该设备执行上述任一项所述的方法。
上述各设备和存储介质实施例的详细内容,具体可参见各方法实施例的对应部分,在此,不再赘述。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
显然,本领域的技术人员可以对发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包括这些改动和变型在内。