HyperLedger 中的分布式账本

分布式账本,从实质上说就是一个可以在多个站点、不同地理位置或者多个机构组成的网络里进行分享的资产数据库。

分布式账本

区块链是一种共享分类账技术,允许业务网络中的任何参与者使用它查看系统的记录(分类账)。分类账提供了所有成功状态变更可验证的历史,是一个企业的记录系统。企业将为其参与的多个业务网络提供多个账簿。分类账是可共享的,可复制的和可允许的。

交易——在分类账上的资产的转入或转出

合同——交易发生的条件

Ledger Fabric v1.0

1、Blockledge

基于文件系统,只添加新块

块存储在所有提交者和订购服务节点的可选子集上

2、Stateledger

分类账状态有智能合同数据的当前价值

KVS通过chaincode api对开发者隐藏。例如:GetState()、PutState()、GetStateByRange()

存储所有提交者的信息

3、Historyledger

保存所有链码事务的历史序列

索引存储在KVS中,并通过chaincodeapi向开发人员隐藏,例如GetHistoryForKey()

存储所有提交者的信息

读写器的逻辑结构

Block{

Transactions [

{

"Id" : txUUID2

"Invoke" : “Method(arg1, arg2,..,argN)" “TxRWSet" : [

{ ”Chaincode” : “ccId”

“Reads”:[{"key" : “key1", "version” : “v1” }]

“Writes”:[{"key" : “key1", ”value" : bytes1}]

} // end chaincode RWSet

] // end TxRWSet

}, // end transaction with "Id" txUUID2

{ // another transaction },

] // end Transactions

}// end Block

1、Endorsing Peer (Simulation)

模拟事务并生成ReadWriteSet

2、Committing Peer (Validation/Commit)

MVCC验证检查使用读集,以确保在模拟过程中读取的值没有更改(确保可序列化的隔离)

将块添加到链中,将每个有效的transcation的写集应用到状态数据库中;有效提交transcation历史索引

Fabric1.0

多通道分类隐私

Chaincode安装在4个对等点上。chaincode的实例化在3个通道上(不同的链码可以在不同的通道上实例化;可以在每个通道上实例化多个链码),而且,每个通道都有一个分布式的分类账。

由下图可以看出,银行A不能看到B和C之间的交易,但在不同通道的块可以并行处理。

分类账和Chaincode

type Chaincode interface {

Init(stubChaincodeStubInterface) pb.Response

Invoke(stubChaincodeStubInterface) pb.Response}

type ChaincodeStubInterface interface {

……

GetState(key string) ([]byte, error)

PutState(key string, value []byte) error

DelState(key string) error

GetStateByRange(startKey,endKey string) (StateQueryIteratorInterface, error)

GetStateByPartialCompositeKey(objectTypestring,keys[]string) (StateQueryIteratorInterface, error)

GetQueryResult(querystring) (StateQueryIteratorInterface, error)

GetHistoryForKey(keystring) (StateQueryIteratorInterface, error)

……

}

1、Single key operations(单个键值操作)

>>GetState()/PutState()/DelState() :读取、写入和删除单个键/值。

2、Key range queries(主要范围查询)

可用于链码事务逻辑(例如,识别要更新的键)。

3、Fabric保证结果集在背书时间和提交时间之间是稳定的,确保事务的完整性。

>>GetStateByRange():读取startKey和endKey之间的键。

>>GetStateByPartialCompositeKey():读取以公共前缀开头的键。例如,对于由K1- k2- k3(复合键)组成的链码键,可以查询K1或K1- k2(在幕后执行范围查询)。替换v0.6 GetRows()表api。

4、Non-Key queries on data content

当使用支持内容查询的状态数据库时可用。

针对当前状态的只读查询,不适用于链码事务逻辑,除非应用程序能够保证在背书时间和提交时间之间的结果集是稳定的。

>>GetQueryResult():在状态数据库的语法中传递查询字符串。

5、Query System Chaincode(QSCC)

默认情况下在v1中部署的新系统链码,用于查询区块链。

客户端可以调用任何对等点,使用与应用程序链码调用相同的背书请求/响应模型。

QSCC包括以下api(链码函数):

>>GetChainInfo

>>GetBlockByNumber

>>GetBlockByHash

>>GetTransactionByID:返回已处理的事务以及有效的/无效的指示器。

优势

分布式账本技术可以改善当前基础设施中出现的效率低、成本高等问题,记录网络参与者之间的交易,消除了调解不同账本的时间和开支问题。不仅如此,分布式账本比起普通的单一数据库更难入侵,它还为政府提供了一种解决已有问题的新思路,利用分布式账本技术的能够保证所使用的操作系统和固件不被篡改的特性,可以保证大规模的基础设施顺利运行,并且能够保持数据的完整性。未来,分布式账本技术可能会改变大众与政府在数据共享、数据透明以及信任等各方面的社会关系。

参考资料

IBM开源技术微讲堂区块链和HyperLedger系列

网址:http://ibm.biz/opentech-ma

—END—

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180718A0IDSB00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券