做不好动画1星评价
2020-09-11 00:06:36
比特币的挖矿和节点软件是基于P2P网络、数字签名、密码学证据来发起和验证交易的。节点向网络广播交易,这些广播出来的交易在经过矿工的验证后,矿工用自己的工作证明结果来表达确认,确认后的交易会被打包到数据块中,数据块会串起来形成连续的数据块链。
每一个比特币的节点都会收集所有尚未确认的交易,并将其归集到一个数据块中,这个数据块会和前面一个数据块集成在一起。矿工节点会附加一个随机调整数,并计算前一个数据块的SHA-256哈希运算值。挖矿节点不断重复进行尝试,直到它找到的随机调整数使得产生的哈希值低于某个特定的目标。
如果希望判定一个人提供的的信息是本着正常使用,具备一定价值的。那么我们倾向认为提供这个信息的人,愿意为此付出一定工作量来证明他的诚实。假如有一种机制,能够容易的证明提供信息的人为此付出了一定工作量,那么此信息是可以接受,并被认为合理的。
比如,我收邮件的时候,做了一个规定:把邮件内容数据,加入一个随机数,求一个sha256散列数值。这个散列值一共256bit 。前20bit 必须都为0”、
这样,要给我发信的人,就必须反复尝试一个随机数,以保证邮件内容数据加上这个随机数,能够产生sha256 的结果------前20bit 都是0.(这个计算过程本身毫无意义)。如何产生出指定要求的整数?完全靠运气和CPU 运算时间。这就是一个工作量。工作本身毫无意义。但是如果谁愿意付出这个工作量,就意味着他给我的邮件多半是有意义的。这就叫工作量证明”。也就是意味着这个人很有可能是诚实的。这里把邮件换成Block也是等效的。这个机制被广泛用于防止垃圾邮件等。因为群发垃圾邮件的人,不可能有那么多时间去给每个人算一个毫无意义的数字,浪费时间,降低发垃圾邮件的效率。挖矿的目的是确认交易。寻找随机数的过程是为了保证每一个挖矿节点不会往外发送垃圾block。发送的BlockId是这个Block的Hash,它必然是首20bit为0的。
可以预见的是对于比特币的Hash计算而言,它几乎都是独立并发的整数计算,GPU简直就是为了这个而设计生产出来的。相比较CPU可怜的2-8线程和长度惊人的控制判断和调度分支,GPU可以轻易的进行数百个线程的整数计算并发(无需任何判断的无脑暴力破解乃是A卡的强项)。
OpenCL可以利用GPU在片的大量unified shader都可以用来作为整数计算的资源。而A卡的shader(流处理器)资源又是N的数倍(同等级别的卡)。
比特币早期通过CPU来获取,而随着GPU通用计算的优势不断显现以及GPU速度的不断发展,矿工们逐渐开始使用GPU取代CPU进行挖矿。前面我们已经介绍,比特币挖矿采用的是SHA-256哈希值运算,这种算法会进行大量的32位整数循环右移运算。有趣的是,这种算法操作在AMD GPU里可以通过单一硬件指令实现,而在NVIDIA GPU里则需要三次硬件指令来模拟,仅这一条就为AMD GPU带来额外的1.7倍的运算效率优势。凭借这种优势,AMD GPU因此深受广大矿工青睐。