laizimo / zimo-article

:books:博客——源于实践,乐于分享,欢迎Star~
1.06k stars 91 forks source link

区块链浅析 #54

Open laizimo opened 6 years ago

laizimo commented 6 years ago

前言

博客停更已经一阵子了,原因林林总总,从毕业到搬家,人生踏入了另一段旅程。今天我们的话题聊一聊区块链。这是我与我毕设相关的主题。大家对于区块链的争议,似乎一直存在。币圈那些陈谷子的事情,影响着区块链的发展。目前,众多区块链团队中,真正在研究区块链应用场景的,少之又少,同样能让区块链应用落地,也需要时间。但是,区块链技术的出现,可以说是一个金融领域和互联网领域的一个里程碑。下面我们来聊聊区块链技术吧。如果你喜欢我的文章,欢迎评论,欢迎Star~github博客

正文

其实,早在比特币大火之前,我就听说过区块链(看过一篇公众号讲述区块链与人才链之间的相关性)。当初,对于区块链的理解,并没有特别深刻,同时也毫不在意。在经济社会中,资本已经能够推动技术的发展了。直到比特币大火时,才对区块链技术感到一丝兴趣。

看过比特币的白皮书,发现区块链技术是比特币的一个基础。同时,毕业设计选择的主题也是与区块链相关的方向,所以,在此聊聊区块链。

简单来说,区块链就是一个分布式的账本,或者说分布式的数据库。这个数据库可以同步到节点网络中的每个节点。用阮一峰老师博客中的一张图来形容,如图:

区块链

这种图中,我们可以看到,之所以说是去中心化,是因为在整个节点网络中,每个节点都是参与者,每个节点都能够进行数据处理的操作,并没有一个统一的中心化服务器来进行业务处理。然后,每个节点处理的结果会被传播到整个网络中去,来同步全部的网络。

区块链的英文比较有意思,叫做blockchain。我们可以将blockchain拆分开来看就是block+chain(块+链)。所以,我们可以先来了解一下区块的内容。

区块

区块是什么?区块就是一个类似于数据库的东西,用来记录数据的地方。所以,每次系统写入数据时,都会创建区块。

下面,我们来看一下一副区块的实例图,如下:

区块

这里开头有个Previous Hash就是用来记录上一个区块的Hash值的。这样就可以上一个区块和下一个区块连接起来。

同时,它也记录了区块的时间和区块内部的Data。Hash值,就是一种加密后得出来的字符串。Hash是一种单向加密,现实中很少出现Hash碰撞的事件。一般而言,Hash值的破解只能使用只能使用彩虹表等手段才能达到。其本身的安全性就是相对一般的加密方法要高的。我们会接触到的Hash加密有MD5加密、SHA128和SHA256。目前而言,SHA256是很难破解的。

说了这么多Hash相关的内容,回过头来说一下Block。我们可以来看一下,实际的一些Block表内容,如图:

区块列表

这是一个测试网络的区块列表,我们可以看到它的block ID就是一个hash值。同时,它具备高度等特殊字段,来记录整个区块的内容大小。

了解了区块之后,我们来看一下区块链的形成。

链的形成

拿比特币举例,交易比特币的过程就是,区块形成的过程。区块的建立,就像账本的数据一样,有了数据就有了区块。同样的,生成区块的过程会产生一定的奖励。下面生成的区块会连接上一个区块的hash,这样可以保证整个区块链的不可更改性。如图所示:

链的形成

如果黑客修改了第51块的内容,那么他就必须修改52块中51的Hash值。同时,修改了52的内容,导致了52本身的Hash值发生了变化。所以,这就导致了一系列的连锁反应。同时,区块链会往整个网络广播整个过程。这样,网络节点中的每个节点都会收到改变,改变自身的区块内容。

这样的设计,可以保证整个网络中的内容没有办法被外力而改变。这也说明整个网络是安全的。那么什么是51%的攻击呢?

我们来举个例子:

假设我具备了全网51%的算力,那么,我可以偷偷的计算出一个这样的区块链,包含我所有的比特币交易到我的私人账户的信息。这个区块链的长度为10,但是我不向全网进行广播。同时,我将所有的比特币放入到交易市场进行售卖。这笔交易记录在正常的区块链中。

当我交易所得美元进行提取时,正常的区块链长度应该是9。而我的隐藏的区块链长度是10,同时,将这个区块链广播到网络中去,然后通过观察网络会认为我后发的区块是正确的,从而到达修改了那笔交易记录的目的。

之后,就是双花问题的解决了。

双花问题

何为双花问题?从表意上来说,就是一个人在同一时间进行了两笔交易。这个问题,一直是支付系统的难点。无论是中心化的支付系统,还是去中心化的交易系统,都得面对这个问题。举个例子:

某某人,手里有20块钱。他同时与两个人进行了一笔20块钱的交易。现实生活中,你可以明确地发现问题。但是,相对于支付系统而言,并发的情况经常发生。一旦一个不完善的支付系统,双花问题是很容易发生的。当然,后端处理过程中,可以通过队列的形式来解决问题。但是,对于去中心化的交易系统而言,这个问题也需要解决。

每一笔交易的产生,都会产生一个区块,那么,往往会发现这么一种情况,如图:

双花

我们可以看到,Block A和Block B就会同时去连接上一个区块。那么,相对于这个问题,比特币系统采用的规则就是选最长的那条链。通常,比特币采用的是6次确认规则。在1小时内,根据10分钟产生一个区块的原则,往往会生成一条6个长的区块。那么,只要确认下这条区块,就可以避免去连接其他区块了。

理论上是,区块链越长,准确性越高。

总结

相对于中心化的高成本的方式,区块链技术可能是一种解放生产力的技术。当然了,区块链的实际落地场景并不多,比特币是为数不多的,真正落地的应用。作为一名开发者,我相信区块链的未来。这篇内容中,我们讲述了:

  1. 区块的产生
  2. 链的形成
  3. 双花的问题

最后,希望大家能够对区块链感兴趣。

如果你对我写的有疑问,可以评论,如我写的有错误,欢迎指正。你喜欢我的博客,请给我关注Star~呦github博客

欢迎订阅微信公众号

微信公众号