主页 > 区块链 > 零编程基础的同学,加拿大28微信群如何实现共识

零编程基础的同学,加拿大28微信群如何实现共识

佚名 区块链 2021年11月28日

在学习了区块链的基础知识后,一直纠结在哪个角度写自己的想法和经历。从技术上讲,有很多书籍和文章描述了区块链的技术框架和实现原理(主要来自比特币)。就算用自己的理解去写,也写不出新的东西。有编程基础的同学一眼就能看懂。

既然如此区块链编程实现,我想尝试一下,写一篇文章来解释区块链中的一些重要概念,完全不涉及任何编程知识。看看零编程基础的同学能不能理解区块链的产生原理,以及为什么区块链具有去中心化、安全、不可篡改的特点。以及为什么世界上第一个区块链应用程序比特币在运行时会消耗如此多的计算机资源。

这一切都源于去中心化货币的一个核心概念:共识算法。本文试图在没有任何编程知识的情况下解释什么是共识算法,为什么需要共识算法,以及如何实现共识算法的原理。

区块链java实现_区块链是如何实现数据共享的_区块链编程实现

一、分布式账本

还是需要从账本开始。假设有一个城市和这个城市的人,所有的交易都是通过记账的方式进行的。张三给李斯理了发,收了50元;然后张三去市场买肉,给了王舞30元。张三的账上还剩下20元。张三在赚到更多钱之前不能支付超过20元。能保证这是全城唯一的账本。张三现在有多少钱,能花多少钱,需要从账本上一一追溯。

区块链编程实现_区块链java实现_区块链是如何实现数据共享的

既然城里人人都有账上还有多少钱,就需要从头到尾通过账本追查。因此,整个城市只能有一个账本。这个账本必须记录城市中每个人的每一笔交易,以便我们可以计算每个人在每个时期的账簿上有多少钱。以前的做法是选择一个簿记员,负责记录每个交易账户。

这有问题。只有一个账本。如果簿记员造假怎么办?簿记员可以故意省略一些票据,甚至伪造一些票据。比如,张三付给王舞的30元没有记入账本,让张三可以反复使用账户上的50元。或者伪造一张赵六付给张三的100元账单,然后张三在没有收入的情况下可以额外支付100元。由于只有一个账本,因此无法验证这些操作何时发生。每个人都必须相信簿记员是诚实可信的。

区块链是如何实现数据共享的_区块链java实现_区块链编程实现

建立一个人的可信度毕竟不强,所以后来采用了不同的方法。只要是通过会计从业资格认证的人,就可以成为簿记员。每个簿记员都拿着一本书,所以这个城市有很多书。簿记员作弊变得困难,因为他作弊,这与其他书籍不一致。

然而,这又产生了新的问题。有那么多的书记录了整个城市的每一笔账单。如何保证所有账本一致?这涉及到共识算法。

区块链编程实现_区块链是如何实现数据共享的_区块链java实现

二、 账本的统一,解决办法:共识算法

为了保持多台账本的统一,过去的惯常做法是分地区记账,定期收账。例如,记账员A负责本地区域A,记账员B负责区域B。每个人只负责记录自己区域内的账单。每隔一小时,所有的帐户都被收集到一个。但是这里有一个漏洞。如果张三在A区消费,他会立即前往B区消费。由于账本还没有汇总,张三可以利用这个时间差,将余额反复花在账本上。

区块链java实现_区块链是如何实现数据共享的_区块链编程实现

账本需要是实时的,任何时候都不能有差异。因此,多台账本的统一方式只能是每次记账时都以某种方式定义唯一的记账员。簿记员记录一批票据后,其他簿记员必须将这批票据复印在自己的账簿上,以便随时形成统一的账簿。指定唯一簿记员的方法是共识算法。共识算法描述了规则,所有簿记员如何识别其中一个,作为这次所有人认可的簿记员。

如果有金融中心,解决办法很简单,每次金融中心指定一个记账员负责记账,其他人抄。但金融中心本身就会有信任问题。城里的每一位簿记员都是独立平等的,没有中心对其进行监管。同时,每个簿记员也有工作和休息时间。同时工作的簿记员不确定,因此无法编号,按编号顺序依次保存。

因此,每当有一批票据产生等待记录时,就需要有竞争机制。此时此刻正在工作的所有簿记员,通过某种形式的竞争,竞争成功者负责簿记区块链编程实现,其余的只能被复制。同时,基于公平原则,此类竞争不能与簿记员的某种素质有关。比如举重不能比赛,让最强的记账员永远负责记账;你不能竞争运行,所以最快的记账员总是负责记账。任何有倾向性的竞争方式,总会导致记账权的集中,从而导致信任问题。

所以,唯一的选择就是:运气。

广告位
标签: 算法   区块链