CN109743182A - 基于区块链的智能合约核准方法及系统 - Google Patents
基于区块链的智能合约核准方法及系统 Download PDFInfo
- Publication number
- CN109743182A CN109743182A CN201910054480.2A CN201910054480A CN109743182A CN 109743182 A CN109743182 A CN 109743182A CN 201910054480 A CN201910054480 A CN 201910054480A CN 109743182 A CN109743182 A CN 109743182A
- Authority
- CN
- China
- Prior art keywords
- node
- intelligent contract
- block chain
- guarantee
- 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.)
- Granted
Links
Landscapes
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明属于区块链技术领域,涉及基于区块链的智能合约核准方法及系统。该方法包括:某节点起草一个智能合约后,将智能合约进行碎片化处理,并根据碎片计算哈希值而生成默克尔树;起草节点将智能合约的原文件和智能合约对应的碎片的默克尔树的各节点的哈希值,使用自己的私钥分别签名后广播;起草节点的至少一个可信赖节点接收智能合约的广播消息后,对智能合约对应的碎片的默克尔树使用自己的私钥进行二次签名,并广播;记账节点接收智能合约并对智能合约做缓存延迟处理,当且仅当对智能合约对应的碎片的默克尔树进行二次签名的可信赖节点的担保权重总值不小于担保阈值,才将智能合约写入区块链账本。其能有效防止漏洞攻击,提高智能合约安全性。
Description
技术领域
本发明属于区块链技术领域,具体涉及基于区块链的智能合约核准方法及基于区块链的智能合约核准系统。
背景技术
智能合约(Smart contract),是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。以一个销售合约作为典型例子:卖家承诺发送货物,买家承诺支付合理的货款。从用户角度来讲,智能合约通常被认为是一个自动担保账户,例如,当特定的条件满足时,程序就会释放和转移资金。
作为一种分布式共享记账的技术,区块链(Blockchain)在更大意义上是让参与各方之间能够在技术层面建立信任关系。目前,区块链的智能合约签订的方式是:某个节点将智能合约广播发送到区块链中,其他节点如果想参与该智能合约,则对该智能合约使用自己的私钥签名后继续广播到区块链中,最终该智能合约被记账节点写入到新区块中,进而写入到区块链账本中。然而,目前区块链存在如下不安全或者说可能的被攻击方式:黑客通过将包含恶意代码的智能合约广播到区块链中,当新区块被记账节点写入到新区块,进而写入到区块链账本中后,该恶意代码可以设置定时发作或者运行,以此方式致使网络中的所有节点被攻击者控制。
对区块链的智能合约进行改进,提高其安全性成为目前亟待解决的技术问题。
发明内容
本发明所要解决的技术问题是针对现有技术中上述不足,提供一种基于区块链的智能合约核准方法及基于区块链的智能合约核准系统,能有效防止漏洞攻击,提高智能合约安全性。
解决本发明技术问题所采用的技术方案是该基于区块链的智能合约核准方法,包括步骤:
区块链中某节点起草一个智能合约后,将所述智能合约进行碎片化处理,并根据碎片计算哈希值而生成默克尔树;
起草节点将所述智能合约的原文件和所述智能合约对应的碎片的默克尔树的各节点的哈希值,使用自己的私钥分别签名后广播到区块链中;
所述起草节点的至少一个可信赖节点接收所述智能合约的广播消息后,对所述智能合约对应的碎片的默克尔树使用自己的私钥进行二次签名,并广播到所述区块链中;
记账节点接收所述智能合约并对所述智能合约做缓存延迟处理,当且仅当对所述智能合约对应的碎片的默克尔树进行二次签名的所述可信赖节点的担保权重总值不小于担保阈值,才将所述智能合约写入区块链账本。
优选的是,在区块链中某节点起草一个智能合约后,将所述智能合约进行碎片化处理,并根据碎片计算哈希值而生成默克尔树的步骤中,将所述智能合约的所有碎片的哈希值作为叶子节点,其中:
所述默克尔树为多棵,除最后一棵默克尔树以外的其他默克尔树的叶子节点数量相同,且均为叶子节点阈值或区块链的预设叶子节点数量;所述最后一棵默克尔树则在树的最后附有本树的叶子节点的数量;
或者,所述默克尔树仅为一棵,在所述默克尔树的最后附有本树的叶子节点的数量。
优选的是,起草节点将所述智能合约对应的碎片的默克尔树的各节点的哈希值,使用自己的私钥签名后广播到区块链中为:按照叶子节点、非叶子节点和根节点的顺序,使用所述起草节点自己的私钥签名后广播到区块链中。
优选的是,记账节点对所述智能合约做缓存延迟处理,当且仅当对所述智能合约对应的碎片的默克尔树进行二次签名的所述可信赖节点的担保权重总值不小于担保阈值,才将所述智能合约写入区块链账本的步骤中,包括:
所述记账节点接收所述可信赖节点的私钥签名的所述智能合约的广播消息,根据所述可信赖节点的区块链标识在自己内部存储的账本中查询所述可信赖节点的担保权重值;
所述记账节点计算所有对所述智能合约对应的碎片的默克尔树使用自己的私钥进行二次签名的所述可信赖节点的担保权重值之和;
所述记账节点判断所述可信赖节点的担保权重之和与所述担保阈值的大小:
若所述可信赖节点的担保权重总值之和小于担保阈值,则继续对所述智能合约做缓存延迟处理;
若所述可信赖节点的担保权重总值之和不小于担保阈值,则将所述智能合约的所述原文件和经所述可信赖节点的私钥二次签名的所述智能合约的默克尔树的广播消息均写入区块链账本。
优选的是,区块链中某节点起草一个智能合约之前还包括,为加入所述区块链的每一节点均设置初始担保权重值;
其中,所述初始担保权重值以所述起草节点与所述可信赖节点之间的现实生活的社会关系设置,所述社会关系包括血缘关系、地缘关系、人际关系和业缘关系中的任一种。
优选的是,根据后续每一节点对其他节点的担保的参与情况、以及该节点是否出现担保所述智能合约引发全网节点中毒的情况,所述记账节点按照所述区块链预设担保约定调整该节点的担保权重值;
相应的,所述记账节点计算所有对所述智能合约对应的碎片的默克尔树使用自己的私钥进行二次签名的所述可信赖节点的担保权重值之和的步骤中:所述记账节点以当前时刻的各个所述可信赖节点的最新担保权重值对所述智能合约的担保权重值进行计算。
一种基于区块链的智能合约核准系统,其包括合约预处理模块、广播模块、担保模块、合约写入模块,其中:
所述合约预处理模块,配置为区块链中某节点起草一个智能合约后,将所述智能合约进行碎片化处理,并根据碎片计算哈希值而生成默克尔树;
所述广播模块,配置为供起草节点将所述智能合约的原文件和所述智能合约对应的碎片的默克尔树的各节点的哈希值,使用自己的私钥分别签名后广播到区块链中;
所述担保模块,配置为在所述起草节点的至少一个可信赖节点接收所述智能合约的广播消息后,对所述智能合约对应的碎片的默克尔树使用自己的私钥进行二次签名;
所述广播模块,还配置为供可信赖节点对所述智能合约对应的碎片的默克尔树使用自己的私钥进行二次签名后,广播到所述区块链中;
所述合约写入模块,配置为供记账节点接收所述智能合约并对所述智能合约做缓存延迟处理,当且仅当对所述智能合约对应的碎片的默克尔树进行二次签名的所述可信赖节点的担保权重总值不小于担保阈值,才将所述智能合约写入区块链账本。
优选的是,所述合约预处理模块包括碎化单元、默克尔树生成单元,其中:
所述碎化单元,配置为将所述智能合约进行碎片化处理;
所述默克尔树生成单元,配置为将所述智能合约的所有碎片的哈希值作为叶子节点,以及:
生成的所述默克尔树为多棵,除最后一棵默克尔树以外的其他默克尔树的叶子节点数量相同,且均为叶子节点阈值或区块链的预设叶子节点数量;所述最后一棵默克尔树则在树的最后附有本树的叶子节点的数量;
或者,生成的所述默克尔树仅为一棵,在所述默克尔树的最后附有本树的叶子节点的数量。
优选的是,所述合约写入模块包括权重值查询单元、权重值计算单元、权重值判断单元、合约缓存单元、合约入账单元,其中:
所述权重值查询单元,配置为供所述记账节点接收所述可信赖节点的私钥签名的所述智能合约的广播消息后,根据所述可信赖节点的区块链标识在自己内部存储的账本中查询所述可信赖节点的担保权重值;
所述权重值计算单元,配置为供所述记账节点计算所有对所述智能合约对应的碎片的默克尔树使用自己的私钥进行二次签名的所述可信赖节点的担保权重值之和;
所述权重值判断单元,配置为供所述记账节点判断所述可信赖节点的担保权重之和与所述担保阈值的大小:
若所述可信赖节点的担保权重总值之和小于担保阈值,则所述合约缓存单元继续对所述智能合约做缓存延迟处理;
若所述可信赖节点的担保权重总值之和不小于担保阈值,则所述合约入账单元将所述智能合约的所述原文件和经所述可信赖节点的私钥二次签名的所述智能合约的默克尔树的广播消息均写入区块链账本。
优选的是,还包括权重值设置模块,所述权重值设置模块包括权重值预设单元,配置为供区块链中某节点起草一个智能合约之前,为加入所述区块链的每一节点均设置初始担保权重值;
其中,所述初始担保权重值以所述起草节点与所述可信赖节点之间的现实生活的社会关系设置,所述社会关系包括血缘关系、地缘关系、人际关系和业缘关系中的任一种。
优选的是,所述权重值设置模块还包括权重值调整单元,配置为根据后续每一节点对其他节点的担保的参与情况、以及该节点是否出现担保所述智能合约引发全网节点中毒的情况,所述记账节点按照所述区块链预设担保约定调整该节点的担保权重值;
相应的,所述权重值计算单元中,所述记账节点计算所有对所述智能合约对应的碎片的默克尔树使用自己的私钥进行二次签名的所述可信赖节点的担保权重值之和的步骤中:所述记账节点以当前时刻的各个所述可信赖节点的最新担保权重值对所述智能合约的担保权重值进行计算。
本发明的有益效果是:
本发明基于区块链的智能合约核准方法及基于区块链的智能合约核准系统,利用区块链不同节点间的信任和担保的关系,使得区块链中任何一个节点发布的智能合约都有足够的担保权重值之后才可以被记录到区块链账本中,以此来表示该智能合约的生效,而不是现有技术中的一个节点在区块链中使用广播消息的方式发布一个智能合约后,其他节点就参与该智能合约,记账节点就将其记录到区块链账本中,进而全区块链的节点都实时的同步包含该智能合约的区块链账本,若该智能合约中包含恶意代码,则由此造成所有节点的中毒。因此,本发明基于区块链的智能合约核准方法及基于区块链的智能合约核准系统,能有效避免黑客将恶意代码植入到智能合约中导致的全区块链中毒,保证区块链各节点使用和参与智能合约以及同步区块链账本的安全,促进区块链发展。
附图说明
图1为本发明实施例中基于区块链的智能合约核准方法的流程图;
图2为默克尔树的示意图;
图3为图1中步骤S4)的具体流程图;
图4为本发明实施例中基于区块链的智能合约核准系统的结构框图;
图5为图4中合约预处理模块的结构示意图;
图6为图4中合约写入模块的结构示意图;
附图标识中:
1-合约预处理模块;11-碎化单元;12-默克尔树生成单元;
2-广播模块;
3-担保模块;
4-合约写入模块;41-权重值查询单元;42-权重值计算单元;
43-权重值判断单元;44-合约缓存单元;45-合约入账单元。
具体实施方式
为使本领域技术人员更好地理解本发明的技术方案,下面结合附图和具体实施方式对本发明基于区块链的智能合约核准方法及基于区块链的智能合约核准系统作进一步详细描述。
区块链是一种特殊的分布式数据库,是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。狭义来讲,区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。广义来讲,区块链技术是利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算范式。
区块链目前尚处于发展的初级阶段,无论是大机构还是小公司,均处于对区块链探索的道路上。区块链的特点在于它采用分布式账本,即交易记账由分布在不同地方的多个节点共同完成,而且每一个节点记录的都是完整的账目,因此每一节点均可参与监督交易合法性,同时也可以共同为其作证。不同于传统的中心化记账方案,区块链没有任何一个节点可以单独记录账目,从而避免单一记账人被控制或者被贿赂而记假账的可能性。另一方面,由于记账节点足够多,理论上讲除非所有的节点被破坏,否则账目就不会丢失,从而保证账目数据的安全性。
针对上述提到的区块链被恶意攻击而造成网络中的所有节点被攻击者控制的问题,本发明提供一种基于区块链的智能合约核准方法及基于区块链的智能合约核准系统,实现基于区块链的智能合约防漏洞方式,能有效防止智能合约中被嵌入恶意代码进而黑客可以攻击整个区块链的发生,从而有效保障区块链中节点的安全性,提升用户体验,也能吸引更多的用户使用区块链的智能合约服务,促进区块链的发展。
如图1所示,该基于区块链的智能合约核准方法,包括步骤:
步骤S1):区块链中某节点起草一个智能合约后,将智能合约进行碎片化处理,并根据碎片计算哈希值而生成默克尔树。
在该步骤中,区块链节点A起草一个智能合约之后,将该智能合约进行碎片化处理可以为,按照每一定数据量大小的智能合约记录作为一个碎片,对每一碎片进行哈希值计算,得到一个哈希值作为默克尔树的叶子节点的哈希值,然后将每个智能合约碎片的哈希值按照预先约定的顺序排列后生成默克尔树。
智能合约碎片化处理后的每一碎片都有相应的哈希值和它对应,并作为默克尔树的叶子节点。如图2所示,默克尔树(Merkle Tree),是一种数据结构中所说的树,因为它所构造的所有节点都是哈希值(Hash),因此也被称为默克尔哈希树(Merkle Hash Tree)。默克尔树具有以下特点:
一种数据树,可以是二叉树,也可以是多叉树,无论是几叉树,都具有树结构的所有特点;
默克尔树的叶子节点上的值(value)可指定,例如根据用户设计而定,如将数据的哈希值作为叶子节点的值;
在该步骤中,将智能合约的所有碎片的哈希值作为叶子节点,默克尔树的生成可以有两种方式:
第一种方式:默克尔树为多棵,除最后一棵默克尔树以外的其他默克尔树的叶子节点数量相同,且均为叶子节点阈值或区块链的预设叶子节点数量;最后一棵默克尔树则在树的最后附有本树的叶子节点的数量。在生成过程中,当默克尔树的叶子节点的数量达到叶子节点的阈值数量或者区块链约定的同一个智能合约的非最后一棵默克尔树的叶子节点的数量时,一棵默克尔树的非叶子节点开始生成,然后剩余的哈希值开始继续作为叶子节点生成下一棵默克尔树,一直到所有的碎片的哈希值都作为叶子节点生成默克尔树。对于同一个智能合约的非最后一棵默克尔树,树的大小也就是叶子节点数量是固定的,对于同一个智能合约的最后一棵默克尔树则需要在树的最后附有本树的叶子节点的数量。
第二种方式:默克尔树仅为一棵,在默克尔树的最后附有本树的叶子节点的数量。此时,智能合约的所有碎片的哈希值作为叶子节点,一个智能合约生成一个大的默克尔树,在默克尔树的最后附有本树的叶子节点的数量。
也就是说,本实施例根据智能合约碎片可以建立多棵默克尔树或仅一棵默克尔树,多棵默克尔树或仅一棵默克尔树的总叶子节点数量是相等的。在碎片数量一定的情况下,多棵默克尔树或仅一棵默克尔树的总叶子节点数量就固定下来。当确定某一默克尔树的叶子节点数量后,非叶子节点的值是根据它下一层所有的子节点的哈希值,按照一定的算法计算得出。
对于默克尔树的叶子节点的上一层非叶子节点的值的计算方法为:将与该非叶子节点相关的下一层的所有叶子节点进行组合,然后对组合结果进行哈希计算所得出的哈希值;进而由该层非叶子节点的值计算得到上一层非叶子节点的值,逐层向上,可以得到数目更少的上一层非叶子节点的哈希,最终必然形成一棵倒挂的树,得到树根位置的根节点的一个值。也就是说,在默克尔树中可以不直接去运算根哈希值,而是把相邻的两个哈希值合并成一个字符串,然后运算这个字符串的哈希值,这样每两个哈希值就得到一个非叶子节点的哈希值;然后逐层向上,直至得到根节点的值。例如,图2所示的默克尔树,遵循上述默克尔树生成规则,例如,节点⑦的哈希值是通过节点节点上的哈希值计算而得到,节点节点上的哈希值则通过智能合约碎片化的碎片哈希值填充(如图2中节点节点等节点下方的数字)。
特别的,如果最底层的叶子节点的数量为单数,那到最后必然出现一个单哈希,这种情况就直接对它进行哈希运算,因此也能得到它的子哈希;同样逐层向上,直至得到根节点的值。
步骤S2):起草节点将智能合约的原文件和智能合约对应的碎片的默克尔树的各节点的哈希值,使用自己的私钥分别签名后广播到区块链中。
在该步骤中,区块链节点A使用自己的私钥将该智能合约的原文件签名后广播到区块链中,与此同时,节点A将本智能合约的碎片的默克尔树的各节点的哈希值按照预先约定的顺序使用自己的私钥签名后广播到区块链中,以便于后续的核准、验证。
其中,节点A将本智能合约的碎片的默克尔树的各节点的哈希值按照预先约定的顺序使用自己的私钥签名后广播到区块链中,例如可以按照叶子节点、非叶子节点和根节点的顺序,然后使用节点A自己的私钥签名后广播到区块链中。
步骤S3):起草节点的至少一个可信赖节点接收智能合约的广播消息后,对智能合约对应的碎片的默克尔树使用自己的私钥进行二次签名,并广播到区块链中。
在该步骤中,节点B收到节点A的广播消息后,发现节点A是自己的可信赖节点(例如现实生活中,节点A和节点B是亲朋好友),则节点B决定对节点A广播的智能合约进行担保,节点B将节点A私钥签名的广播消息的默克尔树的那个消息,再次使用自己的私钥签名后广播到区块链中。
这里,由于节点B私钥二次签名的是节点A私钥签名的智能合约的默克尔树的广播消息,而不是节点A原始的智能合约消息,这样避免万一具有恶意病毒的智能合约被重复多次在区块链中进行广播,易引起区块链中节点中毒,而由于默克尔树是由该智能合约的碎片进行哈希值计算得到的,因此该默克尔树具有不可篡改性,所以完全可以替代该智能合约。
容易理解的是,与此同时,记账节点也将收到节点A的智能合约的广播消息。然而,记账节点收到节点A的智能合约发起消息后,先不将其记录到新区块中,对其采取缓存延迟处理的办法,记账节点等待节点A的担保节点们对其担保后,当担保节点们的权重达到担保阈值后,再将节点A发起的智能合约的广播消息记录到新区块中,进而写入到区块链账本中。
同时应该理解的是,区块链的各个节点在加入到本区块链之初,都具有一个初始担保权重值。也就是说,在区块链中某节点起草一个智能合约之前还包括,为加入区块链的每一节点均设置初始担保权重值;其中,初始担保权重值以起草节点与可信赖节点之间的现实生活的社会关系设置,社会关系包括血缘关系、地缘关系、人际关系和业缘关系中的任一种。
步骤S4):记账节点接收智能合约并对智能合约做缓存延迟处理,当且仅当对智能合约对应的碎片的默克尔树进行二次签名的可信赖节点的担保权重总值不小于担保阈值,才将智能合约写入区块链账本。
在该步骤中,如图3所示,具体的过程包括:
步骤S41):记账节点接收可信赖节点的私钥签名的智能合约的广播消息后,根据可信赖节点的区块链标识在自己内部存储的账本中查询可信赖节点的担保权重值;
步骤S42):记账节点计算所有对智能合约对应的碎片的默克尔树使用自己的私钥进行二次签名的可信赖节点的担保权重值之和;
步骤S43):记账节点判断可信赖节点的担保权重之和与担保阈值的大小:
若可信赖节点的担保权重总值之和小于担保阈值,则继续对智能合约做缓存延迟处理;
若可信赖节点的担保权重总值之和不小于担保阈值,则将智能合约的原文件和经可信赖节点的私钥二次签名的智能合约的默克尔树的广播消息均写入区块链账本。
也就是说,记账节点收到节点B私钥签名的节点A的智能合约的广播消息后,按照节点B的区块链标识来查询自己内部存储的区块链账本来确定节点B的担保权重值,发现不满足区块链的智能合约担保阈值,则先不要将节点B私钥签名的节点A的广播消息记录到新区块中,对其采取缓存延迟处理的办法;记账节点继续等待节点A的担保节点们对其担保后,当有多个不同节点对节点A的智能合约的默克尔树的广播消息进行私钥签名担保广播出去以后,记账节点实时的计算担保节点们的权重值,将各个权重值相加,当担保节点们的权重值之和达到担保阈值后,记账节点再将节点A发起的具有多个担保节点私钥签名的智能合约的默克尔树的广播消息和智能合约的原文件都记录到新区块中,进而写入到区块链账本中。
优选的是,根据后续每一节点对其他节点的担保的参与情况、以及该节点是否出现担保智能合约引发全网节点中毒的情况,记账节点按照区块链预设担保约定调整该节点的担保权重值;相应的,记账节点计算所有对智能合约对应的碎片的默克尔树使用自己的私钥进行二次签名的可信赖节点的担保权重值之和的步骤中:记账节点以当前时刻的各个可信赖节点的最新担保权重值对智能合约的担保权重值进行计算。也就是说,随着后续自己担保的内容的参与情况,以及是否有自己担保的智能合约引发全网节点中毒的情况,来由记账节点按照区块链的预先约定对其担保权重值进行相应的调整,进行适量的增大或者减小。每次记账节点对一个智能合约的担保权重值进行计算的时候,都需要计算当前时刻的各个担保节点的担保权重值之和,因此能根据系统自控机制消除节点之间初始担保权重值的人为因素,实现对智能合约的核准,保证区块链系统的公平、公正。
经过上述核准该智能合约的流程后,当节点A的智能合约广播消息被写入到区块链账本中,区块链中想参与该智能合约的节点C在区块链账本中查询到该智能合约,根据该智能合约的内容,与其签约,使用自己的私钥将签约后的智能合约广播到区块链中。
相应的,本实施例还提供一种基于区块链的智能合约核准系统,如图4所示,该基于区块链的智能合约核准系统包括合约预处理模块1、广播模块2、担保模块3、合约写入模块4,其中:
合约预处理模块1,配置为区块链中某节点起草一个智能合约后,将智能合约进行碎片化处理,并根据碎片计算哈希值而生成默克尔树;
广播模块2,配置为供起草节点将智能合约的原文件和智能合约对应的碎片的默克尔树的各节点的哈希值,使用自己的私钥分别签名后广播到区块链中;
担保模块3,配置为在起草节点的至少一个可信赖节点接收智能合约的广播消息后,对智能合约对应的碎片的默克尔树使用自己的私钥进行二次签名;
广播模块2,还配置为供可信赖节点对智能合约对应的碎片的默克尔树使用自己的私钥进行二次签名后,广播到区块链中;
合约写入模块4,配置为供记账节点接收智能合约并对智能合约做缓存延迟处理,当且仅当对智能合约对应的碎片的默克尔树进行二次签名的可信赖节点的担保权重总值不小于担保阈值,才将智能合约写入区块链账本。
如图5所示,合约预处理模块1包括碎化单元11、默克尔树生成单元12,其中:
碎化单元11,配置为将智能合约进行碎片化处理;
默克尔树生成单元12,配置为将智能合约的所有碎片的哈希值作为叶子节点,以及:
生成的默克尔树为多棵,除最后一棵默克尔树以外的其他默克尔树的叶子节点数量相同,且均为叶子节点阈值或区块链的预设叶子节点数量;最后一棵默克尔树则在树的最后附有本树的叶子节点的数量;
或者,生成的默克尔树仅为一棵,在默克尔树的最后附有本树的叶子节点的数量。
如图6所示,合约写入模块4包括权重值查询单元41、权重值计算单元42、权重值判断单元43、合约缓存单元44、合约入账单元45,其中:
权重值查询单元41,配置为供记账节点接收可信赖节点的私钥签名的智能合约的广播消息后,根据可信赖节点的区块链标识在自己内部存储的账本中查询可信赖节点的担保权重值;
权重值计算单元42,配置为供记账节点计算所有对智能合约对应的碎片的默克尔树使用自己的私钥进行二次签名的可信赖节点的担保权重值之和;
权重值判断单元43,配置为供记账节点判断可信赖节点的担保权重之和与担保阈值的大小:
若可信赖节点的担保权重总值之和小于担保阈值,则合约缓存单元44继续对智能合约做缓存延迟处理;
若可信赖节点的担保权重总值之和不小于担保阈值,则合约入账单元45将智能合约的原文件和经可信赖节点的私钥二次签名的智能合约的默克尔树的广播消息均写入区块链账本。
其中,该基于区块链的智能合约核准系统还包括权重值设置模块,权重值设置模块包括权重值预设单元,配置为供区块链中某节点起草一个智能合约之前,为加入区块链的每一节点均设置初始担保权重值;
其中,初始担保权重值以起草节点与可信赖节点之间的现实生活的社会关系设置,社会关系包括血缘关系、地缘关系、人际关系和业缘关系中的任一种。
其中,权重值设置模块还包括权重值调整单元,配置为根据后续每一节点对其他节点的担保的参与情况、以及该节点是否出现担保智能合约引发全网节点中毒的情况,记账节点按照区块链预设担保约定调整该节点的担保权重值;
相应的,权重值计算单元42中,记账节点计算所有对智能合约对应的碎片的默克尔树使用自己的私钥进行二次签名的可信赖节点的担保权重值之和的步骤中:记账节点以当前时刻的各个可信赖节点的最新担保权重值对智能合约的担保权重值进行计算。
本发明基于区块链的智能合约核准方法及基于区块链的智能合约核准系统,利用区块链不同节点间的信任和担保的关系,使得区块链中任何一个节点发布的智能合约都有足够的担保权重值之后才可以被记录到区块链账本中,以此来表示该智能合约的生效,而不是现有技术中的一个节点在区块链中使用广播消息的方式发布一个智能合约后,其他节点就参与该智能合约,记账节点就将其记录到区块链账本中,进而全区块链的节点都实时的同步包含该智能合约的区块链账本,若该智能合约中包含恶意代码,则由此造成所有节点的中毒。因此,本发明基于区块链的智能合约核准方法及基于区块链的智能合约核准系统,能有效避免黑客将恶意代码植入到智能合约中导致的全区块链中毒,保证区块链各节点使用和参与智能合约以及同步区块链账本的安全,促进区块链发展。
可以理解的是,以上实施方式仅仅是为说明本发明的原理而采用的示例性实施方式,然而本发明并不局限于此。对于本领域内的普通技术人员而言,在不脱离本发明的精神和实质的情况下,可以做出各种变型和改进,这些变型和改进也视为本发明的保护范围。
Claims (11)
1.一种基于区块链的智能合约核准方法,其特征在于,包括步骤:
区块链中某节点起草一个智能合约后,将所述智能合约进行碎片化处理,并根据碎片计算哈希值而生成默克尔树;
起草节点将所述智能合约的原文件和所述智能合约对应的碎片的默克尔树的各节点的哈希值,使用自己的私钥分别签名后广播到区块链中;
所述起草节点的至少一个可信赖节点接收所述智能合约的广播消息后,对所述智能合约对应的碎片的默克尔树使用自己的私钥进行二次签名,并广播到所述区块链中;
记账节点接收所述智能合约并对所述智能合约做缓存延迟处理,当且仅当对所述智能合约对应的碎片的默克尔树进行二次签名的所述可信赖节点的担保权重总值不小于担保阈值,才将所述智能合约写入区块链账本。
2.根据权利要求1所述的基于区块链的智能合约核准方法,其特征在于,在区块链中某节点起草一个智能合约后,将所述智能合约进行碎片化处理,并根据碎片计算哈希值而生成默克尔树的步骤中,将所述智能合约的所有碎片的哈希值作为叶子节点,其中:
所述默克尔树为多棵,除最后一棵默克尔树以外的其他默克尔树的叶子节点数量相同,且均为叶子节点阈值或区块链的预设叶子节点数量;所述最后一棵默克尔树则在树的最后附有本树的叶子节点的数量;
或者,所述默克尔树仅为一棵,在所述默克尔树的最后附有本树的叶子节点的数量。
3.根据权利要求1所述的基于区块链的智能合约核准方法,其特征在于,起草节点将所述智能合约对应的碎片的默克尔树的各节点的哈希值,使用自己的私钥签名后广播到区块链中为:按照叶子节点、非叶子节点和根节点的顺序,使用所述起草节点自己的私钥签名后广播到区块链中。
4.根据权利要求1所述的基于区块链的智能合约核准方法,其特征在于,记账节点对所述智能合约做缓存延迟处理,当且仅当对所述智能合约对应的碎片的默克尔树进行二次签名的所述可信赖节点的担保权重总值不小于担保阈值,才将所述智能合约写入区块链账本的步骤中,包括:
所述记账节点接收所述可信赖节点的私钥签名的所述智能合约的广播消息,根据所述可信赖节点的区块链标识在自己内部存储的账本中查询所述可信赖节点的担保权重值;
所述记账节点计算所有对所述智能合约对应的碎片的默克尔树使用自己的私钥进行二次签名的所述可信赖节点的担保权重值之和;
所述记账节点判断所述可信赖节点的担保权重之和与所述担保阈值的大小:
若所述可信赖节点的担保权重总值之和小于担保阈值,则继续对所述智能合约做缓存延迟处理;
若所述可信赖节点的担保权重总值之和不小于担保阈值,则将所述智能合约的所述原文件和经所述可信赖节点的私钥二次签名的所述智能合约的默克尔树的广播消息均写入区块链账本。
5.根据权利要求1-4任一项所述的基于区块链的智能合约核准方法,其特征在于,区块链中某节点起草一个智能合约之前还包括,为加入所述区块链的每一节点均设置初始担保权重值;
其中,所述初始担保权重值以所述起草节点与所述可信赖节点之间的现实生活的社会关系设置,所述社会关系包括血缘关系、地缘关系、人际关系和业缘关系中的任一种。
6.根据权利要求5所述的基于区块链的智能合约核准方法,其特征在于,根据后续每一节点对其他节点的担保的参与情况、以及该节点是否出现担保所述智能合约引发全网节点中毒的情况,所述记账节点按照所述区块链预设担保约定调整该节点的担保权重值;
相应的,所述记账节点计算所有对所述智能合约对应的碎片的默克尔树使用自己的私钥进行二次签名的所述可信赖节点的担保权重值之和的步骤中:所述记账节点以当前时刻的各个所述可信赖节点的最新担保权重值对所述智能合约的担保权重值进行计算。
7.一种基于区块链的智能合约核准系统,其特征在于,包括合约预处理模块、广播模块、担保模块、合约写入模块,其中:
所述合约预处理模块,配置为区块链中某节点起草一个智能合约后,将所述智能合约进行碎片化处理,并根据碎片计算哈希值而生成默克尔树;
所述广播模块,配置为供起草节点将所述智能合约的原文件和所述智能合约对应的碎片的默克尔树的各节点的哈希值,使用自己的私钥分别签名后广播到区块链中;
所述担保模块,配置为在所述起草节点的至少一个可信赖节点接收所述智能合约的广播消息后,对所述智能合约对应的碎片的默克尔树使用自己的私钥进行二次签名;
所述广播模块,还配置为供可信赖节点对所述智能合约对应的碎片的默克尔树使用自己的私钥进行二次签名后,广播到所述区块链中;
所述合约写入模块,配置为供记账节点接收所述智能合约并对所述智能合约做缓存延迟处理,当且仅当对所述智能合约对应的碎片的默克尔树进行二次签名的所述可信赖节点的担保权重总值不小于担保阈值,才将所述智能合约写入区块链账本。
8.根据权利要求7所述的基于区块链的智能合约核准系统,其特征在于,所述合约预处理模块包括碎化单元、默克尔树生成单元,其中:
所述碎化单元,配置为将所述智能合约进行碎片化处理;
所述默克尔树生成单元,配置为将所述智能合约的所有碎片的哈希值作为叶子节点,以及:
生成的所述默克尔树为多棵,除最后一棵默克尔树以外的其他默克尔树的叶子节点数量相同,且均为叶子节点阈值或区块链的预设叶子节点数量;所述最后一棵默克尔树则在树的最后附有本树的叶子节点的数量;
或者,生成的所述默克尔树仅为一棵,在所述默克尔树的最后附有本树的叶子节点的数量。
9.根据权利要求7所述的基于区块链的智能合约核准系统,其特征在于,所述合约写入模块包括权重值查询单元、权重值计算单元、权重值判断单元、合约缓存单元、合约入账单元,其中:
所述权重值查询单元,配置为供所述记账节点接收所述可信赖节点的私钥签名的所述智能合约的广播消息后,根据所述可信赖节点的区块链标识在自己内部存储的账本中查询所述可信赖节点的担保权重值;
所述权重值计算单元,配置为供所述记账节点计算所有对所述智能合约对应的碎片的默克尔树使用自己的私钥进行二次签名的所述可信赖节点的担保权重值之和;
所述权重值判断单元,配置为供所述记账节点判断所述可信赖节点的担保权重之和与所述担保阈值的大小:
若所述可信赖节点的担保权重总值之和小于担保阈值,则所述合约缓存单元继续对所述智能合约做缓存延迟处理;
若所述可信赖节点的担保权重总值之和不小于担保阈值,则所述合约入账单元将所述智能合约的所述原文件和经所述可信赖节点的私钥二次签名的所述智能合约的默克尔树的广播消息均写入区块链账本。
10.根据权利要求7-9任一项所述的基于区块链的智能合约核准系统,其特征在于,还包括权重值设置模块,所述权重值设置模块包括权重值预设单元,配置为供区块链中某节点起草一个智能合约之前,为加入所述区块链的每一节点均设置初始担保权重值;
其中,所述初始担保权重值以所述起草节点与所述可信赖节点之间的现实生活的社会关系设置,所述社会关系包括血缘关系、地缘关系、人际关系和业缘关系中的任一种。
11.根据权利要求10所述的基于区块链的智能合约核准系统,其特征在于,所述权重值设置模块还包括权重值调整单元,配置为根据后续每一节点对其他节点的担保的参与情况、以及该节点是否出现担保所述智能合约引发全网节点中毒的情况,所述记账节点按照所述区块链预设担保约定调整该节点的担保权重值;
相应的,所述权重值计算单元中,所述记账节点计算所有对所述智能合约对应的碎片的默克尔树使用自己的私钥进行二次签名的所述可信赖节点的担保权重值之和的步骤中:所述记账节点以当前时刻的各个所述可信赖节点的最新担保权重值对所述智能合约的担保权重值进行计算。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910054480.2A CN109743182B (zh) | 2019-01-21 | 2019-01-21 | 基于区块链的智能合约核准方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910054480.2A CN109743182B (zh) | 2019-01-21 | 2019-01-21 | 基于区块链的智能合约核准方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109743182A true CN109743182A (zh) | 2019-05-10 |
CN109743182B CN109743182B (zh) | 2021-10-22 |
Family
ID=66365471
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910054480.2A Active CN109743182B (zh) | 2019-01-21 | 2019-01-21 | 基于区块链的智能合约核准方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109743182B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110493323A (zh) * | 2019-07-29 | 2019-11-22 | 华南理工大学 | 基于区块链的公平性文件分发方法、系统及存储介质 |
CN110599183A (zh) * | 2019-06-20 | 2019-12-20 | 腾讯科技(深圳)有限公司 | 智能合约调用方法、装置及存储介质 |
CN111464353A (zh) * | 2020-03-31 | 2020-07-28 | 财付通支付科技有限公司 | 区块链节点管理方法、装置、计算机以及可读存储介质 |
CN113468264A (zh) * | 2021-05-20 | 2021-10-01 | 杭州趣链科技有限公司 | 一种基于区块链的中毒防御和中毒溯源的联邦学习方法和装置 |
US20220020014A1 (en) * | 2020-07-20 | 2022-01-20 | Jiangsu Aowei Holdings Co., Ltd. | Transaction mode-based electronic contract preservation system |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105488665A (zh) * | 2015-11-25 | 2016-04-13 | 布比(北京)网络技术有限公司 | 一种去中心化的交易方法 |
US20170048216A1 (en) * | 2015-08-13 | 2017-02-16 | TD Bank Group | Document tracking on a distributed ledger |
CN107609876A (zh) * | 2017-08-18 | 2018-01-19 | 北京云知科技有限公司 | 一种恢复区块链资产的方法和系统 |
CN108399571A (zh) * | 2018-01-30 | 2018-08-14 | 厦门快商通信息技术有限公司 | 基于区块链智能合约的无担保交易方法及系统 |
CN109067808A (zh) * | 2018-10-18 | 2018-12-21 | 全链通有限公司 | 基于社会关系担保实现区块链实名制认证的方法及装置 |
-
2019
- 2019-01-21 CN CN201910054480.2A patent/CN109743182B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170048216A1 (en) * | 2015-08-13 | 2017-02-16 | TD Bank Group | Document tracking on a distributed ledger |
CN105488665A (zh) * | 2015-11-25 | 2016-04-13 | 布比(北京)网络技术有限公司 | 一种去中心化的交易方法 |
CN107609876A (zh) * | 2017-08-18 | 2018-01-19 | 北京云知科技有限公司 | 一种恢复区块链资产的方法和系统 |
CN108399571A (zh) * | 2018-01-30 | 2018-08-14 | 厦门快商通信息技术有限公司 | 基于区块链智能合约的无担保交易方法及系统 |
CN109067808A (zh) * | 2018-10-18 | 2018-12-21 | 全链通有限公司 | 基于社会关系担保实现区块链实名制认证的方法及装置 |
Non-Patent Citations (3)
Title |
---|
RASONBOY: "《区块链实现智能合约》", 《CSDN》 * |
XU HAO: "《Multi-Agent System for E-commerce Security》", 《IEEE》 * |
贺海武: "《基于区块链的智能合约技术与应用综述》", 《计算机研究与发展》 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110599183A (zh) * | 2019-06-20 | 2019-12-20 | 腾讯科技(深圳)有限公司 | 智能合约调用方法、装置及存储介质 |
CN110599183B (zh) * | 2019-06-20 | 2021-08-17 | 腾讯科技(深圳)有限公司 | 智能合约调用方法、装置及存储介质 |
CN110493323A (zh) * | 2019-07-29 | 2019-11-22 | 华南理工大学 | 基于区块链的公平性文件分发方法、系统及存储介质 |
CN111464353A (zh) * | 2020-03-31 | 2020-07-28 | 财付通支付科技有限公司 | 区块链节点管理方法、装置、计算机以及可读存储介质 |
CN111464353B (zh) * | 2020-03-31 | 2022-12-09 | 财付通支付科技有限公司 | 区块链节点管理方法、装置、计算机以及可读存储介质 |
US20220020014A1 (en) * | 2020-07-20 | 2022-01-20 | Jiangsu Aowei Holdings Co., Ltd. | Transaction mode-based electronic contract preservation system |
CN113468264A (zh) * | 2021-05-20 | 2021-10-01 | 杭州趣链科技有限公司 | 一种基于区块链的中毒防御和中毒溯源的联邦学习方法和装置 |
CN113468264B (zh) * | 2021-05-20 | 2024-02-20 | 杭州趣链科技有限公司 | 一种基于区块链的中毒防御和中毒溯源的联邦学习方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN109743182B (zh) | 2021-10-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10965446B2 (en) | Blockchain-based automated user matching | |
CN109743182A (zh) | 基于区块链的智能合约核准方法及系统 | |
US10942994B2 (en) | Multicomputer processing for data authentication using a blockchain approach | |
US20230237468A1 (en) | Secure transfer between blockchains | |
US11159537B2 (en) | Multicomputer processing for data authentication and event execution using a blockchain approach | |
KR101795695B1 (ko) | 메신저 서비스를 통하여 송수신하는 데이터에 대한 기록 서비스 및 검증 서비스를 제공하는 방법, 및 이를 이용한 서버 | |
KR101950912B1 (ko) | 블록체인 기반 트랜잭션 검증 시스템 및 그 방법 | |
AU2023200072A1 (en) | Methods and systems for using digital signatures to create trusted digital asset transfers | |
US20200027066A1 (en) | Blockchain-Based Digital Token Utilization | |
US11108566B2 (en) | Methods and systems for using digital signatures to create trusted digital asset transfers | |
KR101798119B1 (ko) | 주주명부를 등록하고 주식 소유권 이전을 기록하고 등록된 주주명부 파일을 검증하는 방법 및 서버 | |
US20220172198A1 (en) | Real-time blockchain settlement network | |
WO2020199703A1 (zh) | 一种区块链交易的方法、装置和系统 | |
CN112488682B (zh) | 一种区块链的三方转账方法及装置 | |
US20210406876A1 (en) | Permissioned eventing in a decentralized database | |
Kim et al. | A study on an energy-effective and secure consensus algorithm for private blockchain systems (PoM: Proof of Majority) | |
CN111464310A (zh) | 一种联盟链与Polkadot链混合链实现方法 | |
CN109285066A (zh) | 一种基于银行业务流的智能合约生成与执行的方法 | |
CN113360951A (zh) | 一种基于分区式区块链的电子证据保全方法 | |
Suliyanti et al. | Evaluation of hash rate-based double-spending based on proof-of-work blockchain | |
CN112767141A (zh) | 基于区块链的债务催收方法、系统、设备、介质和产品 | |
Youssef et al. | A resilient micro-payment infrastructure: an approach based on blockchain technology | |
CN111460492A (zh) | 一种基于区块链的数据隐私管理系统及其实现方法 | |
CN109767222A (zh) | 基于区块链的航班延误险投保方法及系统 | |
TWI737522B (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 |