用区块链模拟一个小城市

为了将去中心化的区块链如何运行,首先我们把这整个去中心化的分布式结构简化为一个极端的情况。我们假设存在着一个没有中心化的城市,在这么一个城市里,有五个人,他们在互相借钱的时候,是这么干的:假设B向A借了一百块钱,这个时候我们看城市里其他人的反应是这样的,A会在人群中大喊:“我是A,借给了B一百块钱,”与此同时B也会大喊:“我是B,我向A借了100块钱”。此时城市里的其他人C、D、E在听到这个消息之后,他们默默拿出自己手中的账本,在上面做下这样的记录:某年某月某日,A借给了B一百块钱。

当我们把一个去中心化的模型极度简化之后,就会发现在上面这个例子中,一个仅仅只有五个人的城市,已经建立起了一个去中心化的系统,在这个系统里,既没有银行也没有支付宝,这样一个系统既不需要信任关系,也不需要一个具有公信力的中间组织,但是依然可以有效的运转。在分布式的结构下面,当每个人都开始记账的时候,想要篡改账本是不可能的。比如在上面那个例子中,B突然不认账了,这个时候其他人就会站出来,拿出账本对他说,不对,在某年某月你确实借了人家的钱,而且这里并没有清晰的还款记录。

至此,我们会发现,在上面举例的这个模型里,借了多少钱其实并不重要,这一百块钱已经变成了一个变量,可以被替换成为任何概念,只要大家承认就不成问题。

比如在上面这个例子中,A大喊了一声,我创造了一个时光机器,其他人听见之后,纷纷在各自的记录账本上记下,某人拥有了时光机器,大家甚至不用关注时光机器能够用来做什么,但是A竟然已经拥有了时光机器。之后A还可以大喊一声,我把时光机器给了B,只要城市中的B、C、D、E都承认这个交易,那么这个交易就算是完成了,即使现实中并不存在时光机器这样的东西。

小城市里的几个问题

当然真实的区块链世界不会这么简单,还有很多其他复杂的规则来互相制约。首先就需要解决下面几个问题:

第一个问题:人家凭什么帮你记账

回到前面的例子,凭什么你对着天空大喊一声,人家就要帮你记账,现实的生活中显然是不可能的。因为别人的时间还有账本都需要钱。为了解决这个问题,于是有人增加了这么一条规则,比如给第一个听到相关的信息并将其记录的人一些奖励。当然这个奖励也不是白给的,就和打工一样,是对被人劳动的报酬,在区块链的世界里,你只要帮别人记账,整个系统都会给你相应的报酬。所以想要获得报酬,你需要做到以下这么几点,首先,你要抢在所有人之前听到相应的信息,并且第一时间记录下来,记录完成之后还要告诉其他人,你已经完成记录了。这样别人就会放弃赚这笔钱的生意。与此同时你还要给自己的记录加一个独一无二的编号,然后将编号和记录一起喊出来告诉别人,这样下一个人再进行记录的时候,就会带着这个记录和独一无二的编号继续下去。

在这条规定出台之后,肯定会有这么一群人,他们为了得到更多的奖励,一定会时刻关注周围的环境,争取在第一时间记录自己听到的信息。而这也就是比特币挖矿的简单说明。关于比特币挖矿的问题,在知乎上有这么一篇文章说的很形象。一些单身的男士想要找到女朋友。这个时候有个国民岳母的角色跑出来告诉他们,我有好多肤白貌美的女儿,我出一些问题,谁能解答我的问题,谁就能得到我其中一个女儿的微信号。于是这些男士开始进行了疯狂的竞争。用尽全部的力量去解答这些问题,只要有一个人成功解决了问题,他就能得到姑娘的微信号。这个时候他会对其他人说,这个姑娘的微信是我的了,你们别想了。而其他人呢,已经算到一半,但是没办法,速度不够快啊,只要又重新解答下一道了。而第一个解答问题的人,不仅不花一分钱的彩礼就抱得美人归,而且用自己的才华征服了丈母娘,他的岳母会给他一笔巨款作为自己女儿出嫁的嫁妆。这笔嫁妆就是比特币挖矿中的比特币奖励。

第二个问题:分叉问题听谁的?

还是以前面的那个例子来做说明,如果这个城市很大,肯定还会存在这么一个问题,B和C两个人几乎在同一时间完成了记录,于是他们同时大喊一声,某个编号和奖励归我了,但是有人听到的是编号和奖励归B,也有人听到的是编号和奖励归C。要怎么做才能解决这个问题呢。为了解决这个问题,我们所采用的则是更加简单原始的规则,谁长听谁的。

在不加任何限制条件的情况下,一般事情会发展成这样,有人认为这话是B说的,听到之后开始记账,之后所有的事情都是基于B的基础上来展开,并且一直延续下去,信息的链条会越来越长,还有一部分人认为是C说的,也会照着这个趋势发展。于是事情就变得复杂了,原本唯一、编号顺序严谨的一条链突然之间就分叉了,每个人手里的账本变得不一样了,而且没有办法确定哪个是真的。

为了解决这个问题,小城市开始制定新的规则,比如在记录的时候必须顶格写,而且要保证中心在距离田字格边缘确定距离的位置上,因此每个人再去记录的时候,都需要先拿着刻度尺精确进行测量。相较于之前,记录开始变得困难,每个人需要花费一定的时间才能完成,比如五分钟。因此写下这句话所需的时间也就变得不同了,于是只要有人高喊:“我写完了,那话是某某某写的”,其他人就会适时停笔,然后在账本上重新写下那句话是某某某所记录,上一句的编号是xxx。

第三个问题:双花问题

首先解释一下何为双花问题,所谓的双花问题就是一笔数字现金在交易的过程中被重复使用的现象,

还是在上面那个小城市里,有人同时向B、C喊了一句,我给你一台时光机器,但是问题来了,机器只有一台,也就是如何保证一台机器在实际的交易中只被支付了一次呢。

我们来看看中本聪在《比特币白皮书》中关于比特币网络的运行步骤:1 新的交易向全网传播;2 每一个节点都将收到的信息纳入一个区块之中;3每一个节点都在尝试自己在区块中找到一个具有足够难度的工作量证明;4每个节点找到一个工作量证明之后,对全网进行广播;5当且仅当包含在该区块链中的所有交易都是有效的且之前未存在过的,其他节点才认同该区块的有效性;6其他节点表示他们接受该区块,方法是跟随在该区块的末尾,制造新的区块并延长该链条,并将这个区块的随机散列值视为新区快的随机散列值。

什么意思呢,就是说从交易产生的那一刻起,比特币的交易被盖上了时间戳,当交易数据被打包到一个区块中之后,才算完成了一次确认,连续六次确认之后,交易就不可逆转了,在比特币中,没一次确认都需要解决一个复杂的难题,意思就是每一次确认都需要一定的时间。

因此在这种情况下,当我们试图将一笔资金进行两次交易的时候,因为确认需要花很长的时间,后面一笔想要和前面一笔同时得到确认的概率几乎接近于零。而一旦一笔资金在第一次交易中被确认,第二次交易就无法得到确认。总之一句话,区块链的全网记账需要在全网达成共识,双花问题是不会产生的。

发表评论
留言与评论(共有 0 条评论)
   
验证码:

相关文章

推荐文章

'); })();