最近有点背...

区块链的记账原理

在讲记账原理之前,我们先聊聊哈希函数。

哈希函数

Hash(原始信息) = 摘要信息
哈希函数的特点:

  • 同样的原始信息用同一个哈希函数总能够得到相同的摘要信息。
  • 原始信息任何微小的变化都会哈希出面目全非的摘要信息。
  • 无法从摘要信息逆推出原始信息。

举例说明:
Hash(张三借给李四100万,利息1%,1年后还本息 .....) = AC4635D34DEF
账本上记录了AC4635D34DEF这样一条记录。
可以看出哈希函数有以下的特点:

  • 简化信息(摘要信息要比原始信息简短的多)
  • 标识信息(张三借给李四100万,利息1%,1年后还本息 …..可以用 AC4635D34DEF代替,也就是说摘要信息也称为原始信息的ID)
  • 隐匿信息(账本上记录的是AC4635D34DEF,而隐藏了原始信息)
  • 验证信息(如果存在欺骗的数据,可以用摘要信息来验证)。

区块链的记账方法

区块链在记账是会把账页信息(包含序号、记账时间、交易记录)作为原始信息进行Hash, 得到一个Hash值,如:787635ACD, 用函数表示为:
Hash(序号0、记账时间、交易记录) = 787635ACD

账页信息和Hash值组合在一起就构成了第一个区块。
比特币系统里约10分钟记一次账,即每个区块生成时间大概间隔10分钟
在记第2个账页的时候,会把上一个块的Hash值和当前的账页信息一起作为原始信息进行Hash,即:
Hash(上一个Hash值、序号1、记账时间、交易记录) = 456635BCD

这样第2个区块不仅包含了本账页信息,还间接的包含了第一个区块的信息。依次按照此方法继续记账,则最新的区块总是间接包含了所有之前的账页信息。

所有这些区块组合起来就形成了区块链,这样的区块链就构成了一个便于验证(只要验证最后一个区块的Hash值就相当于验证了整个账本),不可更改(任何一个交易信息的更改,会让所有之后的区块的Hash值发生变化,这样在验证时就无法通过)的总账本。