完全的通俗的两三句话介绍或者各种类比其实是很难说的明白的,我尝试通过一笔交易记录流程来把区块链原理介绍一遍,虽然篇幅有点长,但并没有太多专业知识,耐心看的话应该能看懂
一笔交易的产生
传统的中央系统是这么工作的
但是中央系统真的很靠谱吗?
就有人对中央系统不信任,特别是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个亿甚至更多的成本弄到大量的电脑,然后花费天文数字的电费,才能完成这次诈骗
有这钱为什么还来诈骗……….
这就是为什么要加入这个很傻的运算,强行用物理限制(电脑的物理性能)增大犯罪成本
其实目前比特币网络里也有一些机构,比如一些挖矿组织掌握了巨量的算力,确实有可能实施这种犯罪,但是他们的核心利益是比特币的价值以及售卖挖矿设备,如果实施这种犯罪,破坏的就是整个比特币体系,最终将使比特币变得毫无价值,损害的是自己的核心利益,所以也没有动力这么做
有没有可能通过修改客户端等方式不做这种运算呢?这就破坏了整个体系的共识机制,系统中其他的正常节点不会认可你的结果,你必须老老实实按照规矩来。
当然是个系统就会有漏洞,比特币和以太坊等区块链网络历史上确实发生过黑客找到漏洞的事件,后来通过一系列手段修复了漏洞,这个今天就不展开了。
其实随着相关技术的演进迭代,区块链的技术细节也在发生变化,但基本原理都是一致的。 |