美文网首页详解互联网科技@IT·互联网
不懂区块链落后20年!(文科生也能看懂的技术贴)

不懂区块链落后20年!(文科生也能看懂的技术贴)

作者: 卡拉手记 | 来源:发表于2017-07-29 16:10 被阅读2089次

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

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

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

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

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

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

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

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

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

    如果你今天从银行账户里转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(代码即法律)

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

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

    相关文章

      网友评论

      • 七色黑白:厉害👍!有关区块链的应用,只有一个最大的担心,行政干预。
        卡拉手记: @七色黑白 目前来看政府的态度还是开明的,从对比特币的态度上可以看出来。希望政府能跟上大势,让中国在这一波大潮中享受更多的红利。
      • 大山里的姑娘:对于理解区块链还是有很大帮助的!
      • 昕城:写的很详尽👍

      本文标题:不懂区块链落后20年!(文科生也能看懂的技术贴)

      本文链接:https://www.haomeiwen.com/subject/hzkclxtx.html