[IT技术] 用通俗话说下什么是区块链?

[复制链接]
软件小平 发表于 2023-10-14 05:22:57|来自:云南 | 显示全部楼层 |阅读模式
用通俗话说下什么是区块链
全部回复5 显示全部楼层
screets 发表于 2023-10-14 05:23:19|来自:云南 | 显示全部楼层
完全的通俗的两三句话介绍或者各种类比其实是很难说的明白的,我尝试通过一笔交易记录流程来把区块链原理介绍一遍,虽然篇幅有点长,但并没有太多专业知识,耐心看的话应该能看懂
一笔交易的产生


传统的中央系统是这么工作的


但是中央系统真的很靠谱吗?


就有人对中央系统不信任,特别是08年又经历了金融危机货币超发,一个叫中本聪的家伙(其实现在不确定到底是一个人还是一个组织)跳出来了


他还真就up了,使用区块链技术的比特币横空出世


该怎么组织这一群人做事呢?我们就从一条交易从产生到被记录来介绍区块链技术的工作模式。


还是同样一笔交易的产生,现在不再是放在中央系统记录了,而是无数的电脑一起记录


大家拿到了这笔交易信息,要准备开始把信息写到硬盘上永久保存起来。实际的交易量是非常大的,所以不会来一笔就写一笔,效率太低,都是先把一笔笔交易临时存着,凑够一批了(大约2000笔订单)打成一个大包再保存起来,这个大包就是“区块链”的“区块”


背景小知识1,其实电脑存数据普遍都是把一个硬盘空间拆分成无数非常小的块(几KB)来使用,每一个小块存若干条数据,有点像集装箱


背景小知识2,Hash(哈希)是一种能把任意内容转换成一段固定长度字符的函数。有意思的是,哪怕两份文件只相差一个字,最终转换出来的字符串也是完全不同的,牢记这句话。


每一个打好的包(区块)都包含不同的信息(交易信息、生成时间,块的序号等等都不一样),所以用hash函数就可以算出一个独一无二的字符串,这个字符串就像是这个块的身份证。


“区块链”的“链”体现在哪呢。每一个新的块在打包的时候,都要把前一个块的身份证也记录进去,然后再算出自己的身份证给到下一个块。因为每个块都记录着上一个块的身份证,就像接头暗号一样,这就形成了一个环环相扣顺序固定的链条。
这样有什么好处?因为身份证是基于块的内容算出来的,如果有人尝试修改某个块,块的内容一变化,他的身份证就变了,那和下一个块记录着的之前身份证就对不上了。暗号对不上,那被修改的这个块就不被整个链条所承认,所以篡改数据就非常困难。要想改得用其他办法,我们后面介绍。


要开始正式打包了,等等,问题又出现了,因为网络延迟,机器故障等各种原因,每个节点收到交易信息的先后顺序不同,暂存的交易数据可能不一样,如果分头打包记录,包里的内容就可能重复和冲突,会出现好多套账本



那就每次都只让一个人来打包,把打好的包发给所有人,大家根据自己手头的交易对一下账,没问题就把这个新的包各自存一份,这样每个人就都有最新的、相同的账本了。有漏记的怎么办?没事,加到下一个包里,不怕记漏,只怕记错。


整个网络这么多节点,选谁来打包呢?固定一个或几个?那不就类似中心化了,停个电断个网的就没人打包了。所以要人人平等,竞争上岗,大家一起打包,谁最快打好包就用谁的。
竞争自然要有规则,这个规则就是区块链的“共识机制”,过程就是大家来猜一个非常费时费力的谜语,猜对的就赢得这次打包的权力。
到底是什么复杂的谜语?


系统提出一个字符串的格式要求,比如以20个0为开头,待打包的交易也是固定的,去猜猜加哪个随机数能满足格式要求吧。慢慢猜,除非你运气足够好,否则基本得猜个十几亿次。


为啥有人愿意拿自己的电脑去算这玩意竞争一个打包生成区块的权力呢?
因为一旦你最先猜对了谜语成功对过去10分钟的交易记录进行打包,系统就会奖励你若干比特币,比特币一枚多少钱大家都懂的。


所以整个打包过程是这样的






有没有可能不同节点同时猜中谜语。或者因为网络传输延迟的因素,两个节点都以为自己是最先猜对的,然后各自开始传播呢。虽然概率很小,但确实有可能发生。


整个链条上就出现了两个互相冲突的区块,同一笔交易可能被记录两次,这种情况叫做区块链的分叉。但是不用担心,区块链系统约定了一条规则,所有人都只相信最长的那条分叉链。


因为刚开始分叉,所以两个链条长度一样,全网出现了分裂


同时猜中谜语的情况极少发生,所以过一段时间,肯定有一个分支会先增加一个块
因为世界上大部分节点都认的是b链条,人多力量大,他们有更高的概率先猜中下一次谜语,于是在b链条就多了一个新的块,并且广播给全网


欧洲的小部分节点收到这个广播一看,啊b链条更长了,那我们的12a就废弃吧,大家一起从13开始往下打包。
12a块里的交易记录都拿出来重新检查
张三给李四1块;(已经记录在12b里了)
王五给钱六3块;(已经记录在12b里了)
小悦给王五1000块;(12b里记录了小悦给小职1000块,小悦已经没有余额了,这条交易废弃)
李四给钱六3块钱;(这条12b,13里都没记录,等打包14的时候加上)


记录好的账本到底存在哪呢?理论上是每一个节点都可以记录所有的数据,并且大家的数据一模一样,所以根本不怕数据丢失,系统中有几亿台电脑,坏个1000万台还有好几亿备份,安全性是中心化系统不可比的。


但是记录完整数据需要比较大的磁盘空间,现在的比特币网络完整数据有数百GB,所以其实只有一部分节点选择存放完整数据,但一个网络足够大,数量还是足够多的,可以确保数据安全。


为什么要做这种毫无意义费时费电的计算来竞争记账权,是不是有点傻?其实这么做的核心目的就是希望通过增加额外的繁琐操作加大坏人作恶的成本,最终因得不偿失而放弃作恶。
我们开始谈谈区块链数据的不可篡改
背景小知识3,这种方式最早是用于防止垃圾邮件的


我们来看一个例子,有一个坏人想篡改一笔交易记录
注意,比特币区块链系统有一个特点,他根本没有删改这一功能,只能追加新的记录,就是一本流水账,所以坏人不能简单的把昨天给张三转了1000块改成昨天给张三转了1块


那怎么做呢?
坏人先给张三转账1000块,正常的链条已经到了14号,张三一看钱到账了,就把衣服给他了。坏人回去造了一个新的块,形成一个分叉,记录着只给张三转1块,就像一个平行世界,当他设法把之前转1000块的平行世界切换到转1块的平行世界,张三会发现自己的钱消失不见了


还记得我们之前说过,区块链系统的一个共识就是所有人都只认最长的那条链吗
所以坏人就必须让自己链条的延伸速度快过正常的链条,直到有一天超过后,分支链条就生效了,平行世界发生切换


坏人能做到这点吗?
还记得之前说的区块链新块的生成机制吗?是要大家做一个穷举法的计算猜一个数字,猜对了才有权力打包块
想要猜对,既有运气成分,但主要还是看你猜的速度,速度和你电脑的物理性能有关。
如果只是一个坏人,他的电脑假设一秒钟猜100万次
而世界上剩余的好人电脑有几亿台,累加起来一秒钟能猜几百万亿次,猜中的几率是一个坏人的十几亿倍
坏人哪来的自信能猜中,还必须连续猜中,猜不中你就没办法生成块,从而坏人的链条也就没办法增长
那坏人怎样才能达到目的呢?逻辑上很简单,既然谁算力强,谁增长的块,那就找一群坏人


需要找多少坏人呢?一般来说需要汇集超过全网51%算力的电脑(实际上更少一些也可以),也就是让坏人多过好人,才可能成功
这是个什么概念?直观一些描述就是,你得花N个亿甚至更多的成本弄到大量的电脑,然后花费天文数字的电费,才能完成这次诈骗
有这钱为什么还来诈骗……….
这就是为什么要加入这个很傻的运算,强行用物理限制(电脑的物理性能)增大犯罪成本
其实目前比特币网络里也有一些机构,比如一些挖矿组织掌握了巨量的算力,确实有可能实施这种犯罪,但是他们的核心利益是比特币的价值以及售卖挖矿设备,如果实施这种犯罪,破坏的就是整个比特币体系,最终将使比特币变得毫无价值,损害的是自己的核心利益,所以也没有动力这么做


有没有可能通过修改客户端等方式不做这种运算呢?这就破坏了整个体系的共识机制,系统中其他的正常节点不会认可你的结果,你必须老老实实按照规矩来。
当然是个系统就会有漏洞,比特币和以太坊等区块链网络历史上确实发生过黑客找到漏洞的事件,后来通过一系列手段修复了漏洞,这个今天就不展开了。


其实随着相关技术的演进迭代,区块链的技术细节也在发生变化,但基本原理都是一致的。
lews397715 发表于 2023-10-14 05:23:58|来自:云南 | 显示全部楼层
我尽量通俗。
emmmmmmm,2小时过去了,我还是没想出不用技术语言怎么清晰的解释区块链。
可能数学、密码学、技术,本身就是最简洁和优美的吧。
还是别走捷径,认真看下比特币白皮书吧,这真的是我见过的最言简意赅,字字珠玑的论文了
比特币白皮书:一种点对点的电子现金系统 | 巴比特
ouyang2008 发表于 2023-10-14 05:24:30|来自:云南 | 显示全部楼层
去中心化的分布式共享账本。就像微信群,数据人人可见,不可篡改。共享数据
clover 发表于 2023-10-14 05:25:15|来自:云南 | 显示全部楼层
建议看看【精通比特币】
区块链起源于比特币,是比特币的一个重要概念,它本质上是一个去中心化的数据库,同时作为比特币的底层技术,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次比特币网络交易的信息,用于验证其信息的有效性和生成下一个区块。
wang4444 发表于 2023-10-14 05:26:11|来自:云南 | 显示全部楼层
区块链源于中本聪于2009年发表的《比特币白皮书:一种点对点的电子现金系统》。区块链最开始只在国外小众极客圈子里流行,后来才慢慢地为人所知。
在区块链科普这块,国外有很多通俗易懂的博文。万向区块链微信公众号就曾翻译发布过一篇区块链极简解释博文(原文地址:https://hackernoon.com/wtf-is-the-blockchain-1da89ba19348。感兴趣可以直接看英文原文)。
以下为中文翻译版:

如果用做游戏来类比,区块链的游戏规则是必须有足够的人不想依靠第三方来进行交易。多少人才算“足够多”呢?最少三个。
我们假设有十个玩家想放弃银行或任何第三方中介机构,经相互同意,他们在不知道对方身份的情况下,拥有对方账户的详细信息。至此,游戏开始。


一个空白账本

每个玩家都从一个空白账本开始,随着“游戏”的开始,每个玩家不断往这个空账本上记东西,交易越来越多,账本的页数也在不断增加。这个账本就是我们追踪交易纪录的“寄存器”。
当有交易发生时

系统中的每个玩家都拥有一个空白账本,每当有交易发生时,他们就将交易记录在账本上。
现在,假设2号玩家想给9号玩家转10块钱。为了进行交易,2号在系统里吼一声“大伙儿,我要给9号妹子转10块钱,你们快在账本上记一下”。


接下来,每个玩家就开始检查2号是否真的有10块钱转给9号,如果她真的有足够的钱,那么所有玩家都会在账本的空白页记下这笔转账。这样,一笔交易就算完成了。


交易继续

随着时间的流逝,系统里有越来越多的玩家需要转账给其他人。无论他们什么时候想转账,都只需要在系统里告诉所有玩家,只要有一个人听到了,他/她就会将这笔交易记在账本上。
记账继续,直到所有玩家将当前的空白页用完。假设一页账本能记十笔交易,当十笔交易完成时,那么这个页面就不能再继续记账。


这时候只需将这页记录保存到文件夹中,然后翻到下一个空白页,继续记账就行。
那页被翻过去的页面

当我们将记满10笔交易记录的页面翻过去之前,需要使用系统中每个玩家都同意的“神秘锁(密钥)”来将它密封起来。通过密封,能够确保一旦将这页记录的副本发放到每个玩家的文件夹中后,任何人都无法对它做出任何更改。一旦进入文件夹中,它将永远被密封在里面。“密封”是这个游戏的关键所在。
如何密封页面

在我们了解如何封印页面之前,先来看看“封印”的工作原理。
魔法机器

想象一下,有一台被厚厚的墙壁包围着的机器,如果你从机器左边发送一个包含着内容的盒子进去,在右边,它会吐出一个包含其他内容的盒子。


这台机器被称为“哈希函数”,但我们不必那么学术,所以就叫它魔法机器吧。
假设你从左边输入数字4,我们会发现它从右边吐出下面的单词:'dcbea'。


它是如何将数字4转换成这个词的?没人知道。但我们需要知道这是一个不可逆转的过程。如果我们知道右边出来的词语是“dcbea”,是没法计算出从左边给机器输进了什么东西,但如果我们每次从左边给机器输进数字4,右边必然会出现词语“dcbea”。
让我们试试输进不同的数字,比如“26”。我们这次得到'94c8e'。


如果我问你下面这个问题:
你能告诉我应该从机器的左侧输进什么东西,以便我能从右侧得到以三个零开头的数字或单词?例如,000ab或00098或000fa或其他内容。


我之前说过,这个机器有一个奇怪的属性:如果我知道右边输出的东西,是没办法算出左边输进了什么东西的。有这样一台机器,怎么可能回答得出上面的问题呢?
我想到一个方法,逐一尝试每一个数字,直到我们得出以000开头的词语。或许经过数千次的尝试,我们能得到这样的结果。


当我们给定了右边的输出结果,要计算出左边输入的内容,是非常非常困难的。但与此同时,验证既定的输入内容是否能产生所需的输出结果却非常容易。请记住,这台机器每次都会针对一个词语给出相同的输出结果。
如果我给你一个数字,比如72533,然后问你“这个数字输进机器中,能得到一个以000开头的词语或数字吗?” 你所需要做的就是把数字扔进机器中,看看你在右边得到了什么就行。


这台机器最重要的特性就是:给定一个输出,计算输入非常困难,但如果有输入和输出,很容易就能验证输入是否能够得到这个输出。
如何用这台机器封存账本页

我们将使用这台魔术机器为我们的页面生成一个“印章”。
假如给你两个盒子。第一个盒子包含数字20893。然后,我问你:“你能算出一个数字,使它加上第一个盒子中的数字,然后送入机器,最后会给我们一个以三个零开始的单词吗?”在之前我们说过了,算出这个数字的唯一方法就是遍尝宇宙中的每一个数字。


经过成千上万次尝试,我们偶然发现一个数字21191,当它加上20893(即21191 + 20893 = 42084)并送入机器时,会产生一个满足我们要求的词。


在这种情况下,数字21191就成为20893号的印章。假设有一个页面上记有数字20893,为了封印该页面,我们将在其上面放置一个标记为“21191”的徽章。一旦密封号码(即21191)能够恰好“卡”在页面上,页面就被密封。


密封号码被称为“工作量证明”,意思是这个数字是辛苦算出它来的证明。
如果有人想验证页面上的记录是否被更改,他所要做的就是将页面上的内容与密封号码一起添加到魔法机器中。如果机器得出的结果是以三个零的打头的字,则内容没有被修改过。如果出来的单词不符合我们的要求,那我们可以丢弃该页面了,因为它的内容已经被修改过了。
我们将使用类似的密封方法来密封我们所有的记录页面,并最终将它们安排在我们各自的文件夹中。
最后,封印页面

为了密封记录交易内容的页面,我们需要计算出一个数字将它附加到交易列表中,然后输入机器中,最后得出一个以000开头的结果。
注意:“以三个零开头的词”只是我举例来演示哈希函数的工作原理,真正的哈希结果比这更复杂。


一旦在机器上计算出该数字,该页面就被该数字封印了。随便一个人都可以通过封印密码验证页面内容的完整性。
现在让我们回到记录完第十条交易的时间。只要这个页面被用完了,每个玩家就会开始计算密封这个页面的“封印密码”。第一个计算出来的玩家会将封印密码告诉系统内的所有玩家。
一听到封印密码,每个玩家就开始验证这个密码是否正确,如果密码正确,每个玩家都用这个号码标记他们的页面,并将其放在他们的文件夹中。


但如果有人,比如7号玩家说“这个封印密码不正确,我验证不出来”时该怎么办?这种情况极少发生,如果发生了,那么可能有以下原因:
1、他可能误解了网络中公布的交易;
2、他可能误写了网络中公布的交易;
3、他可能为了自身的利益原因,试图搞欺诈。
不管原因是什么,7号玩家只有一个选择——丢弃他的页面并从别人那里复制该页面,以便他也可以将它放在文件夹中。
如果他不把他的页面放在文件夹中,他就不能继续记录系统中交易,因此他也就不能继续成为这个系统中的一份子。
有一个问题,如果我们都知道有一个人能算出密封号码并将它公之于众,为什么还需要每个人花费时间资源去算呢,坐着等结果不就好了吗?
因为有报酬!第一个算出来的人是能获得酬劳的。这就是区块链中的激励机制。
举个例子,假如5号玩家第一个算出了封印密码,他就能获得1块钱的奖金。在比特币区块链上,这个奖金就是比特币。奖金促使每个玩家继续为系统工作。
朋友们,这就是区块链工作的原理。在这里,将账本的每个页面视为一个块,整个账本视为一条链,这就是区块链。

快速回帖

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则