区块链-2区块链里的“挖矿”到底是什么意思?
上一期,我们用比较简单的例子,告诉大家:区块链就是用一种人人都记账的方式,组成一个互不认识但又相互信任的新体系。链接:上一期 请直白的告诉我,区块链是怎么工作的?
这一期,我们研究一下,到底是什么方法能鼓励大家一起参与记账,让这个体系能自给自足、稳定运行的。
首先我们先认识一个神奇的东西——黑盒
想象一个神奇的盒子,如果你从往盒子里塞一个的苹果进去,它可能会吐出一个汉堡包。
小知识: 这个神奇的盒子被称为“哈希方程”,但非专业人士又怎么好理解“哈希”这个词。所以,今天,我们就叫他“黑盒”。
黑盒(又叫做 哈希方程)
假设:我们从左边塞了个数字 4 进去,我们会发现,它在右边吐出了下列字串:‘dcbea’。
数字 4 是在怎么转化成这串字符的?没有人知道。而且,这个过程是不可逆的。得到了这串字符 ‘dcbea’,也不可能搞清楚这黑盒从左边塞进去过什么。但是,任何时候,你输入数字4给这个黑盒,它都总是会吐出同样的字符:‘dcbea’。
hash(4) = dcbea
来试试发送一个别的数字进去,比如:26怎么样?
hash(26)=94c8e
这次我们得到了 ‘94c8e’,看来字符同样可以包含数字。有意思吧!
假如我现在问你如下问题:
“你能不能告诉我,要想在黑盒右边得到以三个0开头的一串字符(比如000ab),我该从左边放什么东西进去呢?”
这个黑盒有个属性:我们无法从右边的结果,直接猜出来从左边放了什么进去。那我们应该怎么回答前面那个问题?
看一段岳云鹏的相声视频:
是的,最直接的方法,就是一个数字一个数字的放进黑盒去尝试,直到我们得到我们想要的结果。
经过几千上万次尝试之后,最终会得到符合要求的输入值72533。
结论:靠给定的输出结果来猜测输入值是极其困难的,但给定输入值来推测输出结果又是非常容易的,只要把东西放入黑盒就能立马得出相应的输出结果,并且放入同一个数字,黑盒都会吐出同一的结果。
如果我给你一个数字72533,然后问你:“这个数字,输入这个黑盒之后,是否会产生一个以三个 0 开头的字符串结果?”要得出答案难不难?是的,一点都不难。要做的就是把这个数字放进去,然后查看在右边能得到什么,就这么简单。
所以黑盒最重要的属性就是——给定一个输出值,要算出输入值是极端困难的。但是,给定输入值和输出值,要检验该输入是否会得到该输出,却是非常容易的。
接下来,我们将使用这台魔法黑盒为记账的文件夹产生一把密码锁。
想象一个场景:我给你一个数字20893。然后我问你:“你能不能找出一个数字,加上装在第一个数字20893以后,一起放进黑盒,最终会给我们一个以三个 0 开头的字符?”
这跟我们在之前看到的很相似,而我们已经知道,算出这样一个数字的唯一方法就是穷举每一个可能的数字。
又通过N多次尝试之后,我们会偶然发现一个数字,比如21191,加上20893以后(比如:21191 20893 = 42084)输入黑盒,将产生一串符合我们要求的字符。
在这个例子中,数字 21191 就成了数字 20893 的密码锁。假设现在有一张纸,数字 20893 写在上面。为了封印这页纸(比如:使得没有人能更改这页纸上的内容),我们将锁一个带有标签 ‘21191’ 的密码锁锁在上面,一旦密码锁数字(比如:21191)被锁在纸上,这页纸就被封印了。
小知识:密码锁数字又被称为“工作量证明”,意思是,这一数字证明了为了计算出它来已经付出的努力。简单来说,这也就是我们平时经常听说的“挖矿”的原理之一。
其实,在比特币等靠工作量证明来实现“挖矿”的区块链项目中,每个矿机就是扮演着一个人,他拿着纸和笔,在给定某个结果(比如上文中的00078)的前提下,去尝试到底放进去哪个数字到黑盒能得到00078这个结果。谁先算出21191这个正确答案,谁就是获胜者,谁就可以拿到这个密码锁去封印这个文件夹的权利,并获得一定的奖励。
并且,如果任何人想验证这页纸是否已经被替换了,他需要做的不过是将这页纸上的内容,与密码锁数字加在一起并输入那个黑盒;如果黑盒给出了一串三个 0 开头的字符,那么内容就没有被改变。如果出现的字符不能满足我们的要求,我们就可以丢掉这页纸了,因为它的内容已经有了水分,没有任何用处了。
原文: WTF is The Blockchain
作者: Mohit Mamoria
http://www.btb8.com/rookie/1907/60853.html