【21天转型区块链】DAY3

区块链的核心技术在于分布式账本的构建。

分布式存储

    分布式存储是一种数据存储技术,通过网络使用企业中的每台机器上的磁盘空间,并将这些分散的存储资源构成一个虚拟的存储设备,数据分散存储在企业的各个存储空间。

分布式账本

    分布式账本是一种在网络成员之间共享、复制和同步的数据库。分布式账本记录网络参与者之间的交易,比如资产或数据的交换。 网络中的参与者根据共识原则来制约和协商对账本中的记录的更新。没有中间的第三方仲裁机构(比如金融机构或票据交换所)的参与。 分布式账本中的每条记录都有一个时间戳和唯一的密码签名,这使得账本成为网络中所有交易的可审计历史记录。分布式账本技术的一种实现是开源 Hyperledger Fabric 区块链。

共享账本特性

    区块链是一种共享账本技术,允许业务网络中的各个参与方都可以看到账本内容。账本提供了一种对所有成功状态变化的可验证的历史。

    账本有SHARED,REPLICATED 和 PERMISSIONED。多个账本对应多个加入的业务网络。

    Transactions – 交易合约:双方交易意愿的电子合同。

    Transactions发生的条件:例如小王给小张一辆车,如果小张给小王钱,然后这个车就应该从小王那给小张。如果车不能用,钱不会到小王账上。

    Fabric区块结构

区块数据结构:Block由Header,Data,Metadata组成

Headers:以 80字节的格式进行序列化,然后作为比特币工作量验证算法的一部分进行哈希处理,使序列化头部格式成为共识规则的一部分。

Data:交易记录。

Metadata:元数据,关于数据仓库的数据,指在数据仓库建设过程中所产生的有关数据源定义,目标定义,转换规则等相关的关键数据。同时元数据还包含关于数据含义的商业信息,为数据仓库的发展和使用提供方便。

Fabric Transaction结构:

Transaction数据结构如下:

Fabric账本分为区块账本,状态账本,历史账本。

区块账本:记录交易内容,基于文件系统,仅新块类增;区块被存储在提交节点和可选的排序服务节点。

状态账本:世界状态会存储当前智能合约的值,通过链代码api来访问键值数据库,世界状态存储在所有提交者节点。

历史账本:存储所有链码交易的历史顺序,序号被存储在键值数据库,只能通过链码接口访问,历史状态存储在所有提交者节点。

链结构:

链行为:

读写集逻辑结构

背书节点 – 模拟交易执行并产生读写集。

提交节点 – MVCC(多版本并发控制)验证检查保证读集在整个过程中没有被修改;区块被添加到链上同时每个有效的交易的写集被更新到状态数据库。

多通道下的账本隐私策略:

创建三条通道:组织A和组织B在一个通道,组织A和组织C在一个通道,组织B和组织C在一个通道,审计组织加入每一条通道。

链代码会安装在orderer下的每一个通道,组织节点只能看到自己所在通道的数据,审计节点可看到所有通道数据。

账本和链码:

QSCC – 查询系统链码

系统链码默认就已经被部署可以用来查询区块链

QSCC API:

GetChainInfo

GetBlockByNumber

GetBlockByHash

GetTransactionByID

账本是Fabric中所有状态转换的记录,具有有序和防篡改的特点。状态转换是参与各方提交链代码调用(交易)产生的结果。每个交易会产生一组资产键值对,这些键值对作为“创建”、“更新”或者“删除”提交给账本

账本由一个区块链(链)构成,并将不可变的、有序的记录存放在区块中;同时包含一个状态数据库来记录当前的Fabric状态。每个通道中各有一个账本。各个节点对于它所属的每个通道,都会保存一份该通道的账本副本

账本是由链构成,而链是区块构成的区块(Block) + 链(Chain) = 区块链(Blockchain)。

数据以区块(block)为单位产生和存储,并按照时间顺序连成链式(chain)数据结构。所有节点共同参与区块链系统的数据验证、存储和维护。新区块的创建需得到共识确认,并向各节点广播实现全网同步,之后就不能更改或删除。

 

区块链channel搭建:

环境:CentOS7.5 64bit(华为服务器)

Go:go1.9.4

区块链channel创建代码(Go):链接:https://pan.baidu.com/s/1LOtTV1mtcUMOIKp8CsrwOw 密码:yyg1

用winscp上传文件到服务器

配置go路径,进入homework的src/ledger目录,可看到reader.go

出现缺少ltdl.h,安装libtool-ltdl-devel

安装后可以完成go build

使用./ledger --channelId --name创建channel

完成

(知识点图片来自课程教材)

 

猜你喜欢

转载自blog.csdn.net/xxxxfengheheda/article/details/82792344