22

如何从高层把握区块链的本质?

 4 years ago
source link: https://mp.weixin.qq.com/s/H1iQth7pCjdr35fJFphsyQ
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

AzqqQrE.jpg!web

关于区块链,众说纷纭。

如何化繁为简,去芜存菁,从高层把握住区块链这个概念?

本文主要从顶层、高层阐释区块链的本质和实质。

本文也会略略提及中、低层,但不是重点,可以略过。

注意: 1.本文不区分“去中心化”和“分布式”概念,本文视之为等同,也即 可以把本文所提到的“分布式”认为是“去中心化的分布式” 2.区块链技术有很多种(其中不乏一些很奇特的)。 本文所谈的区块链,是指像比特币和以太坊这类经典的、典型的区块链 3.本文会区分“区块链技术”、“区块链系统”、“区块链应用”、“区块链数据”,但如果仅仅说“区块链”,请读者根据上下文判断是在说什么。比如,我说“区块链是一种全新的技术”,其精确含义是“区块链技术是一种全新的技术”。

一、从顶层认识区块链

1、区块链是一种全新的、跨时代的技术。

区块链技术组合了多种已有技术,但这种组合是前所未有的组合。

由于所有新的技术都是建立在已有技术之上的,所以区块链是不折不扣的创新技术。

作为区块链技术的开创者,比特币技术精妙地组合了多种网络技术、分布式技术、密码学技术,使得一种全网一致的、分布式的、工作量证明的、区块式存储的、带完整性保护的、防伪造、防双花、带自动化脚本的全网交易账本得以实现。

2、区块链以分布式的方法,达成了多节点对世界认知和行动的自动化协调一致。这在以前是不可能的。

这意味着计算机世界里自治社会的可能,在没有集中式节点的干预下,一群对等节点居然可以通过共识达成共识,不仅可以对网络上发生的事件达成共识,还可以对其中的计算达成共识,这使得在计算机世界里,一个由对等权力个体组成的社会,有能力进行自动管理和共同生产。

这意味着,一些管理工作甚至是更多的管理工作可以自动化完成了,可以设想一下,比如传统的薪酬管理,可能需要业务部门、人事部门、财务部门等多部门联合起来,开展评估、计算、统计、发放等一系列工作,如果这些统统可以写在区块链的智能合约里,所有这些工作就都可以自动化完成。

二、从高层把握区块链

1、区块链技术解决的是分布式网络中的技术问题,它并不关心集中式系统。

如果你很喜欢用集中式的方式解决问题,你不用考虑区块链技术。集中式系统目前看上去还好,似乎也没有什么解决不了的问题,按自己的那套继续做下去就是了,比如淘宝、比如微信,都运行得很好,无需使用区块链技术。

但分布式系统有很多问题需要区块链技术来解决。

可以设想一下,1000个同级别的士兵走到一起,没有任何一个人是长官,也没有任何人有指挥权,现在让他们共同去完成一个艰巨的作战任务,怎么组织?由于所有士兵权力相同,谁也指挥不了谁,怎么办?没有人能设想这种可能性。

2、区块链技术使用了全新的数据生成和存储方式。

使用一个链着一个、每过一段时间就产生一个的区块来保存数据,这是人们前所未见的。

为什么要这样,这是怎么做到的?

数据必然随着时间不断产生的,这和以往并没有不同。但以往的存储并没有特意考虑数据的不可篡改性,数据存储在系统内的多个文件(或数据表)中,也没有想去广播这些数据。

而区块链想在全网分布式地达成一致,就需要将数据广播到所有节点,为了广播方便,就把数据打包起来,为了防篡改和防差错,就要加上完整性保护。这就催生了数据的区块式生成、广播和存储。

那么,由谁打包,什么时候打包?具体做法依赖于共识。全网节点在一致的逻辑下,收集并广播事件(也即交易),由某个节点打包然后广播到全网。系统中每个节点可以验证收到的交易、区块,验证区块链中智能合约(即代码)的计算结果,正确的留下,错误的拒绝。

最终,每个节点都有一份完全一致的经过互相验证的区块链。

由于时间戳也打在区块中,区块数据就和现实世界建立了强烈的不可篡改的时间关系,使得区块链有了事件追溯的能力。 而以前的存储方式,虽然也可以记录时间信息,但并非强制应用在所有数据上,而且也可以较为容易的修改。

3、区块链解决了分布式网络中数据的一致性和不可篡改性问题

区块链充分利用哈希算法(hash)和公钥密码算法,保障了区块链的强一致性和不可篡改性,hash可以快捷地检测到明文中任何的一个比特的不一致,如果有任何网络传输错误或其他有意无意的破坏,每个节点都可以很快检测出来。

每个区块的hash值存放在下一个区块,每个区块都可以验证上一个区块是否正确,这种方法,不仅可以保证区块的内容没有错,还可以保证区块的顺序也没有错。

如何你想篡改一个区块的数据,你就需要修改其后所有区块(因为本区块hash值放在下一个区块),而且要改的是全网所有节点存储的区块,你能做到这一点的唯一途径,就是让共识认可这样的篡改。在比特币系统中,想做到这点,你只有做出全网最大工作量的那条链(想改越早的数据就越难),才会成让各节点认可。

所以, 严格地说,区块链数据并非“不可篡改”,而是“很难篡改” ,虽然在比特币上没有发生过篡改,但在其他山寨币(其全网算力较小)上的确发生过成功的51%攻击。

4、区块链所提供的信任,来自于密码学算法的强度。

区块链被人称为“制造信任的机器”。

信任从何而来?来自不可篡改。不可篡改又来自何处?来自密码学算法的强度。

简单地说,哈希算法不败,则不能篡改;公钥算法不败,则不能伪造(没有保存好私钥则另当别论)。

现在我给出一个全0的SHA256哈希值,有谁能将明文找出来吗?我给出一个全1的比特币地址,有谁能将对应的私钥求出来吗?这可是动用地球上所有国家力量都做不到的事(即便考虑到量子计算,在可见的十几年内都做不到)。

基于这样的基础,人们有理由相信,在区块链上,数据篡改几乎是不可能的,因为所有篡改,都无法通过哈希验证,对于比特币这种PoW共识算法,其hash还不是一个普通的hash值,还要求前面有n个0。

然而,区块链只能保障链上的数据不可篡改。一瓶自称可以在区块链上可以验证真假的茅台酒,可不代表这瓶里装着真茅台。

5、区块链使得无中心的各节点之间可以进行可信的自动化计算。

不仅仅是数据,区块链还可以将代码(或曰智能合约)存储在链上,这样,不可篡改的程序就出现了。

区块链上各个节点可以运行链上程序并互相验证程序运算的正确性,这使得区块链不仅有一致的不可篡改的存储,还有一致的不可篡改的计算。

和传统集中式系统的区别在哪里?

传统上的程序运行在集中化的服务器上(虽然可能是多台服务器,但在本质上是集中的),单一实体可能操纵计算结果,也就是说,计算可能是不可信的。

智能合约是运行在整个区块链各个节点上的,没有哪个节点能占据关键位置,也没有哪个节点可以操纵计算,他们按照共识机制实现共同一致的计算。

如果我们的物理世界,逐步都可以抽象到数字世界上来(这是趋势),那么很多原先需要人工管理的流程、规则、契约、合同,都可以在数字世界自动化地无差错地被执行,就可以节省下来大量的人力工作来做更有意义的事。

比如在DeFi这类应用中,用户可以将一定价值的加密资产通过智能合约的方式按一定比例进行抵押锁定,并以此获取贷款,当用户将借款偿还之后,抵押品将自动归还到用户的加密资产钱包里。与传统抵押借贷业务相比,这种方式拥有防止资产所有权篡改、提高资产可靠性、结算易于审计、价值信息透明度高以及业务智能合约可自动执行等优势。

6、区块链中的token,使得现实世界中的权益可以登记在链上,然后进行可信的计算和流通。

一个区块链应用中可以有、也可以没有token,关键看是否需要。

token即通证,也即可流通的数字权益证明,比如积分、投票权、gas、归属权等等。如果你需要在应用里有一个可以流通的权益证明,你就设计一个token放里面,如果你不需要这些功能,就不用设计。

这就好比你设计一个模拟家庭游戏,这其中可以没有虚拟货币;但如果你在设计一个模拟社会游戏,你会很自然考虑设计一个虚拟货币,这样游戏中的人可以使用虚拟货币进行各种社会化交易。

有了token,区块链可以实现在分布式系统内可信的价值传递,比如,资产所有权的转移可以在一个分布式系统中记录下来。而且是分布式的、公开的、不可篡改的、不可双花的方式记录了下来。这在以前是做不到的。

人们当然可以在集中式系统中实现价值传递,但集中式系统的问题在于:单点,不够可信,易于篡改,可能不公开、不透明,多主体间的自动化程度不够。

本质上,区块链所提供的可信的价值传递,基于前面所说的一致的、不可篡改的存储和计算。

7、区块链技术可以使多节点实现无中心的自我管理。

我们都知道,比特币系统挖矿的难度是定期调节的,以保障不管有多少算力,平均都是每10分钟出一个区块。按照传统的思路,这种调节应该由一个中心节点(或管理节点)根据当前情况,算出合适的值,然后通知各节点修改配置文件来完成。

比特币系统可不会这么做,它的做法是:每个节点每过2016个区块,就计算这些区块花费时长与20160分钟(也以每10分钟一个区块所期望花费的时长)的比值,这个比值乘以现有难度,就得到新的难度。由于区块数和时间戳都是固定的、一致的,所以这个计算的结果,也必然是一致的。

类似的,区块链可以把系统自我管理、自我调节的内容写进代码里,这些代码可以是区块链本身的代码,也可以是链上的智能合约,还可以是其他地方的代码。

本质上,这是在已有共识的基础上,产生新的共识。

有了这样的能力,人们就可以在没有管理层的情况下,依托互联网,开展大规模的合作,并使用其中的token进行权益证明和流通。

8、现阶段,区块链至少可以实现多个对等实体间的数据共享与协作。

如果没有一个有权单位牵头(如监管机构),多个对等单位间想自动化共享数据是不容易的,这既有管理上的困难,也有技术上的困难。

而区块链技术,使得不用成立新机构,各家单位仅仅建设和维护自己的节点,就能够以分布式的方式,实现数据的共享和协作。

很多联盟链,做的就是这样的事。

这样的共享和协作一旦建立,信息隐藏、实情隐瞒、数据不透明、信息不对称等情况就会得到消减和遏制,从而促进整个社会的进步。

9、注意,只要是人设计出来的系统,就会有错。

区块链技术和应用会有各种bug,而且是各个层面上的。

所以,不要迷信,要提防所有可能的bug。

三、从中层了解区块链

这部分主要讲述共识,对于仅希望从高层把握的读者,可以略过本章。

1、广义的共识机制

从普遍意义上讲,共识就是大家都认可的逻辑(其中包括数据)。

区块链上的各节点,运行着同样的代码逻辑(虽然可能是不同语言写成的代码),这些逻辑就是共识。

同样的逻辑,表明着同样的算法、同样的通信协议、同样的数据格式、同样的处理规则、同样的运行细节。

如果有人想要改变现有的共识,他必须能让网络中各节点接受他的提议,如果无法做到这点,他就只能和那些认可他的人,另起一套,开一条新的链。

反过来,如果多个节点都认可这个改变(或称升级),大家就会在这个升级后的共识上继续玩。而那些不认可这个升级的节点,继续在原先的链上玩。

区块链可以设计有自我更新机制,用已有的共识产生新的共识,以实现自身的进化。

2、狭义的共识机制

狭义上的共识,指的是各节点都认可什么样的逻辑,使得确认谁可以打包区块,以及确认一个新的区块能不能被接受。目的是让正确的(即共识认可的)区块被产生和添加上来。

下面列举4种比较经典的共识算法。

  • PoW,工作量证明算法。有多种实现方式,原理就是各节点抢着解数学难题,解题过程需要大量计算,谁先解出难题谁就有权利打包区块,而其他节点可以很容易验证题是否做对了,比如比特币使用的Hashcash就是一种PoW算法(算出来的hash值要求有若干位前导0)。PoW需要花费真金白银的算力,虽然有浪费资源之嫌,但比较坚实一些,毕竟算力是实实在在的。

  • PBFT,实用拜占庭容错算法,可以保证 (n − 1)/3 的容错性, 其中 n 为节点总数。也就是说,10个节点中,即便3个变节也没事。优点是速度快。多用在联盟链中。

  • PoS,权益证明算法,这是一种用节点权益(比如币数、币天数等)来保障区块正确性的方法,如果一个节点在生成或验证区块时不诚实,就可能会失去自己抵押的权益,诚实节点则会得到相应的奖励。PoS可以有多种实现,比如在点点币中,高权益节点有更大概率挖矿成功(可以理解为算法会给高权益者多补一些0)。在实践上,一般在初期采用PoW方式使得Token相对公平地分配给矿工, 后期随着挖矿难度增加, 系统转由PoS算法维护。

  • DPoS,授权股份证明算法(Delegated proof-of-stake) ,速度快,每个节点可以将其持有的股份权益作为选票授予某个节点,获得票数最多且愿意成为代表的前N个节点成为超级节点,超级节点按照既定的时间轮流对交易进行打包,如果发现变节的超级节点将会被除名。比如EOS有21个超级节点和100个备用节点。

3、对交易内容进行验证的共识

任何一个节点在收到一个交易后,要对交易进行校验,如果校验不通过,将抛弃此交易,如果校验通过,则广播此交易。

节点同样要对区块中的交易进行校验,未通过校验的区块将被拒绝。

验证的内容大致有:

  • 交易的语法、数据结构、长度大小必须正确。

  • 交易的各种细节必须满足规范。

  • 如果交易中含有计算,其计算结果必须正确。

  • 如果这个交易和其他交易有关联,那么相应的逻辑关系必须正确。

4、对区块内容进行验证的共识

节点收到区块后,要对区块进行校验,如果校验不通过,将拒绝此区块,如果校验通过,则存储并广播此区块。

对于比特币系统而言,要做的验证大致有:

  • 区块的数据结构正确。

  • 区块中难题的答案正确、难度正确。

  • 区块的时间戳只能在一定的误差范围之内。

  • 区块大小在限制范围之内。

  • 第一个交易是挖矿奖励交易,奖励的金额正确。

  • 区块内的所有交易都通过了交易验证。

5、对同时出现相互竞争的多个区块的选择共识

为了保障区块链数据的一致性,必须处理多个矿工同时挖到区块的情况。

那么,选择哪条链呢?对于PoW共识,全网唯一的区块链是那条支付出最多工作量的分支。

每个节点按照这个共识,选择在哪条分支上继续工作。

四、从低层理解区块链

区块链相关的技术很多,这里无意一一列举,仅列出几个经典的。

1、哈希算法

2、公钥算法

3、数字签名

4、Merkel树

6、SPV算法

7、P2P协议

……

五、从底层实现区块链

用代码实现。

略。

六、尾言

最后,我们回到那1000个士兵的问题。

在所有士兵都愿意完成任务和信任系统的前提下,那1000个士兵每人装备一个单兵设备,上面运行着同样的区块链程序,依靠这个,系统收集信息,传达信息,自动计算,给出行动建议,所有士兵在没有长官的情况下,实现了自我指挥和协同作战。

系统还可根据每个士兵的表现,计算出其应得的token。

Fj6jemR.jpg!web

欢迎关注,阅读更多高层本质。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK