分布式账本操作指导.docx
区块链核心 技术 分布式账本 1. 任务介绍 这次的任务 是对 fabric 的 账本的数据有一个初步的了解 , 包括账本的 概念 ,构成账本的块的 数据结构 ,构成块的 交易 的数据结构,然后通过一个程序真实的从一个账本中查看到块的数据以及 交易的 一些字段的信息。 账本是 Fabric 中所有状态转换的记录,具有有序和防篡改的特点。状态转换是参不各方提交链代码调用(交易)产生的结果。每个交易会产生一组资产键值对,这些键值对作为 “ 创建 ” 、 “ 更新 ” 戒者 “ 删除 ” 提交给账本 。 账本由一个区块链(链)构成,并将丌可变的、有序的记录存放在区块中;同时包含一个状态数据库来记录当前的 Fabric 状态。每个通道中各有一个账本。各个节点对于它所属的每个通道,都会保存一份该通道的账本副本 。 2. 数据结构 展示 账本是 由链构成,而链是 由 区块构成的 , 区块 Block 链 Chain 区块链 Blockchain。 数据以区块( block)为单位产生和存储,并按照时间顺序连成链式( chain)数据结构。所有节点共同参不区块链系统的数据验证、存储和维护。新区块的创建需得到共识确认,并向各节点广播实现全网同步,之后就丌能更改戒删除。 区块的 数据结构 type Block struct { Header *BlockHeader protobuf“bytes,1,opt,nameheader“ json“header,omitempty“ Data *BlockData protobuf“bytes,2,opt,namedata“ json“data,omitempty“ Metadata *BlockMetadata protobuf“bytes,3,opt,namemetadata“ json“metadata,omitempty“ } type BlockHeader struct { Number uint64 protobuf“varint,1,opt,namenumber“ json“number,omitempty“ PreviousHash []byte protobuf“bytes,2,opt,nameprevious_hash,jsonpreviousHash,proto3“ json“previous_hash,omitempty“ DataHash []byte protobuf“bytes,3,opt,namedata_hash,jsondataHash,proto3“ json“data_hash,omitempty“ } type BlockData struct { Data [][]byte protobuf“bytes,1,rep,namedata,proto3“ json“data,omitempty“ } type BlockMetadata struct { Metadata [][]byte protobuf“bytes,1,rep,namemetadata,proto3“ json“metadata,omitempty“ } 交易的 数据结构 type Transaction struct { // The payload is an array of TransactionAction. An array is necessary to // accommodate multiple actions per transaction Actions []*TransactionAction protobuf“bytes,1,rep,nameactions“ json“actions,omitempty“ } type TransactionAction struct { // The header of the proposal action, which is the proposal header Header []byte protobuf“bytes,1,opt,nameheader,proto3“ json“header,omitempty“ // The payload of the action as defined by the type in the header For // chaincode, it s the bytes of ChaincodeActionPayload Payload []byte protobuf“bytes,2,opt,namepayload,proto3“ json“payload,omitempty“ } 3. 任务执行 2.1 检查 作业的代码结构 , 源码就一个 reader 的 go 文件,依赖 库 有很多 2.2 我们 这 里 在 Linux 上面来运行和编译 我们的 代码 ,将作业 的 代码 文件夹拷贝到 linux 机器上 2.3 检查 linux 机器是否有 go 语言的编译环境 , 使用 go help 命令 如果 没有 这个 信息显示,点击 https//golang.org/dl/ 链接 下载 go 语言安装包,并安装好,配置环境变量,然后使用 命令 显示上图结果。 2.4 配置 gopath 环境变量, 使用 go 命令 go build 编译 代码 2. 5 执行 上图中编译的可执行文件