You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

118 lines
13 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 33 | 区块链技术架构:区块链到底能做什么?
在我的职业生涯中,我经历过各种各样的技术创新,见识过各种技术狂热的风潮,也看过各种技术挫折,但从来没有一种技术能像区块链技术这样跌宕起伏,具有戏剧性,吸引了各色人等。
区块链为什么能吸引这么多的关注?它到底能做什么?它的技术原理是什么?又为何如此曲折?
让我们从区块链的起源——比特币说起。
## 比特币与区块链原理
2008年11月由中本聪设计、开发的比特币正式上线运行。我们现在都知道比特币是一种加密数字货币。价格最高的时候每个比特币可兑换近两万美金。一个看不见、摸不着的数字货币为什么能得到这么多的拥护被炒到这么高的价格
让我们继续追溯到传统的货币发行与交易系统。
传统的货币也就是我们日常使用的钞票是由各个国家的中央银行发行的。中央银行根据市场需求决定投放的货币数量但是很多时候为了刺激经济发展中央银行通常会额外多投放一些货币这样就会出现钱越来越不值钱的情况即通货膨胀。甚至有的时候某些政府为了弥补自己的债务恶意超发货币有的国家甚至发行过面额为50万亿的钞票导致了恶性通货膨胀。
于是就有人想,能不能发行一种数量有限、不会膨胀的数字货币,通过互联网在全球范围内使用呢?其实发行数字货币容易,但是得到大家的认可很难,而且货币在使用的时候,如何进行交易记账是个大问题。
传统上如果通过互联网进行交易转账,必须通过银行或者支付宝这样的第三方进行交易记账。但是通过互联网发行的数字货币必然得不到法定货币的地位,也就不会被银行等官方机构认可。如果没有受信任的官方机构记账,又如何完成交易呢?
所以比特币数字货币首先要解决的问题就是交易记账。比特币的主要思路是,构建一个**无中心、去信任的分布式记账系统**。这个记账系统和传统的银行记账不同,银行的账本由银行自己管理,银行是记账的中心,而比特币则允许任何人参与记账,没有中心,**完全分布式**的。
此外,传统的银行中心记账必须有个前提,就是交易者都相信银行,信任银行不会伪造、篡改交易。但是任何人都可以参与记账的比特币不可能得到大家的信任,所以这个记账系统必须从设计上实现**去信任**,也就是不需要信任记账者的身份,却可以信任这个人记的账。
这些不合常理,听起来就难度重重的要求,正是通过**区块链技术**实现的。
### 交易
首先,在比特币的交易系统中,所有**交易**的参与者都有一个**钱包地址**,事实上,这个钱包地址正是**非对称加密算法**中的**公钥**。非对称加密算法我在第30篇安全性架构一篇讲过。进行交易的时候交易的发起者需要将要交易的数字货币一个hash值和交易的接受方用自己的钱包**私钥**进行**签名**。
记账者可以使用发起者的公钥对签名进行验证,保证交易是真正发起者提交的,而不是其他人伪造的交易。
如下图:
![](https://static001.geekbang.org/resource/image/a3/f0/a3f036bbd264b95c2636fdceeb5a41f0.png)
### 区块链
交易签名只能保证交易不是他人伪造的,却不能阻止交易的发起者自己进行**多重交易**,即交易的发起者将一个比特币同时转账给两个人,也就是所谓的**双花**。
比特币的解决方案是记账者在收到若干交易后会将这些交易打包在一起形成一个区块block。区块必须严格按照顺序产生因此最新一个区块的记账者可以根据区块顺序得到此前所有的区块。这样记账者就可以检查所有区块中的交易数据是否有双花发生。
至于如何保证区块的严格顺序,比特币的做法是,在每个区块的头部记录他的前一个区块,也就是前驱**区块的hash值**,这样所有的区块就构成了一个链。我们知道,单向链表是有严格顺序的。
通过hash值链起来的区块就是所谓的**区块链**,如下图:
![](https://static001.geekbang.org/resource/image/4b/fe/4b88289a6198d1fbf7015dead4dbf1fe.png)
### 工作量证明
区块链的严格顺序不但可以避免双花,还可使**历史交易难以被篡改**。如果有记账者试图修改一笔过去区块中记录的交易必然需要改变这个交易所在区块的hash值这样就会导致下一个区块头部记录的前驱区块hash值和它不匹配区块链就断掉了。
为了不让区块链断裂篡改交易的记账者还必须要修改下一个区块的前驱hash值而每个区块的hash值是根据所有交易信息和区块头部的其他信息包括记录的前驱区块hash值计算出来的。下一个区块记录的前驱hash值改变必然导致下一个区块的hash需要重算。以此类推也就是需要重算从篡改交易起的所有区块hash值。
重算所有区块的hash值虽然麻烦但如果篡改交易能获得巨大的收益就一定会有人去干。我前面说过区块链是去信任的即不需要信任记账者却可以相信他记的账。因此区块链必须在设计上保证记账者几乎无法重算出所有区块的hash值。
比特币的解决方案就是**工作量证明**比特币要求计算出来的区块hash值必须具有一定的难度比如hash值的前几位必须是0。具体做法是在区块头部引入一个随机数nonce值记账者通过修改这个nonce值不断碰撞计算区块hash值直到算出的hash值满足难度要求。
因此计算hash值不但需要大量的计算资源GPU或者专用的芯片还需要大量的电力支撑这样大规模的计算在比特币最火爆的时候计算hash值需要消耗的电量大约相当于一个中等规模的国家消耗的电量。
在这样的资源消耗要求下重算所有区块的hash值几乎是不可能的因此比特币历史交易难以被篡改。这里用了“几乎”这个词是因为如果有人控制了比特币超过半数的计算资源确实可以进行交易篡改即所谓的**51%攻击**。但是这种攻击将会导致比特币崩溃,而能控制这么多计算资源的记账者一定是比特币主要的受益者,他没有必要攻击自己。
### 矿工
前面讲到,比特币的交易通过区块链进行记账,而记账需要花费巨大的计算资源和电力,那为什么还有人愿意投入这么多资源去为比特币记账呢?
事实上比特币系统为每个计算出区块hash的记账者赠送一定数量的比特币。这个赠送不是交易而是凭空从系统中产生的这其实就是比特币的发行机制。记账者为了得到这些比特币愿意投入资源计算区块hash值。
由于计算出hash就可以得到比特币计算hash值的过程也被形象地称作“挖矿”相对应的进行hash计算的记账者被称作矿工而用来计算hash值的机器被称作矿机。
当“矿工们”为了争夺比特币,争相加入“挖矿”大军时,比特币区块链就变成一个**分布式账本**了。这里的分布式有两层含义:“矿工”记账时需要进行交易检查,所以需要记录从第一个区块开始的、完整的区块链,也就是说,完整的账本分布在所有的矿工的机器上;此外,每个区块是由不同矿工挖出来的,也就是说,每次交易的记账权也是分布的。
比特币虽然取得巨大的成功,但一直没有得到主流国家的官方支持。但是比特币使用的区块链技术却得到越来越多的认可,在企业甚至政府部门间的合作领域里,得到了越来越多的应用。
## 联盟链与区块链的企业级应用
比特币应用的区块链场景也叫做公链,因为这个区块链对所有人都是公开的。除此之外,还有一种区块链应用场景,被称作**联盟链**。
联盟链是由多个组织共同发起,只有组织成员才能访问的区块链,因此有时候也被称作**许可型区块链**。传统上,交易必须依赖一个中心进行,不同的组织之间进行交易,必须依赖银行这个中心进行转账。那么银行之间如何进行转账呢?没错,也需要依赖一个中心,国内的银行间进行转账,必须通过中国人民银行清算中心。
跨国的银行间进行转账则必须依赖一个国际的清算中心,这个中心既是跨国转账的瓶颈,又拿走了转账手续费的大头。所以当区块链技术出现以后,因为区块链的一个特点是去中心,各家银行就在想:银行之间能不能用区块链记账,而不需要这个清算中心呢?最初的联盟链技术就是由银行推动发展的。
目前比较知名的联盟链技术是IBM主导的Hyperledger Fabric。主要架构如下
![](https://static001.geekbang.org/resource/image/11/85/1173035b0cacc834bfc8ceb8bb370185.jpg)
Peer节点负责对交易进行背书签名Ordering节点负责打包区块Peer节点会从Ordering节点同步数据记录完整的区块链。而所有这些服务器节点的角色、权限都需要CA节点进行认证只有经过授权的服务器才能加入区块链。
最近两年随着区块链技术的火爆联盟链技术也开始从银行扩展到互联网金融领域甚至非金融领域。2018年支付宝香港和菲律宾一家互联网金融企业通过区块链进行了跨国转账而香港和菲律宾的外汇管理局也作为联盟成员加入了区块链使得**转账和监管在同一个系统中完成**。
在互联网OTA在线旅行代理领域酒店房间在线销售是一块非常大的业务但是一家酒店不可能对接所有的OTA网站而一家OTA网站也不可能获得所有的酒店资源于是就催生了第三方的酒店分销平台这个平台负责对接所有的酒店酒店房间通过该平台对外分销而OTA网站通过该平台查找酒店房间以及预定房间。
于是这个平台就成为一个全行业不得不依赖的中心一方面产生了巨大的瓶颈风险另一方面酒店和OTA也不得不给这个中心支付高昂的手续费。
事实上我们可以利用联盟链技术将酒店和OTA企业通过区块链技术关联起来酒店通过区块链发布房间信息而OTA通过区块链查找房间信息以及预订房间。如下图所示左边是传统的酒店分销模式右边是基于区块链的酒店分销模式。
![](https://static001.geekbang.org/resource/image/bc/06/bc5ad67185edd854b1a51eafbb7c3606.jpg)
上面讲到的Hyperledger 联盟链技术部署和应用都比较复杂。目前在区块链领域,社区资源比较丰富,更为易用,也更被广泛接受的区块链技术是以太坊。但是以太坊是一个公链技术,不符合联盟链受许可才能加入的要求,因此,我和一些小伙伴对以太坊进行了重构,使其符合联盟链的技术要求,你可以点击[源码地址](https://github.com/taireum/go-taireum)看一下,也可以看看[相关文档](https://mp.weixin.qq.com/s/AOqi9lz-wCZ8A-uEOyvYGg)。
如果你感兴趣的话,欢迎你参与开发与应用落地。
## 小结
应该说,区块链能吸引到这么多的关注,产生这么大影响,和加密数字货币的炒作是分不开的。正因为数字货币的炒作,才使得区块链技术吸引了大量的资源,更多的人才投入研发区块链相关技术,区块链技术进步与应用也吸引了大量的关注。
但是数字货币的投机属性又使得人们对区块链技术抱有急功近利的想法,希望区块链技术能快速带来回报。
在我看来,**互联网技术****的快速发展****是生产力革命**,使得生产力数以十倍、百倍的增加。而**区块链技术是生产关系革命**,传统上,所有的交易和合作都必须依赖法律以及信任。而法律的成本非常高,很多场合无法支撑起用法律背书的成本;而跨组织,特别是互为竞争对手的组织之间又不可能产生信任。**区块链的出现,使得低成本,去信任的跨组织合作成为可能**,将重构组织间的关系,这个关系既包括企业间的关系,也包括政府和企业间的关系,还有政府部门间的关系。
互联网使得这个世界变得更加扁平,信息流动更加快速,但无法弥合这个世界割裂的各种关系,而区块链可以打通各种关系,将这个世界更加紧密联系在一起,使全人类成为真正的命运共同体。
## 思考题
今天我讲了一下区块链技术,它虽然火爆,但仍然处在发展之中。你能想到的利用区块链技术的场景有哪些呢?
欢迎你在评论区写下你的思考,也欢迎把这篇文章分享给你的朋友或者同事,一起交流一下。