本系列文章:


第一章:九析带你完爆 hyperledger fabric - 快速上手 basic-network 样例

第二章:九析带你完爆 hyperledger fabric - 快速搭建 GO 环境

第三章:九析带你完爆 hyperledger fabric - 快速上手 first-network 样例

第四章:九析带你完爆 hyperledger fabric - 系统逻辑架构篇

第五章:九析带你完爆 hyperledger fabirc - 网络节点介绍

第六章:  九析带你完爆 hyperledger fabric - 区块和区块链介绍

目录

1 前言

2 区块

3 区块链

4 区块链网络

5 区块链存储


1 前言

        第一章九析手把手带领你运行了一个 fabric 区块链样例 basic-network。

        第二章九析手把手带领你实现了 GO 语言开发环境的安装和配置。

        第三章九析手把手带领你在 GO 语言开发环境下编译了 fabric 的最重要的两个工具 configtxgen 和 cryptogen,并在此基础上运行了 fabric 区块链样例 first-network。

        第四章九析给你深入浅出的介绍了 fabric 整个逻辑架构。

        第五章九析给你庖丁解牛般阐述了 fabric 网络拓扑、网络节点以及共识机制。

        本章九析将为你讲解什么是区块、区块链,区块链网络以及区块链存储到底是什么意思。


2 区块

第六章 九析带你轻松完爆 hyperledger fabric - 区块和区块链介绍_第1张图片

        区块(block),本质是一种数据结构。如果用 java 表达,大概是下面这个样子:

public class Block {

    private int index;                       # 索引值;此 Block 对象在整个区块链列表(List)的位置编号

    private Date createdatetime;      # 区块对象创建日期时间

    private Object data;                  # 区块链中的交易记录,可以接受多种数据结构,比如 hashmap、 List、 Array 等

    private Random nonce; # 随机数(下面会详细介绍)

    private String hash;                  # 此 Block 对象的 hash 值

    private String preBlockHash      # 区块链列表(List)中此对象的上一个 Block 对象的 hash 值

    ......

    public getHash()     {

        return hash( index + createdatetime + data + nonce + preBlockHash ); # 这里的 hash() 返回输入参数的 hash 值

    }

}


3 区块链

第六章 九析带你轻松完爆 hyperledger fabric - 区块和区块链介绍_第2张图片

        讲完了区块,那么区块链 ( blockchain ) 就更好理解了,它也是一种数据结构。如果用 java 表达,大概就是下面这个样子:

List blockchain = new ArrayList();

Block _1st .= new Block();

Block _2nd = new Block();

Block _3rd = new BLock();

blockchain.add( _1st );

blockchain.add( _2nd );

blockchian.add( _3rd );


4 区块链网络

        讲完了区块链,我们再来介绍一下区块链网络。上面我们已经知道区块链是一种数据结构对象(list);如果用 java 表述,此 list 存储在服务器的 jvm 中。设想如下场景,如果不想单点故障,你通常会在每个服务器上都启动一个 jvm,而每个 jvm 都存有相同的一份 list,这样由多个服务器构成的网络拓补结构就是分布式网络。

        再回到区块链的概念上来,上面介绍的每个服务器就是区块链的网络节点,每个节点都存有一份相同的区块链,这样由多个节点构成的网络拓补结构便是区块链网络。如下图所示:

第六章 九析带你轻松完爆 hyperledger fabric - 区块和区块链介绍_第3张图片


5 区块链存储

        区块和区块链都是一种数据结构,如果这个数据结构存储在内存中是非常危险的,就像 java 对象一样,一旦 jvm 宕掉或者内存掉电,整个数据将不可恢复。因此,区块链也应该像 java 对象存储在 mysql 中一样存储在专属数据库中,fabric 使用 levelDB 和 couchDB(后续课程会介绍)存储区块链。

        在 fabric 中,每个 Peer Committer 记账节点都会维护一份区块链对象(List)。每当客户端节点提交交易给 orderer 节点后,orderer 节点会将这些交易打包成新区块(block),然后在固定时间间隔将此区块同步给 Peer Anchor 节点,Peer Anchor 节点收到此区块后会利用 gossip 协议广播给每个 Peer Committer 节点。Peer Committer 节点收到区块,然后验证区块,最终将现加入的区块(block)添加(add)到自己节点所维护的区块链中(blocklist),这样便保证了整个分布式网络的数据一致性。


        自此,九析带你轻松完爆了 hyperledger fabric 的区块和区块链。