区块链基础学习1

1、区块链/Blockchain:区块链技术是指通过去中心化和去信任的方式集体维护一个可靠数据库的技术方案。
2、点对点(P2P):通过允许单个结点与其他结点直接交互,无需通过中介机构,从而实现整个系统像有组织的集体一样运作的系统。
3、去中心化/Decentralized:去中心化是区块链最基本的特征,指区块链不依赖于中心的管理节点,能够实现数据的分布式记录、存储和更新。
4、去信任/Trustless:去信任表示用户不需要相信任何第三方。交易双方可以安全交易,无需依赖第三方。


综上几个概念简述了区块链的基本特点,摘要来说都有一个共同的特点就是无需第三方参与。无需第三方参与自然会出现很多问题,例如:如果没有像支付宝这样的中间机构,安全性如何保障,

5、匿名性/Anonymous:由于区块链个节点之间的交换遵循固定且预知的算法,因此区块链网络是无须信任的,可以基于地址而非个人身份进行数据交换。
6、自治性/Autonomous:区块链采用基于协商一致的机制,使整个系统中的所有节点能在去信任的环境自由安全地交换数据、记录数据、更新数据,任何人为的干预都不起作用。
7、公有链/Public Blockchain:任何节点都是像任何人开放的,每个人都可以参与到这个区块链中的计算,而且任何人都可以下载获得完整区块链数据,即全部账本。
8、私有链/Private Blockchain:不对外公开、只有被许可的节点才可以参与并且查看所有数据的私有区块链。适用于特定的机构内。


 区块链还有一个特点就是区块链中的功能都是所有节点共同维护的,区块链中的信息每个结点都会有一份共有的信息。

9、区块/Block:区块是在区块链网络上承载交易数据的数据包,是一种被标记上时间戳和之前一个区块的哈希值的数据结构,区块经过网络的共识机制验证并确认区块中的交易。
10、父块/Parent Block:父块是指区块前的一个区块,区块通过在区块头记录区块以及父块的哈希值来时间上排序。
11、区块头/Block Header:记录当前区块的信息,包含当前版本号、上一区块的哈希值、时间戳、随机数、Merkle Root的哈希值等数据。此外,区块体的数据记录通过Merkle Tree的哈希过程生成唯一的Merkle Root记录在区块头。
12、区块体/Block Body:记录一定时间内所生成的详细数据,包括当前区块经过验证的、区块创建过程中生成的所有交易记录或是其他信息,可以理解为账本的一种表现形式。
13、时间戳/Timestamp:时间戳从区块生成的那一刻起就存在于区块之中,是用于标识交易时间的字符序列,具备唯一性,时间戳用以记录并表明存在的、完整的、可验证的数据,是每一次交易记录的认证。
在这里插入图片描述


关于区块链区块的结构,可以从图中以及概念中看的比较清楚,Merkle根可以唯一确定一棵Merkle树。关于Merkle树的概念以及特性看下边:

14、梅克尔树/Merkle Tree:梅克尔树又叫哈希树,多为二叉树。是一种高效安全的组织数据的方法,被用来快速查询验证特定交易是否存在,由一个根节点、一组中间节点和一组叶节点组成。它使用哈希算法将大量的书面信息转换成一串独立的字母或者数字。最底层的叶节点包含存储数据或哈希值,每个中间节点是它的两个子节点内容的哈希值,根节点也是由它的两个子节点内容的哈希值组成。
在这里插入图片描述
D0、D1、D2和D3是叶子节点包含的数据,也就是叶子节点的value,继续往上看,N0、N1、N2和N3是就是叶子节点,它是将数据(也就是D0、D1、D2和D3)进行hash运算后得到的hash值;继续往上看,N4和N5是中间节点,它们各是N0和N1经过hash运算得到的哈希值以及N2和N3经过hash运算得到的哈希值,注意,它们是把相邻的两个叶子结点合并成一个字符串,然后运算这个字符串的哈希;接着往上,Root节点是N4和N5经过hash运算后得到的哈希值,这就是这颗默克尔树的根哈希。

分析到这里我们大概可以知道在默克尔树中最下面的大量的叶节点包含基础数据;每个中间节点是它的两个叶子节点的哈希,根节点也是由它的两个子节点的哈希,代表了默克尔树的顶部。

还有从默克尔树的结构可以看出,任意一个叶子节点的交易被修改,叶子节点hash值就会变更,最终根节点的hash值就会改变。所以确定的根节点的hash值可以准确的作为一组交易的唯一摘要。

现在可以总结一下默克尔树的特点:
1.首先是它的树的结构,默克尔树常见的结构是二叉树,但它也可以是多叉树,它具有树结构的全部特点。

2.默克尔树的基础数据不是固定的,想存什么数据由你说了算,因为它只要数据经过哈希运算得到的hash值。

3.默克尔树是从下往上逐层计算的,就是说每个中间节点是根据相邻的两个叶子节点组合计算得出的,而根节点是根据两个中间节点组合计算得出的,所以叶子节点是基础。

默克尔树是如何验证一笔交易的?也就是SPV(支付验证):
在这里插入图片描述
假设我们要验证区块中存在Hash值为9Dog:64(绿色框)的交易,我们仅需要知道1FXq:18、ec20、8f74(黄色框)即可计算出781a、5c71与Root节点(藕粉色框)的哈希,如果最终计算得到的Root节点哈希与区块头中记录的哈希(6c0a)一致,即代表该交易在区块中存在。这是因为我上文提到的两个点,一个是默克尔树是从下往上逐层计算的,所以只要知道相邻的另一个节点的hash值就可以一直往上计算直到根节点,另一个是根节点的hash值可以准确的作为一组交易的唯一摘要,依据这两点就可以来验证一笔交易是否存在。
默克尔树的应用场景其实很广泛,比较典型的就是P2P下载。在点对点网络中作数据传输的时候,会同时从多个机器上下载数据,而且很多机器可以认为是不稳定或者不可信的。为了校验数据的完整性,更好的办法是把大的文件分割成小的数据块(例如,把分割成2K为单位的数据块)。这样的好处是,如果小块数据在传输过程中损坏了,那么只要重新下载这一快数据就行了,不用重新下载整个文件。

怎么确定小的数据块没有损坏哪?只需要为每个数据块做Hash。BT下载的时候,在下载到真正数据之前,我们会先下载一个Hash列表。那么问题又来了,怎么确定这个Hash列表本事是正确的哪?答案是把每个小块数据的Hash值拼到一起,然后对这个长字符串在作一次Hash运算,这样就得到Hash列表的根Hash。下载数据的时候,首先从可信的数据源得到正确的根Hash,就可以用它来校验Hash列表了,然后通过校验后的Hash列表校验数据块。

除了P2P下载外,默克尔树还可以被用来快速比较大量的数据,因为当两个默克尔树根相同时,则意味着所代表的数据必然相同。还有就是可以用来实现零知识证明(零知识证明指的是证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。举个例子,你要我向你证明我拥有某一把钥匙,这个时候我不需要直接拿钥匙给你看,而是用这个钥匙开锁拿出所在柜子中的某一样东西给你看以此来证明我拥有这把钥匙)。

发布了29 篇原创文章 · 获赞 5 · 访问量 4608

猜你喜欢

转载自blog.csdn.net/guoyihaoguoyihao/article/details/100936522