写点什么

大话区块链和比特币的技术原理

用户头像
麦叔
关注
发布于: 2020 年 05 月 10 日
大话区块链和比特币的技术原理

前言:区块链大热之后,似乎淡出,但央行推出数字货币再次把区块链推上风口浪尖。本文用大白话,简单明了的讲解区块链和比特币的技术原理。



历史

说到区块链,不得不提一下比特币。我们来看几个比特币的历史事件:

  • 2008年10月,署名为Satoshi Nakamoto(中本聪)的人发表了一篇名为“Bitcoin: A Peer-to-Peer Electronic Cash System”的论文。论述了比特币的技术原理,也就是区块链的核心原理。这个文章大家可以在网上搜到。

  • 2009年1月,中本聪发布了比特币软件。他随即创建了区块链上的第一个数据块Block,这个Block被称作创世块(Genesis Block)。因为创建了这个数据块,他获得了50个比特币的奖励,这就是传说中的挖矿赚金币。一直没有人知道他具体是谁。后来他就慢慢消失了,他拥有至少100万个比特币。退休啦!

  • 发布当天,一个名为Hal Finney的哥们下载了比特币软件,中本聪转给了它10个比特币,这是比特币软件上第一笔交易。

  • 2010年5月22日,名为Hanyecz的人做了第一个现实中的比特币交易,他用10000个比特币买了两个价值25美元的披萨,平均每个比特币价值0.008美元。

  • 之后比特币价格扶摇直上,最高达到近20000多美元。

比特币现象引领了区块链技术的热潮,区块链技术以中本聪的论文为核心基础,当然后面大家也有很多改进和创新。



定义

区块链是一种去中心化的数据库,同一份数据在参与者的电脑上都复制了一份;数据一旦被写入区块链,就很难被修改;不同电脑上的数据不断相互同步并验证数据的有效性。



区块链没有官方的定义,我这个定义很清晰的说明了区块链技术的3个核心特征。我们一个个来看。

一种数据库

区块链是一种去中心化的数据库,同一份数据在参与者的电脑上都有保存。

这里有两个要点:它是数据库,通俗点可以理解成账本;它是去中心化的。



先说去中心化,简单说就是:这个账本所有相关人都人手一份。没有一个中心人物掌握和控制这个账本,人人平等。大家想想我们的银行系统呢?这个账本只有银行有,你没有,是中心化的。



它是一种数据库,什么样的数据库呢?它是由数据块Block组成的,这些数据块前后相连,连成一个链,所以被称为区块链。对于懂技术的同学,这就是一个链表。





这些块里面可以放任何数据。对于比特币来说,放的就是交易信息:

张三转给麦叔3个比特币

李四装给麦叔4个比特币

王五转给麦叔5个比特币



比特币的第一个块是由中本聪创建的,根据比特币软件的规则,因为他成功创建了这个数据块,系统奖励给他50个比特币。系统的比特币哪里来的?是凭空创造出来的,就像中央银行印刷钞票一样。



比特币的参与者就是在努力的去创造数据块,因为创造数据块可以奖励比特币。这就是挖矿。但是创造数据块没那么容易,需要不停的挖呀挖呀,这个等下我会说。



现在比特币一共有多少个Block呢?截止到我正在码字的这一刻,比特币一共有553568个Block。最后这块是一个中国哥们挖出来的,这个数据块里面包含了2795笔交易数据,为此他获得了12.5个比特币的奖励。

奖励每4年就会减半,直到最后不再有奖励。所以越来越难挖矿到比特币,发财要趁早啊!比特币最后一共有2100万个,然后就不会再有新的比特币了。

比特币的信仰者认为比特币最后总量是固定的,所以不会有通货膨胀,因此具有价值。

有兴趣的同学可以在这里查看比特币的Block信息:https://www.blockchain.com/explorer



很难被修改

区块链的数据块,一旦被挖出来了,就很难被修改,因为它的数据块不是一般的数据块,是数据块中的战斗块!来看一下结构:

图中有两个数据块,我用3个要点来说它是怎么不一般:

每个数据块都有一个指纹(懂技术的同学,指纹就是Hash)。这个指纹是把这个块里面的所有数据经过一种算法转换成的一个64位的字符串。

一旦数据块里的任何数据变化了,这个64位的指纹都会发生完全的变化,这就是我说的雪崩效应。

这个算法就是哈希算法,常用的是sha256(傻256)。我们来试验一下:

数据是:中本聪转给麦叔88个比特币”

Hash是:90621272001aed0b5f986943adc34ce2feae5d1e9ed9684f73d1ec1673de3247

如果聪明的我,把数据修改一下,悄悄加了1个0,Hash值将会变得完全不一样。

数据是:中本聪转给麦叔808个比特币”

Hash是:0bdaababb3efa3149f30c0f45319fcf0249f4d289d071b93e7694b5c3471a179

有兴趣的同学可以自己网上找个在线计算器玩一下,比如这个地址:https://emn178.github.io/online-tools/sha256.html



后一个数据块保存了前一个数据块的Hash,这也就是说,如果前一个数据块变化了,后一个数据块保存的Hash和前一个数据块就完全不同了。区块链软件会进行这个验证,如果不同就说明数据是无效的。



如果我把后一个Block修改一下,加上新的前一个块的Hash呢?那么根据要点1,后一个块的Hash就又变了,造成了再后一个块又无效了。造成多米诺骨牌式的崩塌,雪崩效应加剧了!

每个块的Hash必须以多个数字0开头,加大计算Hash的难度。要点2提到修改了某Block后,就需要修改所有后续Block中的Hash。但如果计算机运算速度快,就一个个修改过去吧,计算Hash是非常快的。比特币到现在也只有55万个Block,找一台怪兽机来恐怕一会就都计算好了,就成功篡改了数据。

所以比特币引入了要点3:不是你随便计算出来一个Hash就可以的,你计算出来的Hash必须以若干个0开头(假设6个0开头)。

Hash不是根据数据自动算出来的吗,怎么能随便修改成0开头呢?所以有了挖矿专用数字。在每个Block中添加了一个额外的数字,这个数字你可以随便改,直到你能让整个Block的Hash是以6个0开头。

所谓的挖矿就是找到这个数字,让Hash以6个0开头。就是我图中下面标的绿油油的绿宝石一样的数字。

具体几个0呢?具体几个是会变化的。比特币设计的原则是整个网络中大约每10分钟能有1个人挖出来1个Block。如果挖的人少了,就会减少要求的0的个数,这样就容易挖点,相当于降低要求;如果挖的人多了,就会增加难度,要求更多的0。软件会定期自动调整要求的0个数,比特币是每周调整一次。



这样综合起来看:

你要改一个数据,需要从新计算当前Block的Hash,为了保证它的Hash符合0开头的条件,你要不停计算,整个参与比特币网络的人要大约10分钟才能计算出来,你自己机器肯定需要更长时间,假设10天吧;10天后你找到了,然后你又要10天的时间计算下一个数据块的。如果你修改的Block后面有1000个Block,你需要10000天才能算完。



10000天后,大功告成了吗?问题是,在这10000天时间里,整个网络上已经又新加了大约10000x24x6个新的数据块了。你还能跟得上吗?



同步机制

就算你可以修改自己的那份数据,也都计算出了Hash,但你还需要和网络上的其他参与者同步。



同步是一个复杂的过程,但至少验证以下几件事情:

是否每个Block都有符合条件的Hash,就是以多个0开头并且确实是根据Block的数据计算出来的。

这里注意:计算Hash,也就是挖矿是很费时,但是验证是否正确是非常快的!

是否每个Block都保存了正确的前一个Block的Hash。

比特币等数字货币还会验证里面的转账交易是否合理,比如张三要转给我3个比特币,但他实际上1个币都没有,那交易肯定不合理了。

最后还会比较谁的有效的链条更长。如果出现不一致,谁的长听谁的。

所以我们前面讨论的情况,修改数据的人几乎永远跟不上大部队的长度,除非他的计算能力超过了所有其他人的总和!



应用

现在比特币的价格飞流直下,反对者认为它的价值可能会归零。不管比特币如何,区块链技术都是大有用武之地的,否则我也不会写这么长了吧。



有人这么说:人工智能(AI)技术是生产力的革命,而区块链是生产关系的革命,因为它去除了中心机构,从软件底层机制上解决了人与人之间的信任关系。



一旦理解了它的本质,就可以在很多场景上去应用它,而不仅仅是比特币这样的数字货币,比如:

  1. 产品(药品,食物)溯源

  2. 我们前面说的警察档案库

  3. 投票系统

  4. 供应链系统等

就具体的应用案例,我们后面可以再细聊。



欢迎在InfoQ平台关注我,也可以关注我的公众号:麦叔编程。

发布于: 2020 年 05 月 10 日阅读数: 1639
用户头像

麦叔

关注

还未添加个人签名 2018.10.18 加入

还未添加个人简介

评论 (5 条评论)

发布
用户头像
哈哈哈哈,最后那个master的选举图是认真的吗
2020 年 05 月 11 日 21:05
回复
道理是一样的😆
2020 年 05 月 12 日 07:05
回复
since u try
2020 年 05 月 15 日 16:07
回复
用户头像
感谢分享原创内容,文章我推荐到InfoQ首页了。
2020 年 05 月 11 日 14:46
回复
感谢推荐!
2020 年 05 月 11 日 16:44
回复
没有更多了
大话区块链和比特币的技术原理