2345软件资讯
当前位置: 2345软件资讯 > IT业界 > 正文

区块链是什么意思?区块链是什么通俗解释【图解】

摘要:

区块链是什么意思?区块链是什么通俗解释【图解】

  最近看到新闻人人网遭监管约谈,其旗下业务区块链也被叫停了,估计很多人不知道区块链是什么意思吧。下面,2345小编用通俗易懂的语音给大家介绍一下区块链是什么技术。

  区块链是什么通俗解释【图解】

  话说,2008年,一个叫中本聪的神秘人士提出了区块链(Blockchain)这个概念,并运用于比特币之上,2015年,像是一阵风,区块链这个概念从极客圈子、金融科技圈到大众视野,频频见诸媒体,直到现在,虽然区块链技术在我国的应用还是凤毛麟角,但是这个概念已经是炙手可热。

  话说,区块链诞生之年2008年,正是美国次贷危机爆发的时间。是不是很巧呢?

  作为比特币的底层技术,区块链带来了革命性的颠覆。没有经过美联储和各国央行,全球用户就可以进行自由交易。

  如果把比特币看作一座金矿,区块链就是运送金矿的小推车。2013年比特币爆涨,成功引起了人们的注意,后来,人们发现更有价值的是这辆“小推车”,除了能装载金矿之外,还能装其他更多的东西,比如股权、版权、账目……甚至于整个世界。

  著名的《经济学人》杂志于2015年10月发了题为《The trust machine》的封面文章,将区块链被比喻为“信任的机器”。

  区块链基于数学原理解决了交易过程的所有权确认问题,保障系统对价值交换活动的记录、传输、存储结果都是可信的。区块链记录的信息一旦生成将永久记录,无法篡改,除非能拥有全网络总算力的51%以上才有可能修改最新生成的一个区块记录。

  区块链的数学原理是hash方程,看到这里,相信数学学霸和程序猿们已经明白啦。不明白的童鞋请死皮赖脸地向学霸们请教。

  区块链作为一种用于记录、追踪、检测、转移所有资产的数据库和库存清单。可以用于金融、经济和金钱,有形资产和无形资产等各个领域。区块链的最大贡献是建立去中心化的信任机制,“去中心化”就意味着要革了所有中心化机构的命,真是细思极恐啊。

  Read Write Web的作者Daniel Riedel甚至预测,区块链将成为引发第四次工业革命的关键技术。

  天使投资人许洪波教授认为,区块链可能是继互联网之后的影响人类社会发展和经济结构的又一重大发明。它可能重新定义互联网,从而改变人类社会。许教授说,如果将区块链应用到生意中,不再需要中间机构作为担保,人们可以回到物物交换的原始时代。

  目前,区块链技术已经有了一些应用,最先尝鲜的是蚂蚁金服,蚂蚁金服利用该技术与中华资助基金会合作开展慈善项目“听障儿童重获新声”,项目每笔资金流都被写在区块链,人们点开记录可以看到每笔资金的流向和详细用途。解决了公益事业中款项不透明、信任缺失的痼疾。

  区块链技术目前的发展状况只能说是“小荷才露尖尖角”,用长远的目光来看,区块链技术一旦发展起来,将来会跟每个人息息相关。届时,区块链将不仅仅是银行区经理们的话题而是嵌入普罗大众的衣食住行。

  区块链是什么意思

  区块链就是把加密数据(区块)按照时间顺序进行叠加(链)生成的永久、不可逆向修改的记录。

  想象一个封闭岛国的房地产市场,只允许岛民购买和出售岛上房屋;所有交易记录都有岛国唯一的地产中介进行打印和保存(因为其他人没有打印机)。每座房子的产权交易记录都是一条信息链;房子过往每一次交易的信息按照时间顺序形成了一个链条。假如每份纪录都被锁在一个独立的信箱里,只有房屋所有人拥有钥匙;新的交易记录可以被塞进信箱里,成为信息链的最新一环,但是一旦塞进信箱里,纪录就不可以再被取出丢弃,或者被修改。

  此时,这所有信箱合起来就是一个非数字化的区块链--信息加密,每个秘钥持有人仅可以看到或者授权他人看到自己房屋的交易信息;而每次给房屋添加交易信息都是永久不可逆的过程。不会丢失,不能修改。

  再想象:如果岛上并没有中介,而是每家各有一个打印机和一面对应岛上所有房产的信箱墙,各家人依然只可以打开自家墙上跟自己房产有关的信箱。如果每次有一座房子被交易,交易人要跑遍岛上所有人家,给对应的信箱里添一页纪录。那这时候,即使有几家发生了火灾,丢掉了交易纪录,或者有人偷偷把自己家信箱里的纪录撤换掉,整体交易记录也不会出现偏差--居民只要在每次交易之前拿出每个人那里保存的交易记录副本,根据多数原则确定统一的交易历史,并纠正错误的副本,就可以在无监督的情况下运行区块链。这也就是常常被与区块链混为一谈的另一技术:分布式账本(distributed ledger)。

  区块链是一种可以完全改变金融系统底层设计的技术,因为可以实现所有市场参与人对市场中所有资产的所有权与交易记录的无差别记录,所以可以完全消灭掉清算和托管这些在交易前中后进行所有权确认的中间环节;另外,区块链作为一种电子信息记录,可以结合计算机算法实现交易的自动化,即智能合约。区块链结合其他金融技术有许多衍生应用,每种均可以将一类市场中介替代。区块链之于金融服务,如同TCP/IP之于互联网:一旦底层标准得到认可与普及,类似比特币和R3的具体应用将会出现在金融服务的每个角落里。

  区块链是什么通俗易懂例子

  一句话概括,如果互联网技术解决的是通讯问题的话,区块链技术解决的是信任问题。

  这么说还是一头雾水啊,举个栗子,我们赌球。

  比如我和A赌NBA总冠军,我说是勇士,A说是骑士。但是A的赌品我深表怀疑,担心他输了赖账不给钱。没想到A反咬一口,还怀疑我的赌品不好,简直岂有此理!那咱俩就需要一个可信第三方来做公证人。我们可以各自出20块钱给我们都信得过的公证人来保管。如果届时勇士赢了,40块钱就归我。如果骑士赢了,40块钱就归A。

  总决赛系列终于结束了,公证人卷了巨款40元跑了……

  人和人最基本的信任到哪里去了?

  出于对人性堕落的失望,我和A决定使用区块链技术来解决这个价值40块钱真金白银的问题。办法是写一个”智能合约“来实现对赌。方法是这样的,我们先各自出20块钱打到一个”智能合约“的账户里,这个合约不被任何人控制,只被合约的代码控制。现在”智能合约“的账户上有了40块钱,我们开始运行智能合约。

  合约代码大概这样:

  比赛结果=NBA官方网站API.get("总决赛")

  if(骑士赢)

  pay 40 to A

  else

  pay 40 to B

  这个账户唯一会动账的可能就是获取比赛结果后,按照规则支付。我把代码给A看后,表示无异议。我们就把代码放到一个区块链上去运行。

  这个叫做”智能合约账号“的账户,事实上是一个无人信托,它只会按照代码去执行。等比赛结果出来了,代码一执行,谁都赖不了账。A再信不过我,我再信不过A,我们都能实现对赌。

  别的行业先不说,金融行业里实在太多这样的需求要这样做。

  比如私募基金协会出了个新八条,股票配资不让超过1:1了,赌场老油条们怎么办?吃惯优先利息的银行怎么办?

  于是大家想了一个利用信托的办法。劣后资金比如5000万,要搞个1:3的杠杆,然后银行出优先资金1.5个亿,双方都把钱打入信托账户。这时候信托账户上就有2个亿了,然后再拿信托的名义去券商开户做交易。

  信托负责审核,如果产品的净值小于0.8了,那么平仓,银行本金和利息拿走,剩下的钱归劣后拿回去。如果净值很高,并且到期了,银行拿走本金和利息,剩下归劣后。信托是银行和劣后都认可的可信第三方,问题是这活不是白干的,信托要收管理费用的。

  如今一块信托牌照大概能卖好几十亿,这钱太好挣了。

  整个流程耗时耗财不说,千三的通道费管理费忍了,最关键的问题,如果信托公司出问题了呢?信托公司可不是都做无风险业务的,天天嚷嚷着要打破刚兑啥的,如果哪一天真出问题了咋办。托管账户在银行这里,银行也不是没倒闭的风险。

  要解决信任问题的办法恰恰是谁都不信。

  咱们再写个智能合约

  净值=券商报告.get(产品名称)

  运行天数=DateTime.Now - 起始日期

  应计利息=优先资金量×日利息×运行天数

  银行应收=优先资金量+应计利息

  劣后应得=净值×总额-银行应收

  if(净值<=0.8 or 运行天数>=到期天数)

  {

  pay 银行应收 to 银行

  pay 劣后应得 to 劣后

  }

  往区块链上那么一放,一样实现这个效果,但你不用担心任何一个第三方违约或者倒闭,因为这里并没有第三方。或者说全世界都是你的第三方。具体的底层技术细节不是码农兄弟就别管了,就跟你不需要知道链路层通讯协议照样能打王者荣耀一样。

  好了,民间配资公司都可以洗洗睡了。标准优先劣后协议开源后,资金方自己可以打钱进智能合约,等劣后方打钱进去,填写个产品名称后就可以跑起来了。配资公司吃掉的利息差有多大,旧模式其实浪费的资源就有多大。比信托的通道费和管理费大多了。

  撇开费用不谈,想想债券代持的萝卜章事件吧,不信任任何第三方是何等的重要。

  如果债券代持这笔业务是放在区块链上的话,那根本不可能有公章是伪造这种奇葩借口。因为区块链上的身份确认,是用高级加密算法的数字签名来实现的,不是地摊上私刻公章能做出来的。人类科技都发展到这水平了,还在用印章和笔迹来验证核实身份,这是何等奇怪之事。

  说到中间人的浪费,莫过于保险公司了。保费里只有一小部分是真正发挥作用的,你的钱都付给brokers和宏观的核心CBD地段大楼去了。更别说各种模糊抠字眼的不理赔条款了。

  我们再写个智能合约

  航班抵达时间=航空公司官网.get(航班号)

  pay 30 to I

  if(航班抵达时间-预期时间>3小时)

  pay 1000 to C

  这里I是保险公司,C是客户。I要先充1000到智能合约里,B要充30到智能合约。这是个标准合同,任何人充个1000都能当保险公司,试图去赚个30块钱。当然啦,保险公司靠大数定律赚钱,最好别只搞一次。智能合约在区块链上跑不是没有成本的,是要付费的,但远比传统大型金融中介机构要便宜得多得多。

  成本还不是主要考量,最最关键的是,没有模糊条款。比起自然语言,代码没有歧义性。

  如果保险公司和信托公司的违约风险大家没体会的话,想想场外期权的违约风险,行业是有血的教训的。比如现在大热的螺纹钢,没有期权不给力啊,搞个场外的话,但交易对手违约风险怎么办。

  螺纹钢报价=上期所报价.get("rb1801")

  Pay 期权费 to Seller

  if(DateTime.Now()>=到期日 and 螺纹钢报价>4000)

  内在价格=螺纹钢报价-4000

  pay 内在价值 to Buyer

  这和杠杆的保险有点像,这是一张执行价4000的螺纹钢的欧式看涨期权,期权的买方只需要充值期权费用进去就可以了。关键是期权的卖方,保证金充多少进去。到期了,如果期权的卖方保证金不足以支付了怎么办?

  我们有两种解决方案,一个是在智能合约里规定,一旦卖方的保证金不足以支付,直接强制平仓将保证金全部给多头。另外,智能合约是可以发送消息的,让卖方追加保证金进去,否则触发强平。这里的保证金不是给交易所的,而是打到智能合约的账户上的。

  虽然是场外,但你也不用担心对手盘风险了。事实上,合约你可以自己定义规则,不一定要是标准的期权期货合约,衍生品人人可以设计,不用等交易所上市产品。

  A股股票融券难,不易做空?

  股价=上交所报价.get("600516")

  价差=股价-对赌价

  if(价差>0)

  pay 价差 to Long

  else

  pay Math.Abs(价差) to Short //Math.Abs 的意思是取绝对值

  多头(Long)和空头(Short)都充值保证金进去,然后开始对赌。保证金比例大家商量在合约里体现,也设计保证金Margin Call功能,这就是个股期货了。看好600516的可以获得没有配资利息的杠杆,空头可以不用融券做空。

  所谓“现金交割”的金融期货,无非就是拿个指数对赌。沪深300啦,VIX期货啦,莫不如此。

  其实只要是有公允数据的东西,都可以拿来对赌,NBA比赛和飞机航班是否延误之外,还能有各种各样的公开数据,对冲掉你不想要的任何风险,只要你有交易对手。

  其实在区块链智能合约出现之前,金融行业里已经有个东西有点像智能合约。这东西叫信用证,是银行开具的。什么意思呢?

  大家都用过支付宝。在淘宝上卖家担心发货了买家不付款,买家担心付款了,卖家不发货。那怎么办?买家先打钱给支付宝,然后支付宝收到钱后告诉卖家买家已经付款,发货收货完成后买家确认收货,支付宝放款给卖家。支付宝是淘宝交易的可信第三方。

  信用证是贸易过程中,银行充当可信第三方的角色。比如A公司要买B公司的货,是笔跨国贸易。A公司担心付钱给B公司货过不来,B公司担心发货了A迟迟不打款。于是,A公司给自己的银行打保证金让银行开具一张信用证给B的开户银行,信用证里写了只要海关数据显示货到了,我就会支付给你钱。如果条件迟迟不触发,那么银行会把保证金退还给客户。这里银行就是支付宝的角色。

  问题是如果跨国贸易对手是一家名不见经传的小银行怎么办?信用不足怎么办?

  谁都别信谁的,大家用区块链技术做。根本不信任任何机构比任何机构要可信。如今,已经有大量的国际信用证开始使用区块链技术来做了。

  智能合约怎么写?相信大家已经有数了。

  供应链金融也是区块链技术应用得比较多的一个领域。

  放贷方要知道有没有真实上下游的交易,应收确权等等。谁都别信谁,上区块链,上下游把自己有没有发货有没有应付写上去。谁都别想赖账,明明白白的公开账本。放贷方就能做风险控制了。

  上面说的主要是金融方面的应用,区块链技术能做的其他领域的应用还很多。

  比如房地产的确权工作,这比一纸地契要可靠,在一些法制程度比较差的地方在应用。还节约了房地产交易的费用,当然这不如打保证金去智能合约里那么牢靠。毕竟公开账本里明明白白就是你的地,地方军阀完全可以不认账。

  投票系统也是大的应用场景,不用担心“被代表”了。因为区块链上所有的信息都是靠数字签名来验证你的身份的,并且信息的一致性有保证,所以利用区块链技术可以做到非常可信的投票体系。NasdQ交易所的区块链交易系统Linq就是个好例子,股票的股东在做投票的时候,谁有多少股谁就有多少个投票权,股东决议变得可信而高效。

  区块链技术因为是跑在一个完全P2P的网络里的,完全不知道运行在网络里的哪里,拥有绝佳的保密性和安全性。所以有一个比较有意思的项目,利用这个做的保密通讯工具。每个人的身份通过数字签名技术验证,不需要根证书啥的。

  一个不需要中心化网络的加密通信信道,简直可以再造一个升级版暗网。

  版权也是个大的应用领域,版权的交易可以去中心。这样的场景在各行各业还有很多,区块链技术的价值还等待大家去挖掘。

  值得一提的是,智能合约的设计是区块链这个技术本身就自带的。第一个版本的bitcoin就是跑一个脚本来解锁一个加密数字货币的。

  大意是说:我希望比特币在0.1版就能拥有稳定的架构,未来不需要再做底层改变。在过去几年设计比特币的过程中,我发现只有使用脚本系统才能完成我希望支持的各种复杂交易类型——担保交易、连带合同、第三方仲裁、多方签名等等。

  首先要搞清一个问题——比特币是区块链,但是区块链并不是比特币。

  于是,在区块链的这个问题回答里,提到“矿工”,“挖矿”,“最长链”,“分叉”等等词的,其实都不准确。

  写一点上个月讲课的内容——个人觉得大部分的回答,包括google搜出来的或者wiki的,都不能很好地解释区块链是个什么东西。因为讲比特币的人很多,懂比特币的人也很多,但是具体到区块链,现在并没有一个很清楚的定义说什么是区块链,基本上所有的介绍里都是这样的:

  比特币——〉区块链是比特币的底层技术。

  或者

  比特币——〉比特币是一种区块链。

  具体到什么是区块链的问题,目前没有看到很好的定义和介绍,更多的是大而化之地讲区块链的意义在哪里的空泛文章,要不然就是一水的矿工和挖矿。所以我来从纯理论角度说一下我个人对区块链的定义:

  1,区块链是一个放在非安全环境中的分布式数据库(系统)。

  2,区块链采用密码学的方法来保证已有数据不可能被篡改。

  3,区块链采用共识算法来对于新增数据达成共识。

  具有以上三个性质的系统,就是区块链。

  1,区块链是一个放在非安全环境中的分布式数据库(系统)。

  这里的要点有两个:(1)分布式,(2)非安全环境。

  首先,这是一个分布式的,去中心化的系统。所以,有一个中心服务器或者节点的,不是区块链。节点都是安全的,无恶意的,那这不是区块链。同理,从应用的角度讲,如果你的应用必须要使用中心节点(例如要用超级计算机做深度学习)或者没必要考虑节点不安全的情况(例如某个安全的工厂里的传感器),那么并不需要考虑区块链技术。

  至于后面的词“数据库”,目前大部分成熟的区块链都是数据库,例如比特币就是一个分布式账本,而账本其实就是数据。然后,根据数据的格式,又可以分三种——1,数据是完全不相关的,只是达成的共识,没有有效无效之分;2,数据有某些逻辑结构,例如账本中,一笔交易实际上除了金额,还有输入和输出,连接到之前的交易,这些数据需要通过逻辑验证(例如交易中,节点需要验证输入的交易是否有效);3,数据拥有图灵完备的逻辑,而验证的时候需要通过节点使用算力运算,每笔交易可以有不同的输出和状态,每个节点要做的不仅仅是验证交易的真实性和输入的正确性,还要根据交易里的逻辑读入数值,进行验算然后再验证结果。

  比特币的系统就是第二种,又叫分布式账本;以太坊是第三种。第三种可以支持智能合约。

  用比特币举例的话,1,它是一个完全去中心化的系统,2,它放在一个非安全的环境,它并不要求所有使用比特币的人都没有恶意。

  2,区块链采用密码学的方法来保证已有数据不可能被篡改。

  这个是误解最多的部分,因为很多人一提到区块链就只觉得是这个。诚然,这部分很重要,而且确实区块链也因此得名,但这只是区块链的定义的一部分。

  这个部分的两个核心要点是:(1)密码学哈希函数,(2)非对称加密。

  两个都是密码学的基础概念,网上都有非常清晰的定义,我只简单说下:

  (密码学)哈希函数:一个函数Y=H(X),有如下性质:1,有X可以很容易算出Y;2,有Y不可能算出X;3,有Y不可能找到另一个X'使得H(X')=Y;3.5,如果X和X'相差很小,H(X)和H(X')则完全不相关。

  这东西主要用于验证信息完整性——在一个信息后面放上这个信息的哈希值,这个值很小,例如256bit,而且计算方便。收到信息之后收信人再算一遍哈希值,对比两者就知道这条信息是否被篡改过了。如果被篡改过,哪怕只有一bit,整个哈希值也会截然不同。而根据哈希函数的性质,没有人能够伪造出另一个消息具有同样的哈希值,也就是说篡改过的数据完全不可能通过哈希校验。

  非对称加密:这东西很好理解——对称加密就是有个密钥,可以理解成保险箱钥匙,你把消息加密变成密文,没有人能看懂这是啥,然后同一把钥匙解密成原来的消息。

  非对称加密就是有两把钥匙,一把叫公钥,一把叫私钥,用其中一把加密的话,只能用另一把解密,反之亦然。另一个重要的性质是,给你密文,明文和其中一把钥匙,你还是解不出来另一把钥匙是啥。原理基本上是基于一些困难数学问题,例如因数分解和离散对数,常用的有RSA,Diffie-Hellman和ECC(椭圆曲线),比特币用的是椭圆曲线。

  非对称加密除了和对称加密一样用于信息加密之外,还有另一个用途,就是身份验证。因为通常情况我们假设一对公私钥,公钥是公开的,而私钥只有本人有,于是一个人如果有对应的私钥,我们就可以认定他是本人。其中一个重要的应用就是数字签名——某个消息后面,发信人对这个消息做哈希运算,然后用私钥加密。接着收信人首先对消息进行哈希运算,接着用相应的公钥解密数字签名,再对比两个哈希值,如果相同,就代表这个消息是本人发出的而且没有被篡改过。

  以上是基础知识,至于区块链怎么实现的,很简单:

  交易(数据)写在区块里。

  第一个区块叫创世区块,写啥都行。

  从第二个区块开始,每个区块的第一部分有前一区块的哈希值。此外,区块里的每一笔交易(数据),都有发起人的数字签名来保证真实性和合法性。于是,先前区块里的任何数据都不可被篡改,原因见上。

  到这为止有人可能会问:为什么要弄个链啊?直接所有数据加个哈希值不就行了?

  因为——这个数据库并不是静止的啊。

  数据库的数据是会增加的,而每次增加的数据,就是一个区块,于是这些生成时间不同的区块,就以这种形式链在一起了。

  至于如何增加区块,就涉及到第三个部分——共识算法。

  3,区块链采用共识算法来对于新增数据达成共识。

  共识算法的目的,就是让所有节点对于新增区块达成共识,也就是说,所有人都要认可新增的区块。对于有中心的系统,这事很简单,中心说什么大家同意就好了,但是放到去中心化系统里,尤其是当有些节点有恶意的时候,这东西非常复杂,计算机科学里有个相应的问题,叫做“拜占庭将军问题”或者“拜占庭容错”(BFT)。

  有很多用Lamport给出的那个例子来讲BFT的东西,我在这里换一个角度。

  Lamport大神当年提出这个问题的时候在斯坦福研究中心给NASA做项目,他提出这个问题的原因并不是考虑类似比特币的应用场景(整个互联网成千上万个用户),而是考虑特殊背景下的一个简单的系统——

  航天飞机的控制系统。

  如果有航空背景的同学可能知道,飞机有三套独立的控制系统,为什么呢?因为任何系统都不可能完全不出故障,就算飞机控制系统的故障率已经极低了,还是有飞到一半这东西坏了的可能。于是我们可以弄两套独立的系统,同时坏掉的几率就会大大降低。

  可是两套独立的系统还是不足以容下一个系统的错误——一架飞机迎面飞来,两套系统一个说要躲,一个说不躲,那到底是躲还是不躲呢?所以我们需要三台独立的系统,这样,如果有一个系统有故障了,还有两台能正常工作,能少数服从多数给出正确的结果。学过纠错码的同学对这个应该不陌生,这个系统的输出之间的汉明间距是3,所以可以纠正一位的错误。

  然而,对于航天飞机,在冷战的背景下,万一某个系统不是坏掉了,而是被敌人控制了呢?三套系统还够吗?

  答案是否定的,因为不同于单纯只是坏掉的节点,恶意节点可以做一些别的事来阻止整个系统达成共识。

  这个部分略复杂要讲的话要单开一帖,所以我们只说最简单的情况(无签名同步系统)。

  我们管三个系统叫ABC,正常工作流程是三个人每次得出结果就互相告诉一下,然后每个人选多数人同意的结果。这是个没有中央节点的分布式系统,也就是说三人不能聚在一起开个会啥的,仨人只能两两通信。这个时候,假设C有恶意,它的目标是破坏这个系统。于是,假设正确的读数是1,A和B都得出了1这个结果,这个时候C这个小婊砸告诉A说“我的结果是0,B也觉得是0”,同时打个电话跟B说“哎我觉得是0,A也这么说”,于是A和B就懵逼了。假设你是A,你听到了两个不同版本的B的答案,B说自己选了1,C说B选了0,可是A这个时候没法知道B和C谁才是那个骗了自己的小婊砸,因为如果B真的告诉A选了1然后告诉C是0,他听到的结果和现在是一模一样的。

  于是结论是,拜占庭容错,也就是需要容下一个恶意系统而非错误系统,需要4个独立系统。

  (当然,签名可以解决这个问题,但是这只是同步系统的情况,在异步系统里这问题会变得更加复杂,原因是正常节点的回答有延迟,而恶意节点可以不回复,所以,正常节点一方面要等另一个节点的回复,但是它又不知道对方会不会回复因为对方有可能会有恶意,而在收到回复之前,它完全没法判断对方是正常节点还是恶意节点,这个问题叫异步BFT,也是BFT的最复杂的情况,这里不再做更多的解释,下文提到的BFT算法,其实都是异步BFT的算法)

  Lamport提出这个问题之后,有无数的算法被提出来,统称BFT(拜占庭容错)算法,其中最有代表性的叫PBFT,然后由于最近区块链的热度,无数针对区块链应用场景优化过的BFT算法也涌现出来,但是一个重要的问题是,所有目前的BFT算法,都只能应用在小型网络里。原因很简单——因为BFT这个问题是设计给类似于航天飞机控制系统这样的场景的,早期的算法考虑的也主要是这种场景。PBFT论文里考虑的就是一个5个节点的系统。就算算上新提出的BFT算法,也最多应用在不超过100个节点的网络里。

  这个问题被搁置了很久,直到比特币的诞生——中本聪从某种意义上简化了这个问题,在比特币中,同样是共识问题,中本聪引入了一个重要的假设——奖励,他之所以能这样做的原因是,他考虑的是一个数字货币,也就是说共识这个东西是有价值的。

  于是在这样的系统上,他提出了工作证明机制。

  所有挖矿,矿工,最长链,分叉等等等等,都可以归结为一句话:

  说话是要有代价的,说真话是有好处的,说假话是要扣钱的……

  这就是目前两类共识算法的核心区别:

  BFT共识模型:恶意节点可以干任何事。

  比特币共识模型:模型中有公认的“价值”,每个节点说话都需要一定代价,诚实节点会受到奖励,而恶意节点由于只付出代价而收不到奖励,变相受到了惩罚。

  也就是说,BFT共识模型其实涵盖了比特币共识模型的场景,比特币共识其实放宽了BFT共识模型的限制。

  比特币共识对于BFT的优势在于,由于给恶意节点的能力做了限制,恶意节点所能造成的破坏大大降低了,尤其是对于异步系统——BFT共识里恶意节点可以一直拒绝相应而诚实节点还需要一直等它(因为不知道它是不是恶意的),而对于比特币共识,随你便,你不响应就没有奖励可拿。于是,比特币共识算法可以应用于成千上万个节点,而且,任何人随时都可以加入,不需要预先在网络里注册自己的身份(而BFT算法里,网络中节点的数量和身份都必须是已知的)。

  但比特币共识的缺陷在于,首先,得有个有价值的东西,也就是说放在比特币里这东西还行,以太坊的话现在可能也凑合,但是其他数字货币嘛……BFT共识有个严格的限定,就是恶意节点不能超过总数的1/3,然而其实比特币共识没有这样的限制,唯一的限制就是假定大部分节点都是理性的,是逐利的,也就是会采用最佳的策略来赚取最大的价值。所以,严格来说,自私挖矿这种行为在比特币共识里是允许的,而多数攻击,其实也算不上一种攻击,因为这些都没有突破比特币共识的框架——如果这个价值无限大,比特币共识是非常可靠的。然而这并不是事实,因为并不是每个虚拟货币都和比特币一样值钱,而在价值不高的情况下,比特币共识的前提就站不住脚了——当损失可能是几千上万块钱的时候,假定每个人都是理性的是合理,但是如果损失就几分钱这个假设就相当扯淡了,事实上也发生过一个比特币矿池跑到另一个货币恶意挖矿搞垮对手的情况。

  此外,比特币共识是最长链共识,也就是说最长链-->大多数-->理性,于是分叉是允许的。于是导致了一些附带的问题,例如,如果网络有延迟,你怎么知道你手里那条链是整个网络里当前的最长链呢?于是,如果需要传输的数据多,那么延迟加大。延迟加大,那么越多的人手里的链并不是全网络的最长链。于是,全网络的最长链,就没法代表大多数。这就打破了比特币共识的根本,这也是为什么比特币区块频率是10分钟一块的原因。比特币目前有个著名的7币交易每秒的上限,而现在扩容闹得很厉害,以太坊的交易格式不同,也用了新的工作证明,想要改成权益证明,但这些都不本质。真正本质的是,在目前的网络条件下,如果适用全网的话,比特币共识的交易量基本上超不过100笔交易每秒这个量级。

  上面这几段有可能太深了,简单来说,BFT共识和比特币共识的区别可以这么理解:

  BFT共识:来,大家开个会讨论一下集思广益啊,讨论出大家都满意的结果为止。

  问题:开会的效率大家都懂,人越多越不容易出结果。只能用于少数节点,用于上千个节点的话……大家想象一下一天开一次人大的场景。

响应“净网”行动号召,营造绿色健康互联网环境!快速评论
回复
最新评论(共1条评论)
  • 2345中国网友 2018-01-10 15:56:241楼

    真佩服大神。



今日最热资讯本周最热资讯

热评资讯