区块链有两个明显特点,一个是区块,另一个就是“链”,即“链式结构”。在“链式结构”下,它衍生出:链/Chain、链上/On-chain、链下/Off-chain、分叉/Fork、软分叉/Soft Fork、硬分叉Hard Fork系列概念。

链/Chain

链是由区块按照发生的时间顺序,通过区块的哈希值串联而成,是区块交易记录及状态变化的日志记录。

链上/On-chain

on-chain是区块链网络上最基本的交易方式。以比特币为例,链上交易的流程是甲方给乙方-个比特币地址(公钥) ,乙方用客户端创建交易发送比特币给甲方,这笔交易在全网广播,并且被确认,随后打包进区块。显然,这个交易是直接发生在比特币网络.上的,相对来说比较安全。需要注意的是,由于比特币网络区块确认时间较长所以交易过程会比较耗时。

链下/Off-chain

从功能角度讲,区块链系统是一个价值交换网络,链下是指不存储于区块链上的数据交方式,例如我们在交易所里进行的交易就是ff- chain交易。在交易所中进行的链下交易是如何运作的呢?A用户和B用户分别在某交易所开户,交易所会分别为A用户和B用户生成-对公钥私钥,但是A和B都不知道平台给他们生成的私钥,只知道自己的公钥。然后, A和B用自己的钱包往平台给他们开的公钥地址里冲值比特币,注意这个操作依然是onchain的。再然后, A通过交易所转了0.5BTC给B ,但由于A没有私钥,所以需要交易所拿A的私钥去签名并广播这个交易,然而交易所真的需要去广播这个交易吗?不需要的,交易所只需要在自2的数据库里,将A的账户余额-0.5BTC ,将B的账户额+0.5BTC.这-步,只是交易所自己维护的信息在更新,没有上链,所以这个操作是off chain的。最后,当A、B从交易所取现时,交易所将他们线上账户的比特币转给他们自己的此特币地址时(AB自己拥有私钥的地址) ,这个操作才会重新onchain。 与on-chain相比off-chain交易可以很快,但是由于交易数据放到交易所的数据库里了,所以安全隐私又打了点折扣。不过本文只探讨原理,对利弊就不做过多评论了。

分叉/Fork

在区块链中,由矿工挖出区块并将其链接到主链上,一般来讲同一时间内只产生-个区块,如果发生同-时间内有两个区块同时被生成的情况,就会在全网中出现两个长度相同、区块里的交易信息相同但矿工签名不同或者交易排序不同的区块链,这样的情况叫做分叉。

软分叉/Soft Fork

指在区块链或去中心化网络中向前兼容的分叉。向前兼容意味着,当新共识规则发布后,在去中心化架构中的节点不定要升级到新的共识规则因为软分叉的新规则仍旧符合老的规则,所以未升级的节点仍旧能接受新的规则。当新共识规则发布后,没有升级的节点会因为不知道新共识规则下,而生产不合法的区块,进而产生临时性分叉。对于软分叉,运行旧版本软件就好比出门坐地铁,而运行新版本就像是坐飞机。在地铁站安检的时候(8版本) ,拿着打火机,可以进站,可以上车,按照日常规程,基本没人拦你。而在机场安检时(新版本) ,你的打火机只能丢弃了。换句话说,有些在地铁上能做的事情,在飞机上就不能做(旧版本支持的事情,新版本不支持)。反过来看,因为坐飞机的安检更为严格,所以如果你满足了坐飞机的要求,坐地铁自然没有任何问题(新版本支持的事情, 1旧版本也支持)。

硬分叉Hard Fork

指在区块链或去中心化网络中不向前兼容的分叉。区块链发生永久性分歧,在新共识规则发布后,部分没有升级的节点无法验证已经升级的节点生产的区块,通常硬分叉就会发生。硬分叉对数字货币使用的技术进行永久更改,这种变化使得所有的新数据块与原来的块不同,旧版本不会接受新版本创建的区块,要实现硬分叉所有用户都需要切换到新版本协议上。如果新的硬分叉失败,所有的用户将回到原始数据块。对于硬分叉,我们也可以用”地铁和飞机”形象化。硬分叉中的旧版本软件就好比开地铁,而新版本则是开飞机。显然,能开地铁,不代表你能开飞机(旧版本支持,新版本则不支持) ;反过来即使你有飞机驾驶证,也不能拿着它直接坐进地铁驾驶室里把车开走(新版本没问题,旧版本却不支持)。

理解区块链之“链式结构”相关推荐

  1. 区块链 - 牵一发而动全身的链式结构

    文章目录 前言 区块的结构 区块如何链接的 反向链接 分叉 如果区块中交易被篡改后 结束语 前言 我们已经深度剖析了工作量证明和梅克尔树这两个典型的哈希应用,这次我们讨论哈希的第三个应用,也是数字货币 ...

  2. (跟我一起来学区块链(2.1))之区块链的组成原理(区块的组成和链式结构。)

    首先揭晓上一节的答案: 下面关于区块链说法正确的是 A:区块链是一个基于密码学的分布式账本 B:区块链中区块的意义在于通过批处理提高性能 C:区块链中的交易只能是转账 D:区块链记录的是一系列有顺序的 ...

  3. 二叉树的链式结构的非递归遍历

    二叉树的链式结构的非递归遍历 一. 非递归前序遍历和非递归中序遍历 1.    Stack.h #ifndef__STACK_H__ #define__STACK_H__ #include<st ...

  4. 二叉树的链式结构递归遍历实现

    二叉树的链式结构递归遍历实现 1.     BinTree.h文件 #ifndef__BINTREE_H__ #define__BINTREE_H__ #include<stdio.h> ...

  5. 【C】二叉树--顺序结构(详解堆的实现,topK排序、堆排)、和链式结构(链式结构的遍历、链式结构常见递归操作以及练习题)

    本章我们将引入树的概念并详细介绍二叉树.我们会在介绍顺序二叉树基础上,进一步介绍堆以及堆的实现,并以此为依据详解topK排序.堆排等问题:然后我们会介绍链式二叉树的实现以及各种操作.最后,我们也会给出 ...

  6. 哈夫曼树--链式结构(建立huffman树、编码、解码)

    引子: 用链式结构来建立哈夫曼树. 总体思路是: 将每一棵树(这是每一棵树只有一个节点,头节点)放在一个优先队列中(下面的是链表实现的优先队列),频率(rate)小的在队列头,取出队列头两个,频率相加 ...

  7. 栈之顺序结构和链式结构

    栈的顺序结构实现 typedef int Position; struct SNode {ElementType *Data; /* 存储元素的数组 */Position Top; /* 栈顶指针 * ...

  8. java链式结构_(Java)单链表Java语言链式结构实现(数据结构四)

    1.迭代器接口实现 package com.zhaochao; public interface Iterator { boolean hasNext(); E next(); boolean del ...

  9. 每天一道LeetCode-----将二叉树原地平铺成链式结构

    Flatten Binary Tree to Linked List 原题链接Flatten Binary Tree to Linked List 给定一个二叉树,将其原地平铺成链式结构(按先序遍历的 ...

最新文章

  1. WinForm 应用程序中开启新的进程及控制
  2. git.exe在哪里?
  3. PVUVIP之间的区别和联系
  4. [原]请留心asp:Image控件中的ImageUrl属性
  5. 《R语言实战》第7章
  6. 树莓派python教程_两个简易的树莓派初学者Python程序
  7. 神策数据易向文:打造券商上层数据应用的坚实基础
  8. GTADIR check object exist in another system
  9. opencv 提取图像线条 霍夫线检测
  10. 使用Cscope阅读Linux源码
  11. mysql下载备份数据库命令行_MYSQL 数据库导入导出命令 | 很文博客
  12. 大学四年走来,这些网络工程师必备的模拟器我都给你整理好了
  13. android使用Itext库生成PDF文件
  14. css 3D 旋转 - Demo
  15. 关于司法行政管理系统
  16. 易语言删除全部空白字符
  17. 计算机接口电路的种类,接口电路的分类_接口电路的功能_接口电路的作用是什么...
  18. hdu3397 线段树
  19. C# winform 学习(一)
  20. 【计算机研究与发展】一种基于区块链的泛用型数据隐私保护的安全多方计算协议——CCF A

热门文章

  1. 【Mac】MindNode for Mac 免费
  2. MQ系列传感器电压与浓度转换关系
  3. 用python匹配一段文字中的所有中文
  4. 从PCB板侧面看PCB板层
  5. WinEdt编译后PDF previwer灰色(无法预览PDF)
  6. 来听大师讲设计(下)
  7. 电脑版微信怎么样取消截图的快捷键?
  8. 一维等离子体仿真学习
  9. 【附源码】计算机毕业设计java药店管理系统设计与实现
  10. 扫雷(不能一键分享、只能保存个喽)