区块链的数据结构
Posted 瘦身小蚂蚁
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了区块链的数据结构相关的知识,希望对你有一定的参考价值。
目录
区块链的基本概念
什么是区块链
1. 狭义上讲:区块链是一种将数据区块按时间顺序相连的链式、不可篡改和不可伪造的分布式账本。
2. 广义上讲:区块链是一种按照时间顺序将若干数据区块相连的链式、无中心、不可篡改、不可伪造、集体维护、全程留下痕迹、交易可以追溯的分布式账本(数据库)。
每一个 “数据区块” 记录了一组交易状态信息;
“分布式” 是指在一个对等网络(P2P网络)中,各个节点通过平等的相互传递信息来通信和协调行动;
“账本” 是一个非关系型数据库,即NoSQL数据库。
3. 本质上:区块链是一个建立在P2P网络上的分布式数据库。
综述:区块链使用密码技术链接,由共识确认的,按时间顺序追加的 分布式账本。
使用加密技术、共识机制、按时序排列的分布式账本
区块链的基础技术架构
数据层:区块数据、链式结构、数据签名、哈希函数、Merkle Tree、非对称加密
网络层:P2P、传播、验证
共识层:PoS/PoW、Paxos、DPOS、Raft、Vrr
激励层:发行机制、分配机制
合约层:脚本代码、算法机制、智能合约
应用层:买卖、账务、存储、合约
常见概念
IPFS、Defi、全节点、DAO、矿工、POS、POW、Merkle Tree、NFT、Fabric、波卡、哈希、公有链、DApp、链游 等。
区块链网络
由P2P网络、公钥体制、共识机制和智能合约等技术所构建的区块链网络结构,事实上已经构建了一个全新的技术架构,这个技术架构具有相应的功能层次模型,作为一种崭新的技术架构,它已经开始成为新一代互联网的基础设施,能够解决以前的技术架构解决不了的社会问题。
区块链去中心化的特点
开放性:任何人可加入进来,不需要申请等操作流程(非许可式)
自治性:共同维护
安全性:数据不可篡改
匿名性:交易匿名,但不利于监管
区块链数据结构
区块链是一种电子化数据的存储方法。数据是以区块的形式出现的,这些区块都链接在了一起,为其内部数据赋予了不可变性。
当一个数据块被链接到了这条链上,其内部数据就再也无法更改了。一旦某个区块被添加到了链上,里面的数据对任何人都是公开可见的。这项技术具有非凡的革新意义,可以用来记录我们能想到的几乎所有数据(例如产权、身份、余额、病历等等),同时不存在被篡改记录的风险。区块链是一种存储数据且保证数据不被篡改的方法。这听上去不错,不过随之而来的问题是我们是怎么实现这样的技术的呢?
数据区块
下面是三个区块,每个区块都存有一些交易数据,这没什么特别的,就好比是3个独立的word文档,里面描述了交易的内容和余额变化情况。文档1会按照顺序从第1笔交易开始记录,直到数据量达到1MB为止,之后的交易会记录在文档2中,直到数据量达到1MB为止,以此类推。这些文档就是数据块,它们一个接着一个连接在一起。
一个区块分成2部分:区块头和区块体
区块头
区块头占80个字节,包含6个字段:
字段 | 大小(字节) | 说明 |
---|---|---|
父区块哈希值 | 32 | 记录该区块的上一个区块的Hash值 |
版本号 | 4 | 记录了区块头的版本号,用于跟踪软件/协议的更新 |
时间戳 | 4 | 记录了该区块的创建时间戳 |
难度 | 4 | 记录了该区块链工作量证明的难度目标 |
随机数(nonce) | 4 | 记录用于证明工作量的计算参数 |
默克尔根 | 32 | 记录该区块中交易的merkle树根的 |
区块头中有使用前一个区块的哈希来维持链式结构,使用默克尔树根来归纳区块中的交易信息,同时节点可以使用默克尔树进行快速验证交易。nonce和难度目标值是在打包区块时矿工进行挖矿的。矿工一旦找到一个合适的nonce,就能得到挖矿奖励。
区块体
区块体主要是包含了成百上千的交易信息,一个交易被发送到区块链网络中后,就会被打包到区块中。
区块体和区块体如下图所示:
链式结构
Merkle树
先看下面一张默克尔树结构示例图:
默克尔树的数据结构存放所有叶子节点的值,并以此为基础生成一个统一的哈希值。默克尔树的叶子节点存储的是数据信息的哈希值,非叶子节点的存储是对其下面所有叶子节点的组合进行哈希计算后得到的哈希值。
区块中任意一个数据的变更都会导致默克尔树结构发生变化,在交易信息验证对比的过程中,默克尔树结构能够大大减少数据的计算量,毕竟我们只需验证默克尔树结构生成的统一哈希值就可以了。
默克尔树是一种二叉树,由一个根节点,一组中间节点和一组叶节点组成。叶节点包含存储数据及其哈希值,中间节点是它的2个孩子节点内容的哈希值,根节点也是由它的两个子节点内容的哈希值组成,所以默克尔树也称哈希树。
默克尔树的特点是:底层数据的任何变动都会传递到其父节点,一直到树根,它的作用主要是快速归纳和校验区块数据的完整性。
根节点
根节点的hash值可以准确的作为一组交易的唯一摘要,放在区块头作为默克尔树根。
叶节点
叶节点包含存储数据及其哈希值
中间节点
中间节点是它的2个孩子节点内容的哈希值
默克尔树结构特点
1. 默认尔树常见的结构是二叉树,但它也可以是多叉树,它具有树结构的全部特点
2. 默克尔树的基础数据不是固定的,想存什么数据自己说了算,因为它只要数据经过哈希运算得到的hash值
3. 默克尔树是从下往上逐层计算的,就是说每个中间节点是根据相邻的2个叶子节点组合计算得出的,而根节点是根据2个中间节点组合计算得出的,所以叶子节点是基础
默克尔树应用场景
1. P2P下载:电驴、迅雷
2. 零知识证明
下一篇:区块链共识机制_ling1998的博客-CSDN博客
区块链的本质浅析
区块链发展到今天已经有一段时间了,在这段时间里,人们对区块链的认知经历了快速的迭代,对于区块链本质的理解也陆续出现过若干个版本,很多大咖都从不同的角度阐述过他们所理解的区块链本质。
比如《经济学人》对区块链的定义:
区块链是信任的机器。
李笑来曾经说过他对区块链的理解:
区块链的本质是不可篡改的数据库。
长铗对区块链的理解:
区块链是一台一旦启动便不可停机的信用机器。
王嘉平老师:
我们认为,区块链的链上数据全网可验证,是区块链系统与互联网最根本的区别所在。
互联网环境下的信息系统可以实现数据的公开透明,也可以实现数据的可验证,但这种公开透明或可验证,是中心机构决定的数据是否公开,以及是否允许验证。而区块链系统则实现了链上数据在全网范围内的无条件的公开透明。即使为了匹配更多业务场景,让更多隐私数据上链,但区块链系统在最低程度上要求实现数据的全网可验证。
还有从通证经济等角度来理解区块链的,这些角度都非常有代表性的,而且都很有道理。
但是,既然是本质,就只能有一个,那么这些理解的角度到底谁对谁错?或者说哪个才更加贴近区块链的本质呢?
一、区块链的本质是技术
既然说到本质,什么是本质?本质应该是不停向前追溯,一直追溯到不能进一步追溯为止,那时得到的东西才能称之为本质。
我认为,只有技术层面的东西,才能称为本质。
区块链的本质,是一种技术。回到区块链最初的那个原点,回到比特币刚刚诞生的时候,它要解决的问题是拜占庭将军问题,从专业角度来讲,也就是要解决如何在分布式环境下达成一致性的问题。
区块链这种技术,是多项技术的组合,它天然适合多方合作,可以为多方合作提供可信环境。
为什么区块链适合多方合作?因为它可以提供信任。信任怎么提供的呢?区块链里的数据和代码,不由任何一方决定,任何一方都无法单独修改,所以可以提供信任。
经济学人说“区块链是信任的机器”,我觉得算是非常贴近区块链本质的。
二、技术之上可以搭载协议
上面我们讲的是技术,技术是最为本质、最底层的东西。
但是技术就像农民扎的大棚、扎的支架一样,大棚和支架本身很重要,但是播什么种、开什么花、结什么果才是我们关心的东西。
技术只是提供了一种解决方案,我们用这种解决方案来做什么,是我们下一步要考虑的事,也是社会上很多人对区块链的理解有分歧的地方。
比如说比特币就是在这种区块链的技术架构上面搭载了一种货币协议,定义了货币的生成、分发、转账等一系列功能。
如果说区块链是技术的话,那么比特币就是协议,所谓协议其实也就是一连串的代码。有很多比特币的分叉币,比如莱特币们也是一种协议,与比特币相比它们做了一些细微的修改。
还有很多采用其它共识机制的公链,它们都是搭建在区块链这个技术架构上的不同协议,协议与协议之间可以有很大的区别,也可以没有太大的区别,但是他们都是区块链的一部分,因为他们都搭载在那个最原始的区块链上。
我觉得可以把区块链协议简单分为两类:
第1类是多方合作协议;
第2类是全网合作协议。
什么叫多方合作协议呢?多方合作协议你可以简单理解成联盟链,也包括那些采用POS、DPOS的共识机制的区块链项目,它们是有一定准入机制的,是有一定限制的,不是完全开放的,所以称之为多方合作协议。
现在多方合作已经成为了区块链的主流,因为它更贴近现实,更贴近真实的商业,而且也更容易搭建完成,效率高。
还有一类叫做全网合作协议。全网合作协议与多方合作协议的区别在于全网合作协议是完全没有门槛的,完全对外开放、自由加入,就最典型的代表就是比特币背后的区块链。
当然要实现全网合作,是一定要使用工作量证明的,没有工作量证明机制无法搭建出一个真正开放、无门槛的全网合作机制。
王嘉平老师定义区块链的本质特点是“全网可验证”这个观念,也侧重于“全网”这个概念,他的解释我采用了很长一段时间。
但是现在我倾向于认为不管是多方合作协议还是全网合作协议,它们都是搭载在区块链上的协议,都是其中之一,而不是全部。
三、协议之上可以开发应用
协议层之后,就到了应用层。
所有项目在技术层面都是基本一样的,在协议层面有一些小区别,到了应用层的差别就很大了。
从哲学的角度来理解:“技术是本质,应用是现象”,如果根据应用层的“现象”来理解区块链,得出的结论就会千差万别。
按照目前区块链的发展,我们可以简单的把这些应用成三个方面:
1、简单利用区块链不可篡改特性的应用
区块链有一个最基本的特点是不可篡改,有人说不可篡改是区块链的本质,我并不赞成这种观点,我认为这只是区块链的特性之一。
目前很多的政务机关正是使用了区块链的这个特点,比如说有很多的司法机构已经开始认同区块链上提供的证据,采纳为可信证据,就是利用区块链不可篡改的特点。
有很多的版权项目、物联网、溯源项目也是利用区块链不可篡改的特点。
但不可篡改只是区块链最基本的特点,基本上可以算是所有区块链协议都会附带的特点,算是相对比较简单、好理解的应用。
2、带Token的价值传输类应用
有一种对区块链的理解很有意思,它认为区块链的本质是市场经济,认为区块链是一个论功行赏的开放网络系统,原来由那些中心来管控的东西,现在全部都交给智能合约完成,原来需要中心机构来创造的东西,现在全部都由生态方来完成。
所以,既然是市场,那没有钱算什么市场?在他们看来:“区块链没有代币,就像一个市场没有钱,都是扯淡。”
目前带Token的区块链项目也确实是主流,这其实也符合客观的发展规律。为什么带Token的项目会先发展起来呢,因为所谓的Token,本质上是标准化的数据结构。
标准化的数据结构意味着大量的Token可以从同一个协议生成,而且因为不同的Token底层协议相同,所以它们之间可以相互交互,这样一方面Token可以低成本的产生,同时相互之间又可以高效率的交互,所以这一部分先落地是符合行业发展规律的。
而且Token还有它特殊的意义,比如孟岩老师说到的通证经济,孟岩老师认为区块链的精髓就在于通证经济,通证经济能够改变我们社会的生产关系,是非常有意义的,我也非常认可,这是区块链在应用层面的一个非常大的方面。
3、不带Token的数据传输类应用
个人身份系统、电子发票、跨境汇款以及阿里巴巴、蚂蚁区块链他们开发的众多项目,都属于这一类。
这类应用一般都搭载在多方合作协议上,以联盟链的形式居多。
如果说不可篡改是区块链技术所自带的特点,如果说Token是标准化的价值传输的话,那么不带Token的项目就是非标准化的数据传输了。
一般来说,总会先经历有Token的价值传递类应用的大规模发展,最后才有数据传输类应用的普及,为什么呢?因为Token是标准化的数据,而这里说到的不带Token的数据一般是指那些非标准化的数据。
数据传输如果是非标准化的,那么它就会非常依赖于前期的基础设施铺垫,这也就是说一块要做起来需要大量的基础设施,需要等待各种协议已经成熟,需要区块链本身的技术架构已经定型,各种协议已经成熟,同时已经有了多种可用的DAPP,这时候数据的交互才有意义。而且也需要大量的用户已经被教育,用户已经有一定区块链使用基础,这个时候这一类的应用才能够真正做起来。
四、结语
在本文中我们把区块链从本质、协议,到应用层面做了一个系统的梳理,从技术,到协议,再到应用,相当于从点,到线,再到面,应该说这样的结构是非常清晰的,理解起来会更容易。
相信沿着我的思路,大家可以对区块链的本质和未来的发展方向会有更加明确的思路,当再有人聊起区块链,说起区块链的种种特性时,你就可以准确的知道他在聊区块链哪个层面的东西,是技术,还是协议,还是应用层。
以上是关于区块链的数据结构的主要内容,如果未能解决你的问题,请参考以下文章