读书笔记——

【技术博客】李雷和韩梅梅用2排养乐多为你解释区块链!

作者:本能区块链

原文:http://www.sohu.com/a/160256474_353595

欠条

区块链的本质是一个账本。

李雷和吉姆是同事,他们对于之前的中韩足球之战打了个赌,各自出1排养乐多。由于国足在党的领导下完虐韩国队,所以吉姆获胜了,但是李雷最近懒得去超市,想等到有空的时候去买,于是,就给了吉姆一张欠条,内容如下图:

价值:2排养乐多    承兑方:李雷    收款人:吉姆

欠条两个人一人一张,但是,等到一周后吉姆找李雷兑现养乐多的时候,李雷的欠条却变成了下面的样子:

价值:0.2排养乐多    承兑方:李雷    收款人:吉姆

通过上面这个小故事,可以发现欠条这种记账的方式很不可靠,轻易的就会被篡改掉。将上面的场景应用到陌生人与陌生人之间,并且资金数量具有一定规模的场景中,这种不可靠性会使得交易无法进行下去,对于投资方和融资方来说都是一种损失。

三式记账法

针对欠条不足问题,人们稍作改进,发明了三式记账法。

接上回,李雷和吉姆就中伊之战又设立了一个赌约,还是各自出1排养乐多,李雷这回又输了。为了防止李雷违约,这次吉姆叫来了另一个同事韩梅梅,账目采用一式三份的形式,吉姆、李雷、韩梅梅各持一份,如果当事人发生纠纷,以第三方的为准,内容如下:

价值:2排养乐多    承兑方:李雷    收款人:吉姆

上次被坑了之后吉姆一直耿耿于怀,于是吉姆找到了韩梅梅,要求把欠条的价值改为20排养乐多,多余的18排,一人一半。韩梅梅一听当时就心花怒放,于是欠条就成了下面的样子:

价值:20排养乐多    承兑方:李雷    收款人:吉姆

一周后,吉姆去找李雷承兑养乐多,两人欠条不一样,于是就找到韩梅梅来评理,结局我就不多说了。

三式记账法是目前经常使用的方法,比如我们去租房的时候,租房合同一般都是一式三份,当房东和房客之间发生纠纷,就会找到中介。

但是,这种记账方式的问题在于,对于第三方的素质要求很高。 在北京租过房的人都知道,素质比韩梅梅高的中介应该没有几个。因此,对于这种去第三方的需求就应运而生。

数字签名

数字签名是非对称加密的一种应用,非对称加密需要两个密钥来进行加解密,一个密钥是公开的,称为公钥,一个密钥需要保密,称为私钥,可以用下面的公式总结非对称加密:

密钥A + 数据 = 密文

密钥B + 密文 = 数据

数字签名则是使用私钥加密后形成的一段密文。

把数字签名引入我们的账本中,即:

李雷的私钥 + 欠条的信息 = 数字签名

价值:2排养乐多    承兑方:李雷    收款人:吉姆    李雷的数字签名

我们来分析一下,这张欠条尾部附加了一枚数字签名,也就是说无论谁修改了内容,数字签名都会失效,也就是说这张欠条具有不可篡改的性质,承兑方和收款方都无法作假。

双花攻击

书接上回,吉姆收到了李雷的欠条后,特别开心到处跟其他同事打赌。俗话说得好,常在河边走,哪有不湿鞋,这不他就输给了Lily和Lucy每人两排养乐多。不过他早已经有所准备,他把带有数字签名的欠条复制了两份,分别给了Lily和Lucy。

一周后,Lily和Lucy分别拿着欠条去找李雷承兑,后面的悲剧大家自己脑补吧。

这个问题,就是双花问题。所谓双花,就是将手中的钱花了两遍,这也正是区块链技术解决的核心问题。

区块链

导致双花攻击的主要因素在于,当吉姆把欠条支付给Lucy的时候,Lucy并不知道Lily已经收到过这张欠条了。换句话说,Lucy只知道自己的情况,而不知道交易系统中其他人的情况。

很容易想到的方案就是,交易系统的所有参与者使用一个账本记账,Lucy收到欠条后,先去交易系统的账本中看,是否这个欠条已经支付给了别人,如果没有,再接受这张欠条。

顺着这个思路继续想,就会发现一个问题,公共账本到底谁来维护? 如果指定信任某一个或某几个人就又陷入三式记账法的问题中了。那么,我们干脆不指定具体的人去维护账目,每次记账的时候随机找一个参与者记账就可以。

我们先给一个假设:交易系统可以每隔10分钟随机地从所有参与者中选取一个参与者出来记账。我们把这个记账的节点叫做铸币节点(因为每次记录一个区块,会给这个记账人一些奖励)。

记账以区块(区块链类比为账簿,区块可以类比账簿上的一页)为单位,选中的记账人将这段时间收到的合法交易打包成一个区块,放置到自己的区块链上,然后广播给整个系统。

每个参与者接收到这个广播后,首先,根据本地的区块链验证交易是否双花,如果所有交易都是合法的,那么接受这个新到的区块,将这个区块放到本地的区块链上。

区块链分叉

按照比特币之父中本聪的设计,每一个被选中的铸币节点要在最长的一条分叉路上进行记录,如果有两条长度相同的分叉路,那就随便选择一条。

只要广大人民群众(系统51%的参与者)拥护区块链系统,那么系统就是安全的。

铸币节点的选取

比特币的选取方式很简单,比特币系统要求铸币的节点计算hash难题:

每一个想要知道答案的参赛者,只能通过一次一次的实验完成;

平均每道题需要花费10分钟的时间来完成。

一次一次实验保证了铸币节点选取是随机完成的,而时间间隔是通过题目难度调整的,整个这个过程也就实现了最开始的假设。

本文通过回顾账本在各个历史阶段的形态,发现区块链技术的革命性在于:使得人们不必再去信任无关的第三方。这种去中心化的特点,有助于人与人之间的生产关系更加自由与公平,在这种生产关系中进行工作会更有积极性,最终促进生产力的提高。