用于挖矿的哈希搜索方法、挖矿机及区块链系统转让专利

申请号 : CN201811012239.5

文献号 : CN109087105A

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李成龙蒋义新刘强

申请人 : 深圳付贝科技有限公司

摘要 :

本发明涉及区块链技术领域,特别是涉及一种用于挖矿的哈希搜索方法、挖矿机及区块链系统。方法包括:接收代理节点发送的挖矿任务请求,其中,挖矿任务请求携带有搜索编号;根据挖矿任务请求,在随机数的搜索空间中搜索出与所述搜索编号对应的待验证哈希值,任意两个随机数的搜索空间之间皆存在相同搜索编号,相同搜索编号对应的待验证哈希值皆不同;向代理节点上传与搜索编号对应的待验证哈希值,以使代理节点根据待验证哈希值,验证当前区块。由于相同搜索编号对应的待验证哈希值皆不同,因此,代理节点可以避免重复进行同一验证工作,从而相对地节省能源消耗。

权利要求 :

1.一种用于挖矿的哈希搜索方法,应用于矿工节点,其特征在于,所述方法包括:接收代理节点发送的挖矿任务请求,其中,所述挖矿任务请求携带有搜索编号;

根据所述挖矿任务请求,在随机数的搜索空间中搜索出与所述搜索编号对应的待验证哈希值,其中,任意两个随机数的搜索空间之间皆存在相同搜索编号,相同搜索编号对应的待验证哈希值皆不同;

向所述代理节点上传与所述搜索编号对应的待验证哈希值,以使所述代理节点根据所述待验证哈希值,验证当前区块。

2.根据权利要求1所述的方法,其特征在于,每个所述矿工节点皆对应有矿工钱包地址,并且,每个所述矿工钱包地址皆不同;

所述方法还包括:

确定每个待验证哈希值对应的哈希种子,其中,任意两个待验证哈希值对应的哈希种子皆不同,每个所述哈希种子包括至少由矿工钱包地址与随机数组合成的部分数值;

根据每个所述哈希种子,生成所述随机数的待验证哈希值;

为每个所述待验证哈希值匹配对应的搜索编号,以生成所述随机数的搜索空间。

3.根据权利要求2所述的方法,其特征在于,所述随机数的取值范围为0-264。

4.根据权利要求2所述的方法,其特征在于,所述根据每个所述哈希种子,生成所述随机数的待验证哈希值,包括:按照以下组合关系:Hm-2Hm-3Hm-4......H2H1H0Z,组合出第m个哈希种子,其中,m为正整数,Hm-1为第m个哈希值,Z为第1个哈希种子,Z由矿工钱包地址与随机数组合成的;

将所述哈希种子作哈希运算,生成哈希值Hm-1;

将任意两个哈希值组合成所述随机数的待验证哈希值。

5.根据权利要求4所述的方法,其特征在于,所述按照以下组合关系:Hm-2Hm-3Hm-

4......H2H1H0Z,组合出第m个哈希种子,包括:判断Hm-2Hm-3Hm-4......H2H1H0Z的数据位数是否大于预设位数阈值;

若大于,选择在Hm-2Hm-3Hm-4......H2H1H0Z中排序在最前方的预设位数的数据作为第m个哈希种子;

若小于,选择Hm-2Hm-3Hm-4......H2H1H0Z作为第m个哈希种子。

6.根据权利要求4所述的方法,其特征在于,所述将任意两个哈希值组合成所述随机数的待验证哈希值,包括:按照以下组合关系:

[H0Hm-1,H2Hm-3,H4Hm-5,......Hm-6H5,Hm-4H3,Hm-2H1],组合每两个待验证哈希值,以形成所述随机数的待验证哈希值,其中,m为偶数。

7.根据权利要求2所述的方法,其特征在于,所述方法还包括:从各个随机数的搜索空间遍历出相同搜索编号对应的待验证哈希值;

将相同搜索编号对应的待验证哈希值及随机数聚类成所述相同搜索编号的搜索文件。

8.一种非暂态计算机可读存储介质,其特征在于,所述非暂态计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使矿工节点执行如权利要求1至7任一项所述的用于挖矿的哈希搜索方法。

9.一种挖矿机,其特征在于,包括:

至少一个处理器;以及

与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够用于执行如权利要求1至7任一项所述的用于挖矿的哈希搜索方法。

10.一种区块链系统,其特征在于,包括:

代理节点;

矿工节点,所述矿工节点与所述代理节点通讯;

其中,所述矿工节点包括:

至少一个处理器;以及

与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够用于执行如权利要求1至7任一项所述的用于挖矿的哈希搜索方法。

说明书 :

用于挖矿的哈希搜索方法、挖矿机及区块链系统

技术领域

[0001] 本发明涉及区块链技术领域,特别是涉及一种用于挖矿的哈希搜索方法、挖矿机及区块链系统。

背景技术

[0002] 一些区块链系统支持工作量证明机制((Proof of Work,POW),根据工作量证明机制,各个矿工节点独立完成工作量证明计算,当找到满足预设条件的随机数时,便获得打包记账的权利。
[0003] 发明人在实现本发明的过程中,发现传统技术至少存在以下问题:由于各个矿工节点独立完成工作量证明,因此各个矿工节点容易重复计算同一工作量,从而造成能源浪费。

发明内容

[0004] 本发明实施例一个目的旨在提供一种用于挖矿的哈希搜索方法及装置、挖矿机及区块链系统,其能够节约能源。
[0005] 为解决上述技术问题,本发明实施例提供以下技术方案:
[0006] 在第一方面,本发明实施例提供一种用于挖矿的哈希搜索方法,应用于矿工节点,所述方法包括:
[0007] 接收代理节点发送的挖矿任务请求,其中,所述挖矿任务请求携带有搜索编号;
[0008] 根据所述挖矿任务请求,在随机数的搜索空间中搜索出与所述搜索编号对应的待验证哈希值,其中,任意两个随机数的搜索空间之间皆存在相同搜索编号,相同搜索编号对应的待验证哈希值皆不同;
[0009] 向所述代理节点上传与所述搜索编号对应的待验证哈希值,以使所述代理节点根据所述待验证哈希值,验证当前区块。
[0010] 可选地,每个所述矿工节点皆对应有矿工钱包地址,并且,每个所述矿工钱包地址皆不同;
[0011] 所述方法还包括:
[0012] 确定每个待验证哈希值对应的哈希种子,其中,任意两个待验证哈希值对应的哈希种子皆不同,每个所述哈希种子包括至少由矿工钱包地址与随机数组合成的部分数值;
[0013] 根据每个所述哈希种子,生成所述随机数的待验证哈希值;
[0014] 为每个所述待验证哈希值匹配对应的搜索编号,以生成所述随机数的搜索空间。
[0015] 可选地,所述随机数的取值范围为0-264。
[0016] 可选地,所述根据每个所述哈希种子,生成所述随机数的待验证哈希值,包括:
[0017] 按照以下组合关系:Hm-2Hm-3Hm-4......H2H1H0Z,组合出第m个哈希种子,其中,m为正整数,Hm-1为第m个哈希值,Z为第1个哈希种子,Z由矿工钱包地址与随机数组合成的;
[0018] 将所述哈希种子作哈希运算,生成哈希值Hm-1;
[0019] 将任意两个哈希值组合成所述随机数的待验证哈希值。
[0020] 可选地,所述按照以下组合关系:Hm-2Hm-3Hm-4......H2H1H0Z,组合出第m个哈希种子,包括:
[0021] 判断Hm-2Hm-3Hm-4......H2H1H0Z的数据位数是否大于预设位数阈值;
[0022] 若大于,选择在Hm-2Hm-3Hm-4......H2H1H0Z中排序在最前方的预设位数的数据作为第m个哈希种子;
[0023] 若小于,选择Hm-2Hm-3Hm-4......H2H1H0Z作为第m个哈希种子。
[0024] 可选地,所述将任意两个哈希值组合成所述随机数的待验证哈希值,包括:
[0025] 按照以下组合关系:
[0026] [H0Hm-1,H2Hm-3,H4Hm-5,......Hm-6H5,Hm-4H3,Hm-2H1],
[0027] 组合每两个待验证哈希值,以形成所述随机数的待验证哈希值,其中,m为偶数。
[0028] 可选地,所述方法还包括:
[0029] 从各个随机数的搜索空间遍历出相同搜索编号对应的待验证哈希值;
[0030] 将相同搜索编号对应的待验证哈希值及随机数聚类成所述相同搜索编号的搜索文件。
[0031] 在第二方面,本发明实施例提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使矿工节点执行任一项所述的用于挖矿的哈希搜索方法。
[0032] 在第三方面,本发明实施例提供一种挖矿机,包括:
[0033] 至少一个处理器;以及
[0034] 与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够用于执行任一项所述的用于挖矿的哈希搜索方法。
[0035] 在第四方面,本发明实施例提供一种区块链系统,包括:
[0036] 代理节点;
[0037] 矿工节点,所述矿工节点与所述代理节点通讯;
[0038] 其中,所述矿工节点包括:
[0039] 至少一个处理器;以及
[0040] 与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够用于执行任一项所述的用于挖矿的哈希搜索方法。
[0041] 在本发明各个实施例提供的用于挖矿的哈希搜索方法、挖矿机及区块链系统中,首先,接收代理节点发送的挖矿任务请求,其中,挖矿任务请求携带有搜索编号。其次,根据所述挖矿任务请求,在随机数的搜索空间中搜索出与搜索编号对应的待验证哈希值,其中,任意两个随机数的搜索空间之间皆存在相同搜索编号,相同搜索编号对应的待验证哈希值皆不同。再次,向代理节点上传与所述搜索编号对应的待验证哈希值,以使代理节点根据所述待验证哈希值,验证当前区块。一方面,由于矿工节点预存有各个随机数的待验证哈希值,代理节点无需耗费大量算力计算各个随机数的待验证哈希值,只需要较低的算力便可以完成挖矿工作,因此,其能够满足算力低的设备参与挖矿,提高普适性,使得挖矿工作变得更加公平。另一方面,由于相同搜索编号对应的待验证哈希值皆不同,因此,代理节点可以避免重复进行同一验证工作,从而相对地节省能源消耗。

附图说明

[0042] 一个或多个实施例通过与之对应的附图中的图片进行示例性说明,这些示例性说明并不构成对实施例的限定,附图中具有相同参考数字标号的元件表示为类似的元件,除非有特别申明,附图中的图不构成比例限制。
[0043] 图1是传统虚拟加密货币系统的架构示意图;
[0044] 图2是本发明实施例提供一种区块链系统的架构示意图;
[0045] 图3是本发明实施例提供一种用于挖矿的哈希搜索方法的流程示意图;
[0046] 图4a是本发明实施例提供的第1个哈希种子的哈希运算过程示意图;
[0047] 图4b是本发明实施例提供的第2个哈希种子的哈希运算过程示意图;
[0048] 图4c是本发明实施例提供的第3个哈希种子的哈希运算过程示意图;
[0049] 图4d是本发明实施例提供的随机数A的搜索空间示意图;
[0050] 图4e是本发明实施例提供的搜索编号为Scoop#403的搜索文件示意图;
[0051] 图4f是本发明实施例提供的搜索编号为Scoop#404的搜索文件示意图;
[0052] 图4g是本发明实施例提供的将32 byte生成签名与8 byte区块高度信息组合在一起做哈希运算示意图;
[0053] 图4h是本发明实施例提供的将32 byte GenHash进行modulo 4096计算,得到指定搜索编号示意图;
[0054] 图4i是本发明实施例提供的将64byte的待验证哈希值与32 byte的生成签名组合在一起进行哈希运算,得到哈希结果示意图;
[0055] 图5是本发明实施例提供一种挖矿机的结构示意图。

具体实施方式

[0056] 为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用于解释本发明,并不用于限定本发明。
[0057] 区块链系统具有去中心化特点,其不同于传统中心化服务器,由于区块链系统没有中心化节点,其需要共识机制维持正常运作,例如,共识机制包括POW算法,基于POW算法,区块链系统能够实现区块的共识验证。
[0058] POW算法是一种应对拒绝服务攻击和其他服务滥用的一种策略,一个工作量证明是指满足特定条件的一个数据计算,其产生正确结果比较困难,但是验证正确结果比较简单。正确结果的产生只能通过不断的枚举随机数来进行验证试错,从而最终找到正确答案。其中,该验证试错是采用哈希(hash)算法来实现。哈希算法是一种单向散列算法,计算出哈希值的过程比较简单,但是要根据固定哈希值逆向获取原始数据,则只能通过枚举试错来进行。
[0059] 在一些虚拟加密货币系统中,在进行随机散列运算时,POW算法引入了对某一个特定值的扫描工作,比方说,在SHA-256下,随机散列值以一个或多个0开始,随着0的数量逐步增加,遍历出与此情况下的随机散列值对应的解所需要的工作量将呈指数增长,而对结果进行检验则仅需要一次随机散列运算。
[0060] 一些虚拟加密货币系统的区块中增补了一个随机数(Nonce),该随机数需要满足使得给定区块的哈希值出现所需的规定数量个0的条件。由于哈希运算的不可逆特性,只能通过反复尝试以遍历出满足条件的随机数。
[0061] 只要区块链节点遍历出满足条件的随机数,该区块链节点就完成了工作量的证明,从而获得了区块的打包记账权。
[0062] 下面,本发明实施例详细阐述传统虚拟加密货币系统的共识验证流程。如下所述:
[0063] 1、区块链节点收集并选择交易信息,并计算交易列表的默克尔(Merkle)根哈希值。
[0064] 2、区块链节点构造区块头,其中,区块头包括版本、上一区块头的哈希值、默克尔根哈希值、时间戳(timestamp)、难度值(difficulty)及随机数。
[0065] 3、区块链节点计算构造的区块头哈希值,检查区块头哈希值是否小于或等于目标值。若是,则完成工作量证明,将打包的区块广播全网,区块链中的其它区块链节点将会检测该区块的合法性。若否,则返回第2步,继续进行工作量计算。
[0066] 执行上述流程的区块链节点亦可以称为矿工节点。
[0067] 首先,由于全网中的每个区块链节点需要通过工作量证明以获取区块的打包记账权,因此使用POW共识机制时,每个矿工节点都需要不断地生成随机数以试错检验,以此遍历出合适的随机数,该过程需要大量的电力支撑,从而造成大量的能源浪费。
[0068] 其次,由于各个矿工节点之间独立进行工作量证明计算,其工作空间存在较大的重复,从而导致在难度值相同的情况下,矿工节点完成工作量所需的时间长,出块效率低下。
[0069] 实际上,随着虚拟加密货币系统中的加密货币价格的攀升,人们通过改进挖矿设备,以实现更高效率的出块,例如,从使用CPU(Central Processing Unit,中央处理器)挖矿到使用GPU(Graphics Processing Unit,图形处理器)挖矿,再到FPGA(Field Programmable Gate Array,现场可编程逻辑门阵列)挖矿,最后出现的定制化的ASIC(Application Specific Integrated Circuit,专用集成电路)挖矿。
[0070] 挖矿算力每年是呈指数级增长的,由于一些虚拟加密货币系统会根据算力动态调整挖矿难度值,因此,随着算力增长,其难度值也以指数级增长。此类增长使得独立矿工挖矿已无法获得收益,因此便有了矿池的出现。矿池通过一定的协议将矿工节点结合在一起,集中算力进行工作量计算,获取奖励后将奖励分给矿池中工作的矿工。
[0071] 矿池存在矿池管理员,矿池管理员负责协调管理所有矿工工作。因此,矿池管理员需要自定义相关协议,与矿工进行通信。与此同时,矿工管理员负责打包交易,为矿工分配相关工作量,因此,系统相关的奖励也会全部发送给矿池管理员,而矿池管理员来负责为矿工发送相关工作量奖励。由于矿池汇集了大量算力,其相对于独立矿工来讲,也更容易完成工作量证明而获取系统奖励,这使得矿工的收益会变得相对比较稳定,而矿池管理员可以获得其一定的矿池管理回报。
[0072] 下面,本发明实施例结合图1详细阐述传统虚拟加密货币系统的共识验证流程。如下所述:
[0073] 1、矿工客户端11向管理服务器12发送共识指令,其中,共识指令包含矿工客户端11的身份信息、操作信息及相关参数信息,参数信息指定矿工客户端的软件名称和版本号。
[0074] 2、管理服务器12收到此信息后,会对信息进行确认,确认成功后,返回相关信息。
[0075] 3、矿工客户端11发送认证信息,认证信息包含矿工客户端11的钱包地址。
[0076] 4、管理服务器12验证认证信息的合法性,验证通过后,管理服务器12返回验证通过信息。
[0077] 5、管理服务器12发送难度设置信息给矿工客户端11。
[0078] 6、管理服务器12通过发送要进行工作量证明的区块信息给矿工客户端11。
[0079] 7、矿工客户端11共识验证区块,当矿工客户端11遍历出满足条件的随机数时,将该随机数发送给管理服务器12。
[0080] 8、管理服务器12验证矿工客户端11提供的随机数,并将验证结果发送给矿工客户端11。
[0081] 如前所述,在线下形成的矿池中,所有奖励都分配给矿池管理者,为其工作的矿工奖励由矿池管理者分配,因此矿池管理者拥有绝对的权利。并且,线下矿池的形成,需要定义相关通信协议和机制,比较繁琐。
[0082] 基于此,本发明实施例提供一种区块链系统。请参阅图2,区块链系统200包括代理节点21、矿工节点22及钱包节点23,代理节点21、矿工节点22及钱包节点23任意两个节点之间支持点对点通讯(Point to point communication,P2P),并且,代理节点21、矿工节点22及钱包节点23皆可以作为区块链系统中的区块链节点,各自在区块链系统中承担不同的责任,共同维护区块链系统的工作、稳定及安全。
[0083] 代理节点21主要用于新区块的生成与广播,例如,代理节点21需要对矿工节点身份认证、下发挖矿任务、接收并验证矿工节点上传的待验证哈希值、记录矿工节点工作量、打包并生成区块、根据工作量给矿工节点分配新币奖励以及将新生成的区块广播至区块链系统中。
[0084] 矿工节点22需要在代理节点21成功注册,方可挖矿。其中,注册流程如下:
[0085] 1、矿工节点22向代理节点21提交注册信息。
[0086] 其中,该注册信息包括以下一种或多种信息:挖矿机的设备序列号SN、用户信息及矿工钱包地址。
[0087] 2、代理节点21对注册信息进行检查。
[0088] 检查过程包括:检测SN编号格式是否正确、SN是否存在数据库中、SN是否已被绑定了其他用户等等。
[0089] 3、代理节点21记录注册信息。
[0090] 4、代理节点21将注册结果返回给矿工节点22。
[0091] 5、代理节点21将新的注册数据广播至区块链系统200。
[0092] 6、区块链系统200中所有钱包节点23存储并同步最新矿工节点的注册数据。
[0093] 在本实施例中,矿工节点22在开始第一次挖矿之前,需要进行如下的初始化操作:
[0094] 1、注册。获取与设备序列号SN一一对应的矿工钱包地址。
[0095] 2、根据自身设备存储容量大小,开辟一个专门的存储空间,用于存储挖矿时待用的待验证哈希值。
[0096] 3、选择合适专用存储空间。
[0097] 一般的,存储空间不能过小,也不宜超过总存储空间的80%。
[0098] 4、根据自身的矿工钱包地址,生成大量待验证哈希值,并将全部待验证哈希值存储于专用存储空间,等待挖矿时使用。
[0099] 在本实施例中,每次开始一个新区块的挖矿动作时,矿工节点22按照代理节点21的指示,将预先存储的待验证哈希值逐一上报给代理节点21,直至新区块生成。代理节点21根据矿工节点22上传的待验证哈希值的数据量统计工作量,并根据工作量给矿工节点22分配新币奖励。
[0100] 钱包节点23用于记录、查询账户余额、交易记录,发起新的转账,并在区块链系统中同步、验证区块数据。
[0101] 可以理解的是,上述代理节点21、矿工节点22及钱包节点23可以是一个物理服务器或者多个物理服务器虚拟而成的一个逻辑服务器。服务器也可以是多个可互联通信的服务器组成的服务器群,且各个功能模块可分别分布在服务器群中的各个服务器上。
[0102] 可以理解的是,上述代理节点21、矿工节点22及钱包节点23所负责的区块链工作并非是固定的,上述实施例只是展示区块链系统200中一些应用场景,其还可以存在其它应用场景。
[0103] 可以理解的是,代理节点21或矿工节点22皆可以被当做挖矿机,其中,挖矿机可以包括POS机(point of sales terminal)移动终端、智能手机、计算机、掌上电脑(Personal Digital Assistant,PDA)、平板电脑、智能手表或台式计算机等等。
[0104] 请参阅图3,图3是本发明实施例提供一种用于挖矿的哈希搜索方法的流程示意图。如图3所示,用于挖矿的哈希搜索方法300包括:
[0105] S31、接收代理节点发送的挖矿任务请求,其中,挖矿任务请求携带有搜索编号;
[0106] S32、根据所述挖矿任务请求,在随机数的搜索空间中搜索出与搜索编号对应的待验证哈希值,其中,任意两个随机数的搜索空间之间皆存在相同搜索编号,相同搜索编号对应的待验证哈希值皆不同。
[0107] S33、向代理节点上传与搜索编号对应的待验证哈希值,以使代理节点根据待验证哈希值,验证当前区块。
[0108] 在本实施例中,代理节点21向各个矿工节点发送挖矿任务请求之前,矿工节点22向代理节点21发送挖矿请求,该挖矿请求携带有矿工身份信息,其中,该矿工身份信息包括挖矿机的设备序列号SN或者区块链系统为每个矿工节点分配具有唯一的身份标识信息,矿工身份信息由字符串构成,亦可以为其它表示方式。
[0109] 代理节点21检测矿工身份信息是否匹配预设身份信息,若未匹配,禁止矿工节点22加入矿工列表;若匹配,向矿工节点22发送挖矿任务请求。当每个矿工节点22成功注册后,代理节点21将成功注册的矿工节点22的矿工身份信息等等信息记录于矿工列表上,代理节点21运行并维护着矿工列表。当区块链系统中矿工节点出现变化时,代理节点21重新更新矿工列表。
[0110] 预设身份信息由区块链系统的管理者自定义,其可以为设备序列号SN或者区块链系统为每个矿工节点分配具有唯一的身份标识信息。举例而言,预设身份信息为POS机序列号SN。当手机作为矿工节点需要加入区块链网络时,由于手机的设备序列号不属于POS机序列号SN,于是,该手机未能够成功加入区块链网络中作为矿工节点。
[0111] 在本实施例中,通过验证矿工节点的合法性,有利于方便管理区块链系统。
[0112] 当矿工节点22通过代理节点的验证后,代理节点21向各个矿工节点22发送挖矿任务请求,其中,该挖矿任务请求携带有搜索编号。
[0113] 矿工节点22接收挖矿任务请求,根据挖矿任务请求在随机数(nonce)的搜索空间中搜索出与搜索编号对应的待验证哈希值。随机数的搜索空间由基于一个随机数生成的全部待验证哈希值构成,待验证哈希值可以由多字节数据组合而成,例如,待验证哈希值可以为32字节(byte)哈希值,亦可以为64字节哈希值,其中,64字节哈希值可以由2个32字节哈希值组合而成。
[0114] 当搜索出后,矿工节点22向代理节点22上传与搜索编号对应的待验证哈希值。其中,任意两个随机数的搜索空间之间皆存在相同搜索编号,相同搜索编号对应的待验证哈希值皆不同。
[0115] 在本实施例中,验证当前区块的验证方式多种多样,举例而言:代理节点21验证当前区块时,首先,将待验证哈希值与生成签名作哈希运算,得到期望哈希值。由于生成签名在区块链系统中具有唯一性与一致性,原本待验证哈希值的随机性比较高,后续再利用生成签名与待验证哈希值作哈希运算,从而再次提高随机性,降低代理节点21作重复性验证工作的概率。其次,代理节点21判断期望哈希值是否小于或等于所述目标哈希值;若小于或等于,确定待验证哈希值对应的随机数为有效的,并打包区块;若大于,确定待验证哈希值对应的随机数为无效的。
[0116] 综上所述,一方面,由于相同搜索编号对应的待验证哈希值皆不同,因此,代理节点可以避免重复进行同一验证工作,从而相对地节省能源消耗。另一方面,由于矿工节点预存有各个随机数的待验证哈希值,代理节点无需耗费大量算力计算各个随机数的待验证哈希值,只需要较低的算力便可以完成挖矿工作,因此,其能够满足算力低的设备参与挖矿,提高普适性,使得挖矿工作变得更加公平。
[0117] 在一些实施例中,在验证通过当前区块后,代理节点21统计本次挖矿时,每个矿工节点22上传待验证哈希值的数量以及各个矿工节点上传待验证哈希值的总量。其次,代理节点21根据每个矿工节点上传待验证哈希值的数量与总量之间的比例关系,分配验证通过当前区块产生的奖励。通过此种方式,其能够稳定矿工节点22的收入,从而更好地维护好区块链系统的稳定与正常运行。
[0118] 在上述各个实施例中,随机数的取值范围为0-264之间的整数,所有待验证哈希值都是基于随机数生成的。每个随机数将生成256KB待验证哈希值,每个待验证哈希值在本地数据中是唯一存在。
[0119] 可以理解的是,用户设置的、并且用于存储待验证哈希值的矿工节点的存储空间大小决定能存储待验证哈希值的数量。
[0120] 在一些实施例中,每个随机数生成的数据可划分成预设数量的数据存储空间,预设数量的数据存储空间共同构成一个随机数的搜索空间。例如,每个随机数生成的数据划分成4096个数据存储空间,每个数据存储空间大小为64 byte,每个数据存储空间中的待验证哈希值由两个32byte哈希值组成。在本文中,每个数据存储空间称为一个scoop。每个scoop皆匹配有搜索编号,搜索编号的取值范围由用户自定义,例如,承接上例,搜索编号的取值范围为0-4095。
[0121] 因此,总体而言,一个随机数对应着N个不同待验证哈希值,N为正整数。承接上例,N为4096。
[0122] 搜索编号由将已知常数M作N的取模运算而得到的,M为正整数,亦即,将M进行modulo N的计算,以得到搜索编号。其中,已知常数M为将组合区块信息作哈希运算得到的,其中,组合区块信息由当前区块中区块头记录的区块信息与当前区块的区块高度信息组合成。
[0123] 在一些实施例中,哈希运算采用的哈希算法包括:SHA3、SHA1、SHA224、SHA256、SHA384或者SHA512。
[0124] 一般的,每个区块包括区块头与区块体,每个区块的区块头记录以下任一种或两种以上区块信息:
[0125] 1、随机数;
[0126] 2、难度值(Difficulty):难度值是用于调整区块生成速度,每24个区块会调整一次,确保区块按照平均5分钟一个区块的速度增长;
[0127] 3、目标哈希值(Base Target):目标哈希值是根据难度值计算得到的,用于检查区块中提交的随机数是否满足要求;
[0128] 4、目标值(Bits):将目标哈希值进行压缩成一个64位的整数类型进行存储;
[0129] 5、矿工钱包地址;
[0130] 6、生成签名(Generate Singature):将上一区块的生成签名与矿工钱包地址作哈希运算而得到的,用于挖矿过程中的计算;
[0131] 7、区块签名(Block Signature):代理节点使用自身私钥对当前区块的哈希内容作签名运算得到的,用于钱包节点验证区块是否由合法的代理节点创建的。
[0132] 如前所述,生成签名与当前区块的区块高度信息组合成组合区块信息,将组合区块信息作哈希运算得到已知常数M,例如,生成签名为32byte,区块高度信息为8 byte,组合区块信息为32byte,已知常数M为32byte。承上述例子,将32 byte的已知常数M进行modulo4096计算,得到指定的搜索编号,例如,得到的搜索编号为scoop11或scoop403等等。于是,如前所述,代理节点21向各个矿工节点发送挖矿任务请求,其中,该挖矿任务请求携带搜索编号scoop11,每个矿工节点在每个随机数的搜索空间都搜索出搜索编号为scoop11所对应的待验证哈希值,比如:对于矿工节点a,随机数A1的搜索空间中搜索编号为scoop11所对应的待验证哈希值为X1,随机数A2的搜索空间中搜索编号为scoop11所对应的待验证哈希值为X2,随机数A3的搜索空间中搜索编号为scoop11所对应的待验证哈希值为X3……。
对于矿工节点b,随机数B1的搜索空间中搜索编号为scoop11所对应的待验证哈希值为Y1,随机数B2的搜索空间中搜索编号为scoop11所对应的待验证哈希值为Y2,随机数B3的搜索空间中搜索编号为scoop11所对应的待验证哈希值为Y3……。
[0133] 如前所述,在挖矿时,每个随机数的搜索空间可以被预先生成的,其可以基于矿工钱包地址与随机数生成每个随机数的搜索空间。在一些实施例中,每个矿工节点皆对应有矿工钱包地址,并且,每个矿工钱包地址皆不同。因此,在生成每个随机数的搜索空间时,首先,矿工节点22确定每个待验证哈希值对应的哈希种子,其中,任意两个待验证哈希值对应的哈希种子皆不同,每个哈希种子包括至少由矿工钱包地址与随机数组合成的部分数值。其次,矿工节点22根据每个哈希种子,生成随机数的待验证哈希值。如前所述,每个随机数生成的数据划分成4096个数据存储空间,每个数据存储空间大小为64 byte,每个数据存储空间中的待验证哈希值由两个32byte哈希值组成,因此,每个随机数可对应8192个32byte哈希值。若每个待验证哈希值为32byte时,一共有8192个待验证哈希值。若每个待验证哈希值为64byte时,一共有4096个待验证哈希值。再次,矿工节点22为每个待验证哈希值匹配对应的搜索编号,以生成随机数的搜索空间,例如,为第一个待验证哈希值匹配搜索编号为Scoop0,为第二个待验证哈希值匹配搜索编号为Scoop1,第三个待验证哈希值匹配搜索编号为Scoop2……。以此类推,得到4096个或8192个待验证哈希值。
[0134] 矿工节点22根据每个哈希种子生成随机数的待验证哈希值时,首先,其按照以下组合关系:Hm-2Hm-3Hm-4......H2H1H0Z,组合出第m个哈希种子,其中,m为正整数,Hm-1为第m个哈希值,Z为第1个哈希种子,Z由矿工钱包地址与随机数组合成的。其次,矿工节点22将哈希种子作哈希运算,生成哈希值Hm-1。再次,矿工节点22将任意两个哈希值组合成所述随机数的待验证哈希值。
[0135] 举例而言,请参阅图4a,第1个哈希种子由矿工钱包地址+随机数(Z)组合成,将第1个哈希种子Z作哈希运算,得到第1个哈希值H0,记第1个哈希值H0为Hash#8191。
[0136] 请参阅图4b,第2个哈希种子由第1个哈希值+矿工钱包地址+随机数(H0+Z)组合成,将第2个哈希种子作哈希运算,得到第2个哈希值H1,记第2个哈希值H1为Hash#8190。
[0137] 请参阅图4c,第3个哈希种子由第2个哈希值+第1个哈希值+矿工钱包地址+随机数(H1+H0+Z)组合成,将第3个哈希种子作哈希运算,得到第3个哈希值H2,记第3个哈希值H2为Hash#8189。
[0138] ……
[0139] 依次类推,得到预设数量的哈希值。
[0140] 如前所述,若每个待验证哈希值为32byte时,一共有8192个待验证哈希值。若每个待验证哈希值为64byte时,一共有4096个待验证哈希值。当待验证哈希值为64byte时,其有助于提高公平性,相对地削弱算力强的挖矿机所带来的绝对优势,相对地提高算力较弱的挖矿机参与挖矿的机会。因为:64byte的待验证哈希值相对于32byte的待验证哈希值,在后续共识验证时,提高数据计算量的复杂度。由于现有挖矿机的算力越来越强,若采用32byte的待验证哈希值,算力强的挖矿机能够实时性地挖矿,而算力弱的挖矿机诸如POS机,却未能够快速地挖矿而被超越或淘汰。然而,当采用64 byte的待验证哈希值,算力强的挖矿机实时性不能有效地满足要求,于是,在挖矿之前,算力强与算力弱的挖矿机都预先构建随机数的搜索空间,此时,由于还没开始挖矿,算力强与算力弱的挖矿机还没体现出明显差别。等挖矿时,由于随机数的搜索空间中待验证哈希值都已准备好,算力强与算力弱的挖矿机都能够达到差别不明显地挖矿效率,从而相对地,算力弱的挖矿机都能够参加挖矿。
[0141] 如前所述,下一哈希种子是不断在上一哈希种子的基础上组合上一待验证哈希值,于是,哈希种子的数据量越滚越大。当哈希种子的数据量过大,其会降低矿工节点的计算效率。为了提高矿工节点的计算效率,在一些实施例中,矿工节点22按照以下组合关系:
[0142] Hm-2Hm-3Hm-4......H2H1H0Z,组合出第m个哈希种子的过程中,矿工节点22判断Hm-2Hm-3Hm-4......H2H1H0Z的数据位数是否大于预设位数阈值;若大于,选择在Hm-2Hm-
3Hm-4......H2H1H0Z中排序在最前方的预设位数的数据作为第m个哈希种子;若小于,选择Hm-2Hm-3Hm-4......H2H1H0Z作为第m个哈希种子。
[0143] 举例而言:当哈希种子的数据位数已经超过了4096 byte时,后面步骤计算时所采用的哈希种子是选择在Hm-2Hm-3Hm-4......H2H1H0Z中排序在最前方的预设位数的数据,其中,该预设位数为4096 byte。因此,每个哈希种子的最大数据位数是不会超过4096 byte。
[0144] 在一些实施例中,矿工节点22将任意两个哈希值组合成随机数的待验证哈希值时,按照以下组合关系:
[0145] [H0Hm-1,H2Hm-3,H4Hm-5,......Hm-6H5,Hm-4H3,Hm-2H1],
[0146] 组合每两个待验证哈希值,以形成随机数的待验证哈希值,其中,m为偶数。并且,矿工节点22为每个待验证哈希值匹配对应的搜索编号,以生成随机数的搜索空间。
[0147] 举例而言:请参阅图4d,矿工节点22将“Hash#0”与“Hash#8191”组合成第一个待验证哈希值并为第一个待验证哈希值匹配搜索编号Scoop0,将“Hash#2”与“Hash#8189”组合成第二个待验证哈希值并为第二个待验证哈希值匹配搜索编号Scoop1,将“Hash#4”与“Hash#8187”组合成第三个待验证哈希值并为第三个待验证哈希值匹配搜索编号Scoop2……,将“Hash#8188”与“Hash#3”组合成第4095个待验证哈希值并为第4095个待验证哈希值匹配搜索编号Scoop4094,将“Hash#8190”与“Hash#1”组合成第4096个待验证哈希值并为第4096个待验证哈希值匹配搜索编号Scoop4095……,以此类推,在此不赘述。
[0148] 在上述各个实施例中,当矿工节点22为每个待验证哈希值匹配对应的搜索编号后,挖矿时,矿工节点22根据代理节点21下发的搜索编号,从各个随机数的搜索空间依次遍历出相同搜索编号对应的待验证哈希值,并将相同搜索编号对应的待验证哈希值上传至代理节点21。在该过程中,矿工节点22需要作遍历工作。
[0149] 在一些实施例中,为了提高矿工节点22遍历相同搜索编号对应的待验证哈希值的运算效率,首先,矿工节点22可以从各个随机数的搜索空间遍历出相同搜索编号对应的待验证哈希值。其次,矿工节点22将相同搜索编号对应的待验证哈希值及随机数聚类成相同搜索编号的搜索文件。后续,当代理节点21向矿工节点22下发搜索编号时,矿工节点22根据该搜索编号,搜索与该搜索编号对应的搜索文件,再把搜索文件上传给代理节点21。因此,其通过优化待验证哈希值与随机数的数据存储格式,挖矿时,矿工节点22能够通过搜索文件快速向代理节点21上传待验证哈希值与随机数,从而提高矿工节点22挖矿时的运算效率。
[0150] 每个搜索文件名放入命名格式为:
[0151] WalletAddress_ScoopNumber_StartingNonceNumber_NumberOfNonces。
[0152] 请参阅图4e,搜索文件的搜索编号为Scoop#403,该搜索文件包括各个随机数对应相同搜索编号的待验证哈希值。
[0153] 请参阅图4f,搜索文件的搜索编号为Scoop#404。
[0154] 为了更加详细阐述本发明实施例,下文总结本发明实施例提供的挖矿主要流程。可以理解的是,下文的挖矿主要流程并不用于限制本发明的保护范围,只是用于辅助说明本发明实施例。如下所述:
[0155] 1、矿工节点22向代理节点21发送挖矿请求。
[0156] 挖矿请求用于指示加入挖矿。挖矿请求携带有挖矿机的设备序列号与矿工钱包地址。
[0157] 2、代理节点21验证挖矿请求,并向矿工节点22下发验证结果。
[0158] 验证通过后,代理节点21会自动将矿工节点22加入到当前矿池中。
[0159] 3、当开始一个新的区块挖矿时,代理节点21先将交易记录打包成区块,并根据区块数据计算必要的参数,必要的参数包括:目标哈希值与搜索编号。
[0160] 此处,代理节点21计算搜索编号时,具体如下过程:
[0161] a、代理节点21将32 byte生成签名与8 byte区块高度信息组合在一起做哈希运算,得到32 byte GenHash,如图4g所示。
[0162] b、将32 byte GenHash进行modulo 4096计算,得到指定搜索编号,如图4h所示。
[0163] 4、代理节点21将新区块基本信息以及指定搜索编号组装成挖矿任务请求,广播给矿池中所有矿工节点22。
[0164] 5、矿工根据指定搜索编号,将搜索空间中存储的待验证哈希值(由两个32 byte组合成的64 byte数据)与随机数组合成对,逐一上传给代理节点21。
[0165] 6、代理节点21每收到一个矿工节点22上传的待验证哈希值,会先对矿工节点22的工作量(本次挖矿上传待验证哈希值的数量)进行累加,并对待验证哈希值进行验证。
[0166] 此处,验证过程如下:
[0167] a、代理节点21收到64byte的待验证哈希值后,将64byte的待验证哈希值与32 byte的生成签名组合在一起进行哈希运算,得到哈希结果(Target),如图4i所示。
[0168] b、将哈希结果(Target)与目标哈希值(Base Target)进行比较,如果哈希结果小于目标哈希值,表示上传的随机数有效,代理节点21停止这一轮挖矿,并开始打包区块。
[0169] 在验证区块时,代理节点21还会完成下述流程:
[0170] c、检查引用的上一个区块是否存在且有效。
[0171] d、检查区块的时间戳是否晚于上一个区块的时间戳,且早于未来的2小时。
[0172] e、检查区块中交易列表下面的每一笔交易是否有效。
[0173] f、使用固定的公钥来检查区块的签名是否有效。
[0174] g、检查共识机制是否有效。
[0175] 7、若验证通过后,代理节点21会先通知所有矿工节点22停止上传数据,然后补全区块信息,包括:钱包地址、Nonce、Timestamp、区块签名等。
[0176] 8、代理节点21将生成好的区块数据广播到区块链系统中。
[0177] 9、代理节点21根据总工作量以及每位矿工节点的工作量,按比例分配新区块获得的奖励。
[0178] 10、代理节点21开始准备下一个区块的挖矿。
[0179] 在上述各个实施例中,如前所述,代理节点21验证当前区块的方式多种多样,并且,一个随机数对应着N个不同待验证哈希值,搜索编号由将已知常数M作N的取模运算而得到的。与上述各个实施例所述的验证方式不同点在于:已知常数M为将组合区块信息作哈希运算得到的,其中,组合区块信息由当前区块中区块头记录的区块信息、当前区块的区块高度信息及开始挖矿时间组合成的。相对于上述各个实施例中的组合区块信息,本实施例的组合区块信息新增了开始挖矿时间。
[0180] 代理节点21根据待验证哈希值,验证当前区块的过程中,当未能够验证通过当前区块时,区块链系统是未能够顺利出块的。为了保证区块链系统能够顺利出块,其通过利用开始挖矿时间的可变性,当按照当前指定搜索编号未能够输出区块时,其放弃当前区块,并重新挖矿,以此重新确定开始挖矿时间。由于指定搜索编号与组合区块信息关联,组合区块信息由区块信息、当前区块的区块高度信息及开始挖矿时间组合成的,代理节点21重新挖矿时,区块信息、当前区块的区块高度信息皆与上次挖矿失败的区块相同,但是两者的开始挖矿时间是不同的,于是,重新挖矿时,代理节点21计算出的指定搜索编号与上一次挖矿失败的指定搜索编号是不同的,通过此种方式,其能够保证顺利出块。
[0181] 举例而言:代理节点21根据待验证哈希值,验证当前区块的过程中,首先,代理节点21将待验证哈希值与生成签名作哈希运算,得到期望哈希值。其次,代理节点21判断期望哈希值是否小于或等于目标哈希值;若小于或等于,确定待验证哈希值对应的随机数为有效的,并打包区块;若大于,确定待验证哈希值对应的随机数为无效的,重新挖矿,并且更新开始挖矿时间,以使重新组合出新的组合区块信息。于是,代理节点21将新的组合区块信息作哈希运算得到新的已知常数M,再将新的已知常数M作N的取模运算而得到的新指定搜索编号。
[0182] 总体而言,通过此种方式,其能够保证区块链系统顺利出块。
[0183] 与上述各个实施例验证方式的不同点在于:代理节点21根据待验证哈希值,验证当前区块的过程中,首先,代理节点21将每个待验证哈希值除以目标哈希值,得到与每个待验证哈希值对应的截止时间(deadline)。其次,代理节点21获取上一区块的生成时间与当前挖矿时间之间的当前时间差值。再次,代理节点21根据截止时间与时间差值,共识验证当前区块,举例而言,代理节点21从与每个待验证哈希值对应的若干个截止时间中遍历出最小截止时间,判断当前时间差值是否大于最小截止时间;若否,确定待验证哈希值对应的随机数为无效的,并且等待验证当前区块,直至当前时间差值大于最小截止时间时,打包当前区块;若是,确定待验证哈希值对应的随机数为有效的,并打包当前区块。
[0184] 举例而言:待验证哈希值A对应截止时间t1,待验证哈希值b对应截止时间t2,待验证哈希值c对应截止时间t3,其中,t1小于t2,t2小于t3。此时,代理节点21记录待验证哈希值A对应的截止时间为最小截止时间t1。此处,上一区块为排序在当前挖矿对应区块高度的前面,上一区块已被共识,假设当前挖矿对应的区块的区块高度为第10000个,那么上一区块的区块高度为第9999个。令上一区块的生成时间为ts。代理节点每次挖矿时,皆检测当前挖矿时间,其中,当前挖矿时间是可变的。令当前挖矿时间为tp1,则当前时间差值Δt0=tp1-ts。若Δt0小于t1,代理节点21切换至等待模式,亦即等待验证当前区块,等待的时间一直持续到新当前挖矿时间tp2与ts的新当前时间差值Δt1大于t1,才验证通过并打包当前区块。若Δt0大于t1,验证通过并打包当前区块。
[0185] 在一些实施例中,代理节点继续更新最小截止时间,例如,随着验证过程的进行,若代理节点找到相比于已记录最小截止时间更小的截止时间时,代理节点更新并预存该相比于已记录最小截止时间更小的截止时间并将其作为新的最小截止时间。具体的,代理节点在验证待验证哈希值过程中,首先,代理节点验证当前哈希计算出的截止时间是否满足出块要求,若满足,立即出块;若未满足,则判断当前哈希计算出的截止时间与预存的最小截止时间两者的大小,若当前哈希计算出的截止时间小于预存的最小截止时间,则代理节点继续更新并预存该相比于已记录最小截止时间更小的截止时间并将其作为新的最小截止时间。
[0186] 其次,代理节点判断当前时间差值是否大于预存的最小截止时间,若大于,则出块;若小于,则继续验证后面的待验证哈希值。当所有待验证哈希值验证完后,区块链系统还未能够出块,则区块链系统切入等待模式,等当前时间差值大于最小截止时间后,开始打包出块。
[0187] 通过此种方式,一方面,其能够保证区块链系统顺利出块。另一方面,其能够调整区块链系统出块的速度。
[0188] 在上述各个实施例中,每个区块的区块体皆包括交易信息,每笔交易皆存储于交易池中。各个区块链节点皆监听交易池中每笔交易的交易时间是否处于有效期限内,其中,每笔交易皆指向有转账发起方的钱包地址,若否,向转账发起方的钱包地址撤回交易;若是,将交易打包成当前区块,例如,矿工节点可以根据交易的手续费高低,选择多笔手续费高的交易进行打包。
[0189] 相对于传统技术,当用户的交易手续费比较低时,由于经济原因,矿工节点往往选择交易手续费高的交易进行打包,而不选择交易手续费比较低进行打包。因此,交易手续费比较低的交易会出现过长时间存放在交易池,造成交易效率低下。为此,本发明实施例通过为每笔交易设定有效期限,当交易的交易时间超过有效期限,自动撤回给转账发起方的钱包地址,从而降低交易失败的概率,并且降低交易池的存储负荷。
[0190] 需要说明的是,在上述各个实施例中,上述各步骤之间并不必然存在一定的先后顺序,本领域普通技术人员,根据本发明实施例的描述可以理解,不同实施例中,上述各步骤可以有不同的执行顺序,亦即,可以并行执行,亦可以交换执行等等。
[0191] 作为本发明实施例的另一方面,本发明实施例提供一种挖矿机,该挖矿机可以为代理节点,亦可以为矿工节点。请参阅图5,该挖矿机500包括:一个或多个处理器51以及存储器52。其中,图5中以一个处理器51为例。
[0192] 处理器51和存储器52可以通过总线或者其他方式连接,图5中以通过总线连接为例。
[0193] 存储器52作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如本发明实施例中的挖矿身份认证方法对应的程序指令/模块。处理器51通过运行存储在存储器52中的非易失性软件程序、指令以及模块,从而执行上述各个实施例的用于挖矿的哈希搜索方法。
[0194] 存储器52可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器52可选包括相对于处理器51远程设置的存储器,这些远程存储器可以通过网络连接至处理器51。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
[0195] 所述程序指令/模块存储在所述存储器52中,当被所述一个或者多个处理器51执行时,执行上述任意方法实施例中的用于挖矿的哈希搜索方法,例如,从而执行上述各个实施例的用于挖矿的哈希搜索方法。
[0196] 本发明实施例还提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使矿工节点执行如上任一项所述的用于挖矿的哈希搜索方法。
[0197] 本发明实施例提供了一种计算机程序产品,所述计算机程序产品包括存储在非易失性计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被矿工节点执行时,使所述矿工节点执行任一项所述的用于挖矿的哈希搜索方法。
[0198] 综上所述,一方面,由于相同搜索编号对应的待验证哈希值皆不同,因此,代理节点可以避免重复进行同一验证工作,从而相对地节省能源消耗。另一方面,由于矿工节点预存有各个随机数的待验证哈希值,代理节点无需耗费大量算力计算各个随机数的待验证哈希值,只需要较低的算力便可以完成挖矿工作,因此,其能够满足算力低的设备参与挖矿,提高普适性,使得挖矿工作变得更加公平。
[0199] 以上所描述的装置或设备实施例仅仅是示意性的,其中所述作为分离部件说明的单元模块可以是或者也可以不是物理上分开的,作为模块单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络模块单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
[0200] 通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
[0201] 最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;在本发明的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上所述的本发明的不同方面的许多其它变化,为了简明,它们没有在细节中提供;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。