区块链 - 牵一发而动全身的链式结构
文章目录
- 前言
- 区块的结构
- 区块如何链接的
- 反向链接
- 分叉
- 如果区块中交易被篡改后
- 结束语
前言
我们已经深度剖析了工作量证明和梅克尔树这两个典型的哈希应用,这次我们讨论哈希的第三个应用,也是数字货币的核心内容,区块链的链式结构。
请大家关注gitcoins抖音频道。我们将会分享有趣的、高质量的、加密货币相关的视频。
区块的结构
大家都知道区块链是一个链式结构,这个链式结构将一个一个的区块串起来,构成了区块链。我们将其中一个区块放大观察,解剖麻雀,你会发现每一个区块里有一个卡通人,这个卡通人的身体是一个三角形,也就是我们之前讨的论梅克尔树。今天我们剖析区块的头部结构,看看每个区块是如何链接起来的?头部主要包括以下信息:
Merkle Root
Previous Block Hash
Difficulty Target
Nonce
区块如何链接的
是什么样的信息就能把所有的区块链接起来,形成这个区块链。每个区块的头部信息包含一个哈希值,这个是前一个区块的头信息的哈希值,通过这个哈希值我们可以找到它的前一个区块也叫直接领导区块。也就是每个区块它不知道自己在整个区块链全局中的位置,只知道它的前一个区块在哪。
反向链接
区块链就像公司的组织结构一样,我们只关注我们的直接领导或一线领导是谁,我们从不关心二线和三线领导是谁,因为是一线领导给你布置工作,决定你的升职加薪。二线领导那是一线领导关心的事情,因为一线领导要充分了解二线领导的性格、爱好、干事风格等,因为二线领导决定了一线领导能否上升。这样随着公司层级的不断上升,公司规模的不断扩大,形成了公司领导的关系链条,也就是公司的组织架构。在计算中,只关心直接领导和一线领导的数据结构叫做反向链接(back-linked list)。
在区块链中,每个区块的头部中记录了他的直接领导是谁,在这个区块中显示它的直接领导的哈希值是这样的,也就是说,谁的头部信息哈希后是这个值,谁就是我的直接领导。这样区块和他的直接领导产生了链接关系。同样,直接领导的头部也记录着二线领导的哈希值,谁的头部信息哈希后是这个值,,谁就是直接领导要找的二线领导。区块链的世界是如此的美好,所有的区块都是环环相扣。
分叉
区块链和我们的发展一样,很多人都跟着同一个直接领导,有的业务没有做起来,不是风口,不符合市场规律,那这个人也没得到发展和重用,有的人干对了事情,队伍壮大的快,得到的奖励就多。这个过程在区块链中叫做分叉(fork)。
如果区块中交易被篡改后
如果黑客进入全节点,将一个区块中的交易数据篡改,协议按照规则就会逐步发现问题。 首先,按照梅克尔树的验证规则, 会导致树根的哈希值改变,树根发生变化, 也就是区块头的内容与之前不一样, 那么区块头的哈希值也和之前不一样了。
也就是直接领导头部哈希值变了, 由于下属区块的信息不变, 下属再也没办法找到直接领导, 这样会导致,出现区块链撕裂和断开现象。
当全节点再次加载时,后面的链条不再认为是有效的数据,直接被删除了。
另外,当树根的哈希值改变时,整个工作量证明变得无效了,因为之前的视频也说过头部中的NONCE是根据之前的树根的哈希值等信息,在全网挖矿难度(diffculty)的要求下,计算出来的。如果树根的哈希值发生变化,那么头部中信息(直接领导、时间戳、树根哈希值)与NONCE再一次哈希得到值,通常是不能满足挖矿难度的要求的。也就是这个区块是一个无效区块,被全节点删除。
到这里大家可以明白,区块链的有严格的安全验证机制,小小的改动就会引起牵一发而动全身的变化,很快被察觉到。
结束语
区块链中哈希的应用无所不在,我们已经深度剖析了如何证明工作量、梅克尔树如何检测防篡改以及区块链牵一发而动全身的链式结构。哈希是打开加密货币的第一把钥匙,为了学习加密货币奠定良好基础,Gitcoins抖音频道为大家持续输出加密数字货币相关的技术原理,通过直观形象的视频和大家共同讨论数字货币的内核,请大家点赞关注。我们下期讨论对称加密和非对称加密的机制。
区块链 - 牵一发而动全身的链式结构相关推荐
- (跟我一起来学区块链(2.1))之区块链的组成原理(区块的组成和链式结构。)
首先揭晓上一节的答案: 下面关于区块链说法正确的是 A:区块链是一个基于密码学的分布式账本 B:区块链中区块的意义在于通过批处理提高性能 C:区块链中的交易只能是转账 D:区块链记录的是一系列有顺序的 ...
- 理解区块链之“链式结构”
区块链有两个明显特点,一个是区块,另一个就是"链",即"链式结构".在"链式结构"下,它衍生出:链/Chain.链上/On-chain.链下 ...
- 大数据24小时:中国平安推出区块链解决方案“壹账链”,云从科技发布3D结构光人脸识别技术
[数据猿导读]发布3D结构光人脸识别技术:计算机视觉创企云从科技对外发布3D结构光人脸识别技术:百度与新华社就内容分发.人工智能等达成战略合作--以下为您奉上更多大数据热点事件 编辑 | abby 官 ...
- 哈夫曼树--链式结构(建立huffman树、编码、解码)
引子: 用链式结构来建立哈夫曼树. 总体思路是: 将每一棵树(这是每一棵树只有一个节点,头节点)放在一个优先队列中(下面的是链表实现的优先队列),频率(rate)小的在队列头,取出队列头两个,频率相加 ...
- 栈之顺序结构和链式结构
栈的顺序结构实现 typedef int Position; struct SNode {ElementType *Data; /* 存储元素的数组 */Position Top; /* 栈顶指针 * ...
- java链式结构_(Java)单链表Java语言链式结构实现(数据结构四)
1.迭代器接口实现 package com.zhaochao; public interface Iterator { boolean hasNext(); E next(); boolean del ...
- 二叉树的链式结构的非递归遍历
二叉树的链式结构的非递归遍历 一. 非递归前序遍历和非递归中序遍历 1. Stack.h #ifndef__STACK_H__ #define__STACK_H__ #include<st ...
- 二叉树的链式结构递归遍历实现
二叉树的链式结构递归遍历实现 1. BinTree.h文件 #ifndef__BINTREE_H__ #define__BINTREE_H__ #include<stdio.h> ...
- 每天一道LeetCode-----将二叉树原地平铺成链式结构
Flatten Binary Tree to Linked List 原题链接Flatten Binary Tree to Linked List 给定一个二叉树,将其原地平铺成链式结构(按先序遍历的 ...
最新文章
- 猖狂!微软、思科源码惨遭黑客 100 万美元打包出售
- 对于ESP8266-340模块改成MicroPytyhon模块
- 手机APP商城系统开发设计方案
- 多线程随机数组生成+双线程快速排序(C++实现)(0.2秒排100W个数字)
- 170828、Eclipse Java注释模板设置详解以及版权声明
- 如何修改wince的网络配置
- 如何在 iPhone、iPad 和 Mac 上通过 iMessage 共享照片和视频?
- 使用IntelliJ IDEA和Maven构建Java web项目并打包部署
- 熊猫烧香delphi编写免费源代码
- 简单好用的钉钉群消息助手
- UCOS操作系统——信号量实验(十)
- 基于微信小程序的停车位预约系统设计与实现毕业设计毕设开题报告
- ubuntu等linux发行版声卡、网卡、显卡驱动问题解决
- JS - Promise使用详解--摘抄笔记
- 服务器打不开网页dns错误是怎么回事,dns配置错误网页打不开
- 生信软件 | FastQC(质量控制,查看测序质量)
- gvim 换行符替换
- criteria使用详解
- Tina_Linux_WiFi_RF测试_使用指南
- DBus的理解与应用