不懂区块链落后20年?一文告诉你区块链是个什么鬼(文科生也能读懂的技术贴)

in #cn7 years ago (edited)

要说到当今世界的前沿技术,人工智能和区块链都是不得不说的故事。如果对普通人来说,“人工智能”还是一个可以从字面意思上去理解的东西,那“区块链”这三个字就实在让人丈二和尚摸不着头脑了。

“区块链”到底是个什么鬼?为什么全世界的聪明人都在研究和讨论“区块链”,并且用“颠覆性”这样的词语来形容它?

要理解区块链,我想到了吴军老师在得到专栏《硅谷来信》里一篇文章的标题——“机器智能是生产力,区块链是生产关系”。

这句话虽然没有让我明白区块链具体是怎么运作的,但瞬间让我知道,这个东西一定非常重要。如果说我们关心人工智能,主要是想了解未来财富创造的方式,那关心区块链,就是想了解未来财富分配的方式。

一、从第一个区块链应用——比特币说起

要了解区块链,就不得不从比特币——全世界第一个、也是目前为止最成功的一个区块链应用说起。

比特币的创造者”中本聪“在《比特币白皮书》里说,比特币是“一种完全通过点对点技术实现的电子现金系统,它使得在线支付能够直接由一方发起并支付给另外一方,中间不需要通过任何的金融机构。”

这句话你肯定每个字都认识,但是要真正理解这句话,并不是那么容易。你读完这篇文章再回来看这句话,一定会有完全不同的认识。

既然比特币是一种电子货币,而不是纸币、黄金这样的实物货币,那我们就从现在用得最多的电子货币——银行账户里的钱说起。

如果你今天从银行账户里转100块钱给我,银行会记录下来,你的账户减少100元,我的账户多了100元。我们都信任银行这个中介机构能把这些事情处理好(其实也不是完全信任,否则我们就不会设置那么多监管机构来监督银行了)。在比特币出现之前,我们无法想象,生活在一个没有银行的世界要怎么使用电子货币。

2008年(也许是巧合,那一年,全球金融系统用代价巨大的方式暴露了它的缺陷),比特币横空出世,用一种非常优美而巧妙的设计解决了这个问题——在没有金融机构的情况下,一个人怎么把电子货币支付给另一个人,并且保证安全可靠。

要做到这一点,至少需要解决以下五个关键问题:

  • 账本要有唯一性:所有人都认可同一个账本;
  • 账户要有安全性:谁也拿不走我的钱;
  • 账户要有隐私性:我不想让别人知道我有多少钱;
  • 账户里的钱要有唯一性:任何人不能花自己没有的钱,不能把一笔钱花两遍;
  • 交易记录不可篡改。

下面我们就来看看比特币的设计是如何解决这些问题的。

1、大家一起来记账

现在没有了银行,互联网上大家也互不信任(你甚至都不知道那头是人还是猴子呢),就只好每人发一个账本,大家一起来记了。

大家一起记,但是得记录相同的信息,否则就乱套了。我们需要的结果是,“问谁都一样”。

如果所有人都是诚实的,这个过程可以通过“广播”来实现。比如小明要转1个比特币给小刚,就在自己的账本上记录一笔“小明给小刚转了1个比特币”,同时把这笔交易在网上“广播”出去,让其他人都听见。其他人听见之后,也在自己的账本上记录““小明给小刚转了1个比特币”,这个同步的过程在网上实现是不难的。

不过我们也说了,这样做的前提是:所有人都是诚实的。也就是说,如果有人瞎喊话,就不行了。

2、别人能把我的钱转走吗?——金库小管家和签字笔的完美组合

现在小明很狡猾,他向全网广播“小刚给小明转了1个比特币”,但实际上这笔交易并没有经过小刚同意,是小明杜撰的。小刚当然会拒绝记录这笔交易,小红不明就里,听到广播就记录了这笔交易。但小刚想,我不能吃哑巴亏啊,我也广播一个“小明给小刚转账10个比特币”。小红听到广播又记录了这笔交易,但这下小明不干了,他拒绝记录。

这样就乱套了,肯定不行,得想办法解决。咋解决呢?

《比特币白皮书》是这么说的:每一位所有者通过对前一次交易和下一位拥有者的公钥(Public key) 签署一个随机散列的数字签名,并将这个签名附加在这枚电子货币的末尾,电子货币就发送给了下一位所有者。而收款人通过对签名进行检验,就能够验证该链条的所有者。

看不懂?没关系,你可以看下面这个不太精确但是“说人话”的版本

为了保护你的小金库安全,系统给你配一个管家,帮你看管自己的小金库,这个管家的名字叫“公钥”;然后再给你配一只特殊的笔,这只笔叫做“私钥”,专门用来签名。管家有一项特殊技能,就是识别某个签名的真伪——是不是你的这支笔签的,正确率百分之百。管家有三项职责:

1、如果有人给你的金库里面放钱,他什么都不用问,负责收进去并且保管好就行;

2、如果有人想从你的金库里拿钱,他负责保护。管家会说:请出示我家主人用私钥签名的指令,我只按照主人的指令办事。

3、如果有人拿一个签名过来请他鉴别,他负责回答签名是不是真的。

有了金库管家,现在小刚想给小红转一个比特币,需要怎么做呢?很简单,小刚在一张纸条上写上“小刚给小红转账一个比特币”,并且用“私钥”这支特殊的笔附上自己的签名,然后把这个带签名的指令广播出去。管家看到这个指令后,会验证签名的真伪,发现是真的,于是就从你的金库里拿出一个比特币交给小红的管家,放进小红的金库里。

其他人看到网上广播了你的这条指令,就去问你的管家,这个签名是真的吗?管家说是,他们就在自己的账本上记录这条交易。

怎么样,有了这样的一个贴心小管家,你是不是再也不用担心别人动你的小金库了?

在这个例子里面,我们假设每一笔交易都是单独发生、单独验证的。但实际的数据处理过程更加类似于票据的背书。在一张多次流转的票据上,会清楚的记录下这张票据由甲转让给乙,乙转让给丙、丙转让给丁的过程,比特币的交易也是这样,交易过程是可追溯的。每一笔新的交易是否有效,不仅取决于你的签名真伪,还取决于以前的相关交易记录。同时比特币跟票据相比有一个很大的优势——票据是不能分割的,但比特币是可以分割的,而且比特币被分割转让后,在分割后的比特币上也可以找到所有相关的交易记录,这就大大提高了交易的便利。

3、我不想让别人知道我有多少钱——钱公开,你不公开

需要说明的一点是,所有的小金库都是透明的,里面有多少钱每个人都能知道。这样规定的原因很好理解——你把钱转出去,别人要看看你的金库里有没有这么多钱,如果没有,大家就认为你是瞎喊的,不会帮你记录。

那这就有一个问题,我不想让别人知道我有多少钱,怎么办?

其实通过上面这个转账过程你会发现,在整个交易过程中,你签名的那支笔,也就是私钥才是最重要的,管家只认签名不认人。哪怕一只猴子拿你的笔签了名,管家也会认。

这就意味着,你根本不需要告诉人家你是谁,把这支笔保管好就行了——换言之,比特币交易是可以匿名的。你把自己的小金库(比特币“地址”)放在大广场(互联网)上,让管家(公钥)给你看管着。你想转账,就用私钥签名让管家操作;如果别人要给你钱,你告诉他放到哪个金库里去就行,而且你还可以开很多个金库,每个金库配一个管家——当然也得配一支新笔(想到自己能有好多个带管家的小金库,产生一种已经实现财富自由的幻觉,哈哈)。

这意味着,比特币的交易是可以匿名的。你把自己的小金库(比特币“地址”)放在大广场(互联网)上,让管家(公钥)给你看管着。你想转账,就用私钥签名。

匿名性解决了比特币的隐私问题,但是也给洗钱犯罪打开了一条新的方便之门,这是比特币饱受争议的一点。不过匿名性并不是比特币独有的,而是所有现金的共同特点——无论是铜币、黄金还是纸币。这大概也是中本聪称比特币为电子“现金”,而不是电子“货币”的原因,因为相比银行账户里的钱,比特币跟现金更加类似。不过比特币的匿名性跟现金相比还是弱很多,因为只要被证实某个私钥属于你,你的身份就公开了。

4、我能把同一笔钱花两次吗——显然不能啊

解决了账户安全性的问题,我们还有一个问题——双重支付。打个比方,小刚账户里只有100个比特币,但是他同时在“小刚向小明转账100个比特币”和“小刚向小红转账100个比特币”2笔相互冲突的交易上签名,向全网广播,那怎么办呢?

我们可以规定一个原则:先听到哪个交易,就记录哪个交易,后面的交易跟前面的冲突,就认定为无效,不予记录。但问题是,由于很多人在记账,每个人先听到的内容可能不一样。有些人先听到的是“小刚向小明转账100个比特币”,他再听到“小刚向小红转账100个比特币”时,发现交易冲突了,就拒绝这笔交易;但是另外一些人先听到转给小红的信息,拒绝了转给小明的信息。这下,大家的记录又不一致了。

怎么办呢?必须想一个公平的办法来决定以谁的账本为准,然后大家都同意在这个版本上继续增加新的交易记录。这个办法就是——工作量证明。

所谓工作量证明,其实可以看成是一个数学游戏。系统给每个人随机分配一个数学题,每个人的数学题都不一样(但难度是一样的),而且出的这个题还包含了你账本上的交易数据。这个题目的计算非常难,但是验证非常容易。整个过程有点像暴力破解邮箱密码,算出这个密码要经过很多次尝试,但是一旦破解,就可以成功登陆邮箱。

所有人都同意,最先算出这道数学题的人,可以把这段时间内他记录的交易信息打包成一个“区块”广播出来,附上他的“工作量证明”——也就是他算出来的这道题的答案。其他人收到这个“区块”之后,会验证一下他的答案算对了没有,这个区块内包含的交易信息是否有效(比如小刚有没有把一笔钱转两次之类的),如果验证通过,其他人就会接受这个区块作为有效区块,把这个区块跟前一个区块“链接”起来,然后所有人开始解下一个“区块”的数学题,竞争创造下一个区块的权利。如此持续下去,就形成了一条“链”。这条链,我们称之为“区块链”

有一种极端情况,就是记录了“小刚向小明转账100个比特币”的人(我们称之为“明营”)和记录了“小刚向小红转账100个比特币”的人(我们称之为“红营”),同时算出了自己区块的答案,同时广播出来,这两个区块都链到了前一个区块上,因为他们都是有效区块——这种情况叫做分叉。这时该怎么办呢?

没关系,“明营”和“红营”的人都暂时保存自己认可的这一条链,继续进行下一个区块的竞争。一旦“明营”的某个节点创造出了下一个有效区块,“明营”的链将比“红营”的链多出一个区块,也就是说,“明营”的链更长了。这时,由于全网都认同“最长的链为有效链”,“红营”的人这时就会“叛变”,舍弃之前的那个区块,转向“明营”。现在,所有人都达到了共识——小刚向小明转了100个比特币,而不是小红。

你可能要问我,小红岂不是很冤?其实并没有。假设这100个比特币是小刚用来向小红购买一幅画的,小红现在看到小刚已经转账给她了,但是由于她知道这笔交易信息是在最新的一个区块上,还不稳定,她会等待,等这个区块后面链接上了其他的区块,比如说,这个区块后面增加了6个区块,她认为安全了,才会把这幅画交给小刚。假如“红营”失败了,她就会发现小刚给她转账的记录没有得到确认,也就不会把画交给小刚。

交易失败,但是小红并没有遭受损失——除非她过早的交付货物。在比特币的世界里,平均每10分钟会产生一个新区块,假如小红需要6个区块来确认,只需要等1个小时就可以了。

5、区块链上的交易信息能修改吗?——理论上能,实际上几乎不可能

一个必须回答的问题是:区块上的信息能否修改,以及为什么一个区块后面连接了其他区块后,修改的难度会增加?

首先要解释一下两个区块是怎么“链“起来的。其实很简单,在出题的时候,把前一个区块的数学题答案也放进去就行了。也就是说,区块2的数学题长啥样,是跟区块1的答案相关联的,如果区块1的答案变了,区块2的题目也会跟着变,自然区块2的答案也会跟着变;区块2的答案变了,区块3的题目和答案也会变,以此类推。

这样做有什么好处呢?很简单,假如小刚很不诚实,他想修改区块上的信息(比如小刚想把之前转给小明100个比特币的交易信息抹去),他除了要修改这个交易所在的那个区块的信息,重新完成那个区块的工作量证明,还得完成链接在后面的所有区块的工作量证明——他得创造一条新链,替代原来的链。

创造这条新链的难度有多大呢?由于所有人都同意“最长的链是有效的链”,他必须创造出一个比现存的链更长的链——至少多出一个区块——其他人才会接受他创造出来的这个新链,他才算最终成功。很显然,后面的区块越多,他创造新链需要解的题就越多,而且他还得算得特别快——比其他所有人加起来都快——否则就无法赶上其他人产生新区块的速度。理论上讲,他得掌握全网51%的算力。

很显然,要掌握全网51%的算力是非常困难的。不过如果多人联合起来,也是可以实现的。如果你掌握了51%的算力,你一定会想:是用这个算力去维护比特币网络更划算,还是攻击比特币网络更划算呢?如果攻击这个网络的成本过高,根本得不到什么好处,你就不会这么做。

到底哪个划算?这就涉及到比特币的激励机制了。

6、为什么诚实更划算?

我们可以看到,无论是记账、竞争区块创造权,都需要消耗大量资源——要完成全世界所有比特币交易的记录,还要解那么多数学题,这个工作量可不是一点点哦!为什么有人愿意来做这些工作呢?

因为有钱赚呀!每创造一个有效区块,这个节点就可以得到一定的比特币奖励,还能得到这个区块里面包含的交易所支付的交易费——这可都是钱呀!

每产生一个区块就相应产生一定数量比特币的过程,非常类似于黄金开采的过程,因此被称之为“挖矿”。产生这些新比特币的过程,也是一个货币发行的过程。

有了这样一个激励机制,我们前面的问题也可以解决了——拥有全网51%算力的人,一定是对维护比特币系统做出最大贡献的人,他们也得到了最多的奖励。这个人或这些人会发现,继续维护这个系统,比攻击这个系统更加有利可图。

试想一下,他们通过攻击这个系统,把自己曾经花出去的一大笔钱拿回来了,但为此创造一条新链需要消耗的资源也是非常巨大的。更为重要的是,一旦系统遭到这样的攻击(用新链代替旧链,其他人不能阻止,但都可以看见),所有人对比特币的信任都将不复存在,他拿回这些比特币,又有什么意义呢?

因此,诚实真的更划算。

二、从比特币看区块链底层逻辑

现在回头再看看我们在前面提出的几个关键问题:

  • 账本要有唯一性:所有人都认可同一个账本;
  • 账户要有安全性:谁也拿不走我的钱;
  • 账户要有隐私性:我不想让别人知道我有多少钱;
  • 账户里的钱要有唯一性:任何人不能花自己没有的钱,不能把一笔钱花两遍;
  • 交易记录不可篡改。

通过一整套设计,以上问题都得到了解决。不过仔细想想我们会发现,最根本的问题其实只有一个——如何在互不信任的个体之间达成稳定的共识。后面的安全性、隐私性、唯一性、不可篡改性,都是为达成第一点——所有人都认可同一个账本——也就是“共识”服务的。

“共识”这个事情究竟有多重要呢?

现代社会是一个陌生人之间进行大规模合作的社会,人类能够创造出今天这样的璀璨文明,就是因为人类的合作规模比任何其他物种都要大。而人类能实现陌生人之间的大规模合作,是因为人类创造了“想象的共同体”——国家、政府、法律、宗教、银行、公司等等。这些实体本来不存在,但是所有人对它们的存在达成了“共识”,于是它们就真的存在了,而且对人类社会的发展起到了至关重要的作用。

今天,我们不需要了解一个交易对手的品格就可以跟他交易、合作,因为我们有政府、法律等中心化机制来维系陌生人之间的信任——你不相信我,我也不相信你,但是我们都相信同一个政府,这个政府会执行我们都必须遵守的同一套法律。

跨境贸易的成本之所以比境内交易的成本更高,一个重要的原因就是,跨境贸易的交易对手之间更加难以产生信任,一旦发生纠纷,维权的成本非常高——在中国打一场官司的成本已经够高了,跑到美国去打一场官司试试?说到底,大家缺乏一个“稳定的共识”作为基础。

区块链技术让人惊艳之处在于,人们可以就一套公开的规则达成共识,因为这套规则由计算机代码和密码学技术来保障执行,程序一旦运行,没有任何人能够干涉,哪怕是创造这个程序的人。换言之,你不需要相信任何国家、组织或个人,你相信技术,就可以相信这个网络上的任何人。

如果说国家、政府、法律、银行都是“中心化”的共识——相信某个实体,那区块链就是“去中心化”的共识——相信某套由技术保障的规则。所以,在区块链世界有一句名言——Code is law(代码即法律)

由于区块链对“共识”机制的形成提出了截然不同的方案,很多人说,有了比特币银行就该下岗了,整个世界都要被“颠覆”了。虽然现在的银行体系有各种各样的问题,但我并不认为比特币的出现能让银行彻底消失,也不认为区块链能让现存的法律体系消失。中心化和去中心化究竟孰优孰劣,恐怕不是三言两语能说清楚的。

我想,区块链不会”颠覆“这个世界,但一定会给这个世界带来很多不可思议的改变。

Sort:  

文章不错,把一些概念解释的很清晰

谢谢!这是我以前写的文章,最近准备把以前的文章迁移到steemit上来😊

Congratulations @xierdear! You have completed some achievement on Steemit and have been rewarded with new badge(s) :

You got a First Reply

Click on any badge to view your own Board of Honor on SteemitBoard.
For more information about SteemitBoard, click here

If you no longer want to receive notifications, reply to this comment with the word STOP

By upvoting this notification, you can help all Steemit users. Learn how here!

Congratulations @xierdear! You have completed some achievement on Steemit and have been rewarded with new badge(s) :

Award for the number of upvotes
Award for the number of upvotes received

Click on any badge to view your own Board of Honor on SteemitBoard.
For more information about SteemitBoard, click here

If you no longer want to receive notifications, reply to this comment with the word STOP

By upvoting this notification, you can help all Steemit users. Learn how here!

Thank you for your post. It helped me better understand how block chain works. I'm amazed at the technical complexity it must require for it to function.

我是文科生,这个文章对我来讲太好了,哈哈

Coin Marketplace

STEEM 0.20
TRX 0.13
JST 0.030
BTC 65702.61
ETH 3485.24
USDT 1.00
SBD 2.51