区块链入门

本文旨在科普区块链的本质是什么。希望大家读完之后,能弄懂什么是区块链、什么是挖矿、区块链的出现到底解决了什么痛点、未来可能的落地场景等问题。

为了方便理解,我在描述时做了很多简化,论述不是特别严谨。见谅。如有问题,可直接联系我。

开始之前

开始之前,先给大家普及一些术语。

  • Hash(哈希)

Hash,也叫做散列。就是把任意长度的输入,通过散列算法转换成固定长度的输出。不同的散列算法也就是对应不同的Hash算法,目前常见的有MD5,SHA1,SHA256等。举个例子,“blockchain”的SHA256值是ef7797e13d3a75526946a3bcf00daec9fc9c9c4d51ddc7cc5df888f74dd434d1。这种算法的好处就是,我可以很容易计算出某个输入的哈希值,但是很难通过哈希值还原出原始的输入。

区块链的本质

在我看来,区块链是由三大块内容构成,即分布式数据库、不可更改的数据结构和共识算法。很像是一个超慢的分布式数据库,只是这个数据库中的数据无法修改,往这个数据库里添加数据需要经过节点共识。

我们分开看

  • 分布式数据库

拿比特币举例,它的账单数据对整个网络都是透明公开的,任何人都可以拥有它的备份。

  • 不可更改的数据结构

刚刚提到钱包中其实存储着账单数据,那这么多条账单数据,我们如何串联起来,同时又要保证里面的每一条数据都没被修改过呢?

Block信息

我找了一个比较新的区块(可以理解成是「单条账单记录」),我们可以看到这里面有四个哈希。其中Previous Block和Next Block分别表示当前区块的上一个区块的哈希值和下一个区块的哈希值。如下图所示:

[图片上传失败...(image-211a0-1545826223773)]

你看,每一个区块都是这样串起来的。完全就是一堆「区块」的链条。这样设计的好处就是已经上链的区块,它的内容都不能篡改,一旦篡改某一个上链的区块,就需要把该区块之后的所有区块的hash值全部计算,而且还需要通过工作量证明(POW)。这个工作量实在太大了。

  • 共识算法

我们仍以比特币举例。比特币在Block的生成过程中使用了工作量证明(POW)机制。就是说获取正确的Block Hash需要进行大量的计算(即挖矿),计算时间也是跟计算机的哈希运算速度有关。当某一个节点算出的时候,它就会得到相应的奖励(目前是12.5个BTC)。所以计算正确的Block Hash其实就是一个概率事件。

这三块内容构成了区块链。

区块链的特点

从上述的介绍中,我们可以看出区块链具有以下特点:

  • 去中心化
  • 账本公开透明
  • 不可篡改
  • 匿名性
  • 区块确定有延迟
  • 需要大量的底层节点

分叉

分叉可分为硬分叉和软分叉。软分叉可以算是对区块链网络的升级,而且向前兼容。硬分叉则是链的参与者意见不一,通过代码升级,分叉成两条完全不同的链,不再向前兼容。举个例子,城市扩建一条窄路,既可以新增辅路(软分叉),又可以直接换个地方建一条更大更宽的路(硬分叉)。

[图片上传失败...(image-4514b4-1545826223774)]

上图就是在硬分叉下,区块的下一个Hash指向了两条链,而且这两条链都在各自增长。比特币现金就是比特币分叉的产物。

现存问题

  • 51%攻击是怎么回事?

我们假想一个场景,我拿着手机去瑞幸咖啡买了一杯咖啡,我给收银员Jolie转了0.00081个币(0.00008个币是用来购买咖啡,0.000001个币用来支付手续费)。我给Jolie展示转账之后,Jolie把咖啡端给了我,我就离开了咖啡馆。

正常情况下,这笔交易会被广播到整个比特币网络中,等待上链。此时,矿工拿到这个交易请求之后,会尽快通过计算哈希值来争取记账权,然后将交易打包成一个区块,并上传到整个区块链网络中。同时,矿工也会拿到这笔手续费。

但是,我是个超级大Boss,手中握有整个网络50%的算力,我不想付这笔咖啡钱了。就在一些节点收到矿工的广播并记录到自己的账本时,我发动自己的算力,把这笔交易中的接受地址改成自己,并把这个交易请求广播到网络中,这个请求也会被矿工记录到区块上。因为我手中拥有51%的算力,这个伪造的区块加入主链之后,这条链会比之前的那条正常链要长,根据比特币的原则,这条伪造的链会成为主链,这笔交易也就成真实的了。

当然,在这一切发生时,我已经端着我的咖啡到公司开始搬砖了。但是,大家发现没有,我使用手中的全部算力,仅仅是更改了一笔交易(这里发生的场景也就是「双花」)。与其这样,我远不如遵守规则,收取手续费,而不是破坏规则。

  • 如果参与挖矿的人更多,或者更少,挖矿的收益会怎么样?

在Block Data中,其实还有一个字段,叫做difficulty,它决定了挖矿的难度。全网算力越大,这个值越大,挖矿难度越大;算力越小,这个值越小,挖矿难度越小。根据算力的变化,每两周会调整一次难度。

[图片上传失败...(image-2d9520-1545826223774)]

从创世区块开始到现在的难度变化可以见下图:

难度变化
  • 比特币会被挖完吗?

准确来说,比特币并非是被挖完了,而是说算出新的区块,获取不到对应的奖励了。
按照当前的设计来算,2040年比特币会被「挖完」。

通过本文,大概介绍了区块链技术层面的一些细节。下一节,我们将介绍一下当前区块链的应用以及问题。

本文首发于kii.io。
专注数字货币、高并发、中间件。欢迎关注微信公众号。

技术公众号

你可能感兴趣的:(区块链入门)