天天看点

区块链技术之一-----了解区块链

为什么会出现区块链:

       一直以来我们所处的社会信用体系很大一部分都是中心化的:如货币是政府发行的,政府决定着货币价值的升涨,如我们的钱存于银行,钱不翼而飞我们也不得原因;这里政府和银行就是中心地位的管理者,也许我们不信任中心地位的管理者,但是在中心化的信用体系下我们也无可奈何,传统的数据库有一个中央管理系统,管理员可以在权限范围内任意更改数据库,处于中心地位的管理当局有太大权限,可以在隐私状态下更改数据,谁控制了管理权谁就控制了整个平台,所有使用者都要听命于管理者,这就带来不信任性。所以我们希望能存在这么一种信用体系,规则和记录一旦生成,任何人不能私自篡改,并且信息是对大家都透明的,换句话说就是去中心化的,这就诞生了区块链技术。

区块链是什么:

       区块链从功能上讲是用来存储信息的,任何需要保存的信息,都可以写入区块链,也可以从里面读取,所以首先它是数据库。一句话,它是一种特殊的分布式数据库技术的实现。首先,区块链的主要作用是储存信息。任何需要保存的信息,都可以写入区块链,也可以从里面读取,所以它是数据库。其次,任何人都可以架设服务器,加入区块链网络,成为一个节点。区块链的世界里面,没有中心节点,每个节点都是平等的,都保存着整个数据库。你可以向任何一个节点,写入/读取数据,因为所有节点最后都会同步,保证区块链一致。分布式数据库并非新发明,市场上早有此类产品。但是,区块链有一个革命性特点。区块链没有管理员,它是彻底无中心的。其他的数据库都有管理员,但是区块链没有。如果有人想对区块链添加审核,也实现不了,因为它的设计目标就是防止出现居于中心地位的管理当局。正是因为无法管理,区块链才能做到无法被控制。否则一旦大公司大集团控制了管理权,他们就会控制整个平台,其他使用者就都必须听命于他们了。

区块是什么:

       区块链由一个个区块(block)组成。区块很像数据库的记录,每次写入数据,就是创建一个区块。区块包含两部分:区块头和区块体。

区块链技术之一-----了解区块链

区块头(Head):记录了当前区块的多项特征值.包含区块生成时间,实际数据(即区块体)的哈希,上一个区块的哈希等。

区块体(Body):保存区块的实际数据,这些数据就是历史交易记录,也可以认为是“账本”。

更重要的一点是区块与哈希是一一对应的,每个区块的哈希都是针对"区块头"(Head)而不是区块体计算的,也就是说哈希由区块头唯一决定。具体实现是把区块头的各项特征值,按照顺序连接在一起,组成一个很长的字符串,再对这个字符串计算哈希。由于区块头包含很多内容,其中有当前区块体的哈希,还有上一个区块的哈希。这意味着,如果当前区块体的内容变了,或者上一个区块的哈希变了,一定会引起当前区块的哈希改变。这一点对区块链有重大意义。如果有人修改了一个区块,该区块的哈希就变了。为了让后面的区块还能连到它(因为下一个区块包含上一个区块的哈希),该人必须依次修改后面所有的区块,否则被改掉的区块就脱离区块链了。由于后面要提到的原因,哈希的计算很耗时,短时间内修改多个区块几乎不可能发生,除非有人掌握了全网51%以上的计算能力。正是通过这种联动机制,区块链保证了自身的可靠性,数据一旦写入,就无法被篡改。这就像历史一样,发生了就是发生了,从此再无法改变。每个区块都首尾链接在其他区块上,这也是区块链的名字由来。

挖矿是怎么回事:

       由区块链的原理我们知道,每当区块改变时,全网所有节点都要同步区块链,这就很有问题了,我为什么要浪费自己的资源来帮别人记账还要时刻同步呢。现在的社会是无利不起早,要想全网的节点都第一次时间同步区块,矿工们在挖矿过程中会得到两种类型的奖励:创建新区块的新币奖励,以及区块中所含交易的交易费。为了得到这些奖励,矿工们争相完成一种基于加密哈希算法的数学难题,这些难题的答案包括在新区块中,作为矿工的计算工作量的证明,被称为”“工作量证明”。该算法的竞争的机制以及获胜者有权在区块链上进行交易记录的机制,这二者是比特币安全的基石。

       新比特币的生成过程被称为挖矿是因为它的奖励机制被设计为速度递减模式,类似于贵重金属的挖矿过程。比特币的货币是通过挖矿发行的,类似于中央银行通过印刷银行纸币来发行货币。矿工通过创造一个新区块得到的比特币数量大约每四年(或准确说是每210,000个块)减少一半。开始时为2009年1月每个区块奖励50个比特币,然后到2012年11月减半为每个区块奖励25个比特币。之后将在2016年的某个时刻再次减半为每个新区块奖励12.5个比特币。基于这个公式,比特币挖矿奖励以指数方式递减,直到2140年。届时所有的比特币(20,999,999.98)全部发行完毕。换句话说在2140年之后,不会再有新的比特币产生。

       矿工们同时也会获取交易费。每笔交易都可能包含一笔交易费,交易费是每笔交易记录的输入和输出的差额。在挖矿过程中成功“挖出”新区块的矿工可以得到该区块中包含的所有交易“小费”。目前,这笔费用占矿工收入的0.5%或更少,大部分收益仍来自挖矿所得的比特币奖励。然而随着挖矿奖励的递减,以及每个区块中包含的交易数量增加,交易费在矿工收益中所占的比重将会逐渐增加。在2140年之后,所有的矿工收益都将由交易费构成。

具体的内容见:http://zhibimo.com/read/wang-miao/mastering-bitcoin/Chapter08.html

区块链的应用场景:

未来几年内,可能深入应用区块链技术的场景将包括:

       金融服务:区块链带来的潜在优势包括降低交易成本、减少跨组织交易风险等。该领域的区块链应用目前最受关注,全球不少银行和金融交易机构都是主力推动者。部分投资机构也在应用区块链技术降低管理成本和管控风险。从另一方面,要注意可能引发的问题和风险。例如,DAO(Decentralized Autonomous Organization 是史上最大的一次众筹活动,基于区块链技术确保资金的管理和投放)这样的众筹实验,提醒应用者在业务和运营层面都要谨慎处理。

       征信和权属管理:征信和权属的数字化管理是大型社交平台和保险公司都梦寐以求的。目前该领域的主要技术问题包括缺乏足够的数据和分析能力;缺乏可靠的平台支持以及有效的数据整合管理等。区块链被认为可以促进数据交易和流动,提供安全可靠的支持。征信行业的门槛比较高,需要多方资源共同推动。

       资源共享:以 Airbnb 为代表的分享经济公司将欢迎去中心化应用,可以降低管理成本。该领域主题相对集中,设计空间大,受到大量的投资关注。

贸易管理:区块链技术可以帮助自动化国际贸易和物流供应链领域中繁琐的手续和流程。基于区块链设计的贸易管理方案会为参与的多方企业带来极大的便利。另外,贸易中销售和法律合同的数字化、货物监控与检测、实时支付等方向都可能成为创业公司的突破口。

      物联网:物联网也是很适合应用区块链技术的一个领域,预计未来几年内会有大量应用出现,特别是租赁、物流等特定场景,都是很合适结合区块链技术的场景。但目前阶段,物联网自身的技术局限将造成短期内不会出现大规模应用。

      这些行业各有不同的特点,但或多或少都需要第三方担保机构的参与,因此都可能从区块链技术中获得益处。

认识上的误区

目前,由于区块链自身仍是一种相对年轻的技术,不少人对区块链的认识还存在一些误区。下面,是需要注意的一些问题:

首先,区块链不等于比特币。虽说区块链的基本思想诞生于比特币的设计中,但发展到今日,比特币和区块链已经俨然成为了两个不太相关的技术。前者更侧重从数字货币角度发掘比特币的实验性意义;后者则从技术层面探讨和研究可能带来的商业系统价值,试图在更多的场景下释放智能合约和分布式账本带来的科技潜力。

其次,区块链不等于数据库。虽然区块链也可以用来存储数据,但它要解决的核心问题是多方的互信问题。单纯从存储数据角度,它的效率可能不高,笔者也不推荐把大量的原始数据放到区块链系统上。当然,现在已有的区块链系统中,数据库相关的技术十分关键,直接决定了区块链系统的吞吐性能。

TODO: bigchaindb, chainsql

最后,区块链并非一门万能的颠覆性技术。作为融合多项已有技术而出现的新事物,区块链跟现有技术的关系是一脉相承的。它在解决多方合作和可信处理上向前多走了一步,但并不意味着它是万能的,更不会彻底颠覆已有的商业模式。很长一段时间里,区块链所适用的场景仍需不断摸索,并且跟已有系统也必然是长期合作共存的关系。

区块链目前还存在的问题

1:安全性和隐私性。

怎么防止交易记录被篡改?怎么证明交易双方的身份?怎么保护交易双方的隐私?密码学的发展,为解决这些问题提供了不少手段。传统方案包括 Hash 算法,加解密算法,数字证书和签名(盲签名、环签名)等。随着区块链技术的应用,新出现的需求将刺激密码学的进一步发展,包括更高效的随机数产生、更高强度的加密、更快速的加解密处理等。同时,量子计算等新技术的出现,也会带来更多的挑战,例如,RSA 算法等目前商用的加密算法,在未来可能无法提供足够的安全性。能否满足这些新的需求,将依赖于数学科学的进一步发展和新一代计算技术的突破。

2:分布式的区块如何达成共识

       这是个经典的技术难题,学术界和业界都已有大量的研究成果(包括 Paxos、拜占庭系列算法等)。问题的核心在于如何解决某个变更在分布式网络中得到一致的执行结果,是被参与多方都承认的,同时这个信息是被确定的,不可推翻的。该问题在公开匿名场景下和带权限管理的场景下需求差异较大,从而导致了基于概率的算法和确定性算法两类思想。

       最初,比特币区块链考虑的是公开匿名场景下的最坏保证。通过引入了“工作量证明”(Proof of Work)策略来规避少数人的恶意行为,并通过概率模型保证最后参与方共识到最长链。算法在核心思想上是基于经济利益的博弈,让恶意破坏的参与者损失经济利益,从而保证大部分人的合作。同时,确认必须经过多个区块的生成之后达成,从概率上进行保证。这类算法的主要问题在于效率的低下。类似算法,还有以权益为抵押的 PoS、DPoS 和 Casper 等。后来更多的区块链技术(如超级账本)在带权限管理的场景下,开始考虑支持更多的确定性的共识机制,包括经典的拜占庭算法等,可以解决快速确认的问题。

        共识问题在很长一段时间内都将是极具学术价值的研究热点,核心的指标将包括容错的节点比例、决策收敛速度、出错后的恢复、动态特性等。PoW 等基于概率的系列算法理论上允许少于一半的不合作节点,PBFT 等确定性算法理论上则允许不超过 1/3 的不合作节点。

3:交易的性能

虽然一般说来,区块链不适用于高频交易的场景,但由于金融系统的需求,业界目前十分关心如何提高区块链系统交易的吞吐量,同时降低交易的确认延迟。

目前,公开的比特币区块链只能支持平均每秒约 7 笔的吞吐量,一般认为对于大额交易来说,安全的交易确认时间为一个小时左右。以太坊区块链的吞吐量略高一些,但交易性能也被认为是较大的瓶颈。

注:实际上,小额交易只要确认被广播到网络中并带有合适的交易服务费用,即有较大概率被最终打包。

区块链系统跟传统分布式系统不同,其处理性能很难通过单纯增加节点数来进行横向扩展。实际上,传统区块链系统的性能,在很大程度上取决于单个节点的处理能力。高性能、安全、稳定性、硬件辅助加解密能力,都将是考察节点性能的核心要素。

这种场景下,为了提高处理性能,一方面可以提升单个节点的性能(如采用高配置的硬件),同时设计优化的策略和算法,提高性能;另外一方面试图将大量高频的交易放到链外来,只用区块链记录最终交易信息,如比特币社区提出的 闪电网络 等设计。类似地,侧链(side chain)、影子链(shadow chain)等思路在当前阶段也有一定的借鉴意义。类似设计可以将交易性能提升 1~2 个数量级。

此外,在联盟链的场景下,参与多方存在一定的信任前提和利益约束,可以采取更优化的设计,换来性能的提升。以超级账本 Fabric 项目为例,在普通虚拟机配置下,单客户端每秒可以达到数百次(Transactions per second,tps)的交易吞吐量;在有一定工程优化或硬件加速情况下可以达到每秒数千次的吞吐量。

客观地说,目前开源区块链系统已经可以满足不少应用场景的性能需求,但离大规模交易系统的每秒数万笔的吞吐性能还有较大差距。

注:据公开的数据,VISA 系统的处理均值为 2,000 tps,峰值为 56,000 tps;某金融支付系统的处理峰值超过了 85,000 tps;某大型证券交易所号称的处理均(峰)值在 80,000 tps 左右。

4:扩展性

常见的分布式系统,可以通过横向增加节点来扩展整个系统的处理能力。

对于区块链网络系统来说,根据共识机制的不同,这个问题往往并非那么简单。

例如,对于比特币和以太坊区块链而言,网络中每个参与维护的核心节点都要保持一份完整的存储,并且进行智能合约的处理。此时,整个网络的总存储和计算能力,取决于单个节点的能力。甚至当网络中节点数过多时,可能会因为一致性的达成过程延迟降低整个网络的性能。尤其在公有网络中,由于大量低性能处理节点的存在,问题将更加明显。

要解决这个问题,根本上是放松对每个节点都必须参与完整处理的限制(当然,网络中节点要能合作完成完整的处理),这个思路已经在超级账本中得到应用;同时尽量减少核心层的处理工作。

在联盟链模式下,还可以专门采用高性能的节点作为核心节点,用相对较弱的节点仅作为代理访问节点。

5:数据库和存储系统

区块链网络中的大量信息需要写到文件和数据库中进行存储。

观察区块链的应用,大量的读写操作、Hash 计算和验证操作,跟传统数据库的行为十分不同。

当年,人们观察到互联网应用大量非事务性的查询操作,而设计了非关系型(NoSQL)数据库。那么,针对区块链应用的这些特点,是否可以设计出一些特殊的针对性的数据库呢?

LevelDB、RocksDB 等键值数据库,具备很高的随机写和顺序读、写性能,以及相对较差的随机读的性能,被广泛应用到了区块链信息存储中。但目前来看,面向区块链的数据库技术仍然是需要突破的技术难点之一,特别是如何支持更丰富语义的操作。

大胆预测,未来将可能出现更具针对性的“块数据库(BlockDB)”,专门服务类似区块链这样的新型数据业务,其中每条记录将包括一个完整的区块信息,并天然地跟历史信息进行关联,一旦写入确认则无法修改。所有操作的最小单位将是一个块。为了实现这种结构,需要原生支持高效的签名和加解密处理。

6:集成和运营

即便大量企业系统准备迁移到区块链平台上,在相当长的一段时间内,基于区块链的新业务系统必将与已有的中心化系统集成共存。

两种系统如何共存,如何分工,彼此的业务交易如何进行合理传递?出现故障如何排查和隔离?已有数据如何在不同系统之间进行迁移和灾备?区块链系统自身又该如何进行运营,包括网络的设计选择、状态监控、灾备等。

这些都是很迫切要解决的实际问题。解决不好,将是区块链技术落地的不小阻碍。