Fabric1.3新功能详细介绍

76 篇文章 50 订阅 ¥19.90 ¥99.00
4 篇文章 1 订阅
1 篇文章 0 订阅

功能1. 使用Identity Mixer实现MSP

       一种通过使用零知识证明来保持身份匿名和不可链接的方法。工具idexmigen可以在测试环境中生成Identity Mixer凭证。

 

功能1 零知识证明(科普中国)

         零知识证明(Zero—Knowledge Proof),是由S.Goldwasser、S.Micali及C.Rackoff在20世纪80年代初提出的。它指的是证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。零知识证明实质上是一种涉及两方或更多方的协议,即两方或更多方完成一项任务所需采取的一系列步骤。证明者向验证者证明并使其相信自己知道或拥有某一消息,但证明过程不能向验证者泄漏任何关于被证明消息的信息。大量事实证明,零知识证明在密码学中非常有用。如果能够将零知识证明用于验证,将可以有效解决许多问题。

功能2 什么是Idemix?

       Idemix是一个加密协议套件,它提供强大的身份验证以及隐私保护功能,如匿名,无需揭示交易者身份即可进行交易,以及不可链接性,即单个身份发送多个交易的能力,而不会泄露交易是通过相同的身份发送的。

Idemix流中涉及三个参与者:用户,发行者和 验证者。

发行者证明一组用户的属性以数字证书的形式发布,以下称为“凭证”。

用户稍后生成拥有凭证的“ 零知识证明 ”,并且还选择性地仅公开用户选择显示的属性。证明,因为它是零知识,不会向验证者,发行者或任何其他人显示其他信息。

功能3 如何将Idemix与Hyperledger Fabric一起使用

要在Hyperledger Fabric中使用Idemix,需要以下三个基本步骤:

发行者:Fabric CA 或者 idemixgen
验证者:Idemix MSP 
用户  :java SDK类org.hyperledger.fabric_ca.sdk.HFCAClient

(例如:IdemixEnrollment idemixEnrollment = hfcaClient.idemixEnroll(x509enrollment, "idemixMSPID1"))

功能2. 设置密钥级背书策略

允许每个密钥级的背书策略覆盖默认的链码级背书策略。

在Fabric1.3版本之前常见的背书策略是:实例化或者升级chaincode代码时设置的,例如:

peer chaincode instantiate -C <channelid> -n mycc -P "AND('Org1.peer', 'Org2.peer')"
peer chaincode instantiate -o  orderer.qklszzn.com:7050 -C roberttestchannel -n r_test_cc6 -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P "OR      ('Org1MSP.member','Org2MSP.member')"

如果未指定,默认背书策略:

 “OR('Org1.member','Org2.member')”。意思是组织1或组织2的任何成员

'Org0.admin':Org0的任何管理员

'Org1.member':Org1的任何成员

'Org1.client':Org1的任何客户端

'Org1.peer':Org1的任何peer节点

在Fabric1.3版本中 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)

为了帮助设置背书策略并将其编组为验证参数字节数组,shim提供了便利功能,允许智能合约开发人员根据组织的MSP标识符处理背书策略:

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)
}

用法:

要为密钥设置背书策略,其中需要两个特定组织来背书密钥更改,将两个组织MSPIDs传递给AddOrgs(),然后调用Policy()以构造背书策略字节数组,传递给SetStateValidationParameter()。

功能3. 使用分页查询CouchDB状态数据库

客户端现在可以从智能合约查询中浏览结果集,从而可以支持具有高性能的大型结果集。分页是通过指定pagesize(单页数据条数)和bookmark(查询起始点),代码如下:

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

      //   0
      // "queryString"
      if len(args) < 3 {
              return shim.Error("Incorrect number of arguments. Expecting 3")
      }
      queryString := args[0]
      //return type of ParseInt is int64
      pageSize, err := strconv.ParseInt(args[1], 10, 32)
      if err != nil {
              return shim.Error(err.Error())
      }
      bookmark := args[2]

      queryResults, err := getQueryResultForQueryStringWithPagination(stub, queryString, int32(pageSize), bookmark)
      if err != nil {
              return shim.Error(err.Error())
      }
      return shim.Success(queryResults)
}

 

功能4. Chaincode为开发人员

作为对用Go和node编写的智能合约的当前Fabric支持的补充。现在支持Java,1.3版本将明确可用java进行智能合约的编写。

 

功能5. 基于peer节点通道的事件服务

基于peer通道的事件服务本身并不是新概念(它首次出现在v1.1中),但是v1.3版本标志着旧事件中心的结束。在升级到v1.3之前,使用旧事件中心的应用程序必须切换到新的基于peer通道的事件服务。

在Fabric1.1和1.2的版本中 core.yaml中有EventHub相关配置,在1.3的版本,却没有了EventHub相关配置。

但是并不影响使用,您依然可以通过;

 private static EventHub eventHub;

private static PeerEvents.Event goodEventBlock;

eventHub = new EventHub("test", "grpc://lh:99", null, null);

goodEventBlock = PeerEvents.Event.newBuilder().setBlock(blockBuilder).build();

BlockEvent be = new BlockEvent(eventHub, goodEventBlock);

或

channel.registerBlockListener(blockEvent -> {

    log.debug("========================Event事件监听========================");

       try {

           org.getBlockListener().received(execBlockInfo(blockEvent));

                } catch (Exception e) {

                    e.printStackTrace();

                    org.getBlockListener().received(getFailFromString(e.getMessage()));

   }

log.debug("========================Event事件监听结束========================");

});

原文链接:https://blog.csdn.net/wh15055768834/article/details/83153096

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值