猛犸大陆——区块链矿机演进之路

随着全网挖矿难度的不断增加,普通的CPU运算速度已经无法满足高难度的挖矿算法.于是一块或者多块较高端的显卡组装的挖矿设备就诞生了。2010年9月出现GPU挖比特币代码,打破CPU挖矿常规。 猛犸大陆显卡矿机,www.ethstar.net

2代矿机:主要依靠GPU

GPU挖矿原理

GPU运算SHA256D算力约为200M-1G,nNonce提供4G搜索空间,如果仅调整nNonce取值,可以支持4秒左右。因此可以调整nTime,每调整一次nTime,可以继续挖矿4秒。

GPU挖矿使用GETWORK协议,即挖矿程序和节点分离,也即挖矿部件与区块链数据分离。GPU挖矿时代,使用GETWORK协议,使得挖矿程序与节点交互。

核心思路为:节点构造区块,将区块头数据交给挖矿程序,挖矿程序遍历nNonce进行挖矿。验证合格交付给节点,节点提取nNonce和nTime验证区块,如果符合要求即向全网广播。遍历结束将调用GETWORK,节点构造新区块,然后重复上述过程。

GPU经典挖矿驱动为cgminer。

GPU挖矿缺陷:GETWORK协议给挖矿程序提供的搜索空间为4G,结束后需再次调用GETWORKRPC接口。矿机出现后,矿机算力已达10TH/S,继续使用GETWORK协议将频繁调用RPC接口,显然不太合适。因此需转向更高效的getblocktemplate协议。

GETWORK

getwork协议代表了GPU挖矿时代,需求主要源于挖矿程序与节点客户端分离,区块链数据与挖矿部件分离。

使用客户端节点直接挖矿,需要同步完整区块链,数据和程序紧密结合,也就是说,如果有多台电脑进行挖矿,需要每台电脑都单独同步一份区块链数据。这其实没有必要,对于矿工来说,最少只需要一个完整节点就可以。而与此同时,GPU挖矿时代的到来,也需要一个协议与客户端节点交互。getwork核心设计思路是:

由节点客户端构造区块,然后将区块头数据交给外部挖矿程序,挖矿程序遍历nNonce进行挖矿,验证合格后交付回给节点客户端,节点客户端验证合格后广播到全网。

如前所述,区块头共80个字节,由于没有区块链数据和待确认交易池,nVersion,hashPrevBlock,nBits和hashMerkleRoot这4个字段共72个字节必须由节点客户端提供。挖矿程序主要是递增遍历nNonce,必要时候可以微调nTime字段。

对于显卡GPU来说,其实不用担心nNonce的4字节搜索空间不足,而且挖矿程序从节点客户端那里拿到一份数据后,不应该埋头工作太久,不然很有可能这个块已经被其他人挖到,继续挖只能做无用功,对于比特币来说,虽然设计为每10分钟一个区块,良好的策略也应该在秒级内重新向节点申请新的挖矿数据。对于显卡来说,运行SHA256D算力一般介于200M~1G,nNonce提供4G搜索空间,也就是说再好的显卡也能支撑4秒左右,调整一次nTime,又可以再挖4秒,这个时间绰绰有余。

你可能感兴趣的:(猛犸大陆——区块链矿机演进之路)