比特币的“三颗彩蛋”

作者: 吴智宇 | 来源:发表于2018-06-11 21:09 被阅读21次

    本文转自个人微信公众号 牛币辞典

    新东方曾研究出一个教师能力发展模型 ,他们认为优秀的培训老师应该具有五项基础能力,分别是专业知识、课程设置能力、呈现能力、个人魅力以及心态调整能力。于是他们针对不同的能力给新晋老师进行为期3个月培训。然而3个月后,一部分老师迅速变得很牛,而另一部分则很一般。能进新东方的老师,肯定都异常勤奋。之所以产生这样的差异,研究后发现,在于他们学习路径的不同。那群比较平庸的老师,他们把百分百的时间都投入到其中一项能力的训练当中,比如专业知识,于是他们学了三个月,觉得不够,还想再学一年。而另一群老师,他们懂得“二八法则”,即一个领域里20%的知识囊括了80%的内容,所以他们迅速学习每个领域中最精华的20%的知识,结果花同样多的时间,他们掌握了5项能力80%的内容,于是他们成为我们今天所熟知的李笑来,罗永浩,马徐骏,李尚龙。。。。。。

    那么,假如要采用“二八法则”来学习比特币,“精华20%”的内容肯定在:

    比特币的原版白皮书:《Bitcoin:A Peer-to-Peer Electronic Cash System》

    这是最原汁原味的知识。只不过,要看懂这版白皮书,你可能需要懂一点英语、懂一点加密学、懂一点编程、懂一点拓扑学、懂一点分布式计算、懂一点金融等等。但是不用着急,这篇文章旨在让更多这些领域以外的人,充分理解比特币的技术。

    前段时间有一部很火的电影叫《头号玩家》,讲的是一个天才游戏设计师哈利迪去世前在其设计的游戏《绿洲》里藏了3颗彩蛋,根据哈利迪提供的线索,最先找到这些彩蛋的玩家,将继承哈利迪的巨额遗产。比特币创始人中本聪同样在比特币白皮书里藏了3颗彩蛋,找到它们,你就能更加深刻地理解比特币的运作原理。而线索就是,这三个彩蛋分别解决了3个不同的问题:

    比特币网络在不依赖第三方的情况下:

    1.独立完成转账。

    2. 避免双重支付。

    3. 提高系统效率。

    比特币作为区块链最大的应用,外面其实已经有很多参考资料了,然而我觉得,大多数参考资料要么写得太过技术化,让人难以吞咽;要么又太过大白话,让人摸不着头脑。在这篇文章我将尝试以一种让读者尽量舒服的方式,把正确的知识喂到读者口中。当然,有的地方为了用类比把知识讲个更清楚,难免会导致篇幅稍长。

    三个彩蛋本可分成三篇文章来写,然而我是个比较急功近利的人,想早点写一些别人没写过的东西,但是作为一个自我标榜“区块链百科全书”的公众号,我又得拿出点“真功夫”给别人看,所以索性一次性把最基础的东西放在一篇文章写完了。如果觉得一次看完有点累,可以先关注本公众号,然后分开看。

    在寻找彩蛋之前,不妨先看看比特币诞生以前的时代背景。

    被“大佬”支配的时代

    每一项惊世骇俗的发明,背后都有其社会原因。《头号玩家》里的大型VR游戏《绿洲》之所以风靡全球,是因为当时社会正处于混乱和崩溃的边缘,大家需要依赖虚拟世界来逃避现实。而比特币在这些年受到的关注度之所以呈井喷式爆发,是因为它是世界上第一个无需依赖第三方就能运作(简称“去中心化”)的电子货币系统。

    这一切都要从互联网开始说起。互联网的出现,使得信息的流动性大大增加,随之而来的是电商的崛起。但在电商出现初期,它们遇到的瓶颈就是买家和卖家的信任问题。比如在淘宝上,买家和卖家互不相识,谁能保证对方不会拿了钱或者拿了货后就跑路了呢?于是这时候,支付宝跳出来说:我来给你们做中间人吧,买家先把钱给我,卖家发货后,我再把钱给打给卖家。

    这相当于大家把对陌生人的信任问题嫁接到支付宝身上。只要所有人都相信支付宝不会跑路,信任问题就能得到解决。在比特币出现以前,世界上所有的主流网络支付系统,包括支付宝、微信支付以及世界上所有的银行转账系统,本质上都要依赖某个极具权威的“大佬”才能顺利运作。

    打个比方,老王今天想要通过中国银行给小红转5块钱,中国银行会先查看老王的账户是否超过5块钱,如果没有问题,系统就会在老王的账户扣除5块钱,在小红的账户加上5块钱。而中国银行就是这个系统里的“大佬”,所有的一切操作,都离不开它。

    这当中会产生两个比较严重的问题:

    第一,用户的命运完全被这个系统大佬支配。大佬掌握用户大量的私人信息,有权力把用户的收到的钱给撤回,随意冻结用户账号等等。。。。。。

    第二,这些大佬,为了使得系统正常运行,他们要雇佣大量的员工,建造大量的高楼大厦,占用巨大的社会资源。

    比特币的背后不是一家公司,而是一个网络。这个网络覆盖全球,他不从属于任何大佬,独立运行。这也是为什么尽管那么多人唱衰它,想弄死它,他至今还是昂首挺胸地高达5万人民币一枚,且越来越多的机构已经开始接受比特币的支付。“一币一嫩模”早已不是神话,“一币一平方”在绝大多数城市也都实现了,那么未来会不会“一币一奥迪”,“一币一别墅”呢?

    能够不依赖第三方完成交易,比特币一定是找到了一种新的办法来解决陌生人之间的“信任问题”。至于它是怎么做到的,找到3个彩蛋,你就知道了!出发以前,最后再回顾一次线索:

    在不依赖第三方的情况下:

    1. 独立完成转账。

    2. 避免双重支付。

    3. 提高系统效率。

    彩蛋一:一个魔法,一对钥匙。

    在互联网上,信息的传递有三个主要特点:

    1. 容易攥改。

    2. 来源不明。

    3. 随意复制。

    然而转钱可不像发信息那么儿戏。

    电子转账生于互联网,却绝不能遗传互联网上面的这些特性,这就好比你自己生性懒惰,却必须要求自己的儿子勤奋向上一样。如果要完成一笔转账,针对互联网这3个固有的特点,我们必须要一一确保:

    1. 转账金额不会被攥改.

    2. 汇款人能被追溯。

    3. 同一笔钱不能同时转给多个人。

    最后一条是第二个彩蛋“避免双重支付”的内容,为了找到第一个彩蛋,我们暂时只需要关注前两条即可。

    仔细观察一下,前两条要求的内容是不是跟发送e-mail很相似?完整地发送一封e-mail,我们要保证:

    1. 邮件的内容没有被篡改。

    2. 发件人能被清晰地追踪。

    因此,如果我们知道e-mail是如何做到以上两点的,我们就能找到第一颗彩蛋。

    1. 如何保证内容没有篡改?

    指纹是每个人身上独一无二的标识,世界上找不到两个指纹完全相同的人,因此警察能够通过指纹迅速识别罪犯的身份。如果在数字世界里,每一份文件也有其独一无二的“指纹”,那么我们就能像警察一样通过识别指纹去辨别文件。

    加密学家早就发明了一种“魔法”,能给每个文件赋予一份专属的指纹。这个魔法叫“哈希算法”(Hash function)

    任何一份文件,不管是文字、图片、音频还是其他内容,通过哈希算法都能得到一串很长的数字,称为“哈希值”。这个哈希值如同文件的“指纹”一样,文件里哪怕一个标点符号的变动,都会直接导致哈希值的变更。

    哈希算法有两个重要特点,一个是不可逆性。你只能从数据 (A+B+C…)推导出哈希值,但不能反过来,从哈希值去还原数据。另一个是不可预测性,你无法预测什么样的数据会得出什么样的哈希值。

    基于这两个特点,在发送邮件前,发件人把文件的哈希值计算出来,并把这个哈希值连同文件一起发送出去。收件人在收到邮件后,用同样的哈希算法再重新计算一遍文件的哈希值,然后这两个哈希值比较一下,如果两者一样,就能证明文件还是原本的文件,没有任何的改动。

    2. 如何追溯发件人?

    老师常常要求小朋友写完作业后让家长签名。这其实是个高招,因为假如后来老师发现小朋友的作业没有做完,或者完成质量很差,家长就要承担一部分的责任。因为作业本上的“签名”代表家长已经检查过并认可作业的质量了,家长无法抵赖。

    在发送电子邮件的时候,发件人同样会给邮件“签名”,来表示这封邮件是由他本人发出的。然而,这个签名肯定不能跟我们现实世界的签名一样,毕竟现实生活中小孩都能伪造家长的签名了,更何况在技术专家浩如烟雨的数字世界?

    在数字世界了,人们不用笔签名,而用“钥匙对”(Keys pairs)签名。

    每个发件人都有自己专属的“钥匙”,称为“私钥“,使用这个”私钥“可以生成”公钥“。顾名思义,“私钥”是私有的,而“公钥”是公开的。”私钥“可以用于签名,”公钥”则用来验证签名。发件人用他自己的“私钥”来给邮件”签名“,而其他任何人都能用发件人的“公钥”来验证这个签名。如果匹配,就能证明邮件来自于发件人。

    如果把上面所讲哈希算法以及钥匙对合并,就得到了我们的第一个彩蛋:数字签名。

    比特币就是依赖数字签名来完成最基础的交易的。如果现在小红要转一个比特币给老王,流程是这样的:

    这样,在转账过程中,即保证比特币的数量不会变动,又能证明转账源于小红。

    比特币网络没有“账户“一说,只有”钱包“。但钱包就像银行账户一样,既能用来发比特币,也能用来收比特币。钱包能生成”私钥”,“私钥”生成“公钥”,“公钥”又能生成“地址”,当我们要转比特币给别人时,通常是从我们钱包生成的地址转到对方钱包的地址上。每次交易,钱包都会生成一个新的地址。钱包通过把过去所有生成的地址里,所有发生的交易从上往下扫一遍,然后加总这些地址的收入支出来得出钱包的比特币余额。

    这里需要特别指出的是,“私钥”对于比特币使用者来说,就跟你的家门钥匙一样。任何人只要知道你的私钥,就能拿走你钱包里所有比特币。

    以上,通过比较发送邮件与电子转账系统的特点,我们成功找到了第一个彩蛋:数字签名。

    然而,我们都知道发送邮件有个特点,你可以单发,也可以群发。同一份邮件,你可以同时发给多个人。但比特币不行,如果一个比特币可以同时发给多个人,比特币的网络就毫无价值可言,这就是著名的“双重支付”的问题。过去,解决这个问题唯一办法就是依赖一个可信第三方;而比特币最革新、最迷人的地方,就是他采用了一种新的共识机制来解决这个信任问题,而这也是第二颗彩蛋的核心内容。

    彩蛋二:无能的坏人

    要避免“双重支付”,唯一的办法就是要掌握整个交易历史。一旦系统监测到某个比特币已经被支付过了,就能防止其二次支付。

    在过去,整个交易历史的账本掌握在系统大佬的手里,大佬有着绝对的权威。交易的先后顺序、合法性等等,通通由大佬决定。

    而在比特币的网络里,人人平等。整个比特币的交易历史账本由大家共同拥有,共同维护,共同监管。因而这个账本具有公开透明,不可攥改的特点。

    这里有几个关键问题:

     第一,这个账本是以什么样的形式存在的?

     第二,谁来负责记账呢?

     第三,不依赖第三方,如何让所有人都认可这本账本?

     第四,假如出现不同版本的账本,那应该相信哪一份?

    在这里,区块链登场了。

    区块链是17年以来火得一踏糊涂的词汇,有人说它能改变世界,是互联网2.0;有人则说它的技术充满缺陷,是炒作,是骗局。

    区块链作为比特币的底层技术,本质上是一份历史不可篡改的账本。

    你可以把区块链的想象成是一列静止的火车,开始的时候只有一列车厢,车厢用于装货。当一列车厢装满了,马上就会在后面加一个新的空的车厢,用于装新的货。

    在区块链中,“区块”其实就相当于火车的车厢,比特币上所有的交易信息都会放在区块里。每十分钟会出一个新的区块,用于记录新的交易,从第一个区块到最新的一个区块,形成一条链,所以形象地叫区块链,而所有区块上的信息综合起来,就是整个比特币的交易历史。

    那么,谁来负责把新的交易打包到新的区块上呢?也就是该由谁来记账的问题。这个问题之所以重要,是因为拥有记账权的人对整个账本的影响是巨大的。

    对于这个问题,答案是:任何人都有记账的机会,但是这个机会谁抢到谁获得!你可能曾经多少听过“比特币挖矿”这事儿,隔壁老王买了几台矿机偷村里的电挖比特币。其实“挖矿”的本质就是大家在争夺记账权的过程。

    这个过程大致是这样子的:

    1. 当新的交易向全网公布时,“矿工”们会把这些交易打包进区块里。

    2. 这时候,系统会给所有矿工出一道计算题。

    3. 矿工们争先恐后地抢着解开这道题(当然实际上解题的是矿机)。

    4. 最快解开的人,向全网公布他的结果,并得到区块的记账权。

    5. 其他矿工验证这个计算结果,如果没有问题,说明这个区块的交易信息是被准确记录的。

    6. 矿工们开始沿着这个区块去打包新的区块,以此表明自己接受了这个区块。

    7. 系统将在下个区块的第一笔交易上,给记账的矿工一定比特币的奖励。

    计算题的难度会随着大家计算能力的增加而增加,使得解题时间大致维持在10分钟左右(出一个区块的时间)。

    关于计算题的内容,由于比较专业,在这就不赘诉了。你需要知道的是,这道计算题的内容是跟区块上打包的交易信息有关的,只有打包相同交易信息的人,才会得出同样的结果。而且这道题有一个特点就是:算出来很难(要大约十分钟),而验证却很简单。

    上述的这个过程实际上就是我们要找的第二个彩蛋:POW(Proof-of-work)机制,中文名为“工作量证明机制”

    你想要到外国读书,你雅思就要考到7分,来证明你在英语方面是付出过努力的,“7分”这个分数就是你的“工作量证明”。同样的,你想要在区块上记账,你就得付出算力去解计算题,解出来的“答案”就是你的“工作量证明”,否则别指望动账本一个指头。

    这样就的好处就是:那些心怀鬼胎的人,根本无法随意攥改区块链账本上的信息。

    我们不妨看看,在POW机制下,如果有人想干坏事,会发生什么。干坏事的人有两个方向:

    第一,伪造最新的交易。

    如果“坏人”想要把一笔没有发生的交易写进最新的区块里,比如伪造隔壁老王给他转了2个比特币。由于他给区块多打包了这样一笔交易,他解计算题得出的答案跟那些没有记录这笔交易的人相比,肯定是不一样的。那么当他向全网公布他的答案时,其他矿工是不会接受他这个区块的。

    如果这个坏人执意沿着他自己“造”出来的区块打包新的交易,就会在原本的那条区块链上,分叉出一条新的链,这条链上也会有属于自己的“比特币”,这就是“分叉币”。只不过,如果没有足够的算力支持以及认可,绝大多数分叉币的价值为0。

    第二,攥改过去的交易。

    坏人想把几个月前付给老王一个比特币的交易记录在区块上抹去,这几乎不可能实现,这也是为什么说区块链这本账本具有“历史不可攥改”的特点的原因。

    区块链记账跟火车车厢装货,在逻辑上有一个显著的差异的。在一列火车上,你可以挑任意一个车厢来装货卸货,但区块链不行,在区块链上你只能在最新的一个区块上操作,你要修改任意一个以前区块的数据,都会导致这个区块之后的所有数据要一个一个重新打包。就好比你由下往上堆叠积木,你要更换当中任意一个积木,都必须要先把这个积木上面的所有积木都拿掉,换好后,再重新堆回来。

    这是因为,每一个区块都记录了“上一个区块的哈希值”,而随后,这个“哈希值”又会连同这个区块上的交易数据一并哈希,得到的哈希值将写在下一个区块上。这样,每一个区块都跟前一个区块的数据息息相关,由此形成一条连续不断,逐渐增强的链条。

    也就是说,如果其中一个区块的交易数据变了,那么由这个区块得出的哈希值就会改变,链条就会断裂,由此产生的连锁反应就是,之后区块的哈希值全变了。

    在区块链中,只有最长的那条链是被认可的。于是,这个坏人为了生成最长的链条,必须重新计算之后所有区块的哈希值,一个一个地重新打包交易数据,而且速度要快于当下那条最长、算力最集中的链。

    然而由于POW机制的存在,他几乎不可能做得到了。因为坏人此时要往上堆叠的不是积木,而是码头里几顿重集装箱,坏人要换这里面其中一个箱子,费的力气不是一般的大,更何况新的箱子还在陆陆续续的加进来。

    只有一种情况是有风险的,那就是坏人搬箱子的力气大于所有好人的力气之和。换句话讲,就是坏人所集合的算力大于好人的算力。这样坏人就有可能控制最长的那一条链,俗称“51%攻击”(坏人集合的算力超过总算力的50%。),在这种情况下,比特币的“去中心化”的特性就会消失,但是这对于现在的比特币来说,几乎不可能发生。

    而且,即便坏人集中了如此大的算力,他依然可能不会破坏规则,这是由比特币的奖励机制决定的,好的规则鼓励好的行为。

    对于矿工,挖矿一般会有两项收益,一份就是抢到记账权后奖励的比特币,另一份就是收取的矿工费(转账比特币的手续费)。当坏人们集中了超过50%的算力,他跟着规则走,能获得的收益是巨大的。这时候,他就会权衡,是破坏规则,使得手中的比特币贬值划算,还是跟着规则走,狂赚比特币划算。

    POW机制的出现,使得有血有肉、有利益有私心的“大佬”不再是解决信任问题的唯一答案。如今我们多了一种选择,就是相信没有感情的“代码”。之所以说区块链潜力巨大,是因为区块链使得人与人之间的信任成本大大降低,而一个陌生人能更好协同合作的社会必然具有更大的能量。

    总结一下:区块链是比特币的账本,POW(工作量证明)使得这本账本获得了“历史不可攥改”的特点,进而解决了“双重支付”的问题。而POW的奖励制度,使得人人都乐意参与到比特币的网络建设当中,增加了比特币“去中心化”的程度。

    彩蛋三:来自男女交配的启示

    如果你耐心的读到这里,并且认真的把前面的内容弄明白,你已经超越很多人。你要知道,在币圈,很多炒币的人真的就只知道一个币名,其他啥都不懂。当然,这种人因为无知,注定短视,不可能长期拿得住币,而在币圈,最赚钱的方式永远是“买入,然后忘记”

    而如果你再把第三彩蛋找到,你已经是小半个比特币专家了。

    你已经知道比特币是怎么完成交易的了,也知道如何避免双重支付。但是你有没有想过一个问题,随着时间的推移,整条链会越来越长,上面的装载数据会越来越多,最终导致的结果可能是,你想要验证曾经发生过一笔交易,你就要下载一个非常臃肿的数据库,这无疑是影响效率的。

    打个比方,你想证明给老王看你早就把昨晚的夜宵钱转给他了,于是你就到区块链上去找这笔交易。

    首先,你要先下载整条区块链的数据,找到这笔交易所在的区块,然后再对着这些区块里的交易由上往下搜索一遍,最后找到你转给老王的那笔交易。

    今年比特币9岁了,如果比特币被设计成这样,那他如今估计会像90岁老人一样反应迟钝,行动缓慢。

    中本聪可没有这么做,他采取了另一种管理数据的方法。有趣的是,这种数据管理的方法居然跟大自然男女交配之道有极其相识之处。

    来看看下面这份族谱:

    你的曾祖父跟你的曾祖母为爱鼓掌生出你爷爷,你爷爷跟你奶奶生出了你爸爸,你爸爸又跟你妈妈生出了你。于是你遗传了你曾祖父1/8的基因,通过到医院做DNA检测,是可以确定“你的曾祖父就是你的曾祖父”。

    第三个彩蛋是默克尔树,比特币就是采用默克尔树来管理数据的,而默克尔树的原理与结构都跟族谱十分相识。

    上图就是莫克尔树的结构图,H代表哈希值。在一个区块里,每一笔交易都会先进行哈希,然后得到这些哈希值会两两配对,生成新的哈希值,新一代的哈希又会继续两两配对。。。以此类推,最终得出一个唯一的哈希值,被称为“根哈希”(Root Hash),根哈希会记录在区块上。

    这么记录交易数据的好处是:

    第一,任何一笔交易的改变都到导致其哈希值的改变,而最终导致根哈希的改变,这就保证了数据的可靠性。

    第二,正如通过测你的DNA可以证明“你的曾祖父就是你的曾祖父”,知道了根哈希,你就可以证明某笔交易是存在于区块里头的了。

    举个例子,如果想证明夜宵钱的确转过去了,你不需要把交易从上往下扫一遍。你只需要找到这个区块的根哈希,然后在向网络节点(保存区块数据的人)索要上图中蓝色方块的哈希值就够了。把它们按照生孩子的逻辑重新进行哈希运算,如果得出的结果与根哈希相同,那么就能够表明这个夜宵钱的转账是存在的,如果不同,要么就是交易确实不存在,要么就是节点给你的数据有误(毕竟可能出现不诚实的节点)。

    每一个区块都有一个区块头(block header),用于记录区块上的重要信息。如果把一个区块比作一个药瓶,那么里面的药就是交易数据,而区块头就是贴在药瓶外面的标签纸。

    这个区块头上面囊括的信息有

    区块高度(4个字节);

    前一个区块的哈希值(32个字节);

    根哈希(32个字节);

    时间戳(记录区块生成时间,4个字节)

    Nonce(与挖矿有关,4个字节);

    困难度(与挖矿有关,4个字节)

    整个区块头,大小只有80个字节,一个字节等于千分之一KB。按照每十分钟生成一个区块的速度,一年下来,整条链上区块头的大小只会增加80 bytes*6*24*365 = 4.2MB 。“区块头”上的数据与整个区块的数据相比,就跟“标签纸”的重量之于整个药瓶的重量一样,要小得多。

    由于没有一个中心化的服务器,区块链的数据是储存在节点里头的。这些节点又大致分为全节点(Full node)轻节点(Light node),全节点需要保存整条区块链的数据,而轻节点只需要保存区块头的数据就够了,相对而言,这要要轻松得多。而我们日常生活中大多数的数据查询业务,通过区块头就能完成。这也是大多数钱包做的事情。

    到此,三颗彩蛋找齐了,他们分别是:

    1. 数字签名。

    2. POW机制。

    3. 默克尔树。

    结语

    前不久,这张截图在币圈流传很广:

    记得某位大佬曾经说过一句话,大概是这样的:

    区块链充满风险,但不参与才是最大的风险。

    是啊,区块链现在还在发展初期,整个区块链行业的总市值都没有苹果一家公司高,说明这里面的潜力还大着呢。

    大家进入这个行业,说不想赚钱那是虚伪的。然而对于投资数字货币,一个很重要的原则就是不懂不投。区块链作为一项新的技术,市面上优秀的参考书籍并不多,因此我希望我的公众号可以成为大家汲取优质知识的地方。

    如果大家觉得我写的不错,希望大家可以关注我,推荐给你们的朋友,我会十分感谢。如果大家觉得我写的不行或哪里写错了,希望大家在后台给我留言,我会汲取意见并及时改正的。

    参考资料:

    1.《 Bitcoin: A Peer-to-Peer Electronic Cash System》 :  https://bitcoin.org/bitcoin.pdf

    2. 《Bitcoin Developer Guide》:  https://bitcoin.org/en/developer-guide#block-chain

    3. 《DEFINITION of 'Block Header (Cryptocurrency)》:https://www.investopedia.com/terms/b/block-header-cryptocurrency.asp

    4.《 Merkle Trees, Simple Yet Powerful》:https://medium.com/verifyas/merkle-trees-simple-yet-powerful-4c44dad19539

    5. 《What are digital signatures?》:https://www.docusign.com/how-it-works/electronic-signature/digital-signature/digital-signature-faq

    相关文章

      网友评论

        本文标题:比特币的“三颗彩蛋”

        本文链接:https://www.haomeiwen.com/subject/ljckeftx.html