区块链是个啥?
表妹在找我之前,其实找过很多人问。但是问了一圈,也查了一堆资料,都没明白区块链到底是啥意思。 很多资料里都说区块链具有两大核心特点:一是数据难以篡改、二是去中心化。还有一个解释:区块链就是账本,每个人都记录交易数据,还有一堆的加密算法保证数据不会被破解。另外还有一个机制,保证计算出来结果的人获得奖励,以保证整个机制良性循环。然后小表妹就生出了一堆的小问号:
有些时候,一些技术文档的确不太容易让人明白。就像是各种法律条款一样,为了保证严谨性,必须要写得足够“拗口”,但是这样就丧失了可读性。如果只是了解区块链的特性,就很容易理解偏了。比如数据难以篡改,以及去中心化。区块链在特殊情况下会分叉(比特币就分叉过),也曾经出现过被篡改的情况(51%攻击)。而且现在很多区块链应用并不是去中心化的(优先的节点掌握在权威机构手中),那是不是就不叫区块链了?所以,咱得从根上理解,知其然,知其所以然。这样才会明白啥叫区块,啥叫链,为啥又能防止篡改,为啥又能去中心化。
区块链的数据结构
其实表妹的这些问题,用数据视角一看,就全解决了。区块链,有两个词组成:1、区块;2、链。区块是什么?链又是什么?区块链是由区块相互连接形成的链式存储结构,区块就是链式存储结构中的数据元素,其中第一个区块被称为创始区块。区块链的数据结构由两部分组成:区块头和区块体。区块头又包含几个核心的部分:1、父区块哈希值,就是上一个区块的哈希地址。2、各种参数(挖矿难度、时间戳和随机数),用来设定游戏规则的。时间戳其实就是给区块盖个章,它记录的是本区块被创建的精确的时间3、默克尔根, 由区块主体中所有交易的哈希值逐级两两哈希计算,用来确定全局唯一的。至于区块体, 具体要记录的内容。如果上链的是证书,那么区块体里就存证书。如果上链是交易,那么区块体就是一个区块中所有的交易记录。比如比特币系统的每一个区块主体大概是2500笔交易记录,交易记录就是转账信息。这些就是全部的数据结构了。区块,就是一个数据结构的标准。这个数据结构是一个半结构化的。其中区块体里的内容是开放的,写啥都行。总结一下,就是下图所示:
防篡改和去中心化
数据结构明白了,但是怎么形成链呢?又怎么保证数据无法篡改呢?又是如何做到去中心化的呢?很简单。上面这个结构,是所有人都需要遵从的一个数据标准。利用这个标准,每一个节点在发生一个业务的时候,都同时做一个相同的动作:把这条信息在自己的区块链小本本上记录下来。
就像是老师在讲台上讲课,小朋友在记笔记一样。老师说1+1=2,所有小朋友都在笔记本上写一句“老师说了,1+1=2"。老师说的内容是实际发生的业务,小朋友记录的内容就是在各自的小本本上记录的“账本”。
如果我们想知道老师上课讲了什么内容,应该怎么做?最好的办法就是装一个监控,回去看视频就好了。但是装监控是学校行为,必须要有一个权威进行背书。当然,我们还有另外一个办法:看看小朋友们记录的是什么。因为所有人的内容都是一样的,所以想知道老师说的是什么,只需要随便拿小朋友的笔记出来看看就行了。如果有一个小朋友记错了,就再看看其他小朋友记录的是什么就行了。我们只需要保证一半以上的小朋友记录的是正确的,就能证明老师上课讲的内容真实的被记录下来了。这时候不需要一个权威机构(比如学校)背书。这就是防篡改,以及去中心化。防篡改是区块链的一大应用场景,比如证书的验真。所以现在很多证照、发票等需要验真的场景都用区块链实现了。但是,到这里还没说清楚什么是“链”
链
其实链很简单,数据结构里已经说清楚了。区块头里有一个“父区块哈希值”,这就是链接上一个链的信息。我们按照区块链的数据结构写一个简单的例子:
第一个区块就是创世区块。假设第一个区块里的信息是"老彭存了10000块钱到区块链银行"。然后又开了第二个区块:
这时候,区块头里的父区块哈希值就是创世区块的哈希值。这样,第二个区块和第一个区块就“链”上了。在第二个区块里,记录的是“老彭又存了10000块钱到区块链银行”。然后我们继续开第三个区块:
第三个区块的父区块哈希值则是第二个区块的哈希值。这时候第三个区块和第二个区块又“链”上了。这就形成了一个环环相扣的“区块链”。在这个块上,记录的是“老彭从区块链银行取走了10000块钱”。这样,我们就能从第三个区块一直向上追溯,看看老彭我到底在区块链银行里干了些啥。因为链一直可以向上追溯,所以我干的事情都能全部挖出来。这就是区块链的另一个应用场景:溯源。比如疫情期间,北京所有冷链食品都上链了,能找到该产品的供应链链条。
北京冷链用的是长安链。咱不用管啥是长安链,反正就是一种区块链就完事了。嗯,反正说到这里,表妹也就明白了。老彭我也就可以去睡觉了~~~晚安,明天见~~