区块链核心技术-分布式账本.pptx
Day 3 区块链核心技术,分布式账本,什么是分布式存储 什么是共享账本 Fabric中使用的账本 多通道账本隐私 账本和链码,议程,什么是分布式存储,分布式存储是一种数据存储技术,通过网络使用企业中的每台机器上的磁盘空间,并将这些分散的存储资源构成一个虚拟的存储设备,数据分散的存储在企业的各个角落。分布式账本是一种在网络成员之间共享、复制和同步的数据库。分布式账本记录网络参与者之间的交易,比如资产或数据的交换。 网络中的参与者根据共识原则来制约和协商对账本中的记录的更新。没有中间的第三方仲裁机构(比如金融机构或票据交换所)的参与。 分布式账本中的每条记录都有一个时间戳和唯一的密码签名,这使得账本成为网络中所有交易的可审计历史记录。分布式账本技术的一种实现是开源 Hyperledger Fabric 区块链,共享账本,区块链是一种共享账本技术允许业务网络中的各个参与方都可以看到账本内容 账本提供了一种对所有成功状态变化的可验证的历史。账本有SHARED,REPLICATED 和 PERMISSIONED。多个账本对应多个加入的业务网络。 Transactions – 一种资产转移在账本上或是下了账本,例如小王给小张一辆车 合约 – Transactions发生的的条件,例如, 如果小张给小王钱,然后这个车就应该从小王那给小张。如果车不能用,钱不会到小王账上,Fabric区块,区块头 区块号,当前块的hash,前一块的hash 区块数据 交易列表 区块元数据 写块时间,证书,公钥,写块人的签名,区块数据结构,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“ },Fabric Transaction,交易头 包含交易实质的元数据,例如相关链代码和它的版本 签名 包含客户端创建的加密签名,用来检查交易是否被篡改 请求 加密应用提供的输入参数给链码更新账本 响应 世界状态更新前和更新后的值 背书 满足背书策略的组织的签名交易响应列表,Transaction数据结构,type Transaction struct { Actions []*TransactionAction protobuf“bytes,1,rep,nameactions“ json“actions,omitempty“ },type TransactionAction struct { Header []byte protobuf“bytes,1,opt,nameheader,proto3“ json“header,omitempty“ Payload []byte protobuf“bytes,2,opt,namepayload,proto3“ json“payload,omitempty“ },type ChaincodeActionPayload struct { ChaincodeProposalPayload []byte protobuf“bytes,1,opt,namechaincode_proposal_payload,jsonchaincodeProposalPayload,proto3“ Action *ChaincodeEndorsedAction protobuf“bytes,2,opt,nameaction“ json“action,omitempty“ },type ChaincodeEndorsedAction struct { ProposalResponsePayload []byte protobuf“bytes,1,opt,nameproposal_response_payload,jsonproposalResponsePayload,proto3“ Endorsements []*Endorsement protobuf“bytes,2,rep,nameendorsements“ json“endorsements,omitempty“ },type Endorsement struct { Endorser []byte protobuf“bytes,1,opt,nameendorser,proto3“ json“endorser,omitempty“ Signature []byte protobuf“bytes,2,opt,namesignature,proto3“ json“signature,omitempty“ },Fabric上使用的账本,区块账本 基于文件系统,仅新块类增 区块被存储在提交节点,和可选的排序服务节点 状态账本 世界状态会存储当前智能合约的值 通过链代码api来访问键值数据库 世界状态存储在所有提交者节点 历史账本 存储所有链码交易的历史顺序 序号被存储在键值数据库,只能通过链码接口访问 历史状态存储在所有提交者节点,Fabric上使用的账本,交易生命周期以及和账本的交互,Fabric上使用的账本,读写集逻辑结构,Fabric上使用的账本,背书节点 – 模拟交易执行并产生读写集 提交节点 – MVCC验证检查保证读集在整个过程中没有被修改;区块被添加到链上同时每个有效的交易的写集被更新到状态数据库;,多通道下的账本隐私,创建三条通道 组织A和组织B在一个通道 组织A和组织C在一个通道 组织B和组织C在一个通道 审计组织加入每一条通道,多通道下的账本隐私,链代码CC1安装在各个通道 组织A节点可以看到A-B和 A-C的数据 组织B节点可以看到A-B和B-C的数据 组织C节点可以看到A-C和B-C的数据 审计组织可以看到每条通道的数据,账本和链码,type Chaincode interface { Initstub ChaincodeStubInterface pb.Response Invokestub ChaincodeStubInterface pb.Response },type ChaincodeStubInterface interface { GetStatekey string []byte, error PutStatekey string, value []byte error DelStatekey string error GetStateByRangestartKey, endKey string StateQueryIteratorInterface, error GetStateByPartialCompositeKeyobjectType string, keys []string StateQueryIteratorInterface, error CreateCompositeKeyobjectType string, attributes []string string, error SplitCompositeKeycompositeKey string string, []string, error GetQueryResultquery string StateQueryIteratorInterface, error GetHistoryForKeykey string HistoryQueryIteratorInterface, error },账本和链码,QSCC – 查询系统链码 系统链码默认就已经被部署可以用来查询区块链 QSCC API GetChainInfo GetBlockByNumber GetBlockByHash GetTransactionByID,