前言
随着比特币的起起伏伏,区块链技术越来越受到关注。区块链和比特币是当下和人工智能一样风靡的领域。人们开始寻找区块链技术的用武之地,已经有了不少的尝试。但是区块链的价值所在众说纷纭,特别是一些媒体胡乱吹嘘或者是故意贬低,给大家都带来了不小的困惑。其实作为一名技术人员只需要理解其底层实现原理和运行机制,之后其应用场景和发展前景相信都会有自己的见解。
在阅读完本篇文章对区块链有了一定的了解后可以参考区块链的一个简单的模拟实现来加深自己的理解:(toychain) 欢迎star :)
区块链和比特币
首先要理清楚区块链和比特币的区别和联系,区块链可以理解为一种有特点的数据存储结构或者说是协议,能够解决一些列的安全、稳定等方面的问题;而比特币是利用区块链技术实现的一种数字货币系统,比特币也是目前唯一一个成熟的区块链应用,这也是二者容易混淆的原因之一。比特币起始于2008年名为中本聪(Satoshi Nakamoto)的人发表的一篇论文《比特币:一种点对点的电子现金系统》(Bitcoin: A Peer-to-Peer Electronic Cash System)原文 译文
区块链是一种新型去中心化协议,能安全地存储比特币交易或其它数据,信息不可伪造和篡改,可以自动执行智能合约,无需任何中心化机构的审核。交易既可以是比特币这样的数字货币,也可以是债权、股权、版权等数字资产,区块链技术解决了拜占庭将军问题,大大降低了现实经济的信任成本与会计成本,重新定义了互联网时代的产权制度。
中本聪提出了提出了这个具有创造力的构想并实现了比特币系统,在越来越多的支持者的参与下,比特币系统稳定运行,在2017年迎来了爆发式的发展,一枚比特币的价格曾经一度突破2万美元大关。越来越多的技术人员、投资者、金融从业者开始关注区块链技术,并试图拓展其应用领域,体现其特点和价值。当前区块链技术在金融领域还在继续深耕,其他领域也开始了不错的尝试,例如游戏,安全等。
下面通过以下几个方面进行逐一讨论和分析:
- 区块的基本结构
- 去中心化与点对点网络
- 数据的不可修改性
- 共识机制
- 双重花费和拜占庭将军问题
- 隐私保护
区块的基本结构
区块的结构并不复杂,包含了一些字段,整体上看一个区块的结构类似于双向链表中的节点。可以先直观的感受比特币系统中第505156个区块的头信息。
这些字段相当一部分可以通过字面意思来理解,对于较为重要的字段进行一一列举。
- Number Of Transactions:此区块中所包含的交易数量,网页下方显示了846个交易的详细信息,也称为区块体
- Difficulty:难度系数,为了控制区块产生的速度,难度系数代表当前区块产生的难度
- Version:区块链的版本
- Nonce:工作量,在当前难度系数下计算了1683386125次才生成了此区块
- Hash:此区块的Hash签名,唯一且不可更改
- Previous Block:前一个区块的Hash签名,有且只有一个
- Next Block(s):后一个区块的Hash签名,可以有多个(区块链存在分叉的情况)
- Merkle Root:默克尔树根,默克尔树是存储交易签名的数据结构,在Git中也有应用
这些关键字段的正确维护是区块链实现的基础,也是区块链去中心化,解决双花和拜占庭将军问题的基本结构。有了关键的数据结构,还需要相辅相成的规则和算法才能运行起来。理清楚整个流程之后再回过头看区块结构就能一目了然了。
通过结构的观察可以得出结论:
- 一个区块写入后Hash唯一且不可更改,除非把整个区块链中所有区块的Hash,Previous Block,Next Block(s)全部做相应更改
- 一个区块的内容更改后Hash随之更改
去中心化与点对点网络
去中心化是区块链的核心思想,这也是与其他分布式产品的最大区别,去中心化保证了公平性和安全性。点对点网络就是在去中心化的框架下的互联网,类比现实社会,当今的社会制度就是中心化的,国家的中心是政府,金融系统的中心是央行。假如政府腐败、央行作弊,那么整个社会就无公平可言,所有的数据也是不可信任的。也许去中心化也是人类社会制度发展的终极目标。只要拥有一台电脑就能加入点对点网络成为一个节点,每个节点都能拥有整个区块链的信息(目前达到了上百GB),而且在不断的更新和同步。每一个区块的写入都会广播到整个网络。点对点网络中每个点拥有相同的权利和义务,都是对等的,以CPU作为算力单位每个点都可以参与投票、计算和打包数据,也拥有同步区块信息的权利。
数据的不可修改性
在区块的基本结构中得出了区块内容一旦写入则不可修改的结论。原因非常容易理解,首先一个区块的通过Hash=SHA256(区块头)得出,因此每个区块的Hash都是唯一的。并且区块头中包含Merkle Root字段,区块体中的交易数据存储在默克尔树的叶子节点中,因此Merkle Root可以看做是此区块体中所有交易数据的唯一签名。基于以上事实,不管是对交易数据的修改还是对区块元信息的修改都会导致区块的Hash字段改变,由于除了第一个个最后一个区块外所有节点同时具有Previous Block,Next Block(s)字段,会引起连锁反应。修改一个区块数据的代价是要修改区块链中所有区块的Hash、Previous Block,Next Block(s)字段为相应值。如果不是同时拥有全网一半以上的算力是不可能做到的。因此可以说区块数据一旦写入区块链就是永久写入不可修改。这也保证了数据的安全性和可信任度。
共识机制
共识机制是区块链中最重要的特点,共识是指对区块数据的认同,也可以看做是投票。只有点对点网络中半数以上的都认为区块数据是真实可靠的才能达成共识。目前有几种主要的共识机制:工作量证明(PoW)、权益证明机制(PoS)、授权股权证明机制(DPOS)和拜占庭共识算法(PBFT)。其中工作量证明是比特币采用的机制。在比特币中工作量证明就是所谓的“挖矿”。
由于每个节点都要去同步最新的区块链数据,所以区块产生的速度不能太快,不然大部分节点根本来不及同步。中本聪为此设计了难度系数调节机制,在区块结构中维护了Nonce和Difficulty两个字段,分别代表计算的次数和难度系数,区块产生设计速度是每10min产生一个,随着算力的提高,这个速度可能会加快,如果区块的产生速度大于设计速度那么下一个区块的难度系数就会增加。因此可以保证区块的产生时间间隔围绕在10min左右。所以在比特币中随着时间推移挖矿会越来越难。
如果有两个区块同时加入区块链,那么区块链就会分叉。哪一个分支长度先达到6个就会把哪一个当做主干,确认交易,另一个分支就会被抛弃(选中大多数节点的共识)。因此确认一次交易的时间要1个小时左右。
双重花费和拜占庭将军问题
双重花费是指把同一笔资产花费到两个不同的交易中,例如,节点A一共有1个比特币,节点A几乎同时提交了两个交易:向节点B支付1个比特币,向节点C支付一个比特币。在交易记录之前这两笔交易可能都是合法的,可能会有不同的节点将其记录到区块中,如果同时产生了两个区块,那么就按照工作量证明的共识机制来选择。区块链不通过第三方也可以解决双花问题。
拜占庭帝国想要进攻一个强大的敌人,为此派出了10支军队去包围这个敌人。这个敌人虽不比拜占庭帝国,但也足以抵御5支常规拜占庭军队的同时袭击。基于一些原因,这10支军队不能集合在一起单点突破,必须在分开的包围状态下同时攻击。他们任一支军队单独进攻都毫无胜算,除非有至少6支军队同时袭击才能攻下敌国。他们分散在敌国的四周,依靠通信兵相互通信来协商进攻意向及进攻时间。困扰这些将军的问题是,他们不确定他们中是否有叛徒,叛徒可能擅自变更进攻意向或者进攻时间。在这种状态下,拜占庭将军们能否找到一种分布式的协议来让他们能够远程协商,从而赢取战斗?这就是著名的拜占庭将军问题。
拜占庭将军问题再区块链中的描述应该是,在不知道具体的诚实节点的情况下怎么能够达到共识,在区块链中使用主流的共识机制(工作量证明(PoW)、权益证明机制(PoS)、授权股权证明机制(DPOS)和拜占庭共识算法(PBFT))就可以解决拜占庭将军问题。
隐私保护
由于在区块链中,所有节点都由全网唯一的SHA256签名代表,这个签名也不能被反向推出信息,因此即使签名在全网广播也不能得到某个节点的信息。基于这一点在所有交易中节点都相当于是匿名的,很好的保护了用户的隐私。但这也是编写勒索软件的黑客们常用的勒索支付方式。
小结
基于以上对区块链的理解,可以得出结论,区块链技术是去中心化的,区块的结构特点可以很好的保证数据的安全和节点之间的公平性,也可以利用共识机制来解决双花和拜占庭将军等类似问题,比特币的发展也体现出了对区块链价值的认同。但为了实现这些特点,也付出了不小的时间和空间成本:每个节点都需要实时同步整个区块链信息(目前已经达到上百GB);每个区块的容量有限;平均每10min才能生成一个区块,每小时才能确认一次交易,交易处理速度目前来看是远远不够的。
到目前为止区块链的应用场景非常有限,在目前的技术水平下成熟的尝试还局限在金融货币领域。判断区块链是否能运用到某一个领域只需要判断三点即可:不需要管理中心,不要求数据的实时性,付出的成本小于收益。现在看来区块链带来的改变虽然不足以和人工智能相提并论,但区块链的思想非常值得去研究和参考。
从技术的角度看,任何一个新技术都不是凭空产生的,一定是在已有的技术基础上加以改进和创新得来的。区块链也不例外,如果你对分布式计算(分布式事务,Paxos算法等)和密码学(对称加密,非对称加密,数字签名)稍微有一些了解的话研究区块链时就会非常轻松,区块链和Git的实现也有一些相似的地方(比如都使用了默克尔树)。
由于时间和水平限制,难免有误,请指正。存手打,如果对你有帮助请考虑 “推荐”。:)
参考资料:
BitCoin technology Merkle tree(Hash tree)