作者:汪乐-LaiW3n
链接:https://www.zhihu.com/question/37290469/answer/107612456
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

事情是这样的,最近我的室友Hasaki一直在问我区块链和比特币的事情,我尝试了很多种不通的姿势以求简单通俗形象生动地跟他解释什么是区块链技术,但是最后都失败了。因此我萌生了要写一篇BlockChain for Babies(又名:如何向你的弱智室友解释区块链)的想法,以求能简单直观生动形象地向对区块链技术不了解但是想知道区块链是什么的人介绍区块链技术或者比特币。

因为面向的读者是不想知道具体技术实现只想了解区块链的人群,因此本文避开了一些底层和算法细节,采用比较主观的方式来展示笔者对区块链技术的感性认识。如果你只是对区块链感兴趣,并没有深入学习的打算,或者只是想像我一样在别人问起来的时候装逼,本文应该是一篇很好的“导论”。

总览

区块链本质上是一个去中心化的分布式账本数据库(感谢

@程剑宇

指出:在与比特币相关的区块链应用中可使用这一术语,但区块链技术可能并不包含“账本”)。其本身是一串使用密码学相关联所产生的数据块,每一个数据块中包含了多次比特币网络交易有效确认的信息。

这是区块链的定义,因此要逐步了解区块链,我们需要一步步了解如下东西。

去中心化

先来考虑一个中心化集中式处理的过程。你要在某宝上买一部手机,交易流程是:你将钱打给支付宝-支付宝收款后通知卖家发货-卖家发货-你确认收货-支付宝把钱打给卖家。

<img src="https://pic2.zhimg.com/50/fd044856b872644c8629402a034afcf1_hd.jpg" data-rawwidth="588" data-rawheight="483" class="origin_image zh-lightbox-thumb" width="588" data-original="https://pic2.zhimg.com/fd044856b872644c8629402a034afcf1_r.jpg">图1: 中心化集中式交易模式

图1: 中心化集中式交易模式

在这个过程中,虽然你是在和卖家交易,但是这笔交易还牵扯到了除了你和卖家的第三方,即支付宝,你和卖家的交易都是围绕支付宝展开。因此,如果支付宝系统出了问题便会造成这笔交易的失败。并且虽然你只是简单的买了一个手机,但是你和卖家都要向第三方提供多余的信息。因此考虑极端情况,如果支付宝跑路了或者是拿了钱不却不承认你的交易或者是支付宝所在的城市因为开G20把所有人都赶走了(?),那么你就悲剧了。

而去中心化的处理方式就要显得简单很多,你只需要和卖家交换钱和手机,然后双方都声称完成了这笔交易,就OK了。

可以看出在某些特定情况下,去中心化的处理方式会更便捷,同时也无须担心自己的与交易无关的信息泄漏。

其实如果只考虑两个人的交易并不能把去中心化的好处完全展示出来,设想如果有成千上万笔交易在进行,去中心化的处理方式会节约很多资源,使得整个交易自主化、简单化,并且排除了被中心化代理控制的风险。

去中心化是区块链技术的颠覆性特点,它无需中心化代理,实现了一种点对点的直接交互,使得高效率、大规模、无中心化代理的信息交互方式成为了现实。

当然,上述的例子有一个很大的潜在问题:没有了权威的中心化代理,怎样保证每笔交易的准确性和有效性呢?比如:如果没有了权威的中心化代理,张三某一天借了我100块钱,但是不还钱还不承认怎么办?这里就引出了区块链的其它特性。

两个基础难题

在去中心化以后,整个系统中没有了权威的中心化代理,信息的可信度和准确性便会面临问题。

问题1:类两军问题

第一次听说这个问题居然是在TCP的课上,大致说的是有两个相距很远的军队要传递信息,红军派遣一个信使去跟蓝军说:“你他娘的把意大利炮拿出来!”。蓝军收到信息后又派了一个信使去红军说:“收到指令!”。然后红军又派一个信使去蓝军说:“知道你收到指令了!”。然后蓝军又派一个信使去红军说:“知道你知道我收到指令了!”。然后红军又派一个信使去蓝军说:“知道你知道我知道你收到指令了!”……然后就没完没了了。

<img src="https://pic4.zhimg.com/50/3b659f83a2ffa35e9bc4f3e71042bf07_hd.png" data-rawwidth="596" data-rawheight="393" class="origin_image zh-lightbox-thumb" width="596" data-original="https://pic4.zhimg.com/3b659f83a2ffa35e9bc4f3e71042bf07_r.png">图2:在分布式计算中在异步系统和不可靠的通道上达到一致性是不可能的

图2:在分布式计算中在异步系统和不可靠的通道上达到一致性是不可能的

在这种情况下,因为是点对点的通信,双方不可能在这种情况下达到信息的一致性。严谨一点,就是“在分布式计算上,试图在异步系统和不可靠的通道上达到一致性是不可能的”。

问题2:拜占庭将军问题

拜占庭罗马帝国在军事行动中,采取将军投票的策略来决定是进攻还是撤退,也就是说如果多数人决定进攻,就上去干。但是军队中如果有奸细(比如将军已经反水故意乱投票,或者传令官叛变擅自修改军令),那怎么保证最后投票的结果真正反映了忠诚的将军的意愿呢?

拜占庭将军问题反映到信息交换领域中来,可以理解为在一个去中心的系统中,有一些节点是坏掉的,它们可能向外界广播错误的信息或者不广播信息,在这种情况下如何验证数据传输的准确性。

区块链技术的诞生

现在让我们来一步一步在去中心化的系统中解决这些问题,见证区块链技术雏形的诞生。

1

我们先来建立一个去中心化的系统,为了方便理解,我们来看一个简单的去中心化借贷模型:如果A借了B 100块钱,这个时候,A在人群中大喊“我是A,我借给了B 100块钱!”,B也在人群中大喊“我是B,A借给了我100块钱!”,此时路人甲乙丙丁都听到了这些消息,因此所有人都在心中默默记下了“A借给了B100块钱”。你看,这个时候一个去中心化的系统就建立起来了,这个系统中不需要银行,也不需要借贷协议和收据,严格来说,甚至不需要人与人长久的信任关系(比如B突然又改口说“我不欠A钱!”,这个时候人民群众就会站出来说“不对,我的小本本上记录了你某天借了A100块钱!”)。

<img src="https://pic3.zhimg.com/50/17966428c5ce9ea9d60aab703b3a405e_hd.jpg" data-rawwidth="777" data-rawheight="514" class="origin_image zh-lightbox-thumb" width="777" data-original="https://pic3.zhimg.com/17966428c5ce9ea9d60aab703b3a405e_r.jpg">图3:去中心化借贷模型

图3:去中心化借贷模型

2

可能你已经发现了,在上述的模型中,所谓的“100块钱”已经不重要了。换句话说,任何东西都可以在这个模型中交换,甚至你可以凭空杜撰一个东西,只要大家承认,你就可以让你杜撰的东西流通。比如:我在人群中高喊一声“我创造了10个查克拉!”,我甚至不需要知道查克拉是什么,也不需要关心世界上是不是真的有查克拉,只要大家都听到,然后在自己的小本本上记下“LaiW3n有10个查克拉”,于是我就真的有100个查克拉了。从此以后,我便可以声称我给了某人1个查克拉,只要路人甲乙丙丁都收到并且承认了这一信息,那我就算完成了这次交易,哪怕世界上没有查克拉。

你现在脑海中是不是浮现出了三个字——“比特币”?由于真正的区块链和比特币比我上述的模型复杂太多,细节也丰富太多,因此以下还是以查克拉举例,毕竟本文是Blockchain for Babies.(笑)

3

假设过了很长一段时间,我凭空创造的查克拉已经在这个系统中流通了起来,大家都开始认可了查克拉。但是这个系统中一共就只有10个查克拉,于是有人动了坏心思,他在人群中高呼“我有10个查克拉!”怎么办?大家是直接在本本上记下他有10个查克拉么,这样不是人人都可以伪造查克拉了么?

为了防止这种现象发生,我决定在我创造查克拉的时候给我的查克拉打上标记(更准确地说,我是给我喊的那句“我创造了10个查克拉”打上标记,比如标记为001),这样以后在每一笔交易的时候,我在高喊“我给了某某1个查克拉!”的时候,会附加上额外的一句话:“这1个查克拉的来源是记为001的那条记录,我的这句话标记为002!”。我们再抽象一点,某人喊话的内容的格式就变成了:“这句话编号xxx,上一句话的编号是yyy,我给了某某1个查克拉!”,这样就解决了伪造的问题。其实上述模型就变成一个简化的中本聪第一版比特币区块链协议:

<img src="https://pic1.zhimg.com/50/129eca5e26cdaf3de77b9a8cffa296a8_hd.jpg" data-rawwidth="794" data-rawheight="533" class="origin_image zh-lightbox-thumb" width="794" data-original="https://pic1.zhimg.com/129eca5e26cdaf3de77b9a8cffa296a8_r.jpg">图4:查克拉模型和中本聪第一版区块链协议对比图

图4:查克拉模型和中本聪第一版区块链协议对比图

好了,看到这里你基本已经能够生动形象又不涉及任何细节地向你的弱智室友解释区块链了。但是也许你的室友是一个有打破沙锅问到底精神求是学子,因此你最好继续准好回答以下这几个问题。

1. “凭啥?”

你室友可能会问:“凭啥你喊一句话我就帮你记?我的小本本不要钱么?”。为了激励大家帮我传话和记账,我决定给第一个听到我喊话并且记录在小本本上的人一些奖励:第一个听到我喊话并记录下来的人,你就凭空得到了1个查克拉,这个查克拉是整个系统对你幸苦记账的报酬,而你记录了这句话之后,要马上告诉其它人你已经记录好了,让别人放弃继续记录这句话,并给你自己的记录编号让别人有据可查,然后你再把我的话加上你的记录编号一起喊出来,供下一个人记账。

当这个规则定下以后,这个系统中一定会出现一批人,他们开始竖着耳朵监听周围发出的声音,以抢占第一个记账的权利。对的,你脑海中是不是又浮现出了“比特币挖矿”的字眼?

值得一提的是,关于比特币挖矿,

@玲珑邪僧

举了一个很形象的例子:

单身汪们要找女票,国民岳母说我有好多女儿,这样吧我给你们出点题目,解出一个就给其中一个姑娘的微信号。

单身汪们疯狂竞争,想破脑袋去解题。只要其中一只汪解出一道题,就立马得意洋洋地昭告天下,示威全部单身汪,这个姑娘是我的啦,你们放弃吧。其他单身汪们即使不服也没有办法,惆怅懊恼也不是个事儿啊,还是麻溜地立马去解下一道题目吧。这只喜赢姑娘的幸运小汪被岳母认可后还能得到25个货币单位的彩礼,简直人生赢家。

2. “听谁的?”

在这个系统中,如果我和另一个人C几乎同时地喊出一句:“为了艾泽拉斯!”。由于听众所处的位置不同,一定会有人先听到我说的那句话,而另外一些人则先听到C的那句话,如果我们规定只能有一个人说出这句话,那到底这句话是谁说的?

如果不加任何条件,那么上述的情况一定会这样发展:一部分人认为这句话是我说的,在听到这句话之后开始记账,之后他们所做的所有事情都是基于这个事实,并且随着这个信息一次次的传下去,这条信息链会越来越深;而另外一群认为是C先说这句话的人,也会按照这样的趋势发展。这样,原本是一条唯一的信息链,在我们喊出“为了艾泽拉斯”这句话之后,分叉了!?

<img src="https://pic3.zhimg.com/50/5e564510dae5b6cffa111c38ec271fea_hd.jpg" data-rawwidth="851" data-rawheight="488" class="origin_image zh-lightbox-thumb" width="851" data-original="https://pic3.zhimg.com/5e564510dae5b6cffa111c38ec271fea_r.jpg">

图5:“区块链”分叉

这会导致怎样的情况呢?按照我们的设想,应该每个人的小本本上记录的东西都是一样的,都是一条可以把所有信息串联起来的链条。但是在这一刻,他们小本本上记录的东西不一样了!这还玩毛啊?以后还怎么确定交易和信息的真实性!?

为了解决这个问题,我又追加了新的规则:每个人在记录小本本的时候,需要脱鞋然后用脚拿笔,在小本本上用正楷体书写!有了这个规定,由于用脚写字难度很大,每个人至少需要10分钟才能写完,而且由于每个人用脚写字的熟练度不通,写完这句话所用的时间也不同,因此一定会有人先写完然后高呼“我写完了!那句话是LaiW3n喊的!”,这样其它正在写这句话的人便会停笔,然后在小本本上重新开始写“那句话是来文写的,上一句的编号是xxx”。

如果你对上述我的解决方法感兴趣,你可以对照我上面的比喻去了解以下知识:

“听谁的”——中本聪破解“拜占庭将军问题”的算法

“在小本本上记录”——比特币挖矿

“脱鞋用脚写字”——比特币挖矿难度

“脱鞋写字速度”——算力

“新的规则”——工作量证明链

3. “双花”问题

这个时候你的室友可能又要问:如果我同时宣布我给了A一个查克拉和我给了B一个查克拉,但是我只有一个查克拉,那咋整?是A和B都收到了查克拉还是咋地?

这个时候你只需要托起他的下巴,温柔地看着他的眼睛,用手刮刮他的鼻子,说:“小妖精,你把这种情况带到上面的规则中去试试?”

--------------

一些私信问题讨论:

1. 为何目前还鲜有区块链和实体商业业务对接的案例?

从理论上:区块链是一门新技术,保守大众(包括我)还处在观望阶段,只有少数激进或者目标明确的实体开始向区块链进军,而这些少数的实体在现阶段发声的强度还不够。

从应用上:区块链技术要与实体商业对接,在技术和规则上还需要进一步开拓,区块链解决的所谓“不信任”问题其对象也只局限于区块链上的数据。因此如果区块链要与实体业务对接,还需要进一步推动实体与数据之间跨域的“游戏规则”的建立。

2. 虚拟加密货币最终是否会走向庞氏骗局?

这个问题我也不太好回答,毕竟我是一个技术人员而非这个领域的弄潮儿。我个人的看法是:对于普通人,不建议长期持有某种数字货币,应将数字货币作为法币之间转换的桥梁;对于投机者,“炒币”需谨慎,应将风险控制在自己能够承受的范围内。PS:其实我真的不关心这个问题。

3. 为什么听你一讲,感觉区块链很弱智的样子?

我在文中已经说明,这只是一篇关于区块链技术的新人导论,其目的在于帮助你快速对区块链有一个感性的认识;如果真的想了解区块链技术细节,请阅读相关文献或访问区块链社区。

4. 工作机会

感谢各位热情的HR,但我现在暂无跳槽的打算。

5. 转载

个人可以转载,请注明来源并告知我一声;商业组织或作为商业用途,请私信。

编辑于 2016-09-29 maxdeath:

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

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

写一点上个月讲课的内容——个人觉得大部分的回答,包括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共识:来,大家开个会讨论一下集思广益啊,讨论出大家都满意的结果为止。

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

比特币共识:你的诗念得不错,组织已经决定了,今天就你来当领导了,做得好有奖,做不好扣钱。

问题:奖励几千块钱还好,奖励几分钱谁好好干?

而区块链也就因此被分成了泾渭分明的两类,很多人都听过什么公有链私有链联盟链,但是,如果你们以为这是根据应用区分的就大错特错,其实,这两种区块链最本质的区别,还是因为共识模型或者说算法不同——BFT算法没法应用于大量节点,所以用BFT算法的就没法做公有链。而比特币共识得有个价值体系,这东西去做私有链联盟链就很不靠谱,因为一个单纯逐利的人的假设还算靠谱,但是如果对象是公司的话,公司的利益就太复杂了,不能简单认为他们只追逐区块链上那点价值。

1,公有链,以比特币,以太坊和所有虚拟货币为代表,都采用比特币共识,共识算法基本上都采用工作证明机制,也就是挖矿那些,这种机制其他回答里已经讲得够清楚了,就略过。工作证明一切都好,除了费电……费多少电呢?比特币的话,差不多和一个百万人级别的城市那么多。此外以太坊的创始人特别喜欢权益证明,似乎很快要小范围投入使用(100个区块里一个用权益证明)。但是目前为止,大家对这东西的可靠性还持观望态度。

2,私有链和联盟链。以IBM的hyperledger-fabric,以及一大堆其他的类似于tendermint,甚至R3 corda和ripple为代表,都用BFT共识。其实这方面的应用已经很多了,问题是,1,目前基本上所有应用给人的感觉都还是为了做区块链而区块链,真的觉得这东西好到不可或缺的应用还基本没有。2,由于为了区块链而区块链,其实很多场景的安全性和可靠性还值得怀疑,这点经常被被公有链的支持者诟病。

嘛,以上就是个人定义的区块链了,顺带概述一下现在区块链领域的发展。

之所以写这个帖子,就是因为发现明明是问区块链的问题,所有人都在讲比特币,都在讲挖矿,都在讲工作证明……工作证明不能说过时,也的确是现在公有链唯一可靠的共识算法,但是这东西确实是业界除了比特币死忠之外谁都不想要的东西好吗……

编辑于 2017-05-15 Mu Tian:

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

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

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

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

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

编辑于 2016-03-14 西瓜

以下全部是个人对区块链的认知,为了避免广告嫌疑,很多的地方我只能写的模糊点啦。因为自己发过一篇类似的文章,结果被举报是有广告嫌疑,唉,真心的分享,希望知乎大哥大姐明察。

最近一直在研究区块链,之前做了3年的php开发,感觉最近区块链来的有点猛啊,太火了,很多美国知名大学把区块链技术加入课程列表。现在各领域涌现出对区块链专业知识的需求,区块链可以应用在金融行业、征信系统、供应链、在线音乐、房地产、医疗等等各个行业。关键现在是没有相关区块链人才啊,弄的自己都想去学习区块链了,现在国内国外很多的公司都是百万年薪招区块链人才。

为什么会出现这样的用工荒,其实原因很简单,就是懂区块链的太少了,先给大家普及一下区块链的知识。区块链技术是指通过去中心化和去信任的方式集体维护一个可靠数据库的技术,可以用4个关键词去形容:去中心化(Decentralized)、去信任(Trustless)、集体维护(Collectively maintain)、可靠数据库(Reliable Database)。

区块链又分为以下几种:

1、公开区块链(public blockchain) 例子:比特币,Ethereum Frontier。公开区块链上的数据所有人都可以访问,所有人都可以发出交易等待被写入区块链。共识过程的参与者(对应比特币中的矿工)通过密码学技术以及内建的经济激励维护数据库的安全。公开区块链是完全的分布式。

2、协作区块链(federated blockchain) 例子:Hyperledger以及德勤等会计所尝试的审计系统。参与区块链的节点是事先选择好的,节点间很可能是有很好的网络连接。这样的区块链上可以采用非工作量证明的其他共识算法,比如有100家金融机构之间建立了某个区块链,规定必须67个以上的机构同意才算达成共识。这样的区块链上的数据可以是公开的也可以是这些节点参与者内部。部分意义上的分布式。

3、私有区块链(private blockchain) 例子:Eris Industries。参与的节点只有用户自己,数据的访问和使用有严格的权限管理。近期部分金融机构公布的内部使用的区块链技术大都语焉不详,不过很可能都在这个范围内。

区块链是什么,如何简单易懂地介绍区块链相关推荐

  1. 区块链入门:如何简单易懂地介绍区块链(图文)

    原标题:区块链是什么,如何简单易懂地介绍区块链? 区块链目前就处于一个人人都谈区块链,却无法感知其实际技术魅力的阶段,正是因为此,做出区块链的杀手级应用就至关重要,要做到这一点就需要进行各种场景的探索 ...

  2. 【转】区块链是什么,如何简单易懂地介绍区块链?

    作者:知乎用户 链接:https://www.zhihu.com/question/37290469 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 友情提醒:比特币 ...

  3. BTC:简单易懂比特币之比特币的神奇——区块链技术的体现

    BTC:简单易懂比特币之比特币的神奇--区块链技术的体现 目录 BTC的七大特殊之处 BTC的七大特殊之处 1.一个没有CEO的公司,管理几十万员工: 2.每个员工自私自利,争权夺利,公司运作9年风生 ...

  4. 关于区块链的解读和简单Python实现

    概念解读 区块链几乎是数日间成为人尽皆知的名词,这个名词也勾起了我强烈的兴趣,但是通过在网上搜罗资料,多方阅读,发现很多介绍区块链的文献要么模棱两可,要么作者本身的理解也很有限,导致很多关键的问题叙述 ...

  5. 大数据、Java、Python、区块链、人工智能前景简单对比

    文章目录 前言 大数据的发展前景 Java的发展前景 Python的发展前景 区块链的发展前景 人工智能的发展前景 前言 在这个信息时代高速发展的情况下,很多人会对自己该往哪个方向发展感到迷茫,下面我 ...

  6. 【区块链】Go 实现简单区块链

    本文主要利用 Go 语言对区块链模型进行了简单的实现,通过 GoLand 创建链式结构和一个简单的 http server,对外暴露读写接口,运行 rpc 并以地址访问形式向区块链发送数据和读取数据. ...

  7. 简单介绍区块链的联盟链

    单群组FISCO BCOS联盟链 联盟链是区块链里面的一种, 简介: :区块链跟传统的B/S,C/S,项目的架构来说不同, 1:传统项目中心化(你付钱→淘宝收款→通知店铺发货→你确认收货→淘宝把钱打给 ...

  8. 如何简单快速的了解区块链技术(结尾有惊喜)

    女主宣言 "区块链"这一前沿的技术正在悄悄的改变着这个世界,比特币的疯狂已经足以证明这一概念所带来的恐怖级效应.相信未来会有更多的行业和领域会被它所影响,可是"区块链&q ...

  9. 区块链是什么?简单理解区块链

    区块链是一种由计算机网络维护的,去中心化的在线记录保存系统(即账本),世界上第一个真正可运行的区块链是2009年诞生的比特币.而在比特币白皮书中却并未出现"区块链"这一词,而是分别 ...

最新文章

  1. 【Leetcode】100. 相同的树
  2. Silverlight实用窍门系列:40.Silverlight中捕捉视频,截图保存到本地
  3. HBase java 开发
  4. mysql 全面知识点_Mysql知识点整理
  5. vue从入门到进阶:Vuex状态管理(十)
  6. 局域网抓包分析工具_[源码和文档分享]基于Libpcap实现的局域网嗅探抓包发包解析工具...
  7. 神经网络与机器学习 笔记—小规模和大规模学习问题
  8. python内置排序算法_2021-01-05 排序算法(Python语言实现)
  9. 记录Pandas处理数据的两个小技巧
  10. 学数据库还不会Select,SQL Select详解,单表查询完全解析?
  11. C语言 嵌入式 面试小知识点(一)
  12. 蓝奏云数值验证码识别,python调用虹鱼图灵识别插件,超高正确率
  13. 《JavaScript高级程序设计》红宝书第二遍阅读(动手实践)
  14. 智能优化算法:混合蛙跳算法-附代码
  15. rx560d linux 图形设计,RX560D与560区别对比:RX 560D和RX 560哪个好
  16. 怎么找回计算机用户名密码怎么办,电脑steam账号密码忘记了怎么办|电脑找回steam账户的方法...
  17. win7资源服务器未响应,win7电脑怎么设置服务器未响应
  18. jquery html包含自身,jquery 获取 outerHtml 包含当前节点本身的代码
  19. MIPI-DSI学习笔记(一)
  20. 2022东北四省赛 F. Tree Path (树剖 + 线段树维护堆)

热门文章

  1. EPSON晶振在电路设计中的接地问题分析解决
  2. 基于Lumerical的光子晶体谐振腔滤波器仿真模拟
  3. 最先进的智能采茶机器人_智能采茶机器人关键技术研究
  4. Matlab GUI编程技巧(十二):menu创建菜单或菜单项
  5. SAP中如何对预制凭证,增加开户行和账户标识
  6. poi实现多线程大数据导出
  7. 如何使用ansible管理多台远程服务器
  8. SICTF2023 Osint-wp
  9. Python数值运算操作符
  10. 带库的pydroid安装与使用。