链得得|硬核丨BTC 的挖矿算法究竟是如何运算的?


_本文原题:硬核丨BTC 的挖矿算法究竟是如何运算的?
作者 | Sajjad Hussain
链得得|硬核丨BTC 的挖矿算法究竟是如何运算的?
本文插图

比特币挖矿是比特币系统安全的一个关键部分 。 其原理是 , 比特币矿工将一堆比特币交易归为一个区块 , 然后反复执行一种叫做Hash的加密操作几十亿次 , 直到有人找到一个特殊的目标Hash值 。 至此 , 该区块即被开采并成为比特币区块链的一部分 。 Hash 任务本身并不能完成任何有价值的任务 , 但由于通过它找到一个成功的目标值非常困难 , 所以它确保了没有人拥有接管比特币系统的能力和资源 。 Hash 函数是指输入一个数据区块并创建一个较小的、不可预测的输出 。 Hash 函数的设计使得没有 "捷径 "来获得所需的输出结果--你只能不断地对区块进行Hash操作 , 直到你通过蛮力找到有效的一个结果为止 。 对于比特币来说 , Hash 函数是一个叫做SHA-256的函数 。 为了提供更高的安全性 , 比特币将连续重复SHA-256函数两次 , 这个过程被称为双SHA-256 。 在比特币中 , 一个成功的Hash值是一个以足够多的零开头的数值 。 就像很少能找到一个以多个0结尾的电话号码或车牌一样 , 很少能找到一个以多个0开头的Hash 。 但比特币的难度是呈指数倍增加的 。 目前 , 一个成功的Hash必须从大约17个0开始 。 换句话说 , 找到一个成功的Hash比在地球上所有沙粒中找到某一粒沙子还要难 。 下图显示了比特币区块链中的一个区块以及它的Hash值 。 黄色的字节经过Hash后生成区块Hash值 。 在这种情况下 , 生成的Hash值以足够多的0开始 , 因此此次挖矿成功 。 然而 , Hash很难一次得到的 , 在这种情况下 , 矿工会改变nonce值或其他区块内容 , 然后进行反复尝试 。
链得得|硬核丨BTC 的挖矿算法究竟是如何运算的?
本文插图

比特币使用的SHA-256Hash算法SHA-256的Hash算法采用512位(即64个字节)的输入块 , 对数据进行加密组合 , 并产生256位(32个字节)的输出 。 SHA-256算法由重复64次的相对简单的回合组成 。 下图显示了一个回合 , 它需要8个4字节的输入--A到H , 然后执行一些操作 , 并生成A到H的新值 。
链得得|硬核丨BTC 的挖矿算法究竟是如何运算的?
本文插图

蓝色方框以非线性的方式将数值混合在一起 , 因此很难用密码学分析这些值 。 由于算法使用了几个不同的函数 , 所以发现攻击就更难了 。 (如果你能找出一种数学捷径来生成成功的Hash值 , 你就可以接管比特币挖矿了) 。 Ma大多数框看A、B、C的位数 , 对于每个位置 , 如果多数位数为0 , 则输出0 , 否则输出1 。 也就是说 , 对于A、B、C的每个位置 , 看1位的数量 。 如果是0或1 , 输出0 , 如果是2或3 , 输出1 。 Σ0框将A的位数反转 , 形成三个反转版本 , 然后将它们相加模数为2 。 换句话说 , 如果1位的数量是奇数 , 则和为1 , 否则为0 , 和中的三个值分别是A向右反转2位、13位和22位 。 Ch "选择 "框根据输入E的值选择输出位 , 如果E的某位为1 , 则输出位为F的对应位 , 如果E的某位为0 , 则输出位为G的对应位 , 这样 , F和G的位就根据E的值进行随机选择 。 下一框Σ1对E的位进行反转和 , 除了移位是6位、11位和25位外 , 其他与Σ0类似 。 红框执行32位加法 , 生成A和E的新值 , 输入Wt是基于输入数据 , 稍加处理 。 (这是输入块被输入到算法中的地方 。 )输入Kt是为每一轮定义的常数 。 从上图可以看出 , 一轮中只有A和E是变化的 。 其他值不变通过 , 旧的A值变成新的B值 , 旧的B值变成新的C值 , 以此类推 。 虽然SHA-256的每一轮都不会对数据有太大的改变 , 但64轮之后 , 输入的数据将完全被扰乱 。 这对挖矿的硬件意味着什么?SHA-256的每一步在数字逻辑中都非常容易实现--简单的布尔运算和32位加法 。 (如果你学过电子学 , 你可能已经可以把电路可视化了) 。 出于这个原因 , 定制的ASIC芯片可以在硬件中非常高效地实现SHA-256算法 , 在一个芯片上并行地放上几百轮 。 相比之下 , Litecoin、Dogecoin和类似的altcoins使用Crypt Hash算法 , 该算法被有意设计成难以在硬件中实现的形式 。 它将1024个不同的Hash值存储到内存中 , 然后以不可预测的方式将它们结合起来 , 以获得最终结果 。 因此 , 与SHA-256 Hash相比 , Scrypt需要更多的电路和内存 。 你可以通过查看挖矿硬件来了解其影响 , Scrypt(Litecoin等)的计算速度比SHA-256(比特币)慢数千倍 。 SHA-256算法出乎意料的简单 , 很容易手动完成 。 (用于签署比特币交易的椭圆曲线算法用手计算会非常痛苦 , 因为它有很多32字节整数的乘法) 。 手工做一轮SHA-256花了我16分45秒 。 按照这个速度 , Hash一个完整的比特币区块(128轮)需要1.49天 , 每天的Hash率为0.67次(虽然我可能会通过练习变得更快) 。 相比之下 , 目前的比特币挖矿硬件每秒可以做到几兆次的Hash , 比我的手动Hash快了约五千万倍 。 不用说 , 手动比特币挖矿根本不实用 。 有Reddit读者问到我的能量消耗 。 其实不需要太多能量消耗 , 所以假设静止代谢率为1500kcal/天 , 人工Hash的能耗差不多为10兆焦耳/Hash 。 一般挖矿硬件的能耗是1000兆焦耳/Hash 。 所以 , 我的能源效率低了101? 。 接下来的问题是能源成本 。 一个便宜的食物能量来源是甜甜圈 , 200千卡的热量是0.23元 。 这里的电是0.15美元/千瓦时 , 便宜了6.7倍--比我预期的要接近 。 因此 , 我每Hash的能源成本大约是挖矿硬件的67倍 。 很明显 , 我不会靠人工挖矿发家致富 , 我甚至还没有包括我需要的所有纸和铅笔的成本 。
Sajjad Hussain作者李翰博 翻译
Olivia编辑
内容仅供参考 不作为投资建议 风险自担
【链得得|硬核丨BTC 的挖矿算法究竟是如何运算的?】作者:加密谷Live;来自链得得内容开放平台“得得号” , 本文仅代表作者观点 , 不代表链得得官方立场凡“得得号”文章 , 原创性和内容的真实性由投稿人保证 , 如果稿件因抄袭、作假等行为导致的法律后果 , 由投稿人本人负责得得号平台发布文章 , 如有侵权、违规及其他不当言论内容 , 请广大读者监督 , 一经证实 , 平台会立即下线 。 如遇文章内容问题 , 请发送至邮箱:linggeqi@chaindd.com


    推荐阅读