数字人民币|区块链学习心得:零编程基础了解共识算法概念

数字人民币|区块链学习心得:零编程基础了解共识算法概念

文章图片


求赞 求关注不迷路
学完了区块链的基础知识 , 一直在纠结应该从哪个角度去写心得体会 。 从技术上 , 描写区块链(主要是从比特币切入)技术框架和实现原理的书籍和文章都非常多 。 即使用自己的理解来写 , 也写不出什么新意来 , 有编程基础的同学 , 一看就懂 。
既然如此 , 我想尝试一下 , 写一篇文章来解释区块链中一些重要的概念 , 并且完全不涉及任何编程知识 。 看看能否让零编程基础的同学 , 理解区块链的生成原理 , 和区块链为什么具有去中心化、安全不可篡改的特征 。 以及世界上第一个区块链应用 , 比特币 , 为什么在运作的时候如此耗计算机资源 。
【数字人民币|区块链学习心得:零编程基础了解共识算法概念】这一切 , 都来自于去中心化货币的一个核心概念:共识算法 。 这篇文章尝试不用任何编程知识来解释一下 , 什么是共识算法 , 为什么需要共识算法 , 和如何实现共识算法的原理 。
一、分布式账本
还是需要从账本开始讲起 。 假设有一座城市 , 这座城市里面的人 , 所有交易都使用记账的方式进行 。 张三为李四理发 , 收到50块钱;然后张三去市场买肉 , 给王五30块钱 。 张三账面上还剩下20块钱 。 张三在收入更多的钱之前 , 不能支付超过20块 。 能够保证这一点的 , 是整个城市唯一的一份账本 。 张三当前还有多少钱 , 他还能花多少钱 , 需要从账本的一开始从头逐个账单追溯 。
由于城市里面所有人的账面上还有多少钱 , 都需要通过账本来从头追溯 。 所以整个城市只能有一个账本 , 这个账本必须记录城市里面所有人的每一笔交易 , 这样才能计算出每个时期 , 每个人账面上还有多少钱 。 以前的做法是 , 选定一个记账人 , 由他负责记录每一笔交易流水账 。
这样做存在一个问题 , 账本只有一个 , 记账人如果造假怎么办?记账人可以故意漏记一些账单 , 甚至伪造一些账单 。 例如张三支付给王五的30块钱 , 不记入账本 , 这样张三就可以反复的使用账面上的50块钱 。 或者伪造一份赵六支付给张三的100块钱账单 , 然后张三就可以在没有收入的情况下 , 额外支付100块钱 。 由于账本只有一个 , 所以出现这些操作的时候 , 根本无从查证 。 所有人必须相信 , 记账人是诚实可信的 。
将可信度建立在一个人身上终究是不牢固的 , 因此后来采取了另一种方式 。 只要是通过了记账资格认证的人 , 就可以成为记账人 。 每个记账人都持有一本账本 , 这样城市里面就有了很多个账本 。 记账人变得很难作假 , 因为他造假 , 就和其他的账本不一致了 。
然而这产生了新的问题 , 这么多账本 , 记录着整个城市的每一笔账单 。 如何保证所有的账本都是一致的呢?这就涉及到共识算法了 。



二、账本的统一性 , 解决方案:共识算法
为了保持很多个账本的统一 , 以前通常采取的做法是 , 分区域记账 , 定时汇总 。 例如记账人A负责甲局域 , 记账人B负责乙区域 , 每个人只负责记录自己区域里面的账单 , 每隔一个小时 , 将所有账本汇总成一份 。 但这里存在漏洞 , 如果张三在甲区域消费之后 , 马上跑到乙局域去消费 。 由于账本还没有汇总 , 张三可以利用这个时间差 , 将账面上的余额重复消费 。
账本是需要实时的 , 任何时刻都不能有差异 , 所以 , 很多个账本的统一方式 , 只能是每次记账时 , 用某个方法定义唯一的记账人 。 这个记账人记录一批账单后 , 其他记账人必须将这批账单抄录在自己的账本上 , 这样才能形成任何时刻统一的账本 。 而指定唯一记账人的方式 , 就是共识算法 。 共识算法描述了规则 , 所有记账人如何认定其中之一 , 作为这一次大家都认可的记账人 。