Login
欢迎来到未来世界

您现在的位置是: 首页 > 计算机 > 区块链

区块链

ASIC矿机挖矿(ASIC矿机挖矿)

区块链 加入收藏
大致上说,我们想抑制为了挖矿而特别定制的设备的优势。这也可以理解为,设计一个解谜程序,让现有的普通电脑成为最廉价和最有效率的解谜运算设备。但这在现实中不可能,毕竟所有的通用电脑的中央处理器里已经针对一
总的来说,我们要打压专为矿定制的装备的优势。 这也可以理解为设计一个解谜程序,让现有的普通电脑成为最便宜最高效的解谜设备。 但这在现实中是不可能的。毕竟,所有通用计算机的中央处理器都针对一些特殊用途进行了优化。 并不是所有的电脑都有相同的优化配置,它们随着时代的变化而变化。 例如,在过去的10年中,英特尔和AMD都在他们的芯片中添加了特殊指令(通常称为“添加硬件支持”),以更有效地计算高级加密标准(AES)的分组密码。 因此,在采矿中,一些计算机总是比其他计算机效率更低。 此外,很难想象设计一个挖掘解密程序,它依赖于音频或显示等普通个人电脑的功能,因此很可能没有那些通用功能的特定专用设备会更高效,成本更低。 更实际的是,我们有一个适中的目标:设计一个解谜程序,以最小化最有效的定制计算设备和通用计算机之间的效率差距。 ASIC必然会成为更有效的矿机,但是我们可以把它的运算效率限制在一定的范围内,让他的投入和损失得不到应有的回报,从而限制了ASIC矿机的发展,让普通用户使用自己现有的通用计算机来挖矿还是有一定的经济效果的。 1.死板的记忆拼图。在被设计成反ASIC的拼图中,应用最广泛的一种叫做刚性内存——硬拼图)——解谜需要大量的内存来计算,而不是依赖大量的CPU时间。 一个相似但不同的概念是记忆拼图。读取内存的时间占用了这个程序的大部分计算时间。 难题可以是刚性记忆类而不是记忆限制类,或者是记忆限制类而不是刚性记忆类,或者两者都是。 一个微妙但重要的区别是,虽然CPU的速度是计算时间的瓶颈,但并行运算解决大量谜题的成本仍然受内存成本的控制或者反之亦然。 通常对于运算类的解谜程序,为了实现刚性内存和内存限制,我们需要保证运算过程中需要使用大量内存,这就成为了一个限制因素。 为什么刚性记忆拼图或者记忆受限拼图可以反ASIC? 由于用于计算哈希函数的逻辑运算只占CPU的很小一部分,这意味着在比特币的解谜中,ASIC不需要执行一些不必要的功能,只需要执行计算哈希函数的相关功能,因此具有很大的优势。 另一个相关因素是,不同内存性能的差异(以及单位性能的成本)远小于不同处理器之间计算速度的差异。所以,如果我们设计一个刚性的内存拼图,计算需要相对简单的计算能力但是需要大量的内存,这就意味着解密成本的增加率会像内存成本的增加率一样处于一个相对较低的水平。 SHA-256已被公认为不是一个僵化的记忆难题解决算法。 它只需要一个小的256位模块,可以很容易地放入CPU寄存器。 但是设计一个死板的记忆类的工作量证明解谜并不太难。 现在最流行的刚性记忆拼图叫Scrypt,是第二大加密数字货币莱特币和其他加密数字货币使用的。 scrypt是刚性内存的哈希函数。最早用于加密密码,不易被暴力破解(例如反复试错破解),所以挖掘谜题和比特币使用的“不完全哈希函数原图像解谜”是一样的,只是Scrypt代替了SHA-256。 Scrypt在比特币发明之前就存在了,它被用来加密个人密码,这让我们对它的安全性有了一些信心。 其实密码的哈希功能和反ASIC的目的差不多。 出于安全考虑,我们预计拥有定制设备的攻击者计算密码函数值的速度不会快于使用通用计算机或服务器的用户[4]。 Scrypt中基本上有两个步骤:第一步是用随机数据填充随机存取存储器(RAM)中的cache空;第二步是几乎随机地从这个内存区域读取(或更新)数据,整个缓存需要存储在RAM中[5]。 时间和记忆的权衡 如果没有大的内存缓存,Scrypt的计算会变得很慢,但仍然可以用更少的内存来增加计算量。 假设我们使用一个大小约为N/2(而不是大小为N)的缓存。现在,我们只存储j为偶数时v [j]的值,而丢弃那些j为奇数的值。 在第二个循环中,有一半的情况下,会选择奇数的J的值,但这种情况很容易计算。 我们只需要简单地计算SHA-256 (V [J-1]),因为V [J-1]在我们的缓存中。 这种情况只发生一半时间,因此增加了N/2次额外的SHA-256计算。 因此,将内存需求减半只会增加1/4的SHA-256计算量(从2N增加到5N/2)。 一般来说,我们可以在缓存区V中每存储k行数据,即使用N/k的内存,计算(k+3)N/2次SHA-256迭代计算。 在这种限制下,如果我们设置k=N,我们将返回到前面的运算时间为O(N的平方)的计算。 这些数字对于Scrypt算法本身来说不一定非常准确,但是渐进预测法确实是适用的。 除此之外,还有其他一些设计可以削弱用时间换取记忆的能力。 例如,如果一个缓存在第二个周期中不断更新,它会使时间和内存之间的交换效率降低,因为这些更新必须存储在内存中。 Scrypt挖掘的检验成本 Scrypt的另一个限制是,它需要与用于计算验证的内存大小相同的内存。 为了使记忆刚性有意义,n需要更大。 这意味着一个Scrypt的计算比一个SHA-256的迭代计算要昂贵许多倍(在比特币中只需要一个SHA-256计算来验证)。 这将产生负面结果,因为网络中的每个用户都必须重复这种计算,以检查每个新发现的块是否有效。 这将减缓新块的传播和接受,从而增加分叉攻击的风险。 它还要求每个客户端(即使是轻量级SPV客户端)都有足够的内存来有效地执行函数计算。 这样一来,加密数字货币中Scrypt实际能使用的内存n就有限了。 直到最近,还不清楚是否可以设计出一个内存刚性的,可以快速验证的(不需要大量内存)挖矿解谜程序。 这个特性对密码哈希的影响很小,而密码哈希是Scrypt算法在用于加密数字货币之前的主要用途。 2014年,约翰·特罗姆普(John Tromp)提出了一种叫做布谷鸟循环(cuckoo cycle)的新的解谜算法(因这种算法的特点与布谷鸟相似而得名,Duzhan Nestle)。 布谷鸟循环算法是由从布谷鸟哈希表导出的图中寻找循环的难度设定的,布谷鸟哈希表是在2001年首次提出的。 除了建立一个大的哈希表之外,没有其他已知的方法来计算这个周期,但是可以通过找到一个周期(相对较小)来简单地验证结果。 这种算法可能使刚性记忆或记忆限制类的证明在比特币共识中更实用。 可惜这个函数无法用数学证明。如果不使用内存,就无法有效计算。 通常,一个新的加密算法看起来是安全的,但社区会对它有所保留,直到它存在多年而没有被破解。 由于这个原因,也因为它是最近才发明的,目前的布谷鸟循环算法还没有被任何加密数字货币采用。 在实践中,sCrypt sCrypt被多种加密数字货币使用,包括莱特币,结果不一[6] Litecoin的Scrypt算法参数的ASIC已经存在(然后被其他几个备选币复制)。 令人惊讶的是,与大众电脑相比,这些ASIC的运算能力的提升至少等于甚至大于SHA-256与普通电脑相比的提升!所以Scrypt最后不可能反ASIC,至少在莱特币上。 莱特币的设计者一开始就宣称,抗ASIC是莱特币的一大优势。 但现在他们收回了这一说法。 这可能是Litecoin使用的低值N(内存使用参数)造成的,计算只需要128KB(如果使用时间-内存交换模式,所需内存可能更低,这也是GPU中广泛使用的获取更快缓存的方式) 较低的n值使得设计不需要复杂存储器存储总线的轻型采矿ASIC变得容易。通常,读取千兆字节的随机存取存储器需要这种复杂的总线,所有这些通用计算机都有。 Litecoin的开发者没有选择更高的内存参数(这会让ASIC更难设计),因为他们认为高内存参数导致的高成本验证过程是不现实的。 其他抵制ASIC的方法 请回想一下,我们的初衷是想让开发能够大幅提升计算性能的ASIC变得困难。 刚性记忆解谜只是方法之一,还有其他方法。 另一种提出但尚未实现的方法是使用移动目标值作为挖掘难题。 换句话说,解谜算法本身会发生变化,就像比特币中的难度会周期性变化一样。 在理想状态下,为前一个解谜算法优化的挖掘硬件不再适合下一个解谜算法。 我们不知道我们需要多久改变一次解谜算法来满足我们需要的安全需求。 如果这是由替代硬币的开发者决定的,可能会成为一个不可接受的集中来源。 例如,开发者可以基于他们已经开发的一种硬件(或者只是一个优化的FPGA)来设计相应的新的解谜算法,因此他们自然比这种新算法具有早期优势。 也许这些解密算法的顺序可以自动生成,但这似乎也很难。 一种思路是选择大量的哈希函数(比如基于SHA-3的24个未破算法),然后每一个使用6个月到一年。在这么短的时间内开发新的硬件是困难的。 当然,如果事先知道这个顺序安排,就可以根据功能使用的时间表进行相应的硬件设计。 PC矿机从CPU挖矿过渡到CPU+GPU挖矿,同时限制GPU并行扩展和反ASIC芯片,利用人工智能在PC忙闲时动态调整硬件和带宽资源,将大大提高面向应用的公链的通用性,进入千家万户。
图集详情底部广告位