我们通过前两天的学习了解到区块链本质上他就是一个数据库,是由区块链和链而组成的,形象的比喻就是一种账本,只不过这个账本他不是被一条线或者几个订书针给固定在某一个地方的。

第一张图,可能就是你刚开始脑子里想象出来的账本,这个账本是中心化的账本,每一页账都被固定在一个特定的地方。

第二张图你可以发挥想象力好好的想一下,这个账本的每一页都跟其他周边相邻的账页相连着,无边无际的扩散,

既然是账本就会分很多页,就会有编号,那么这个账本的每一页你都可以理解成是一个区块链,那么这个账本的第一页就是创世区块了。
好,我们再来解释一下创始区块的概念。(区块链由多个相连的区块构成,每个区块记录了一段时间内网络中比特币的交易情况,可以将区块视为账簿中的帐页。第一个被最早构建的区块称为创世块,拥有一个唯一的ID标识号。除创世块外,每个后续建立的区块均包含两个ID号,一个是该区块自身的ID号,另一个是前序区块的ID号。通过ID号间的前后指向关系,所有区块按序相连就构成了区块链。
好,下面我们来看一下,比特币这个大账本里面都这那些账目,那他的记账规则是怎么样的?在银行的账户体系内是这样记账的,比如张三,余额100元人民币,张三消费的时候就从张三的账户余额了减50元就可以了,小王给张三转账200元,就从小王的账号里余额减去200元,张三账户里加200元就可以了,这就是中心化的记账体系,银行卡,微信支付宝,都是这样记账的,可是比特币的记账提现却跟这完全不一样,它只是记录流水账。
它只记录,从a地址转入b地址多少个比特币,还有交易时间,交易数量,手续费,还有区块高度等等,从这个图里我们可以看到,2019年12月6号,晚上21点56分,这一刻,以太坊的区块链高度是,9060758.比特币的区块高度是606918
那么这个区块高度是怎么回事呢?比特币这个账本记账的时候还有个规定,就是在我们记账的时候,每10分钟左右这一页账本就要记满了,因为这个账本的大小是有限制的,中本聪规定,比特币的账本每一页,只有1m的大小,记满了 就要记下一页了, 那么这个每一页就代表着一个区块链高度,比特币今天的区块高度是608918,就代表着比特币这个账目目前一共就这么多页账,以太坊有900多万页,比特币只有60多万页账。

好了,这会我们知道了这个账本的记账规则还有,每一页上都记录了什么类型的信息了,但是问题还是没有解决,就是有人故意记错账了怎么办?怎么快速识别和高效对账呢?
这就要用到我们昨天学到的哈希函数了,我们把比特币也好,以太坊也好,他们的每一页账本无论是100条信息也好,1000天信息也好,我们都给他做一个哈希运算,这一页的账目,经过哈希运算之后呢,都会得到一个简单的摘要信息。有了这个摘要信息,我们在对账的时候就方便多了,我们就不需要去核实这个区块内所有的交易了,只需要核实这个摘要信息就可以了,假如说,上个区块的摘要信息是这个数值, 全网假如一共有100个记账着,其实这个记账者也就叫矿工,他们的工作就是去搜集打包每一笔交易信息, 至于这100个矿工为什么去做这项工作,我们后面会讲到,反正他们搜集这全网10分钟内所有的交易信息,这项信息经过哈希运算公布出来就可以了,假如这100个矿工里,有99人都公布的是aaab7290结尾的摘要信息,而你公布的跟其他人不一样,那就说明你记的账是错账,就是无效的记账。 这里我们用到了哈希函数的两个功能,第一个功能就是把这10分钟内非常复杂的信息,给他简化了,变成一组非常简单的摘要信息,第二就是验证信息,这组复杂的原始信息任何微小的变化,经过哈希运算后所得到的摘要信息,就会完全的面目全非。这样那个矿工记错账了!一目了然非常方便,这会我们就保证了,比特币的账本的这单个账页上是正确的了。但是这个时候,还有个问题,就是,假如我们在记录第100也账的时候,有人偷偷的去改变了前面的第20页的账目了怎么办呢?
其实这个问题也非常好解决,我们还从创世区块开始讲,第一个创世块,拥有一个唯一的ID标识号,我们给这个区块链做完哈希运算之后,得到一个摘要值,比如尾号是2938。



当验证完所有的矿工得到的摘要值,都是这个数值的时候,这个区块就结束了,进去下一个区块,可是下一个区块在做哈希的时候,除了包含本区块的所有内容之外,还包含了上一个区块的摘要值,同样的道理,第3个区块链在做哈希的时候,也包含了第二个区块的摘要值,这样以此类推,直接推到今天的第60多万个区块,这里面其实已经嵌套了前面所有区块的哈希值,所有无论未来的区块高度有多高,无论有多少个区块,前面账本的所以内容你都是不能改的,哪怕你只改动了前面账本的任何一个小数点,那么你再运算本区块的时候,所得到的摘要值就会跟其他人不一样,这样就保证了比特币账本里的,这60几万个账页里每一笔账的正确性,而且无论什么时候,任何人都是不能改动的。
到这里我们已经解决了,比特币这个账本记账正确性这个问题了,还有这个账本不可改动的问题了,但是现在又有新问题出现了,刚才我们提到了,比特币的账本里不显示名字,身份信息,那怎样确定这些币的归属权呢?我怎么才能证明这些比特币就是我的呢?这个问题我们明天继续学习