1
什么是区块链
1.1白话讲解区块链
现在区块链特别火,可能大家都听说过区块链,听说过比特币,那到底什么是区块链?
前几天和一个朋友撸串,我给他安利区块链和比特币以及一些数字货币的知识,这个朋友也是一个技术人,他问了我一句:你说了半天区块链、数字货币,我是做技术的能听懂,但是别人就不一定了,所以除了这些技术名词以外,你能不能通俗地介绍一下什么是区块链。
当时一下就把我问住了,百度搜索出来的一个官方答案是:区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式 。看完这句话之后,相信大部分人还是不能完全理解。
那么,我用大白话重新解释一下“什么是区块链”。区块链就是人人参与的、不需要中介的、带有奖励机制的一种记账方式。因为人人都有这个账本的备份,每笔账具有连续性,所以不会作假,公开透明。并且不会有一家独大的情况存在,因为需要大家达成共识后才会记这笔帐。
举个例子来帮助理解。
比如有一个村子,村民老孙找老李借一百块钱,但老李怕他赖账,于是就找来村长做公证,并记下这笔账。这个就叫中心化。但如果你不找村长,直接拿个喇叭在村里大喊“我老李借给老孙一百块钱!请大家记在账本里”,然后大家过来验证过确实有这么回事,于是记到了账本上,就叫去中心化。
以前村长德高望重,掌握全村的账本,大家都把钱存在他这里,这是过去大家对中心化的信任。现在,大家都担心村长会偷偷挪用大家的钱,怎么办呢?于是大家就给每个人都发了一本账本,任何人之间转账都通过大喇叭发布消息,收到消息后,每个人都在自家的账本上记下这笔交易,这就是去中心化。有了分布式账本,即使老张或老李家的账本丢了也没关系,因为老赵、老马等其他家都有账本。
后来,村民觉得每个人都记太麻烦了,可以每天轮流换人来记,谁来干这个活给谁一定的奖励。这样大家都抢着来记于是大家约定,谁摇骰子先摇到6了,就可以来记,但是记帐的格式有要求,后一笔帐的开头必须带上前一笔帐的一个标识,这样防止作假帐,并且记完帐要向大家公布出来,让大家能公开的查账。
这个村子自从采用了这种新的记账方式以后,每个人都很开心,不用担心假账、赖账的事情发生,记账还能拿到奖励,于是周围的村子也纷纷效仿这种方式。
其实区块链技术没有想象中的那么神秘,它的运行方式和运行原理就像例子中所说的村里的记账方式。我们通过这个例子,可以比较生动地理解区块链本身的运转模式。
2.2 比特币和区块链的关系
说到区块链就必然会提到比特币,从去年开始,比特币一路飙升,连带其它数字加密货币一起火爆起来,使得数字加密货币市场风头一度盖过股票、外汇、黄金等市场。那么比特币又是什么呢?区块链和比特币之间有什么关系呢?其实比特币就是世界上第一个使用区块链技术的应用。
2008年的金融危机几乎席卷了整个世界,2008年年底,一个叫中本聪的人发表了一篇论文《比特币:一种点对点的电子现金系统》,他通过这篇论文阐述了一些观点以及对金融危机后的思考。这篇论文主要提出了一个系统设计:
通过随机散列(hashing)对全部交易加上时间戳(timestamps),将它们合并入一个不断延伸的基于随机散列的工作量证明(proof-of-work)的链条作为交易记录,除非重新完成全部的工作量证明,形成的交易记录将不可更改。最长的链条不仅将作为被观察到的事件序列(sequence)的证明,而且被看做是来自CPU计算能力最大的池(pool)。只要大多数的CPU计算能力都没有打算合作起来对全网进行攻击,那么诚实的节点将会生成最长的、超过攻击者的链条。
(也就是说如果想要攻击,必须掌握超过半数以上也就是51%的节点的算力,就是我们常说的51%攻击,要做到是非常难的,攻击的成本远大于攻击带来的收益。)
这个系统本身需要的基础设施非常少。信息尽最大努力在全网传播即可,节点(nodes)可以随时离开和重新加入网络,并将最长的工作量证明链条作为在该节点离线期间发生的交易的证明。
这个系统有一个非常完善的经营模型来确保系统的正常运转以及不受黑客攻击。
比特币的数据结构
从图上来看,一个区块是由区块头和区块体构成的,区块头中有前一个区块头的哈希值和梅克尔根,每个区块头中的梅克尔根关联了区块中众多的交易事务,而每个区块之间又是通过区块头的哈希值也就是它的散列值关联起来的。
可以看出来这是很有意思的数据格式,它将连续不断发生的数据分成了一个个的数据块,在下载同步这些数据的时候可以并行地从各个节点来获得。不管数据先后,到达本地后再根据数据块的标识组装起来就行。另外,这是一种链式的结构,链式结构的最大特点是一环扣一环,很难从中破坏。
简单介绍一下梅克尔树,如上图右下方树形的数据结构。比特币中的梅克尔树称为二叉梅克尔树,它是通过区块中的交易事务哈希值两两结对计算出的新的哈希值。交易事务哈希值两两结对后再进行一段递归循环,直到计算出最后一个根哈希值,这样的一棵树就是梅克尔树。
为什么要用梅克尔树这样的数据结构来存储交易的事务数据呢?因为比特币系统是分布式的网络结构,当一个节点需要同步自己的区块链账本数据时,并没有一个明确的服务器来下载数据,而是通过与其他节点的通信来实现的。在下载区块数据的时候,难免会有某部分数据可能会发生损坏,所以对于一条条的交易事务就可以用梅克尔树这种形式来进行验证。
后来人们通过研究比特币的白皮书和它的源代码,提炼出一系列背后的思想及技术,并将提炼出来的结果称之为区块链。区块链技术不仅仅能实现数字货币,还能基于这个技术实现各种各样的应用。因此比特币是区块链技术的一种实践方式,区块链是比特币的技术基础,这就是比特币和区块链两者之间的关系。
现在的比特币是一个家族,包括BTC 、BCC、BTG等,还出现了类似于比特币的各种加密货币。
为什么现在有比特现金、比特黄金、莱特币这些币?这要从扩容说起:比特币本身的区块容量限定为1M,随着时间的推移,运行速度越来越慢,因为1M的容量是在是太小了,一个区块只能容纳有限的交易事务,网络中等待确认的交易会排很长的队伍,这时就需要进行扩容。
所谓的区块链扩容主要是指增加区块容纳交易事务的能力,通常有两种做法:一是增加许可空间的大小,二是缩小交易数据的尺寸。
第一种做法符合一般思维,相当于我们的衣服越来越多,一个衣柜放不下,就多买了几个