http://www.kqlcn.com/

如何使用Go语言编写自己的区块链挖矿算法

  区块链技术学习(微信号:Blockchain1024)翻译

  原文链接:https://medium.com/@mycoralhealth/code-your-own-blockchain-mining-algorithm-in-go-82c6a71aba1f

  随着最近比特币和以太坊采矿热潮的兴起,大家就好奇这到底是什么。对于这个领域的新人来说,他们听到的都是一些疯狂的故事:人们用gpu填满仓库,每个月用加密货币赚取数百万美元。什么是加密货币挖掘?它是如何工作的?如何尝试编写自己的挖掘算法?

  在这篇文章中,我们将逐一介绍这些问题,最后是关于如何编写自己的挖掘算法的教程。我们将要展示的算法称之为工作证明,它是比特币和以太坊的基础,这是两种最流行的加密货币。别担心,我们很快就会解释它是如何工作的。

  什么是加密货币挖掘

  加密货币需要稀缺才能有价值。如果任何人都能在任何时候随心所欲地生产比特币,那么比特币作为一种货币将毫无价值。比特币算法每10分钟向其网络中获胜的成员发布一些比特币,在大约122年内将达到最大供应量。这一发布时间表也在一定程度上控制了通货膨胀,因为整个固定的供应量在开始时并没有发布。随着时间的推移,更多的比特币会慢慢发布。

  决定胜利者并给予比特币的过程要求胜利者完成一些“工作”,并与其他也在做这些工作的人竞争。这个过程被称为采矿,因为它类似于金矿开采者花费一段时间做工作,最终(并且希望)找到一点黄金。

  比特币算法强制参与者或节点完成这项工作,并相互竞争,以确保比特币不会发布得太快。

  采矿是如何进行的

  谷歌快速搜索“比特币采矿是如何工作的”用大量的页面填充你的结果,解释比特币采矿要求一个节点(你或你的电脑)解决一个难题。虽然在技术上是正确的,但简单地称它为一个“数学”问题是非常繁琐和陈腐的。如何在引擎盖下开采是很有趣的理解。我们需要了解一些密码学和哈希技术来了解采矿是如何工作的。

  加密哈希的简要介绍

  单向密码学接受人类可读的输入,如“Hello world”,并对其应用一个函数(即数学问题),以产生一个无法解释的输出。这些函数(或算法)的性质和复杂性各不相同。算法越复杂,逆向工程就越难。因此,密码算法在保护用户密码和军用代码等方面非常强大。

  让我们看一个SHA-256的例子,这是一种流行的密码算法。这个哈希网站让您轻松计算SHA-256哈希。我们来哈希一下“Hello world”,看看我们得到了什么:

  

如何使用Go语言编写自己的区块链挖矿算法

  试着一遍又一遍地哈希“Hello world”。每次都得到相同的哈希值。在编程中,给定相同的输入一次又一次地得到相同的结果称为幂等性。

  密码算法的一个基本特性是,反向工程很难找到输入,但是非常容易验证输出。例如,使用上面的SHA-256散列,对于其他人来说,将SHA-256散列算法应用于“Hello world”以检查它是否确实生成相同的结果散列是很简单的事情,但是从中获取结果散列并获得“hello world”应该是非常困难的。这就是为什么这种密码学被称为单向密码学。

  比特币使用双SHA-256,它只是再次将SHA-256应用于“Hello world”的SHA-256散列。对于本教程中的示例,我们将使用SHA-256。

  采矿

  既然我们已经了解了什么是密码学,我们就可以回到加密货币挖掘了。比特币需要找到一些方法来让想要赚取比特币的参与者“工作”,这样比特币就不会太快被发布。比特币通过让参与者哈希许多字母和数字的组合来实现这一点,直到得到的哈希包含一个特定的前导“0”的数字。

  例如,回到Hash网站并哈希“886”。它产生一个以3个零作为前缀的哈希。

  

如何使用Go语言编写自己的区块链挖矿算法

  但是我们怎么知道“886”产生了3个0呢这就是重点。在写这个博客之前,我们没有这样做。理论上,我们必须通过一大堆字母和数字的组合来测试结果,直到得到一个符合3个零要求的结果。举个简单的例子,我们已经提前实现了“886”产生3个前导零散列。

  任何人都可以很容易地检查“886”生成的结果中有3个前导零。

  事实上,任何人都可以很快速地检查“886”是否产生3个前导零的结果,为了得到这个结果,我们做了大量艰苦的工作,测试和检查了大量字母和数字的组合。因此,如果我是第一个得到这个结果的人,我就可以通过证明我做了这项工作来获得比特币,证明任何人都可以快速检查“886”产生了我声称的零的数量。这就是为什么比特币共识算法被称为工作证明的原因。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。