前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hyperledger Fabric 1.3正式版新特性

Hyperledger Fabric 1.3正式版新特性

作者头像
Zeal
发布2020-11-11 17:10:06
7470
发布2020-11-11 17:10:06
举报
文章被收录于专栏:Hyperledger实践Hyperledger实践

Fabric在半天前发布1.3版本,参考

https://github.com/hyperledger/fabric/releases

介绍下1.3的新特性,参考

https://hyperledger-fabric.readthedocs.io/en/release-1.3/whatsnew.html

1. MSP新实现方式,使用身份混合器/Identify Mixer

通过使用零知识证明(zero-knowledge proofs), 可实现身份的匿名和不可连接。

开发环境提供了idexmigen的命令行可方便生成身份混合器的证书。

生产环境就要用Fabric CA 1.3了,也要客户端SDK打配合。

Idemix也可用在chaincode的策略上。

整体看来,零知识证明idemix的引入是为了同样安全的前提下减少交互方便使用,需要三方系统或工具的配合,可以作为新的尝试学习,版本稳定估计尚需时日。

具体细节参考https://hyperledger-fabric.readthedocs.io/en/release-1.3/idemix.html

2. 支持设置key级别的背书策略

Chaincode/链码级别的背书策略之前我们是在chaincode实例化和更新时才能修改背书策略, 而现在新的shim api接口支持在chaincode编写的时候动态的设置背书策略。

对应shim api接口:

SetStateValidationParameter(key string, ep []byte) error

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

SetPrivateDataValidationParameter(collection, key string, ep []byte) error

GetPrivateDataValidationParameter(collection, key string) ([]byte, error)

对应ep策略结构

type KeyEndorsementPolicy interface {

// Policy returns the endorsement policy as bytes

Policy() ([]byte, error)

// AddOrgs adds the specified orgs to the list of orgs that are required

// to endorse

AddOrgs(roleType RoleType, organizations ...string) error

// DelOrgs delete the specified channel orgs from the existing key-level endorsement

// policy for this KVS key. If any org is not present, an error will be returned.

DelOrgs([]string) error

// DelAllOrgs removes any key-level endorsement policy from this KVS key.

DelAllOrgs() error

// ListOrgs returns an array of channel orgs that are required to endorse changes

ListOrgs() ([]string, error)

}

具体参考

https://hyperledger-fabric.readthedocs.io/en/release-1.3/endorsement-policies.html#key-level-endorsement

3. CouchDB作为State DB实现可支持分页

Shim api的接口GetStateByRangeWithPagination, GetQueryResultWithPagination

func (t *SimpleChaincode) getMarblesByRangeWithPagination(stub shim.ChaincodeStubInterface, args []string) pb.Response {

if len(args) < 4 {

return shim.Error("Incorrect number of arguments. Expecting 4")

}

startKey := args[0]

endKey := args[1]

//return type of ParseInt is int64

pageSize, err := strconv.ParseInt(args[2], 10, 32)

if err != nil {

return shim.Error(err.Error())

}

bookmark := args[3]

resultsIterator, responseMetadata, err := stub.GetStateByRangeWithPagination(startKey, endKey, int32(pageSize), bookmark)

if err != nil {

return shim.Error(err.Error())

}

defer resultsIterator.Close()

buffer, err := constructQueryResponseFromIterator(resultsIterator)

if err != nil {

return shim.Error(err.Error())

}

bufferWithPaginationInfo := addPaginationMetadataToQueryResults(buffer, responseMetadata)

fmt.Printf("- getMarblesByRange queryResult:\n%s\n", bufferWithPaginationInfo.String())

return shim.Success(buffer.Bytes())

}

func getQueryResultForQueryStringWithPagination(stub shim.ChaincodeStubInterface, queryString string, pageSize int32, bookmark string) ([]byte, error) {

fmt.Printf("- getQueryResultForQueryString queryString:\n%s\n", queryString)

resultsIterator, responseMetadata, err := stub.GetQueryResultWithPagination(queryString, pageSize, bookmark)

if err != nil {

return nil, err

}

defer resultsIterator.Close()

buffer, err := constructQueryResponseFromIterator(resultsIterator)

if err != nil {

return nil, err

}

bufferWithPaginationInfo := addPaginationMetadataToQueryResults(buffer, responseMetadata)

fmt.Printf("- getQueryResultForQueryString queryResult:\n%s\n", bufferWithPaginationInfo.String())

return buffer.Bytes(), nil

}

更这应该是使用couchdb 的selector, skip,limit,bookmark等语法查询出来的分页.

4. 支持Java语言开发chaincode

Shim API算是正式支持Java了, 对于国内开发者应该是个好事,go, node.js的依赖常常受限网络真的让人有点麻烦,Java一般依赖都用Maven,Gradle之类的处理,应该会方便很多,具体内容后面跟进。

5. channel为基础的Peer消息服务

Fabric 1.1之前的消息服务定义为了event hub, 基于各自peer节点通知。

Fabric 1.1只开始支持基于channel级别的消息通知服务,增加通知的可用性,但是向后兼容.

Fabric 1.3不再支持event hub了。

新的BYFN也有升级到1.3的例子, 参考

https://hyperledger-fabric.readthedocs.io/en/release-1.3/build_network.html

BTW, 1.2最近是升级到了1.2.1, Java SDK也修复不少bug, 特别是346这个bug挺烦人,应该稳定不少了,推荐升级。

1.3 Java SDK还是快照版本, 如果真用于生产,最好3-6个月出了稳定版再升级吧。

Fabric迭代真算快了的,方向是好的,想把东西做简单和稳定, 好像MSP配置确实不方便。

路漫漫兮上下求索,互勉吧。

http://www.javatree.cn/news/7eea578f8d66408ba33c97185162a53a

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Hyperledger实践 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
消息队列 CMQ 版
消息队列 CMQ 版(TDMQ for CMQ,简称 TDMQ CMQ 版)是一款分布式高可用的消息队列服务,它能够提供可靠的,基于消息的异步通信机制,能够将分布式部署的不同应用(或同一应用的不同组件)中的信息传递,存储在可靠有效的 CMQ 队列中,防止消息丢失。TDMQ CMQ 版支持多进程同时读写,收发互不干扰,无需各应用或组件始终处于运行状态。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档