zoukankan      html  css  js  c++  java
  • 区块链-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

    IT黑马
  • 相关阅读:
    prim最小生成树
    拓扑排序
    矩阵快速幂
    算法导论————EXKMP
    BZOJ3376: [Usaco2004 Open]Cube Stacking 方块游戏
    BZOJ1711: [Usaco2007 Open]Dining吃饭
    USACO2002 Open:雄伟的山峦
    BZOJ1650: [Usaco2006 Dec]River Hopscotch 跳石子
    BZOJ1734: [Usaco2005 Feb]Aggressive cows 愤怒的牛
    BZOJ2016: [Usaco2010 Feb]Chocolate Eating
  • 原文地址:https://www.cnblogs.com/hmit/p/14480432.html
Copyright © 2011-2022 走看看