区块链技术概述
概述
比特币诞生的几年后,人们开始意识到区块链技术本身的潜力,慢慢走出了自己的发展路线。 通常区块链被定义为一种去中心化的分布式账本技术,最初用来记录信息,使记录具备不可篡改性,因此不需要额外的第三方机构来证明记录的真实性。
随着以太坊的出现,还可以以去中心化的方式运行程序(智能合约),确保程序的运行不被干预、篡改,使区块链成为一个公共的计算平台。
什么是区块链(技术)
狭义上说区块链是一种区块通过 Hash 方式形成的链式结构,因为链的环环相扣,任何一个区块上的修改,破坏链结构,参考这里,使其具备易于验证、不可篡改的特性。
区块是区块链中的数据存储单元
广义来讲区块链定义为一个共享的、不可篡改的账本,可用于记录网络中的交易和跟踪“资产”流转。 这里“资产”可以是任何有价的东西, 可以是货币、股票、土地、知识产权、品牌等,当他们在区块链网络上、公开透明的流转和交易是,可降低各方面的风险和成本。
在经济活动中,往往是依靠信息进行决策,信息的真实性、信息的传递速度和多业务决策至关重要,区块链是用于传递这些信息的理想之选,因为它可提供即时、共享和完全透明的信息,这些信息存储在不可篡改的账本上。
区块链包含 3 个关键元素:
- 分布式账本技术
所有网络参与者都有权访问分布式账本及其不可篡改的交易记录。
- 不可篡改的记录
在交易被记录到共享账本之后,任何参与者都不可以更改或篡改交易。
- 智能合约
智能合约
2013 年,Vitalik 提出了以太坊,创造性引入智能合约,智能合约是区块链上可执行的代码,用户可以根据自己的业务需要上传自己的代码到以太坊上,由以太坊的节点来进行执行。极大的丰富了区块链的执行程序能力。
智能合约 名称由来
在以太坊提出之前,比特币这样的加密货币的交易脚本可实现的功能非常有限,以太坊对此进行了改进,它让交易发生的同时可以执行一段代码。让交易本身具备了逻辑执行能力(并且是图灵完备的),让我们可以在链上完成任意复杂的运算。比如有的交易要分期付款,或者多方参与的借贷。像保险合同的执行也是有事前约定的条件,这些合约条件的执行使用智能合约可以轻松实现。 当区块链中可以存储代码和执行代码,给我们带来了无限想象空间。
区块链共识机制
由于区块链是一个分布式网络,网络中的节点都是独立运行,因此需要有一个公共规则来知道节点的运行,即共识机制。常见的共识机制有:
工作量证明(POW)、权益证明(POS)、权威证明(POA)
工作量证明(POW)
POW:Proof-of-Work, POW 要求节点进行大量的计算(查找满足一定条件的解)来证明其贡献,首先解决计算问题的节点获得报酬,这个过程也称为“挖矿”。
当前使用 POW 的区块链有: 比特币、比特现金(BCH) 、莱特币(Litecoin)、门罗币(Monero)、字节元 Nervos 、以太经典(ETC)
这是一个工作示意图:
工作量证明优点
工作量证明是被认为是最安全可靠的共识机制,在确保网络的安全性和可持续性得到了比特币网络长期的实践考验。
此外,POW机制也不需要参与节点对其它参与者的信任,而是依赖于节点本身的计算能力,参与网络的无需许可性,从而可以更好地确保网络安全和可靠性。
工作量证明缺点
缺点主要在于它消耗大量计算能力和电能,从而带来了较高的物理成本,在比特币网络实际挖矿中,往往数千台设备组成矿池同时挖矿,不同的矿池相互竞争,根据报告比特币的能源消耗已经达每小时14.79TWh,相当于全球总电量的0.5%,相当于每年全球汽车的消耗量。
另外,由于算力争夺过于激烈,一些矿工会抱团,形成超过 50% 算力的情况,那么就可以对链发起 51% 攻击。
51% 算力攻击
工作量证明中,矿工解数学难题比拼的是算力,谁有更大的算力(运算的更快),就有更大的几率挖出区块,当一个节点的算力占全网算力的51%以上时,将获得记账权的绝对优势,可以更快地生成区块,某种程度上拥有了修改区块链数据的权利,从而对链发起攻击,最典型是双花攻击。
双花攻击通常是这样的:
攻击者在实施攻击前,会进行隐身挖矿(如下图橙色链),出块不进行广播,由于攻击者拥有更多能力,他在橙色链上挖矿的速度更快。 攻击者矿工在橙色链上修改他自己的交易,当橙色链比主链更长了,攻击者矿工便会立即向全网广播这条橙色链,而其他的矿工发现了这条橙色链后,按照协议,他们必须丢掉原本的主链,替换成这条橙色链,就完成了一次双花攻击。
当然,要实现对比特币双花攻击是非常困难的,攻击者除了花费巨额资金在挖矿硬件上,还需要大量的电力进行支撑,随着比特币网络算力越来越大,这种攻击可能性也就越来越小。
在以太坊切换到 POS 共识之前,以太经典就多次出现过 51%算力攻击,因为以太经典算力较小,当某恶意矿工把以太坊算力切换到以太经典时,很容易出现算力占比超过 51%,从而发起攻击。
权益证明(POS)
POS: Proof of Stake, 节点争夺记账权依靠的不是算力而是权益(占比),权益通常是通过质押数字货币计算而来。PoS同样需要计算哈希值,当拥有的权益越多,满足Hash目标的机会越大,获得记账权的机会越大。同时质押的货币也作为抵押品防止作恶,如果节点有恶意行为,其抵押品可以被罚没(Slashing)。
在 POS 共识中,节点被称为验证者。
在实践中,各个不同的区块链有自己不同的实现方式,如引入持币时间来计算权益、引入委托质押(DPOS )用更少的共识成本换取更大的吞吐量 (TPS)、或使用投票方式,如BTF 类算法多区块投票。
当前使用 POS 的区块链有: 以太坊 (ETH)、波卡(DOT)、Cosmos (ATOM)、Tezos (XTZ) 等。
以太坊是工作量证明切换到权益证明
POS 优点:
相比 POW ,不需要消耗大量能量,
POS 出块时间稳定,有根号的“快速最终性”, 通常吞吐量(TPS每秒链上交易 ) 表现都更加优异。
随着 POS 的成熟、越来越多新区块链使用 POS 共识。
POS 缺点:
不够成熟,仍旧在不断的发展之中, 例如,POS 共识出现过公地悲剧、长距离攻击(Long range attack)和无利益攻击(Nothing-at-stake attack)等问题,这些问题的解决仍不够简洁,也没有得到足够长时间的检验。
另外,参与POS共识需要质押货币,这笔交易需要当前的验证者确认,这相当于是需要获得网络认可,当网络被恶意大的验证者控制时(其拥有超51% 的权益), 它可以对某些交易进行审查,阻碍新参与者进入,从而对网络产生永久性的损害。
以下是POS参与共识的示意图:
权威证明(POA)
POA: Proof-of-authority,是基于声誉(reputation)的共识算法,思路是选出中央权威来统一状态。 所有的交易,节点间不用相互同步,而是统一发送到权威节点(可能多个),由它来验证交易。在验证并签署交易之后,普通节点都从权威节点同步数据。主要用于联盟内共识。
POA 优缺点非常明显,POA 性能非常好,缺点是过于中心化,对权威节点的攻击,将造成网络瘫痪。
各种共识机制没有绝的好与坏,更多的是 “不可能三角” 的权衡。
区块链不可能三角
可扩展性:指的是区块链的处理交易性能,每秒可处理交易越多越具备可扩展性
安全性:指的是整个区块链网络的安全,攻击成本越高越安全
这里选择了 3 类主要共识机制介绍,还有一些其他的共识机制,如 Solona 链使用历史证明 POH (Proof of History)与 POS 的结合,Filecoin 的存储证明(复制证明 + 时空证明)等,很多团队仍在共识机制上研究探索、希望有所突破。
区块链分叉
区块链和传统系统一样,随着时间的推移,系统可能更需要升级加入新功能,或是升级解决出现的漏洞。在区块链上,升级通常会表现为链的分叉。
因为区块链是分布式系统,每次升级,需要所有的节点客户端软件共同升级,有时一些节点因为利益或理念的不一致,拒绝升级到新的客户端,此时网络中将出现两个版本的客户端,运行新软件的节点就会用新的协议去构建新的区块,原有的客户端节点会继续用旧的协议来继续构建区块,各节点不认可对方的区块,此时就是会分叉出两条完全不同的链,这就是区块链的分叉,这种情况是硬分叉。
硬分叉是共识的分裂或者改变,比特币历史上发生过一次轰动的分叉,比特大陆为首矿工集团与BTC Core为首的核心开发者团队就比特币扩容问题发生了意见分歧,比特大陆提意使用更大的区块,而开发者团队则反对,最终比特币在高度478559时,硬分叉为比特币(BTC)和比特币现金(BCH)两条链,之后 BCH 又分叉出了 BSV 等多个链。
以太坊社区也因一起黑客事件,生过一次轰动的分叉,北京时间2016年6月17日,以太坊THE DAO被黑客进行攻击,损失了数千万美元的ETH,由于损失巨大,一部分人希望修改源码,强行“夺回”黑客控制的币。另一部分人则认为代码及法律,不认同这个修改,也分裂出两条链,后者即是以太经典(ETC)。
最近以太坊升级到 POS 共识 ,也有一些矿工不认同此次升级,分叉出了 EthereumPoW(ETHW)。
在发生硬分叉时,也会伴随一些安全风险,如一个链上的交易可能被在另一个链重放,另外分裂的共识双方对“正统”名号的争夺,会导致币价剧烈波动,另外链上运行的应用会同时运行在两个链上,可能在某一条链上完成归零。依赖某些外部条件(如预言机喂价)的相关合约可能完全失效。
不过,总体上我们应该平常性看待硬分叉,它是区块链进化的方式,所有人有自己选择的自由,硬分叉短时间内是共识的分裂,不过历史经验是,随着时间的推移,共识又由重新凝聚,并且比以往更强大。
还有一类被称为软分叉,软分叉向后兼容,没有更新的节点仍然会仍可新版本生成的区块,当升级后的区块链将无法识别尚未更新的节点的区块。
在区块链没有升级时,也偶尔会发生瞬时分叉(短距离的分叉),通常在 POW 链中,两个节点同时竞争到出块权,此时形成一个短暂的分叉,直到某个分叉产生下一个区块,根据最长链原则,分叉自动消失。连续多个区块上有多个节点同时竞争到出块权的概率几乎为 0,因此这类分叉的距离非常短,只有1 2个区块,这也是为什么的链上的交易,等待数个区块后,就当作具有确定性了。
进一步学习
通过前面章节的介绍,你应该对区块链技术一定的了解,你可以进一步学习材料:
- 阅读比特币白皮书:原版-英文 及中文版
- 北京大学肖臻老师的公开课《区块链技术与应用》 介绍了比特币、以太坊等区块链技术的设计思路
- 你可以尝试直接是实现一个简单的区块链,Tiny熊老师的课程Python实现极简区块链,过代码实现如何打包交易、计算 Hash及节点将通信等。实践之后,更明白区块链的运行原理。