本申请要求在2018年8月28日提交中国专利局、申请号为201810986825.3、发明名称为“区块链标准应用模型及其应用方法”的中国专利申请的优先权,其全部内容通过引用结合在本申请中。
发明内容
本申请提供一种区块链公链的维护方法及装置,可用于解决在现有技术中无论是采用以以太坊为代表的公链维护方式,还是以EOS为代表的公链维护方式,都无法兼顾公链的效率和安全性两个方面的问题。
第一方面,本申请提供一种区块链公链的维护方法,所述方法包括:
每经过符合预设条件的时间间隔,按照预定规则在公链节点中选取公链维护者节点,所述公链维护者节点的数量小于所述公链的节点数量;
由选取出的所述公链维护者节点维护所述公链的交易、智能合约相关的公链事务。
可选地,所述按照预定规则在公链节点中选取公链维护者节点,包括:
获取每个候选节点的参选信息,所述参选信息包括节点标识,参选数据和抵押凭证,所述节点标识用于唯一指示一个候选节点,所述抵押凭证表示所述候选节点支付的证通数量,所述参选数据为用于提高所述公链维护者节点选取随机性的随机数;
根据所述候选节点的参选数据,在所述候选节点中确定所述公链维护者节点;
记录选取出的公链维护者节点的节点标识和抵押凭证。
可选地,所述根据所述候选节点的参选数据,在所述候选节点中确定所述公链维护者节点,包括:
将所述候选节点分为k组候选节点,每组包括M个候选节点;
确定所述每个候选节点的参选数据在各自对应的一组候选节点中的离均差;
根据所述离均差的大小,将每组候选节点各自的节点由大到小排序;
选取所述每组候选节点中第
个候选节点为所述公链维护者节点,其中,k'为一组候选节点在所述k组候选节点中的序号。
可选地,所述预设条件包括所述时间间隔的时长大于选取所述公链维护者节点所需的时长,以及小于攻破所述公链维护者节点所需的时长。
可选地,所述预定规则包括:A.所述公链中的节点均为所述候选节点;或者,B.所述公链中满足参选条件的节点为所述候选节点,所述参选条件包括节点维护公链事务所要满足的条件。
第二方面,本申请提供一种区块链公链的维护装置,所述装置包括:
节点选取模块,用于每经过符合预设条件的时间间隔,按照预定规则在公链节点中选取公链维护者节点,所述公链维护者节点的数量小于所述公链的节点数量;
公链维护模块,用于通过选取出的所述公链维护者节点维护所述公链的交易、智能合约相关的公链事务。
第三方面,本申请提供一种区块链公链的节点。该节点包括上述方面所述的区块链公链维护装置,用于实现如上述方面所述的区块链公链的维护方法。
第四方面,本申请提供一种区块链公链。该公链包括至少两个上述方面所述的节点。
第五方面,本申请提供一种计算机存储介质,用于储存计算机软件指令或智能合约,所述计算机软件指令或智能合约由节点加载并执行实现上述方面所述的区块链公链的维护方法。
本申请提供的方案,每隔预设条件的时间间隔,在公链的节点中选取公链维护者节点,由选取出的公链维护者节点维护公链。由于按照特定条件的时间间隔周期性地选取符合规则的公链维护者节点,使得充当维护者的节点处于动态改变中,不再由固定的节点充当公链的维护者节点,降低了公链被攻破的可能性,能够提高公链的安全性;而且,公链维护者节点是公链中的部分节点,避免了公链维护的全网操作,因此能够提高公链运行的效率。由于本申请兼顾了公链的效率和安全性两个方面,使得公链能够处理高并发交易。
具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
本申请实施例提供的方法,各步骤的执行主体可以是公链中的节点,也可以是部署在节点上的智能合约。智能合约是指区块链中一段可执行的程序代码。上述公链中的节点包括终端和服务器。终端可以是手机、平板电脑、电子书阅读器、多媒体播放设备、可穿戴设备、膝上型便携计算机等电子设备。公链节点也可以是虚拟节点。需要说明的是,由于区块链公链包括多个节点,各步骤的执行主体可以是同一节点,也可以是不同节点。
在本申请提供的方法中,周期性地在公链节点中选取公链维护者节点,再由选取出的公链维护者节点维护公链。例如,维护公链的交易和智能合约等相关公链事务。在确保公链的安全性的同时,能够提高公链运行的效率,兼顾了公链的效率和安全性。其具体的实施过程请参见图2。
步骤S201,周期性地在公链中选取公链维护者节点。
维护公链需要确定负责维护的节点。为了避免全网节点参与公链维护,使得高并发交易难以得到及时的、有效的处理,公链中的全网节点,或者有资格的选取节点周期性地选取公链维护者节点。由选取出来的公链维护者节点维护公链。其中,公链维护者节点的数量小于公链的节点数量,以避免因公链中的每一个节点都参与公链维护而导致公链运行的效率过低的问题。
开始选取时,负责选取的节点触发选取智能合约。选取智能合约是用于选取公链维护者节点的智能合约。其中,有资格的选取节点是当前时刻的公链维护者节点。并且,一次选取可以由多个选取节点各自同时进行选取,以最先完成的选取节点的选取结果为最终结果。
为了周期性地选取公链维护者节点,选取节点每隔符合预设条件的时间间隔进行一次选取。预设条件包括:时间间隔的时长大于选取公链维护者节点所需的时长,以及小于攻破公链维护者节点所需的时长。选取公链维护者节点所需的时长是指选取节点完成一次选取所需的时长。例如,选取节点完成一次选取最快需要5分钟。那么,当选取的时间间隔小于5分钟时,第一次选取尚未完成,选取节点就已经开始第二次选取,导致无法顺利选出公链维护者节点。因此,为了确保在一次时间间隔内能够完成选取,时间间隔的时长需要大于选取公链维护者节点所需的时长。攻破公链维护者节点所需的时长可以根据公链节点所使用的加解密算法暴力破解时间确定,也可以根据公链节点被攻击的历史记录确定。例如,历史记录显示公链节点被攻破的最短时长是30分钟,最长时长是40分钟,平均时长是36分钟。那么,时间间隔的时长若大于40分钟,则公链维护者节点遭受攻击时被攻破的可能性较高;若时间间隔的时长若小于30分钟,则公链维护者节点遭受攻击时被攻破的可能性较低。因此,为了避免因时间间隔过长、选取频率过低,导致公链维护者节点被攻破,时间间隔的时长需要小于攻破公链维护者节点所需的时长。
在一种可能的实施方式中,符合预设条件的时间间隔的时长为5至30分钟。其中,时间间隔的时长可以为一百个记账周期。该记账周期是指生成一个区块的时间。例如,记账周期的时长为10秒,则时间间隔的时长为1000秒。
在选取时,选取节点按照预定规则选取公链维护者节点。该预定规则可以根据实际经验设定,可以规定参与选取的候选节点所要满足的条件,也可以规定具体的选取方式,还可以规定候选节点的数量。
首先,对于参与选取的节点。预定规则可以包括:公链的节点均为候选节点参与选取;或者,公链中满足参选条件的节点为候选节点参与选取。第一种情况,公链节点均为候选节点参与选取,可以确保公链中的所有节点都能参与公链维护者节点的选取,以获取维护公链的权利,保证了选取的公平性。例如,公链有10个节点,则10个节点都可以参与选取。第二种情况,公链中满足参选条件的节点为候选节点参与选取。其中,参选条件至少包括以下内容:节点的数据完整,节点的资源充足,以及节点有超过预设数量的证通。其中,节点的数据完整是指节点具有全量数据。节点资源充足是指节点的运算资源满足维护公链的要求,例如中央处理器(Central Processing Unit,CPU)的运算频率,内存大小和磁盘存储空间等。通过参选条件对候选节点进行限制,避免不具备公链维护能力的节点参与选取。参选条件还可以包括:候选节点为非公链维护者节点。只有非公链维护者节点可以成为候选节点,避免由一节点连续充当公链维护者节点,并且能够确保公链中的其它节点也有机会担任公链维护者节点。示例性地,公链有10个节点,需选取2个公链维护者节点。在当前时刻,由节点A和节点B充当公链维护者节点,则选取时,节点A和节点B不能成为候选节点。选取节点在剩余的8个节点中选取公链维护者节点。
其次,对于选取方式,预定规则可以包括:在候选节点中随机选取;或者,根据候选节点的安全性能选取;或者,根据候选节点的信用记录选取等等。其中,在候选节点中随机选取的方式是为了确保选取的公平性。例如,在10个候选节点中随机选取公链维护者节点,每一个候选节点被选中的概率相同,从而能够保证选取的公平性。根据候选节点的安全性能选取的方式能够选出安全性能高的公链维护者节点,降低公链维护者节点被攻破的可能性,从而提高公链的安全性。例如,在3个候选节点中选取一个公链维护者节点,根据历史记录,3个节点被攻破的次数分别为0次、1次和4次。那么,被攻破的次数为0次的候选节点的安全性能最高,被选为公链维护者节点。根据候选节点的信用记录选取,以避免选取出具有不良信用记录的公链维护者节点。
此外,预设规则还可以包括对候选节点数量的规定、公链维护者节点数量的规定等等。本申请实施例在此不一一进行列举。
因此,每经过符合预设条件的时间间隔,公链中负责维护的节点都会发生变化,并不是由固定的节点维护公链。并且,每次由公链中部分节点担任公链维护者节点维护公链。示例性地,如图3所示,公链101中当前时刻由节点102和节点103维护公链。经过符合预设条件的时间间隔后,重新选取公链维护者节点,由节点104和节点105进行维护。选取后,节点102和节点103不再维护公链。
步骤S202,公链维护者节点维护公链。
在选取公链维护者节点后,被选取出的公链维护者节点在下一次选取前,维护公链。公链的维护是指对公链的区块链进行维护,包括维护公链的交易、智能合约等相关公链事务。
通过图2所示的方法,每隔符合预设条件的时间间隔,在公链的节点中选取公链维护者节点,由选取出的公链维护者节点维护公链。由于按照特定条件的时间间隔周期性地选取符合规则的公链维护者节点,使得充当维护者的节点处于动态改变中,不再由固定的节点充当公链的维护者节点,降低了公链被攻破的可能性,能够提高公链的安全性;而且,公链维护者节点是公链中的部分节点,避免了公链维护的全网操作,因此能够提高公链运行的效率。由于本申请兼顾了公链的效率和安全性两个方面,使得公链能够处理高并发交易。
选取节点选取公链维护者节点时,为了保证选取的公平性,需要随机选取公链维护者节点。通过随机选取,在保证选取的公平性的同时,进一步降低节点被攻破的可能性,提高公链的安全性。其具体实现过程参见图4。
步骤S401,获取每个候选节点的参选信息。
当公链中的节点参与公链维护者节点的选取时,通过触发选取智能合约来登记自身的参选信息。选取节点通过选取智能合约获取每个候选节点的参选信息。其中,参选条件包括:节点的数据完整,节点的资源充足,以及节点有超过预设数量的证通。参选信息包括节点标识,参选数据和抵押凭证。节点标识用于唯一指示一个候选节点,例如节点的哈希(Hash)地址。抵押凭证用于指示候选节点支付的证通数量。该参选数据为用于随机选取公链维护者节点的随机数,以提高公链维护者节点选取的随机性。
在一种可能的实施方式中,当上述时间间隔的时长为一百个记账周期时,在时间间隔的前九十九个记账周期内,公链中符合参选条件的节点通过公链中的选取智能合约来进行登记。选取节点在最后一个记账周期内,获取到每个候选节点的参选信息,并在后续步骤中选取公链维护者节点。
步骤S402,根据候选节点的参选数据,在候选节点中随机选取公链维护者节点。
候选节点是符合上述参选条件的节点,因此,候选节点中的每一个节点都满足充当公链维护者节点的要求。由于每一个候选节点的参选数据是一随机数,因此,根据候选节点的参选数据可以随机地选取公链维护者节点,从而达到随机选取的目的。
选取节点将候选节点分为k组,每组包括M个候选节点。分组后,选取节点根据如下关系式计算每个候选节点的参选数据在各自对应的一组节点中的离均差:
其中,ΔR为候选节点的参选数据在对应的一组节点中的离均差,R表示候选节点的参选数据,
表示该组候选节点的参选数据的平均值。选取节点再将每组候选节点各自的节点按照离均差的大小,由大到小排序。排序后,选取每组候选节点中第
个候选节点为公链维护者节点,得到k个公链维护者节点。其中,k'为一组候选节点在k组候选节点中的序号。
在另一实施例中,当侯选节点中有当前时刻的公链维护者节点时,将当前时刻的公链维护者节点归为第k+1组候选节点。对于一组候选节点,当
大于M时,选取第k+1组候选节点中的第
个候选节点为公链维护者节点。
示例性地,一次选取中,有15个候选节点,且候选节点中不包括当前时刻的公链维护者节点。将15个候选节点分为5组,每组包括3个候选节点。计算每个候选节点的参选数据在各自对应的一组节点中的离均差,再根据离均差将每组候选节点由大到小排序。在第一组候选节点中,三个候选节点为:节点A,节点B和节点C,其参选数据分别为30,50和52,该组候选节点参选数据的平均值为44,则三个候选节点的离均差为14,6和8。将三个节点根据离均差由大到小排序后的结果为:节点A、节点C、节点B。该组候选节点为第一组候选节点,因此该组候选节点的序号为1。将该组的序号1除以组中的节点数量,再向上取整,得到整数1。因此,对于第一组候选节点,最终选取排序后的第一个节点为公链维护者节点,即选取节点A为公链维护者节点。相应地,第二组和第三组候选节点也选取排序后的第一个节点为公链维护者节点,第四组和第五组候选节点选取排序后的第二个节点为公链维护者节点。
在一种可能的实施方式中,k的取值范围为
其中,n表示候选节点的数量。示例性地,1000个节点参与公链维护者节点的选取,则最终选定10个候选节点为公链维护者节点。
通过图4所示的方法,在选取公链维护者节点时,选取节点利用参选数据这一随机数在候选节点中随机选取。由于公链维护者节点是随机选取的,保证了公链维护者节点选取的公平性,进一步降低节点被攻破的可能性,从而提高公链的安全性。
公链维护者节点对区块链进行维护需要节点对公链中发生的交易进行记账,即将发生的交易打包生成区块添加至区块链中。并且,在公链中只有公链维护者节点能够对公链中发生的交易进行记录。其具体过程参见图5。
步骤S501,将交易信息写入第一区块。
由于在公链中,只有公链维护者节点能够记录公链的交易。因此,当公链维护者节点本身即为进行交易的交易节点时,公链维护者节点直接获取到交易信息。若交易节点不是公链维护者节点,则该交易节点在公链中广播交易信息。当在公链的节点需要传输信息时,公链的节点通过向相邻节点广播的方式传输信息,进而将该信息广播至公链的整个网络。因此,通过向相邻节点广播的方式,交易节点能够将交易信息在公链中传输,使得公链维护者节点接收到交易信息。
示例性地,如图6所示,节点601为进行交易的交易节点。节点601向其相邻的节点602和节点603广播交易信息。节点602和节点603都不是公链维护者节点,则节点602和节点603继续向相邻的节点广播。与节点603相邻的节点604为公链维护者节点,则节点604接收到节点601的交易信息后,将交易信息写入第一区块。
在另一示例性实施例中,因为公链维护者节点的个数是有限的,所以公链维护者节点彼此之间组建一个临时的同步网络。当其中一个公链维护者节点在接收到新的交易时,可以通过该网络向其他公链维护者节点同步,以避免网络拥塞。
当一个公链维护者节点接收到交易信息时,该公链维护者节点将交易信息写入第一区块,并添加至公链区块链中。其中,第一区块是该公链维护者节点生成的最新的区块。在生成第一区块时,公链维护者节点将交易信息写入第一区块。第一区块可以包括多个交易信息,不同的交易信息指示公链中不同的交易。示例性地,如图7所示,区块链701中包括了100个区块,其中,第100个区块702是公链维护者节点生成的,区块702中包括了交易信息703和交易信息704。交易信息703指示了用户A向用户B支付了100美元的一笔交易。交易信息704指示了用户B向用户A支付了700人民币的一笔交易
此外,当公链维护者节点接收到交易信息时,若该公链维护者节点存储的区块链中已经记录了该交易信息,和/或,该交易信息指示的交易为非法交易,则该公链维护者节点不会将该交易信息写入第一区块,同时,也不会继续广播该交易信息。
在本申请实施例中,是由公链节点中的部分节点充当公链维护者节点,记录公链的交易。避免公链中的所有节点都对公链的交易进行记录,从而提高公链运行的效率。
需要说明的是,区块链各个区块中记录的交易信息不仅表示各节点实际进行的交易,例如支付交易和兑换交易,还表示区块链公链中发生的事件。区块链公链中发生的事件也以交易信息的形式记录在区块中,例如公链维护者节点的选取结果。当交易信息指示公链维护者节点的选取结果时,交易信息中包括选取出的公链维护者节点的节点标识和抵押凭证,并由当前时刻的公链维护者节点,将选取出的公链维护者节点的节点标识和抵押凭证写入第一区块中。
步骤S502,广播包括第一区块的区块链。
公链维护者节点生成第一区块后,在公链中广播包括第一区块的区块链,使得公链中的其它节点接收到该区块链,进而在所有节点中同步第一区块。公链维护者节点可以向其相邻节点广播区块链,再由接收到该区块链的节点继续向周围广播,以使得该区块链广播至公链中的所有节点。
步骤S503,检测接收的区块链的区块数量是否大于本地区块链的区块数量。
公链节点维护的是同一个区块链,但是,每个节点都各自存储有一个区块链即各节点的本地区块链。由于各节点的运算能力不同、获取交易信息的时间不同与公链维护者节点的距离不同等因素,对于不同节点,存在本地区块链不同的情况。例如,节点A和节点B均为公链维护者节点,两个节点存储的本地区块链为相同的、包括100个区块的区块链。此时,公链中发生了一笔交易,节点A先获取到该交易的交易信息并生成了新的区块添加至自己存储的区块链中,此时,节点A的本地区块链是包括101个区块的区块链,而节点B的本地区块链仍然是包括100个区块的区块链,两者并不相同。因此,当公链维护者节点广播包括第一区块的区块链后,接收到该区块链的节点检测该区块链的区块数量是否大于本地区块链的区块数量。
若接收到的区块链的区块数量大于本地区块链的区块数量,则存储接收到的区块链;若接收到的区块链的区块数量不大于本地区块链的区块数量,则丢弃接收到的区块链。接收到的区块链的区块数量大于本地区块链的区块数量,则说明相较于本地区块链,接收到的区块链的实效性更高。因此,接收到区块链的节点存储该区块链,作为该节点的本地区块链,并且,该节点向相邻节点广播该区块链;接收到的区块链的区块数量不大于本地区块链的区块数量,则说明相较于本地区块链,该区块链的实效性更低。因此,接收到区块链的节点丢弃该区块链,保留本地区块链,并且,不再向相邻节点广播该区块链。
广播包括第一区块的区块链,以及对该区块链的检测实际是公链节点对公链维护者节点生成第一区块、记录交易这一工作的认证过程。若公链的所有节点都存储了第一区块,则表示公链维护者节点生成第一区块、记录交易得到了公链节点的认可。公链维护者节点可以获取相应的奖励,例如奖励证通。因此,公链维护者节点在生成第一区块后,需要在公链中广播包括第一区块的区块链。
下述为本申请装置实施例,可以用于执行本申请方法实施例。对于本申请装置实施例中未披露的细节,请参照本申请方法实施例。
图8是根据一示例性实施例示出的一种区块链公链的维护装置的框图。该装置具有实现上述方法示例的功能,所述功能可以由硬件实现,也可以由硬件执行相应的软件实现。该装置可以包括:节点选取模块801和公链维护模块802。
节点选取模块801,用于每经过符合预设条件的时间间隔,按照预定规则在公链节点中选取公链维护者节点,所述公链维护者节点的数量小于所述公链的节点数量。
公链维护模块802,用于通过选取出的所述公链维护者节点维护所述公链的交易、智能合约相关的公链事务。
本申请实施例提供的装置,每隔预设条件的时间间隔,在公链的节点中选取公链维护者节点,由选取出的公链维护者节点维护公链。由于按照特定条件的时间间隔周期性地选取符合规则的公链维护者节点,使得充当维护者的节点处于动态改变中,不再由固定的节点充当公链的维护者节点,降低了公链被攻破的可能性,能够提高公链的安全性;而且,公链维护者节点是公链中的部分节点,避免了公链维护的全网操作,因此能够提高公链运行的效率,兼顾了公链的效率和安全性两个方面。
可选地,所述节点选取模块801,包括:
信息获取单元,用于获取每个候选节点的参选信息,所述参选信息包括节点标识,参选数据和抵押凭证,所述节点标识用于唯一指示一个候选节点,所述抵押凭证表示所述候选节点支付的证通数量,所述参选数据为用于提高所述公链维护者节点选取随机性的随机数;节点确定单元,用于根据所述候选节点的参选数据,在所述候选节点中确定所述公链维护者节点;区块生成单元,用于记录选取出的公链维护者节点的节点标识和抵押凭证。
可选地,所述节点确定单元,具体用于:将所述候选节点分为k组候选节点,每组包括M个候选节点;确定所述每个候选节点的参选数据在各自对应的一组候选节点中的离均差;根据所述离均差的大小,将每组候选节点各自的节点由大到小排序;选取所述每组候选节点中第
个候选节点为所述公链维护者节点,其中,k'为一组候选节点在所述k组候选节点中的序号。
可选地,所述k的取值为
其中,n表示所述候选节点的数量。
可选地,所述预设条件包括所述时间间隔的时长大于选取所述公链维护者节点所需的时长,以及小于攻破所述公链维护者节点所需的时长。
可选地,所述预定规则包括:A.所述公链中的节点均为所述候选节点;或者,B.所述公链中满足参选条件的节点为所述候选节点,所述参选条件包括节点维护公链事务所要满足的条件。
本申请一示例性实施例提供一种区块链公链的节点。该节点可以是物理节点,例如终端、服务器,还可以是虚拟节点。该节点用于实现上述方法实施例所述的区块链公链的维护方法。
本申请一示例性实施例提供一种区块链公链,该公链包括至少两个用于实现上述方法实施例所述的区块链公链的维护方法的节点。
本申请提供的方案,每隔预设条件的时间间隔,在公链的节点中选取公链维护者节点,由选取出的公链维护者节点维护公链。由于按照特定条件的时间间隔周期性地选取符合规则的公链维护者节点,使得充当维护者的节点处于动态改变中,不再由固定的节点充当公链的维护者节点,降低了公链被攻破的可能性,能够提高公链的安全性;而且,公链维护者节点是公链中的部分节点,避免了公链维护的全网操作,因此能够提高公链运行的效率,兼顾了公链的效率和安全性。
在示例性实施例中,还提供了一种计算机可读存储介质,所述存储介质中存储有计算机程序或智能合约,所述计算机程序或智能合约被节点加载并执行以实现上述实施例提供的区块链公链的维护方法。可选地,上述计算机可读存储介质可以是只读存储记忆体(Read-OnlyMemory,ROM)、随机存储记忆体(Random Access Memory,RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
本领域的技术人员可以清楚地了解到本申请实施例中的技术可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请实施例中的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。