Fountain | 一个故事看懂区块链
信用共识带来的智能信任
图片来源于Fountain白皮书在一个皇权专制国家,皇上在去世时,如果接班人没有选择好,很有可能会导致整个国家和民族陷入混乱甚至崩溃。那是因为皇帝是整个国家的控制中枢,负责处理大大小小的一切事物,控制中枢出了问题,整体就有崩溃的危险。
这种方式也是中性化控制,于是人们就想自治式、分布式这种去中心化的系统会不会好一点呢?答案是肯定的。区块链就是一个分布式的账本,每个节点都可以显示总账,然后维护总账,而且不能篡改账本。除非你控制了超过51%的节点,但这是不可能的。
再举个例子,大多数人小时候父母都不会把家里的账本交给自己记账,但大家又都想偷偷地从爸爸妈妈的口袋里拿点钱来花。
但有了分布式账本后,这些问题就不会存在了。
因为你在记账,你爸爸也在记账,你妈妈也在记账,他们都能看到总账,你不能改,爸爸妈妈也不能改,这样想买烟抽的爸爸和想贪吃的你都没办法啦。
所以,区块链本质上是一个去中心化的分布式账本,其本身是一系列使用密码学而产生的互相关联的数据块,每一个数据块中包含了多条经比特币的网络交易有效确认的信息。
现在我们再回到现实生活中,谈谈所谓的中心化和去中心化又分别对应什么呢?比如说,我们在网上买一本书,交易流程是什么?
第一步:你下单之后把钱打给了支付宝。
第二步:支付宝收款后通知卖家可以发货了。
第三步:卖家收到通知后给你发货。
第四步:你收到货之后很满意,于是确认收货。
第五步:支付宝收到了你的通知并打钱给卖家。
我们可以看出,在这个过程中,虽然你是在和卖家交易,但是整个交易都是围绕支付宝展开。因此,如果支付宝系统出了问题,那么这笔交易就会以失败告终,到时候买家卖家就会纠缠不清,双方无法自证。
对于什么是去中心化,我们再来做一个极端的假设。我们假设有一个去中心化的小城市,在这个城市里有5个人,他们互相借钱的时候,是这么干的:
B向A借了1块钱,这个时候,A在人群中大喊:“我是A,我借给了B1块钱!”B也在人群中大喊:“我是B,A借给了我1块钱!”
此时城市里的其他人C、D、E都听到了这些消息,他们拿出了手中的小账本并默默记下:“某年某月某日,A借给了B1块钱。”
在这5个人的城市中,已经建立了一个去中心化的系统,这个系统不需要银行,也不需要支付宝。这个模型不需要信任关系,也不需要一个拥有公信力的组织。当分布式结构中的每个人都记账的时候,篡改账本是不可行的。比如B突然不认账了:“我不欠A的1块钱!”这个时候,人民群众C或D或E就会站出来说:“不对,我的账本上明明记录了你在某年某月某日向了A借了1块钱,并且没有查到你还款的记录。”
说到这里,“1块钱”是一个变量,它可以被替换成任何概念,只要大家承认这是一个有价值的东西即可。
比如A在这个城市中大喊一声:“我创造了一个巴拉拉能量!”城市中的其他人都听见了,于是大家纷纷在自己的小本子上记下“某人有一个巴拉拉能量”,大家甚至不用知道巴拉拉能量是什么,A竟然真的有了一个巴拉拉能量。之后呢?A还能干什么呢?A可以再大喊一声:“我给了B一个巴拉拉能量。”
只要城市中的B、C、D、E,即城市里的所有人都承认了这个交易,那么这个交易就真的成立了,虽然现实生活中并没有巴拉拉能量。
但现实世界并没有这么简单,这个小城要想这样运行,它需要解决以下二个问题:
问题一:为什么帮你记账?
为什么B向A借钱时,其他人也会对此记录?因为区块链对记账的人有相应的奖励规则,即第一个看到此事并记录下来的人,可以得到奖励,比如一个巴拉拉能量。
就像工作挣钱一样,你帮别人记账,整个系统都会给你报酬。为了得到报酬,你需要完成以下三个步骤:
(1)你要抢在所有人之前记录下来。
(2)告知其他人你已经记录完成。
(3)给自己的记录加一个独一无二的编号。下一个人再记录的时候,就会带着这个记录和编号继续下去。
同时,以上步骤也是关于“比特币挖矿”的简单说明。
问题二:分叉问题听谁的?
在这个小城里,一定会存在这样的情况,B和C几乎同时记录完了一条信息,于是同时告诉他人这个记录归我了。由于这个城市太广阔了,有人会认为报酬归B,也有人认为报酬归C,但报酬只能给一个人啊,怎么分呢?这个时候系统会先任由他们发展下去。
在B和C在周边喊话后,B身边的人认为这报酬是B的,在听到这句话之后开始记账,然后这条信息链会越来越长。C周边的人也会做同样的事。
虽然信息链会有越来越长趋势,但速度不会太快,因为小城规定在记帐是要遵循一定的格式。比如说,记录的时候必须顶格写,而且要保证,中心在离田字格上边缘0.897 57毫米的位置上,于是,每个人写字的时候都要拿刻度尺量好之后再写,这非常困难,每个人的记录需要5分钟才能完成。
接下来,我们引用中本聪在《比特币白皮书》中的话来解决这个问题:
1. 新的交易向全网进行广播;
2. 每一个节点都将收到的交易信息纳入一个区块中;
3. 每个节点都尝试在自己的区块中找到一个具有足够难度的工作量证明;
4. 当一个节点找到了一个工作量证明,它就向全网进行广播;
5. 当且仅当包含在该区块中的所有交易都是有效的且之前未存在过的,其他节点才认同该区块的有效性;
6. 其他节点表示他们接受该区块,而接受的方法则是跟随在该区块的末尾,制造新的区块以延长该链条,并将该区块的随机散列值视为新区块的随机散列值。
也就是说,交易发生的一刻起,比特币的交易数据就被盖上了时间戳;而当这笔交易数据被打包到一个区块中后,就算完成了一次确认;在连续进行6次确认之后,这笔交易就不可逆转了;在比特币中,每一次确认都需要“解决一个复杂的难题”,也就是说每一次确认都需要一定的时间。
在这种情况下,当我试图于把一笔资金进行两次支付交易的时候,因为确认时间较长,后一笔交易想要与前一笔交易同时得到确认几乎是不可能的,而这笔资金在第一次交易确认有效后,第二次交易时就无法得到确认。区块链的全网记账需要在整个网络中达成共识,这样的问题就迎刃而解了。