{"content":{"title":"区块链记账原理","body":"区块链(1.0)是一个基于密码学安全的分布式账本，是一个方便验证，不可篡改的账本。\r\n通常认为与智能合约相结合的区块链为区块链2.0, 如以太坊是典型的区块链2.0\r\n很多人只了解过比特币，不知道区块链，比特币实际是一个使用了区块链技术的应用，只是比特币当前太热，把区块链技术的光芒给掩盖了。区块链才是未来，期望各位开发人员少关心币价，多关心技术。\r\n本文将讲解区块链1.0技术是如何实现的。\r\n\r\n## 哈希函数\r\n\r\n在讲区块链记账之前，先说明一下哈希函数。\r\n哈希函数：Hash(原始信息) = 摘要信息\r\n原始信息可以是任意的信息, hash之后会得到一个简短的摘要信息\r\n\r\n哈希函数有几个特点:\r\n\r\n* 同样的原始信息用同一个哈希函数总能得到相同的摘要信息\r\n* 原始信息任何微小的变化都会哈希出面目全非的摘要信息\r\n* 从摘要信息无法逆向推算出原始信息\r\n\r\n举例说明：\r\nHash(张三借给李四100万，利息1%，1年后还本息 .....) = AC4635D34DEF\r\n账本上记录了AC4635D34DEF这样一条记录。\r\n\r\n可以看出哈希函数有4个作用：\r\n\r\n* 简化信息\r\n  很好理解，哈希后的信息变短了。\r\n* 标识信息\r\n  可以使用AC4635D34DEF来标识原始信息，摘要信息也称为原始信息的id。\r\n* 隐匿信息\r\n  账本是AC4635D34DEF这样一条记录，原始信息被隐匿。\r\n* 验证信息\r\n  假如李四在还款时欺骗说，张三只借给李四10万，双方可以用AC4635D34DEF来验证原始信息\r\n\r\n哈希函数的这4个作用在区块链技术里有广泛的运用。\r\n（哈希函数是一组函数或算法，以后会发文章专门介绍哈希）\r\n\r\n## 区块链记账方法\r\n\r\n假设有一个账页序号为0的账页交易记录如下:\r\n\r\n| 账号 | 入账 | 出账 | 余额 |  备注说明 | \r\n| - | - | - | - | - | \r\n| 王二 | 100 |  | 190 | 收到xxx货款 | \r\n| 张三 |  | 100 | 30 |  xxxx | \r\n| 李四 | 120 | 90 | 170 | xxxx |\r\n\r\n记账时间为：2017-10-22 10:22:02\r\n\r\n区块链在记账是会把账页信息（包含序号、记账时间、交易记录）作为原始信息进行Hash, 得到一个Hash值，如：787635ACD, 用函数表示为：\r\n\r\n```\r\nHash(序号0、记账时间、交易记录) = 787635ACD\r\n```\r\n\r\n账页信息和Hash值组合在一起就构成了第一个区块。\r\n\r\n> 比特币系统里约10分钟记一次账，即每个区块生成时间大概间隔10分钟\r\n\r\n在记第2个账页的时候，会把上一个块的Hash值和当前的账页信息一起作为原始信息进行Hash,即：\r\n\r\n```\r\nHash(上一个Hash值、序号1、记账时间、交易记录) = 456635BCD\r\n```\r\n\r\n这样第2个区块不仅包含了本账页信息，还间接的包含了第一个区块的信息。依次按照此方法继续记账，则最新的区块总是间接包含了所有之前的账页信息。\r\n\r\n所有这些区块组合起来就形成了区块链，这样的区块链就构成了一个便于验证（只要验证最后一个区块的Hash值就相当于验证了整个账本），不可更改（任何一个交易信息的更改，会让所有之后的区块的Hash值发生变化，这样在验证时就无法通过）的总账本。\r\n\r\n记账有成本，想了解节点为什么要记账，请看这篇：[比特币如何挖矿-工作量证明](https://learnblockchain.cn/2017/11/04/bitcoin-pow) \r\n\r\n我们特意为区块链技术学习者，提供了几门课程:\r\n\r\n* [入门视频教程](https://ke.qq.com/course/318230?flowToken=1010388) - 入门选择\r\n* [精讲以太坊智能合约开发](https://ke.qq.com/course/326528?flowToken=1010387) - Solidity 语言面面俱到\r\n* [以太坊DAPP开发实战](https://ke.qq.com/course/335169?flowToken=1010386) - 轻轻松松学会DApp开发\r\n\r\n[登链社区](https://learnblockchain.cn/) 系统学习区块链，区块链爱好者的家园"},"author":{"user":"https://learnblockchain.cn/people/15","address":"0x49c8C7b892f82eedc98551CCb69745005A2FD079"},"history":null,"timestamp":1697787099,"version":1}