详解区块链——从本质到实现原理
本文由【区块链研习社】优质内容计划支持,更多关于区块链的深度好文,请点击【区块链研习社】简书专栏:http://www.jianshu.com/c/b17f09dc2831
随着比特币、以太坊等数字货币的暴涨,数字货币的底层技术,区块链技术,开始进入大众的视野。姚劲波说:区块链有可能和互联网一样伟大。区块链技术比传统互联网技术好在哪里?它的实现原理优是什么呢?笔者希望通过本文,解答大家心中的疑问。
信任问题
信息在互联网上的复制和传播成本近乎为零,这让大家可以很轻易地发布和获取信息。但是资产和信息是不一样的,资产本应是不应该被随意复制的。如果人民币可以被随意复制,那么人人都是亿万富翁了 :-)。
现在的互联网和金融技术,通过搭建中心化服务器,解决了资产传播的问题,但是成本居高不下。原因在于,当今的金融市场是建立在不同的服务提供商组成的庞大网络上的。在这个庞大的网络中,存在着各种互相孤立的数据系统及运作体系,这极大地影响了金融市场效率的进一步提升。在 2012 年欧洲央行的一份报告中,估计除了每个人都支付的直接费用外,间接成本高达 GDP 的 1%,大概每年 1300 亿欧元。在世界银行的报告中,跨国汇款的成本接近 8%。[1]
金融机构之间不能够无条件地信任对方,造成了金融领域数据孤岛的现象,进而导致了数字资产在互联网上流通成本居高不下。如果金融机构能够相互信任,那么所有的资产数据就可以在互联网上自由流通了,也就不存在数据孤岛的现象了,进而降低数字资产的流通费用。从道德上对信用的呼吁很难落到实处,有没有解决信任问题的技术手段呢?区块链技术的出现为解决信任问题带来了一丝曙光。现在区块链技术正在,除金融领域外的更多领域中进行应用,解决着这些领域内的信任问题。
信任机器
利用区块链技术,可以创造出一种信任机器[2]。比特币系统就是基于区块链的记账机器;以太坊就是基于区块链的智能合约机器等等。而信任秘诀在于区块链的加密、公开且不可篡改的特性:
加密
区块链技术是以密码学和数学为基础的,这是信任的根本。包括,椭圆曲线数字签名算法、非对称加密、哈希函数、梅克尔树等等。这些算法是密码学、数学上公认的穷宇宙之力都难以破解的算法。区块链上的数据是公开的,但这并不意味着你的秘密,可以被任何人知晓。利用这些加密算法可以保障你的数字权益,比如你的上网隐私,你的网络文章的所有权,还有你的数字钱包里的 Token。
公开
公开是赢得信任的最好手段。基于区块链技术的系统的规则(程序)和数据都是公开的。任何参与方都可以通过运行区块链的程序的方式加入进来,进而对数据进行验证。从程序可靠性的角度出发,信任既可以建立在一个黑盒程序之上,又可以建立在一个开源的程序之上。从交易双方的角度看,信任既可以建立在一个值得被信赖的第三方之上,又可以建立在自己亲自验证的基础之上。在自己能验证,也能依靠第三方进行验证情况下,自己验证更可靠;如果自己不能验证,那就只能选择一个值得被信赖的第三方。区块链提供了一个更公开、更透明且能够自己亲自验证的机制,因此基于区块链技术的系统比黑盒和第三方更容易赢得大家的信任。
不可篡改
区块链技术不可篡改的特性,是数字资产不可复制的基础。技术上来说,我们可以对任何的数据进行:增、删、改、查。但是在基于区块链技术的系统上,删、改的操作的可行性几乎为零。
核心原理
加密技术是在区块链出现之前已有的技术,本文不详细展开。区块链的最大创新,在于公开且不可篡改。本文接下来会剖析区块链的核心原理,帮助大家理解为什么它是公开且不可篡改的。
状态机
我们先从最简单的区块链记账机器开始,比如以太坊系统(比特币系统的原理稍微绕一些,但本质一样),实际上就是多个节点维护同一个账本。记账机器会在账本上记录每笔交易的信息。通过初始时各个账户的余额和已记录的信息,就可以推断出任意时刻的各个账户的余额。也就是说区块链记账机器完成记账功能的基本原理是:状态机[3]。举个例子:在 state1 时,A B 都有 100;A 发起了一笔交易,支付 100 给 B,而这笔交易会被区块链系统记录下来。我们可以通过 state1 的账户余额和区块链上的交易记录,计算出 state2 时 A B 的账户余额:A 有 50,B 有 150。同理只要我们知道初始化的状态(Genesis),并将使用区块链系统记录每笔交易,就可以算出任意时刻的任意账户的余额了。
双重支付
在区块链技术出来之前,一直没有很好的方法解决去中心化记账过程中遇到的双重支付的问题。中心化记账指的是,一个节点(比如一台计算机)维护一个账本;去中心化记账指的是,多个节点维护同一套账本。
顾名思义,双重支付就是同一笔钱可用于两次支付。具体的说,就是在同一时间点,A 将 100 元,既支付给 B,又支付给 C。如果出现这种情况,A 就相当于把 100 元钱,当做 200 元钱来花了。但 B ,C 和记账机构三者之一就会因此遭受 100 元的损失。在中心化的记账系统中,双重支付的事情显然是不可能的。因为无论这两笔交易是否同时进行,中心化的记账系统处理这两笔交易一定会有一个先后顺序。中心化的记账系统会先处理第一笔交易,并在 A 的账户中扣除 100 元,再处理第二笔交易,如果此时 A 的账户中没有余额,第二笔交易就会失败。
在去中心化的记账系统中,会有多个记录交易信息的节点。在上述例子中,去中心化的记账系统中的一些节点会先收到 B 的交易信息;另一些节点会先收到 C 的这笔交易信息。在去中心化的记账系统中,所有节点都是平等的。不存在一个统筹的节点,来决定是先处理 B 的交易还是先处理 C 交易。这就产生了去中心化记账系统中双重支付的问题。
解决去中心化记账系统的双重支付问题,可以分成两步来讨论:第一步,确定交易信息的先后顺序;第二步,需要一个共识机制,来保证所有节点都认可这个顺序。
第一步,确认顺序的原理很简单,就是给交易排序。确定交易顺序的数据结构就是区块链。“区块链”中的“区块”,指的是在同一段时间内的交易信息及相关数据的集合。“链”就是把区块按产生的先后顺序连接在一起。
共识机制
共识机制是区块链系统上独立节点们通过遵守一套相同的规则,自发地对区块的先后顺序达成共识。这套规则可以简单的描述为以下 3 步[4]。
所有节点质押成本(如:算力)竞争记账权,由胜利者产出并广播区块(记账信息),并获得收益(如,比特币)奖励。
每个节点独立的对新区块进行验证,并组装进区块链。
每个节点对区块链进行独立选择,选择长度最长的区块链。
这个规则是如何让独立节点们自发地参与到区块链系统的记账之中呢?又是如何规避节点捣乱的问题呢?
第 1 步,保障了每个节点都会出于“自私”的目的,“诚实”地参与到区块链系统中来。“自私”指的是,节点都是为利润(收益 - 成本)而来。“诚实”指的是,遵循区块链的共识机制。但是有利润就会有作弊,如何防止作弊呢?这就要依靠后面两步。
第 2 步,保障了每个节点都可以对竞争胜出的节点的记账信息进行校验。即便有“捣乱”节点抢到了记账权,并记了假账,其他节点,包括你的节点,都可以通过验证得知是否作假。区块(账本)做不了假,那么有没有可能在链(顺序)上作假呢?也就是通过颠倒交易的先后顺序,进行双重支付。
第 3 步,保障了颠倒交易的先后顺序在经济上是不可行的。既然每个诚实的节点都选择的是最长的链,那么捣乱节点能不能制造一个最长的链呢?当捣乱链的长度,超过诚实链的长度的时候,整个交易的顺序就被颠倒过来了。在区块链上,父节点只能有一个,但是子节点可以有多个,多个子节点就会有分叉,称为 Fork。 捣乱节点可以在某个节点 Fork 原先的链,再用比诚实节点更快的速度,制造出一个最长捣乱链。这有没有可能呢?答案是,在技术上是有可能的,但是经济上是没有可能的。
假设有人用大笔资金买通现有的节点,帮助他弄出一个最长捣乱链,来超过现有的最长诚实链。这个捣乱的土豪要花多少资金呢?我们不妨拿比特币系统来算一笔简单的帐(虽然不完全正确,但可以说明为什么经济上不可能)。买通 51% 的节点才能在制造区块的速度上,超过剩余 49% 的诚实节点。假使捣乱节点只要制造 6 个节点即可成功捣乱,制造 6个捣乱节点需要 60*60s。也就是说,捣乱的土豪至少要支付 51% 的节点在 1 个小时内所花费的算力成本。这些算力对应的电费有多高呢?在我写文章时,比特币系统的全球算力为 9211434 TH/s;1 TH/s 算力大概要消耗 0.15 度电,每度电 0.32 元。这个捣乱的土豪至少需要付出 8 亿人民币。这就是区块链上的数据只能增、查,不能删、改的根本原因,太贵了!
51% * 921143 * 0.15 * 0.32 * 60 * 60 = 811785256
总结
区块链技术的本质是通过公开的、加密的不可篡改的技术手段,为解决多方信任问题提供了一个方案。现在区块链技术离可大规模应用,还有很长的一段路要走。其中最关键原因是每秒确认交易的笔数太少、确认交易的时间又太长[5]。但是,换个角度思考一下,问题即机会。现在的区块链就像 98 年的互联网,未来充满挑战,也充满希望。
本文首发于 58无线技术 公众号
参考文章:
中国区块链技术和应用发展白皮书
http://www.199it.com/archives/526865.html
经济学人《The trust machine》
https://www.economist.com/news/leaders/21677198-technology-behind-bitcoin-could-transform-how-economy-works-trust-machine
How does Ethereum work, anyway?
https://medium.com/@preethikasireddy/how-does-ethereum-work-anyway-22d1df506369
乔延宏译《精通比特币(第二版)》
http://book.8btc.com/books/6/masterbitcoin2cn/_book/cn-preface.html
Fundamental challenges with public blockchains
https://medium.com/@preethikasireddy/fundamental-challenges-with-public-blockchains-253c800e9428