区块链 1.0 版是一个基于密码学安全的分布式账本,是一个能实现方便快速验证且不可篡改的账本。而如果与智能合约结合的话,就上升到了区块链 2.0 版,如以太坊。
很多同学只了解比特币,但不了解区块链。
比特币实际上是一个使用了区块链技术的应用,实际上是区块链支撑起了比特币。只是比特币这些年太火,很多人包括很多技术工作者也都把目光放到了电子货币的投机挣钱上,而忽略了区块链这个能改变未来的技术。本文就是来详细介绍区块链的记账原理的。
哈希函数
首先给大家介绍一下什么是哈希(Hash)。
哈希函数:Hash(原始信息) = 摘要信息
Hash
是一个函数,即是一个function
,原始信息
是x
,摘要信息
是y
。原始信息可以是任意的信息, Hash
之后会得到一个简短的摘要信息。
哈希函数的 3 个特点:
- 相同原始信息用同一个哈希函数总能得到相同的摘要信息
- 原始信息任何微小的变化都会哈希出面目全非的摘要信息
- 从摘要信息无法逆向推算出原始信息
举例说明:
Hash(小红借给小明1万元,利息2.5%,1年后还本息 …) = REFGSJDS6G5G
账本上就记录了REFGSJDS6G5G
这样一条记录。
从上面的示例可以看出哈希函数的4个作用:
1. 简化信息
很好理解,哈希后的信息会变短很多。
2. 标识信息
可以使用REFGSJDS6G5G来标识原始信息,摘要信息也称为原始信息的id。
3. 隐匿信息
账本是REFGSJDS6G5G这样一条记录,原始信息被隐匿。
4. 验证信息
假如小明在还款时欺骗说,小红只借给小明5千,双方可以用REFGSJDS6G5G来验证原始信息
区块链记账
假设有一个账页序号为0的账页交易记录如下:
|账号 |入账 |出账 |余额 |备注说明|
|---|---|---|---|
|小明|100||200|xxxx|
|小红| |100|50|xxxx|
|小刚|120|80|300|xxxx|
记账时间为:2018-04-01 12:48:23
区块链记账时会把账页信息(序号、记账时间、交易记录)作为原始信息进行Hash
, 得到一个Hash值
,如:REFGSJDS6G5G
, 用函数表示为:
Hash(序号0、记账时间、交易记录) = REFGSJDS6G5G
账页信息和Hash值就构成了第一个区块。
比特币系统里约10分钟记一次账,即每个区块生成时间大概间隔10分钟
在记第2个账页的时候,会把上一个块的Hash值和当前的账页信息一起作为原始信息进行Hash,即:
Hash(上一个Hash值、序号1、记账时间、交易记录) = REFGSJDS6G5G
==这样第2个区块不仅包含了本账页信息,还间接的包含了第一个区块的信息。==依次按照此方法继续记账,则最新的区块总是间接包含了所有之前的账页信息。
所有区块连起来就形成了区块链,这样的区块链就构成了一个:
- 便于验证: 只要验证最后一个区块的Hash值就相当于验证了整个账本
- 不可更改: 任何一个交易信息的更改,会让所有之后的区块的Hash值发生变化,这样在验证时就无法通过
的总账本。