工作量验证方法、装置、芯片控制器及存储介质与流程

文档序号:31868963发布日期:2022-10-21 17:58阅读:99来源:国知局
工作量验证方法、装置、芯片控制器及存储介质与流程

1.本技术属于区块链技术领域,具体涉及一种工作量验证方法、装置、芯片控制器及存储介质。


背景技术:

2.目前,区块链技术快速发展,并逐渐走进各个行业领域。区块链技术通过去中心化、去信任的方式,由密码学原理来保证已有数据不被更改,然后通过共识算法对新增数据达成共识。整个运行过程完全透明,而所有的数据信息也是公开的。这种结构保证了数据的完整性和安全性。
3.ethash算法是以太坊(ethereum)1.0工作量证明(proof-of-work,pow)共识算法,ethash算法很消耗显卡的显存,是内存困难算法(memory-hard)。由于memory-hard算法在运算过程中,算法需要重复从内存随机地提取数据进行运算,因此内存读取带宽成为memory-hard算法的性能瓶颈。而且,往往传统的芯片架构是以中心化内存存储为基础,因此在memory-hard算法通过分布式计算核心向中央存储器请求所需数据时往往会产生延迟,存储器和处理器之间的带宽成为芯片性能的瓶颈,使得memory-hard算法提取数据所需的运行周期不可预测,导致系统性能降低,从而降低了系统效率。


技术实现要素:

4.本技术实施例的目的是提供一种工作量验证方法、装置、芯片控制器及存储介质,能够解决在memory-hard算法通过分布式计算核心向中央存储器请求所需数据时产生延迟导致的系统性能降低,从而降低了系统效率的问题。
5.第一方面,本技术实施例提供了一种工作量验证方法,应用于芯片系统的芯片控制器,所述芯片控制器包括芯片,所述芯片包括:至少两个存储器,每个所述存储器与混和器通信连接,初始化器以及终止器与所述混和器通信连接;该方法包括:
6.通过所述初始化器生成第一数据集;
7.从与所述混和器连接的存储器中读取第二数据集,通过所述第二数据集对所述第一数据集执行更新过程;
8.在所述更新过程的次数小于或等于次数阈值时,利用更新后的第一数据集,进入所述从与所述混和器连接的存储器中读取第二数据集,通过所述第二数据集对所述第一数据集执行更新过程的步骤,直至所述更新过程的次数大于所述次数阈值,将更新后的第一数据集作为第三数据集;
9.通过所述终止器对所述第三数据集进行验证,并在所述第三数据集验证通过后,发放工作量证明算法奖励。
10.第二方面,本技术实施例提供了一种工作量验证装置,应用于芯片系统的芯片控制器,所述芯片控制器包括芯片,所述芯片包括:至少两个存储器,每个所述存储器与混和器通信连接,初始化器以及终止器与所述混和器通信连接;所述装置包括:
11.计算种子模块,用于通过所述初始化器生成第一数据集;
12.第一混合模块,用于从与所述混和器连接的存储器中读取第二数据集,通过所述第二数据集对所述第一数据集执行更新过程;
13.第二混合模块,用于在所述更新过程的次数小于或等于次数阈值时,利用更新后的第一数据集,进入所述从与所述混和器连接的存储器中读取第二数据集,通过所述第二数据集对所述第一数据集执行更新过程的步骤,直至所述更新过程的次数大于所述次数阈值,将更新后的第一数据集作为第三数据集;
14.压缩及判断模块,用于通过所述终止器对所述第三数据集进行验证,并在所述第三数据集验证通过后,发放工作量证明算法奖励。
15.第三方面,本技术实施例提供了一种芯片控制器,包括芯片,所述芯片包括:至少两个存储器,每个所述存储器与混和器通信连接,通讯器、初始化器以及终止器与所述混和器通信连接,所述芯片控制器用于控制所述芯片实现如第一方面所述的工作量验证方法。
16.第四方面,本技术实施例提供了一种可读存储介质,所述可读存储介质上存储程序或指令,所述程序或指令被处理器执行时实现如第一方面所述的工作量验证方法的步骤。
17.在本技术实施例中,通过设置芯片系统的芯片控制器所包括芯片包括有至少两个存储器,将用于工作量验证的内存密集型算法计算所使用的有向无环图数据分块存储在不同的存储器中,使得内存密集型算法中作为分布式计算核心的混合器可以从其连接的存储器中读取第二数据集对初始化器生成第一数据集执行更新过程,避免了内存密集型算法向同一中央存储器请求第二数据集时产生延迟,从而保证内存密集型算法的更新过程中,在更新过程的次数不满足次数阈值时,获取第二数据集所需的运行周期可预测,提高了芯片系统的芯片控制器在芯片使用内存密集型算法的性能,提升了芯片系统的芯片控制器在芯片的终止器通过第三数据集验证后获得工作量证明算法奖励的可能性。
附图说明
18.图1示出了现有技术中的ethash算法计算流程示意图;
19.图2示出了本发明实施例提供的一种工作量验证方法的步骤流程图;
20.图3示出了本发明实施例提供的一种芯片架构示意图;
21.图4示出了本发明实施例提供的ethash算法计算流程示意图;
22.图5示出了本发明实施例提供的另一种工作量验证方法的步骤流程图;
23.图6示出了本发明实施例提供的另一种工作量验证方法的步骤流程图;
24.图7示出了本发明实施例提供的另一种ethash算法计算流程示意图;
25.图8示出了本发明实施例提供的另一种ethash算法计算流程示意图;
26.图9示出了本发明实施例提供的另一种ethash算法计算流程示意图;
27.图10示出了本发明实施例提供的一种工作量验证装置的结构示意图。
具体实施方式
28.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚地描述,显然,所描述的实施例是本技术一部分实施例,而不是全部的实施例。基于本技术中的
实施例,本领域普通技术人员获得的所有其他实施例,都属于本技术保护的范围。
29.本技术的说明书和权利要求书中的术语“第一”、“第二”等是用于区别类似的对象,而不用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便本技术的实施例能够以除了在这里图示或描述的那些以外的顺序实施,且“第一”、“第二”等所区分的对象通常为一类,并不限定对象的个数,例如第一对象可以是一个,也可以是多个。此外,说明书以及权利要求中“和/或”表示所连接对象的至少其中之一,字符“/”,一般表示前后关联对象是一种“或”的关系。
30.下面结合附图,通过具体的实施例及其应用场景对本技术实施例提供的工作量验证方法、装置及芯片控制器进行详细地说明。
31.以太坊(ethereum)是一个开源的有智能合约功能的公共区块链平台,通过其专用加密货币以太币(ether,简称“eth”)提供去中心化的以太虚拟机(ethereum virtual machine)来处理点对点合约。ethash算法是以太坊1.0工作量证明(proof-of-work,pow)共识算法。
32.pow的本质是基于计算解决一个数学上困难的问题,解决问题关键点是除了暴力枚举,没有任何办法可以找到我们所需要的number used once或number once(简称nonce)值(nonce是一个只被使用一次的任意或非重复的随机数值),但对于验证输出的结果是非常简单容易的。经典的比特币pow的算法原理是对块(block)的头(header)加上循环更新的nonce去进行哈希(hash/hash)运算,运算的目标(target)是hash值的前n位为0。这个计算只能通过暴力枚举来进行,验证也很容易,只要使用最终的nonce代入header按照之前的算法验证即可。
33.以太坊采用的ethash算法与比特币不同,但基本过程类似,都是找到一个nonce值输入到算法中,得到的结果低于一个基于特定困难值的阈值。ethash算法是一种内存密集型(memory-hard function)算法,在运算过程中,算法需要重复从内存随机地提取数据进行运算,使内存带宽成为性能瓶颈,让多核并行处理的优势发挥不出来,降低定制化专用集成电路(application specific integrated circuit,asic)芯片的运算优势,使性能只与内存大小有关。这是反asic(asic-resistant)原理,目前抵制矿机的主要手段。
34.ethash算法路线具体为:
35.存在一个种子(seed),通过扫描有向无环图(directed acyclic graph,dag)先前块头来计算每个块的种子seed。
36.根据这个种子seed,可以计算一个16mb的伪随机缓存(cache),轻客户端存储这个缓存。
37.从这个缓存(cache)中,我们能够生成一个1gb的数据集,该数据集中的每一项都取决于缓存中的一小部分。完整客户端和矿工存储了这个数据集,数据集随着时间线性增长。
38.挖矿工作包含了抓取数据集的随机片以及运用哈希函数计算他们。校验工作能够在低内存的环境下完成,通过使用缓存再次生成所需的特性数据集的片段,所以你只需要存储缓存cache即可。
39.图1示出了现有技术中的ethash算法计算流程示意图。参见图1所示,ethash算法计算流程主要包括四个部分:
40.第一部分、计算种子(seed):
41.图1中header_hash是用于生成验证缓存和挖掘数据集的种子,长度为32字节。将nonce值填入种子(seed)的后8字节中去(nonce本身是64位,对应8字节大小),正好把hash和nonce完整的填满了40(8+32=40)字节的seed。
42.对seed采用sha3-512(keccak512)哈希运算得到521位(512位/8=64字节)的seed。
43.第二部分、混和(mix):
44.将64字节(bytes)的seed转为16个4bytes类型,复制2份作为seed_mix,再按照计算一个有向无环图(dag)的索引,根据索引从dag中获取数据,将获得的数据和seed进行fowler-noll-vo算法(简称fnv哈希算法,fnv_hash)作为新的seed;此步骤重复64次,每次得到2bytes;
45.其中,索引的计算过程为:
[0046][0047]
其中,0x01000193是fnv_hash算法的一个hash质数(prime number,又叫素数,只能被1和其本身整除),哈希算法会基于一个常数来做散列操作。0x01000193是fowler-noll-vo(fnv)针对32位(bit)数据的散列质数。
[0048]
第三部分、压缩(compress):
[0049]
对上步过程生成的128bytes(128bytes=64次*2bytes)结果进行mix,即对每4个4bytes采用fvn进行混和;最后有效数据只在前8个位置,后面的数据经过上面的循环混淆以后没有价值了,所以将mix的长度减到8,保留前8位有效数据;创建一个长度为32的字节(1字节是8位)数组digest;再把长度为8的mix(uint32型数组)直接转化成长度为32的字节digest中去。
[0050]
第四部分、计算结果(result)并判断结果:
[0051]
采用crypto.keccak256(append(seed,digest...)对seed和digest的组合进行keccak256哈希计算,得到结果(result)值。
[0052]
上述算法返回了一个digest和一个result两个值,将result值和target值进行比较,如result值小于target,则确定这是一个有效的哈希值,就可以给用户发放工作量证明算法奖励。
[0053]
由于memory-hard function算法的本质特性(在运算过程中,算法需要重复从内存随机地提取数据进行运算),因此内存读取带宽成为性能瓶颈。另外,由于传统架构以中心化内存存储为基础,因此分布式计算核心向中央存储器请求数据产生延迟,与算法中运算周期固定的哈希计算不同,提取数据所需的运行周期不可预测,因此造成系统性能降低。
[0054]
因此本技术提供了一种工作量验证方法、装置、芯片控制器及存储介质,让内存更接近计算资源。由移动数据变成移动计算节点,从而减少移动数据造成的延迟和缓解内存带宽瓶颈。
[0055]
图2示出了本发明实施例提供的一种工作量验证方法的步骤流程图,所述方法可以应用于芯片系统的芯片控制器,所述芯片控制器可以包括至少一个芯片,参见图3所示,每个所述芯片可以包括:至少两个存储器201(memory),每个所述存储器201(memory)与至少一个混和器202(mixer)通信连接,通讯器203(communicator)、初始化器204(initializer)以及终止器205(terminator)与所述混和器202(mixer)通信连接;所述方法可以包括:
[0056]
在本技术实施例中,芯片还可以称为系统级芯片、系统芯片、芯片系统或片上系统芯片等;初始化器可以是用于执行ethash算法计算流程第一部分计算种子(seed)的计算种子模块,也可以是用于执行其他内存密集型算法的计算种子模块;存储器可以是芯片上用于保存有向无环图(dag)一部分数据的内部存储器,所有存储器的容量总和可以大于或等于当前dag的大小;混和器可以是用于执行ethash算法计算流程第二部分混和(mix)的第一混合模块和第二混合模块,也可以是用于执行其他内存密集型算法的混合模块;终止器可以是用于执行ethash算法计算流程第三部分压缩(compress)和第四部分计算结果(result)并判断结果的压缩及判断模块,也可以是用于执行其他内存密集型算法的压缩及判断模块;通讯器可以是用于在不同芯片之间进行通信的通信模块,具体可以根据实际需求确定,此处不做限定。
[0057]
在本技术实施例中,如图3所示,混和器之间可以采用网状片上网络(network on chip,noc)206互连,相应地,混和器和初始化器之间、混和器和存储器之间、混和器和终止器之间以及混和器和通信器之间也可以采用网状片上网络206互连,具体可以根据实际需求确定,此处不做限定。
[0058]
步骤101、通过所述初始化器生成第一数据集。
[0059]
在本技术实施例中,初始化器生成第一数据集后可以是将第一数据集交给距离其最近的混和器(与该初始化器直接互连的混和器),也可以是将第一数据集交给目标状态的混和器(与该初始化器间接互连,且处于空闲状态、等待时间最短状态和正在使用状态中的一种或多种状态的混和器),具体可以根据实际需求确定,此处不做限定。
[0060]
在实际应用中,第一数据集可以是ethash算法或其他内存密集型算法的种子。
[0061]
步骤102、从与所述混和器连接的存储器中读取第二数据集,通过所述第二数据集
对所述第一数据集执行更新过程。
[0062]
在本技术实施例中,由于存储器与至少一个混和器通信连接,因此步骤102中的混和器可以是处于空闲状态的混和器,也可以是处于等待时间最短的混和器,也可以是目前正在使用中的混和器,具体可以根据实际需求确定,此处不做限定。
[0063]
在本技术实施例中,第二数据集可以是预设长度的dag数据,预设长度可以是用户基于实际经验进行设置,也可以是ethash算法或其他内存密集型算法默认的数值,具体可以根据实际需求确定,此处不做限定。
[0064]
在本技术实施例中,更新过程可以是ethash算法中的重复64次的更新过程,也可以是其他内存密集型算法中的更新过程,具体可以根据实际需求确定,此处不做限定。
[0065]
步骤103、在所述更新过程的次数小于或等于次数阈值时,利用更新后的第一数据集,进入所述从与所述混和器连接的存储器中读取第二数据集,通过所述第二数据集对所述第一数据集执行更新过程的步骤,直至所述更新过程的次数大于所述次数阈值,将更新后的第一数据集作为第三数据集。
[0066]
在本技术实施例中,次数阈值可以是用户基于实际经验进行设置,也可以是ethash算法或其他内存密集型算法默认的数值,具体可以根据实际需求确定,此处不做限定。
[0067]
步骤104、通过所述终止器对所述第三数据集进行验证,并在所述第三数据集验证通过后,发放工作量证明算法奖励。
[0068]
在本技术实施例中,验证过程可以是ethash算法默认的过程,也可以是其他内存密集型算法默认的过程,具体可以根据实际需求确定,此处不做限定。
[0069]
在本技术实施例中,终止器可以是距离混合器最近的终止器(与混合器通信时间最短的终止器),也可以是从所有终止器中随机选择一个终止器,具体可以根据实际需求确定,此处不做限定。
[0070]
在本技术实施例中,芯片系统的芯片控制器通过初始化器生成第一数据集,并将第一数据集交给与该初始化器直接互连的混和器;芯片控制器再从与混和器连接的存储器中读取第二数据集,通过第二数据集对混和器上的第一数据集数据执行更新过程;在更新过程的次数小于或等于次数阈值时,利用更新后的第一数据集,进入步骤102,直至更新过程的次数大于次数阈值,将更新后的第一数据集作为第三数据集,并将第三数据集交给与距离混合器最近的终止器;通过终止器对第三数据集进行验证,并在第三数据集验证通过后,给用户发放工作量证明算法奖励。
[0071]
示例性地,参见图4所示,在1个芯片中,每个存储器上可以连接4个混和器,1个混和器可以至少连接一个初始化器或者一个存储器或者一个终止器;芯片系统的芯片控制器通过1个芯片中的初始化器1节点计算生成第一数据集后,将第一数据集交给与初始化器1直接互连的混和器(1,1)节点;当芯片控制器计算得知存储器在m1节点,芯片控制器通过m1节点周边的4个混和器(3,2),(3,3),(4,2),(4,3)中的空闲节点(3,2),从m1节点中读取第二数据集对第一数据集数据执行更新过程;在更新过程的次数小于或等于次数阈值时,利用更新后的第一数据集计算下一个存储器的位置,再从下一个存储器中读取第二数据集对更新后的第一数据集执行更新过程,直至更新过程的次数大于次数阈值,将更新后的第一数据集作为第三数据集,并将第三数据集交给与距离混合器最近的终止器;通过终止器对
第三数据集进行压缩和计算结果并判断结果,以验证第三数据集,并在第三数据集验证通过后,给用户发放工作量证明算法奖励。
[0072]
本技术实施例提供的一种工作量验证方法,通过设置芯片系统的芯片控制器所包括芯片包括有至少两个存储器,将用于工作量验证的内存密集型算法计算所使用的有向无环图数据分块存储在不同的存储器中,使得内存密集型算法中作为分布式计算核心的混合器可以从其连接的存储器中读取第二数据集对初始化器生成第一数据集执行更新过程,提高了内存读取带宽,避免了内存密集型算法向同一中央存储器请求第二数据集时产生延迟,从而保证内存密集型算法的更新过程中,在更新过程的次数不满足次数阈值时,获取第二数据集所需的运行周期可预测,提高了芯片系统的芯片控制器在芯片使用内存密集型算法的计算性能,提升了芯片系统的芯片控制器在芯片的终止器通过第三数据集验证后发放工作量证明算法奖励的处理效率。
[0073]
图5示出了本发明实施例提供的另一种工作量验证方法的步骤流程图,所述方法可以应用于芯片系统的芯片控制器,所述芯片控制器可以包括至少一个芯片,参见图3所示,每个所述芯片可以包括:至少两个存储器(memory),每个所述存储器(memory)与至少一个混和器(mixer)通信连接,通讯器(communicator)、初始化器(initializer)以及终止器(terminator)与所述混和器(mixer)通信连接;所述方法可以包括:
[0074]
步骤201、通过所述初始化器,生成第一预设长度的头部哈希值,并将预设随机数值填入所述头部哈希值之后,得到第一数据集。
[0075]
在本技术实施例中,第一预设长度和预设随机数值可以是用户基于实际经验进行设置,也可以是ethash算法或其他内存密集型算法默认的数值,具体可以根据实际需求确定,此处不做限定。
[0076]
步骤202、通过第一预设哈希算法对所述第一数据集进行哈希计算,将哈希计算后的第一数据集发送给与所述初始化器连接的混和器。
[0077]
在本技术实施例中,第一预设哈希算法可以是keccak哈希算法,keccak哈希算法是一种被选定为sha-3标准的单向散列函数算法,keccak可以生成任意长度的散列值,但为了配合sha-2的散列值长度,sha-3标准中规定了sha3-224、sha3-256、sha3-384、sha3-512这4种版本,即第一预设哈希算法可以是keccak224,也可以是keccak256,也可以是keccak384,也可以是keccak512,具体可以根据实际需求确定,此处不做限定。
[0078]
在本技术实施例中,芯片系统的芯片控制器通过初始化器生成第一预设长度的头部哈希值,并将一个预设随机数值填入头部哈希值之后,得到第一数据集;芯片系统的芯片控制器再通过第一预设哈希算法对初始化器上的第一数据集进行哈希计算,将哈希计算后的第一数据集交给与该初始化器直接互连的混和器。
[0079]
示例性地,参见图4所示,在1个芯片中,每个存储器上可以连接4个混和器,1个混和器可以至少连接一个初始化器或者一个存储器或者一个终止器;第一预设长度可以取值为32字节,预设随机数值可以是密码学中的number used once或number once(简称nonce)值,即是一个只被使用一次的任意或非重复的随机数值,nonce本身是64位,对应8字节大小;芯片系统的芯片控制器通过1个芯片中的初始化器1节点生成32字节的头部哈希值(header_hash),并将nonce值填入header_hash的后8字节中,得到长度为40(32+8=40)字节的第一数据集;芯片系统的芯片控制器再通过keccak512(sha3-512)哈希算法对40字节
的第一数据集进行哈希计算,得到512位(512位=64字节)的哈希计算后的第一数据集,将64字节的哈希计算后的第一数据集交给与该初始化器直接互连的混和器。
[0080]
本技术实施例通过初始化器生成第一预设长度的头部哈希值,并将预设随机数值填入所述头部哈希值之后,可以得到用于生成验证缓存和挖掘数据集的第一数据集,通过第一预设哈希算法对所述第一数据集进行哈希计算,可以得到ethash算法或其他内存密集型算法的更新过程中需要的特定长度的哈希计算后的第一数据集,从而在初始化器将哈希计算后的第一数据集发送给与该初始化器连接的混和器后,ethash算法或其他内存密集型算法的更新过程可以在更新过程的次数不满足次数阈值时一直更新,直至更新过程的次数满足次数阈值,这样保证了芯片系统的芯片控制器在芯片使用内存密集型算法进行计算所得的数据的不可预测性,进而实现工作量证明算法奖励发放的公平性。
[0081]
步骤203、从所述混和器中获取第二预设长度的哈希第一数据集并执行复制操作,得到待更新的第一数据集;所述第二预设长度与所述次数阈值相关联。
[0082]
在本技术实施例中,由于ethash算法或其他内存密集型算法的更新过程需要达到的次数为预设的次数阈值,因此需要从混和器中获取与次数阈值的数值相等的第二预设长度的哈希第一数据集,即第二预设长度与次数阈值相关联往往是:第二预设长度的数值等于次数阈值的数值;进一步地哈希第一数据集使用sha3-224、sha3-256、sha3-384、sha3-512这4种版本中的哪一种作为第一预设哈希算法,也与预设的次数阈值相关。例如,预设的次数阈值为64时,需要从混和器中获取的哈希第一数据集长度为64字节,对应于512位,因此哈希第一数据集所使用的第一预设哈希算法应为sha3-512版本,即keccak512。
[0083]
在本技术实施例中,复制操作是为了将哈希第一数据集复制几份,以得到预设长度的用于计算索引或更新的待更新的第一数据集。
[0084]
步骤204、根据所述待更新的第一数据集和预设算法,通过所述混和器计算有向无环图的索引。
[0085]
在本技术实施例中,有向无环图中存储有ethash算法或其他内存密集型算法更新过程需要读取的数据,而通过混和器计算有向无环图的索引就可以确定更新待更新的第一数据集所需的数据所在的地址;预设算法可以是ethash算法中计算索引的算法,也可以是其他内存密集型算法中计算索引的算法,具体可以根据实际需求确定,此处不做限定。
[0086]
步骤205、根据所述索引查找存储第二数据集的目标存储器,并通过与所述目标存储器连接的混和器从所述目标存储器中读取所述第二数据集,对所述待更新的第一数据集执行更新过程。
[0087]
在本技术实施例中,芯片系统的芯片控制器首先从混和器中获取第二预设长度的哈希第一数据集,再对该第二预设长度的哈希第一数据集执行复制操作复制几份,得到预设长度的待更新的第一数据集;然后根据待更新的第一数据集和预设算法,通过该混和器计算有向无环图的索引,以根据该索引查找存储第二数据集的目标存储器;最后通过与该目标存储器连接的一个混和器从该目标存储器中读取该第二数据集,对待更新的第一数据集执行更新过程。
[0088]
示例性地,参见图4所示,在1个芯片中,每个存储器上可以连接4个混和器,1个混和器可以至少连接一个初始化器或者一个存储器或者一个终止器;次数阈值可以取值为64,第二预设长度则为64字节,在芯片的初始化器将64字节的哈希后的第一数据集交给与
该初始化器直接互连的混和器后;芯片系统的芯片控制器从混和器中获取64字节(bytes)的哈希第一数据集,将64字节的哈希第一数据集转为16个4bytes类型,再复制2份作为待更新的第一数据集(seed_mix);然后根据seed_mix和ethash算法的索引的计算过程,通过该混和器计算一个有向无环图(dag)的索引,根据该索引从dag中查找存储第二数据集的目标存储器为m1节点;最后通过与m1节点周边的4个混和器(3,2),(3,3),(4,2),(4,3)中的空闲节点(3,2)混和器,从m1节点中读取该第二数据集,对seed_mix执行更新过程。
[0089]
本技术实施例通过芯片系统的芯片控制器从混和器中获取第二预设长度的哈希第一数据集并执行复制操作,可以得到用于计算索引或更新的特定长度的待更新的第一数据集;然后根据待更新的第一数据集和预设算法,通过混和器计算一个有向无环图的索引,可以确定存储第二数据集的目标存储器的地址,从而可以从目标存储器连接的混和器中选择一个混和器,来通过该混和器读取目标存储器中存储的第二数据集对待更新的第一数据集执行更新过程,这样提高了内存读取带宽,避免了内存密集型算法向同一中央存储器请求第二数据集时产生延迟,从而提高了芯片系统的计算性能,提升了芯片系统的处理效率。
[0090]
可选地,参照图6,在所述步骤205中,所述芯片控制器可以包括第一芯片和第二芯片,所述第一芯片可以包括:第一存储器,所述第一存储器与第一混和器通信连接,第一通讯器、第一初始化器以及第一终止器与所述第一混和器通信连接;所述第二芯片可以包括:第二存储器,所述第二存储器与第二混和器通信连接,第二通讯器、第二初始化器以及第二终止器与所述第二混和器通信连接;所述步骤205中根据所述索引查找存储第二数据集的目标存储器的步骤,可以包括:
[0091]
步骤2051、根据所述索引,在所述有向无环图中查找组成第二数据集的第三预设长度的目标数据。
[0092]
在本技术实施例中,第三预设长度可以是用户基于实际经验进行设置,也可以是ethash算法或其他内存密集型算法默认的数值,具体可以根据实际需求确定,此处不做限定。
[0093]
步骤2052、在确定存储所述目标数据的存储器为第一存储器时,将所述第一存储器作为目标存储器。
[0094]
在本技术实施例中,目标数据是在一次更新过程中所读取的用于更新待更新的第一数据集所需的数据,目标存储器就是存储该所需的数据/目标数据的存储装置。
[0095]
步骤2053、在确定存储所述目标数据的存储器为第二存储器时,将所述第二存储器作为目标存储器,并确定与所述第二存储器连接的第二混和器所连接的第二通讯器,通过所述第二通讯器与所述第一混和器连接的第一通讯器建立通信通路,以通过所述通信通路,将所述第一混和器更新后的第一数据集发送给所述第二混和器。
[0096]
在本技术实施例中,如果一个芯片上的存储空间(所有存储器的容量总和)小于dag所要求的大小,或者未来dag空间增长超出现有芯片存储空间大小,则可以将dag数据分布于多个芯片的存储器节点上进行存储。在步骤2052中由于计算索引的是第一混和器,而通过索引所确定的存储目标数据的存储器为第一存储器,因此可以确定第一混和器和第一存储器位于同一芯片上,此时需要建立通信通路,以同步不同芯片上的数据。在步骤2053中由于计算索引的是第一混和器,而通过索引所确定的存储目标数据的存储器为第二存储器,因此可以确定第一混和器和第二存储器位于不同芯片上,此时需要建立通信通路,以同
步不同芯片上的数据。
[0097]
在本技术实施例中,芯片系统的芯片控制器根据第一芯片的第一混和器计算的索引,然后根据该索引在有向无环图中查找组成第二数据集的第三预设长度的目标数据;在确定存储该目标数据的存储器为第一芯片的第一存储器时,将该第一存储器作为目标存储器;在确定存储该目标数据的存储器为第二芯片的第二存储器时,将该第二存储器作为目标存储器,并确定与该第二存储器连接的第二混和器所连接的第二通讯器,通过第二通讯器与第一芯片的第一混和器连接的第一通讯器建立通信通路,以通过该通信通路,将第一混和器更新后的第一数据集发送给第二混和器。
[0098]
示例性地,参见图7所示,在第一个芯片中,每个第一存储器上可以连接4个第一混和器,1个第一混和器可以至少连接一个第一初始化器或者一个第一存储器或者一个第一终止器;在第二个芯片中,每个第二存储器上可以连接4个第二混和器,1个第二混和器可以至少连接一个第二初始化器或者一个第二存储器或者一个第二终止器;通过第一个芯片的第一通讯器和第二个芯片的第一通讯器,可以建立第一个芯片和第二个芯片之间的通信通路;第一通讯器和第一混和器通信连接;第二通讯器和第二混和器通信连接;第三预设长度可以取值为2字节;芯片系统的芯片控制器根据第一芯片的第一混和器计算有向无环图(dag)的索引(memory index),然后根据memory index在dag中查找2字节的目标数据组成第二数据集;在确定存储该目标数据的存储器为第一芯片的第一存储器时,将该第一存储器作为目标存储器;在确定存储该目标数据的存储器为第二芯片的第二存储器时,将该第二存储器作为目标存储器,并确定与该第二存储器连接的第二混和器所连接的第二通讯器,通过第二通讯器与第一芯片的第一混和器连接的第一通讯器建立通信通路,以通过该通信通路,将第一混和器更新后的第一数据集发送给第二混和器。
[0099]
本技术实施例通过芯片系统的芯片控制器中的第一芯片的第一混和器计算的索引后,根据该索引在有向无环图中查找组成第二数据集的目标数据;在确定存储该目标数据的存储器为同一芯片(第一芯片)的第一存储器时,可以直接将该第一存储器作为目标存储器;在确定存储该目标数据的存储器为不同芯片(第二芯片)的第二存储器时,将该第二存储器作为目标存储器,并确定与该第二存储器连接的第二混和器所连接的第二通讯器,通过第二通讯器与第一芯片的第一混和器连接的第一通讯器建立通信通路,以通过该通信通路,将第一混和器更新后的第一数据集发送给第二混和器,这样可以保证不论根据索引查找确定的存储目标数据的存储器是否位于同一芯片,都可以通过混合器读取该存储器上的数据并计算,保证了芯片系统的可靠性,提升了芯片系统的性能。
[0100]
可选地,所述步骤205中通过与所述目标存储器连接的混和器从所述目标存储器中读取所述第二数据集,对所述待更新的第一数据集执行更新过程的步骤,可以包括:
[0101]
步骤2054、从与所述目标存储器连接的混和器中选择一个混和器作为目标混和器。
[0102]
在本技术实施例中,由于每个存储器与至少一个混和器连接,因此需要从多个混和器中选择一个混和器作为目标混和器,而目标混和器可以是处于空闲状态的混和器,也可以是这多个混和器中等待时间最短的混和器,也可以是目前正在使用的混和器,还可以是直接从这多个混和器中随机选择的混和器,具体可以根据实际需求确定,此处不做限定。
[0103]
在本技术实施例中,可以是从与目标存储器连接的混和器中选择一个处于空闲状
态的混和器作为目标混和器。
[0104]
示例性地,参见图8所示,目标存储器为m节点,m节点连接的4个混和器中3个处于正在占用状态(被其他线程占据),呈黑色,1个处于空闲状态,呈白色,则可以从与m节点连接的4个混和器中选择处于空闲状态(呈白色)的混和器作为目标混和器。
[0105]
可选地,所述步骤2054,可以包括:
[0106]
在确定与所述目标存储器连接的混和器中存在至少一个处于目标状态的混和器时,从所述混和器中随机选择一个混和器作为目标混和器。
[0107]
在本技术实施例中,目标状态包括空闲状态、等待时间最短状态和正在使用状态中的一种或多种;空闲状态指的是:混和器上未进行任何计算(未占用状态);在与目标存储器连接的所有混和器都处于正在占用状态(混和器上正在进行某种计算)时,这些混和器的排队列表最短的混合器等待时间最短,则将排队列表最短的混合器所处的状态称为等待时间最短状态;由于在步骤2054之前的步骤2053或2052中,混合器正在通过计算得知的索引确定存储目标数据的存储器,则将该混合器所处的状态称为正在使用状态;具体可以根据实际需求确定,此处不做限定。
[0108]
在本技术实施例中,在确定与所述目标存储器连接的混和器中存在至少一个处于空闲状态或等待时间最短状态或正在使用状态的混和器时,从这种混和器中随机选择一个混和器作为目标混和器。
[0109]
示例性地,参见图9所示,上一次更新过程中使用的目标存储器为m节点,本次更新过程中使用的目标存储器为m’节点,m节点4个混和器(3,2)、(3,3)、(4,2)和(4,3),m’节点连接的4个混和器(2,3)、(2,4)、(3,3)和(3,4),m’节点与m节点连接的混和器中存在相同的混和器(3,3),即m’节点与m节点相邻,(2,3)混和器处于空闲状态,(3,3)混和器处于正在使用状态,(4,2)混和器处于等待时间最短状态,(4,3)处于正在占用状态;其中,正在占用状态指的是:混和器上正在被其他线程占据进行某种计算,即该计算不包括正在使用状态中的“通过计算得知的索引确定存储目标数据的存储器”;则与m’节点连接的4个混和器中存在3个处于目标状态的混和器,此时从这3个混和器中随机选择一个混和器作为目标混和器,例如选择处于正在使用状态的(3,3)混和器作为目标混和器,即完成本轮m连接的本轮目标混和器(3,3)节点的混合计算后,下一轮索引(memory index)确定的目标存储器的位置为m’节点,因为m’节点与本轮m节点相邻,且m’节点也与本轮目标混和器(3,3)节点连接,因此不需要改变目标混和器的位置(即下一轮目标混和器和本轮目标混和器相同)。
[0110]
本技术实施例通过设置存储器与至少一个混和器通信连接,则大部分混和器节点与周围会至少与一个存储器节点连接,在确定与目标存储器连接的混和器中存在至少一个处于目标状态的混和器时,从这些混和器中随机选择一个混和器作为目标混和器,可以减少了混和器这种运算单元的移动需求,提高了芯片系统计算性能并减少了计算延迟。
[0111]
步骤2055、通过所述目标混和器从目标存储器中读取第二数据集,利用预设哈希算法和所述第二数据集对所述待更新的第一数据集执行更新过程。
[0112]
在本技术实施例中,预设哈希算法可以是fowler-noll-vo算法(简称fnv哈希算法,fnv_hash),fnv_hash的具体实现过程可以是ethash算法中哈希的实现过程,也可以是其他内存密集型算法中哈希的实现过程,具体可以根据实际需求确定,此处不做限定。
[0113]
在本技术实施例中,芯片系统的芯片控制器通过目标混和器从目标存储器中读取
第二数据集,利用预设哈希算法和第二数据集对待更新的第一数据集执行更新过程。
[0114]
示例性地,参见图4所示,芯片系统的芯片控制器通过目标混和器(3,2)从目标存储器m1节点中读取第二数据集,将获得的第二数据集和待更新的第一数据集进行fnv_hash。
[0115]
本技术实施例通过设置存储器与至少一个混和器通信连接,则大部分混和器节点与周围会至少与一个存储器节点连接,在确定与目标存储器连接的混和器中存在至少一个处于目标状态的混和器时,从这些与目标存储器连接的混和器中随机选择一个混和器作为目标混和器,通过该目标混和器从目标存储器中读取第二数据集,利用预设哈希算法和第二数据集对待更新的第一数据集执行更新过程,可以提高内存命中率,减少了混和器这种运算单元的移动需求,提高了芯片系统计算性能并减少了计算延迟。
[0116]
步骤206、在所述更新过程的次数小于或等于次数阈值时,将更新后的第一数据集作为待更新的第一数据集,利用待更新的第一数据集进入步骤204和205,直至所述更新过程的次数大于所述次数阈值,将更新后的第一数据集作为第三数据集。
[0117]
在本技术实施例中,在更新过程的次数小于或等于次数阈值时,将更新后的第一数据集作为待更新的第一数据集,根据待更新的第一数据集和预设算法,重新通过混和器计算有向无环图的索引,根据重新计算的索引重新查找存储第二数据集的目标存储器,并通过与重新查找的目标存储器连接的混和器从该目标存储器中读取第二数据集,对待更新的第一数据集执行更新过程,直至更新过程的次数大于所述次数阈值,将更新后的第一数据集作为第三数据集。
[0118]
示例性地,参见图4所示,次数阈值可以取值为64,芯片系统的芯片控制器通过目标混和器(3,2)从目标存储器m1节点中读取第二数据集,将获得的第二数据集和待更新的第一数据集进行fnv_hash,判断更新过程的当前的次数1与次数阈值64的关系,得知1《64,则将更新后的第一数据集作为待更新的第一数据集(new seed),根据new seed和fnv_hash重新通过混和器(3,2)计算有向无环图(dag)的索引,根据重新计算的索引(new memory index)重新查找存储第二数据集的目标存储器m2节点,并通过与m2节点连接的混和器(2,4)从m2节点中读取第二数据集,对待更新的第一数据集执行更新过程,直至更新过程的次数大于所述次数阈值64,将更新后的第一数据集作为第三数据集。
[0119]
步骤207、通过预设哈希算法和与所述混和器连接的终止器对所述混和器中的所述第三数据集进行混合,以使所述第三数据集的有效数据存在于所述第三数据集的特定位置。
[0120]
在本技术实施例中,预设哈希算法可以是ethash算法中的哈希算法,也可以是其他内存密集型算法中的哈希算法,具体可以根据实际需求确定,此处不做限定。
[0121]
步骤208、通过第二预设哈希算法,对所述第三数据集和分散在第四预设长度的数组中的有效数据的组合进行哈希计算,得到哈希值。
[0122]
在本技术实施例中,第二预设哈希算法可以是keccak哈希算法,keccak哈希算法是一种被选定为sha-3标准的单向散列函数算法,keccak可以生成任意长度的散列值,但为了配合sha-2的散列值长度,sha-3标准中规定了sha3-224、sha3-256、sha3-384、sha3-512这4种版本,即第一预设哈希算法可以是keccak224,也可以是keccak256,也可以是keccak384,也可以是keccak512,具体可以根据实际需求确定,此处不做限定。
[0123]
步骤209、在所述哈希值小于预设目标值时,发放工作量证明算法奖励。
[0124]
在本技术实施例中,预设目标值可以是ethash算法中的目标值,也可以是其他内存密集型算法中的目标值,具体可以根据实际需求确定,此处不做限定。
[0125]
在本技术实施例中,芯片系统的芯片控制器通过预设哈希算法和与混和器连接的终止器对混和器中的第三数据集进行混合,以使第三数据集的有效数据存在于第三数据集的特定位置;通过第二预设哈希算法,对第三数据集和分散在第四预设长度的数组中的有效数据的组合进行哈希计算,得到哈希值;在哈希值小于预设目标值时,发放工作量证明算法奖励。
[0126]
示例性地,参见图4所示,芯片系统的芯片控制器通过fvn哈希算法和与混和器(6,8)距离混合器最近的终止器,对混和器(6,8)中的128字节(64次*2字节=128字节)第三数据集进行混合,即对每4个4bytes采用fowler-noll-vo(fvn)进行混和,以使第三数据集的有效数据存在于第三数据集的前8个位置,这样就可以将128字节的第三数据集压缩到8位(类型为unit32);此时创建一个长度为32的字节数组digest;再把长度为8的unit32型有效数据分散到32个8位的digest(1字节为8位)中去,通过keccak256哈希算法,对第三数据集和分散在第四预设长度的数组中的有效数据的组合进行哈希,可以得到哈希值result;在哈希值result小于预设目标值target时,则确定这是一个有效的哈希值,此时就给用户发放工作量证明算法奖励。
[0127]
本技术实施例通过预设哈希算法和与混和器连接的终止器对混和器中的所述第三数据集进行混合,以使所述第三数据集的有效数据存在于所述第三数据集的特定位置;通过第二预设哈希算法,对第三数据集和有效数据的组合进行哈希计算,可以得到内存密集算法的哈希值,从而可以将内存密集算法的哈希值与预设目标值进行对比,在内存密集算法的哈希值小于预设目标值时,芯片系统才发放工作量证明算法奖励,这样保证了芯片系统的芯片控制器在芯片使用内存密集型算法进行计算所得的数据可以更加随机而不可预测,确保只有通过真实计算才能得到最终的哈希值结果,保证了计算的难度。
[0128]
本技术实施例提供的另一种工作量验证方法,通过设置芯片系统的芯片控制器所包括芯片包括有至少两个存储器,将用于工作量验证的内存密集型算法计算所使用的有向无环图数据分块存储在不同的存储器中,使得内存密集型算法中作为分布式计算核心的混合器可以从其连接的存储器中读取第二数据集对初始化器生成第一数据集执行更新过程,避免了内存密集型算法向同一中央存储器请求第二数据集时产生延迟,从而保证内存密集型算法的更新过程中,在更新过程的次数不满足次数阈值时,获取第二数据集所需的运行周期可预测,其中,设置存储器与至少一个混和器通信连接,可以减少了混和器这种运算单元的移动需求,提高内存命中率,从而提高了芯片系统计算性能并减少了计算延迟。
[0129]
需要说明的是,本技术实施例提供的工作量验证方法,执行主体可以为工作量验证装置,或者该工作量验证装置中的用于执行工作量验证方法的控制模块。本技术实施例中以工作量验证装置执行工作量验证方法为例,说明本技术实施例提供的工作量验证装置。
[0130]
图10示出了本发明实施例提供的一种工作量验证装置的结构示意图,所述装置40可以应用于芯片系统的芯片控制器,所述芯片控制器可以包括芯片,所述芯片可以包括:至少两个存储器,每个所述存储器与混和器通信连接,初始化器以及终止器与所述混和器通
信连接;所述装置40可以包括:
[0131]
计算种子模块401,用于通过所述初始化器生成第一数据集;
[0132]
第一混合模块402,用于从与所述混和器连接的存储器中读取第二数据集,通过所述第二数据集对所述第一数据集执行更新过程;
[0133]
第二混合模块403,用于在所述更新过程的次数小于或等于次数阈值时,利用更新后的第一数据集,进入所述从与所述混和器连接的存储器中读取第二数据集,通过所述第二数据集对所述第一数据集执行更新过程的步骤,直至所述更新过程的次数大于所述次数阈值,将更新后的第一数据集作为第三数据集;
[0134]
压缩及判断模块404,用于通过所述终止器对所述第三数据集进行验证,并在所述第三数据集验证通过后,发放工作量证明算法奖励。
[0135]
可选地,所述计算种子模块401包括:
[0136]
通过所述初始化器,生成第一预设长度的头部哈希值,并将预设随机数值填入所述头部哈希值之后,得到第一数据集;
[0137]
通过第一预设哈希算法对所述第一数据集进行哈希计算,将哈希计算后的第一数据集发送给与所述初始化器连接的混和器。
[0138]
可选地,所述第一混合模块402包括:
[0139]
从所述混和器中获取第二预设长度的哈希第一数据集并执行复制操作,得到待更新的第一数据集;所述第二预设长度与所述次数阈值相关联;
[0140]
根据所述待更新的第一数据集和预设算法,通过所述混和器计算有向无环图的索引;
[0141]
根据所述索引查找存储第二数据集的目标存储器,并通过与所述目标存储器连接的混和器从所述目标存储器中读取所述第二数据集,对所述待更新的第一数据集执行更新过程。
[0142]
可选地,所述芯片控制器包括第一芯片和第二芯片,所述第一芯片包括:第一通讯器和与所述第一通讯器通信连接的第一混合器,所述第二芯片包括:第二通讯器、与所述第二通讯器通信连接的第二混合器和与所述第二混合器通信连接的第二存储器,所述第一芯片与所述第二芯片通过所述第一通讯器和所述第二通讯器连接;所述第一混合模块402还包括:
[0143]
根据所述索引,在所述有向无环图中查找组成第二数据集的第三预设长度的目标数据;
[0144]
在确定存储所述目标数据的存储器为第二存储器时,将所述第二存储器作为目标存储器,并确定与所述第二存储器连接的第二混和器所连接的第二通讯器,通过所述第二通讯器与所述第一混和器连接的第一通讯器建立通信通路,以通过所述通信通路,将所述第一混和器更新后的第一数据集发送给所述第二混和器。
[0145]
可选地,所述第一混合模块402还包括:
[0146]
从与所述目标存储器连接的混和器中选择一个混和器作为目标混和器;
[0147]
通过所述目标混和器从目标存储器中读取第二数据集,利用预设哈希算法和所述第二数据集对所述待更新的第一数据集执行更新过程。
[0148]
可选地,所述第一混合模块402还包括:
[0149]
在确定与所述目标存储器连接的混和器中存在至少一个处于目标状态的混和器时,从所述混和器中随机选择一个混和器作为目标混和器;所述目标状态包括空闲状态、等待时间最短状态和正在使用状态中的一种或多种。
[0150]
可选地,所述压缩及判断模块404包括:
[0151]
通过预设哈希算法和与所述混和器连接的终止器对所述混和器中的所述第三数据集进行混合,以使所述第三数据集的有效数据存在于所述第三数据集的特定位置;
[0152]
通过第二预设哈希算法,对所述第三数据集和分散在第四预设长度的数组中的有效数据的组合进行哈希计算,得到哈希值;
[0153]
在所述哈希值小于预设目标值时,发放工作量证明算法奖励。
[0154]
本技术实施例提供的一种工作量验证装置,通过设置芯片系统的芯片控制器所包括芯片包括有至少两个存储器,将用于工作量验证的内存密集型算法计算所使用的有向无环图数据分块存储在不同的存储器中,使得内存密集型算法中作为分布式计算核心的混合器可以从其连接的存储器中读取第二数据集对初始化器生成第一数据集执行更新过程,避免了内存密集型算法向同一中央存储器请求第二数据集时产生延迟,从而保证内存密集型算法的更新过程中,在更新过程的次数不满足次数阈值时,获取第二数据集所需的运行周期可预测,提高了芯片系统的芯片控制器在芯片使用内存密集型算法的性能,提升了芯片系统的芯片控制器在芯片的终止器通过第三数据集验证后发放工作量证明算法奖励的效率
[0155]
本技术实施例中的工作量验证装置可以是装置,也可以是终端中的部件、集成电路、或芯片。该装置可以是移动电子设备,也可以为非移动电子设备。示例性的,移动电子设备可以为手机、平板电脑、笔记本电脑、掌上电脑、车载电子设备、可穿戴设备、超级移动个人计算机(ultra-mobile personal computer,umpc)、上网本或者个人数字助理(personal digital assistant,pda)等,非移动电子设备可以为服务器、网络附属存储器(network attached storage,nas)、个人计算机(personal computer,pc)、电视机(television,tv)、柜员机或者自助机等,本技术实施例不作具体限定。
[0156]
本技术实施例中的工作量验证装置可以为具有操作系统的装置。该操作系统可以为window操作系统,可以为苹果操作系统,还可以为其他可能的操作系统,本技术实施例不作具体限定。
[0157]
本技术实施例提供的工作量验证装置能够实现图2至图9的方法实施例实现的各个过程,为避免重复,这里不再赘述。
[0158]
本技术实施例提供了一种芯片控制器,包括芯片,所述芯片包括:至少两个存储器,每个所述存储器与混和器通信连接,通讯器、初始化器以及终止器与所述混和器通信连接,所述芯片控制器用于控制所述芯片实现上述工作量验证方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
[0159]
本技术实施例提供了一种可读存储介质,所述可读存储介质上存储程序或指令,所述程序或指令被处理器执行时实现上述工作量验证方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
[0160]
其中,所述处理器为上述实施例中所述的电子设备中的处理器。所述可读存储介质,包括计算机可读存储介质,如计算机只读存储器(read-only memory,rom)、随机存取存
储器(random access memory,ram)、磁碟或者光盘等。
[0161]
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。此外,需要指出的是,本技术实施方式中的方法和装置的范围不限按示出或讨论的顺序来执行功能,还可包括根据所涉及的功能按基本同时的方式或按相反的顺序来执行功能,例如,可以按不同于所描述的次序来执行所描述的方法,并且还可以添加、省去、或组合各种步骤。另外,参照某些示例所描述的特征可在其他示例中被组合。
[0162]
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分可以以计算机软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器,或者网络设备等)执行本技术各个实施例所述的方法。
[0163]
上面结合附图对本技术的实施例进行了描述,但是本技术并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本技术的启示下,在不脱离本技术宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本技术的保护之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1