前情回顾:《听完哈希值,还不加把火搞懂区块链的“去中心”》
面对二叔提出的 “猫腻!” ,我这就让二叔看看全民记账的力量。
四、全民记账(分布式记账)的力量!
二叔气得跺脚,“你们就没猫腻了?”
我哈哈一笑,“当然没有,看来你还是不懂「全民记账」的力量!”
我说,
“可不是,每个人都记账,咱一桌就四个人,一把谁赢谁输多少各自心里都有数。”
“这一把我胡了多少,我就说多少,你们也有数对上了承认了,就定了,这叫透明。打完这局,算完账之后,每个人的帐本都定了,也互相确认过了,这叫公正。”
“如果这一屋子像互联网一样,每个人都算着账,还都对得上。
你要想搞猫腻,你得把每个人都搞定,之前你想从中作梗只需要改改你这个大帐本里的数,现在你得改所有人的帐本了。”
二叔突然打断了我,
“不对,我找到了破绽!”
“如果有个人站起来,瞎喊他赢了一千,你们这屋子人不就乱了?”
面对二叔的找茬儿,我也上头了,
“刚跟你说互联网和麻将不一样,互联网是一个大桌,不是几个桌,更不只是一个村!”
“我再揭揭你伤疤,比如你借给隔壁老王钱的时候,就立个规矩,下一次村里有借钱行为的时候要记录时间,这样的话不仅以后全民记账,更重要的是,出了问题还能全民查账。”
这里提到了「分布式记账(全民记账)」
其实「分布式记账(全民记账)」只是一种类比,可以用记账来形容,但并不是说是真的记账,大家理解成记录更恰当一些。
先给大家解释一下概念,然后再用容易理解的案例比喻一下。
区块链由一个个区块(block)组成。区块很像数据库的记录,每次写入数据,就是创建一个区块。
每个区块包含两个部分。
区块头(Head):记录当前区块的特征值
区块体(Body):实际数据
区块头包含了当前区块的多项特征值:
生成时间
实际数据(即区块体)的哈希
上一个区块的哈希(第一讲:入门必懂哈希值)
区块与哈希是一一对应的,每个区块的哈希都是针对"区块头"(Head)计算的。
也就是说,把区块头的各项特征值,按照顺序连接在一起,组成一个很长的字符串,再对这个字符串计算哈希。
注意,这个公式里面只包含区块头,不包含区块体,也就是说,哈希由区块头唯一决定。
前面说过,区块头包含很多内容,其中有当前区块体的哈希,还有上一个区块的哈希。
这意味着,如果当前区块体的内容变了,或者上一个区块的哈希变了,一定会引起当前区块的哈希改变。
这一点对区块链有重大意义。如果有人修改了一个区块,该区块的哈希就变了。
为了让后面的区块还能连到它(因为下一个区块包含上一个区块的哈希),该人必须依次修改后面所有的区块,否则被改掉的区块就脱离区块链了。
由于后面要提到的原因,哈希的计算很耗时,短时间内修改多个区块几乎不可能发生,除非有人掌握了全网51%以上的计算能力。
正是通过这种联动机制,区块链保证了自身的可靠性,数据一旦写入,就无法被篡改。
每个区块都连着上一个区块,这也是"区块链"这个名字的由来。
接下来给大家用案例比喻一下。
假设有一个账页序号为0的账页记录(原始数据)如下:
余额备注:王二收到张三货款100元
记账时间为:2017-10-22 10:22:02
区块链在记账是会把账页信息的原始信息(包含序号、记账时间、交易记录)进行Hash, 得到一个Hash值,如:787635ACD。
用函数表示为:Hash(序号0、记账时间、交易记录) = 787635ACD
账页信息和Hash值组合在一起就构成了第一个区块。
比特币系统里约10分钟记一次账,即每个区块生成时间大概间隔10分钟。
在记第2个账页的时候,会把上一个块的Hash值和当前的账页信息一起作为原始信息进行Hash,即:
Hash(上一个Hash值、序号1、记账时间、交易记录) = 456635BCD
这样第2个区块不仅包含了本账页信息,还间接的包含了第一个区块的信息。
依次按照此方法继续记账,则最新的区块总是间接包含了所有之前的账页信息。
所有这些区块组合起来就形成了区块链,这样的区块链就构成了一个
1. 便于验证(只要验证最后一个区块的Hash值就相当于验证了整个账本)
2. 不可更改(任何一个交易信息的更改,会让所有之后的区块的Hash值发生变化,这样在验证时就无法通过)
的总账本。
二叔又要拍大腿,我赶紧继续说,“但是吧,这样大家都很累”。
话音刚落,屋子里所有人都感受到了二叔心情的大起大落。
二姨看着最后几堆牌,搓了搓手说,“……”
我一拍大腿,没错,这就是币的意义。
二姨到底说了一句什么,让我茅塞顿开,请看下集《二姨的话》
领取专属 10元无门槛券
私享最新 技术干货